这是一个把单字节通信协议封装成cmd+data形式包的协议,可方便地用于串口等单字节传输场合。
说明:
```c
一、包协议
基本格式:
包头 + 数据包长度高8位 + 数据包长度低8位 + 数据包
包头格式:
CMD_ESC+CMD_HEAD 表示包头
CMD_ESC+CMD_DAT 表示是数据,数据值就是CMD_ESC
发送端:
包头 CMD_ESC+CMD_HEAD
数据 检测并发送,当检测到数据是CMD_ESC时,则发送CMD_ESC+CMD_DAT
接收端:
检测到非CMD_ESC 认为是数据
检测到CMD_ESC 进行标记,等待下一个数据
下一个数据检测到CMD_HEAD 认为是包头
下一个数据检测到CMD_DAT 认为是数据CMD_ESC
总体数据格式:
包头 + 数据包长度高位 + 数据包长度低位 + 数据包
发送端和接收端在收发数据包长度时也会进行转义字符检测,防止数据正好和转义字符相同
二、cmd协议
cmd在包协议基础上,把包的内容进行封装,形成如下形式:
命令高8位 + 命令低8位 + 数据长度高8位 + 数据长度低8位 + 数据
发送端先根据cmd协议整合数据包内容,再通过数据包协议发送出去;
接收端根据数据包协议解析,解析到数据包后再根据cmd协议解析出cmd,再回调函数。
使用:
一、客制化部分
1、客制化转义字符、包头、数据
2、客制化发送缓冲区和接收的包缓冲区大小
二、代码使用
1、设置CMD_PLATFORM宏,并调通相应串口接口函数:发送接口函数package_uart_send(),接收接口函数cmd_check_data()
1、用 cmd_set_call_back 接口设置接收到cmd后的回调函数
2、cmd_send_cmd(uint16_t cmd, uint16_t len, uint8_t *p) 来发送一个cmd
3、把串口接收到的数据传给 cmd_get_byte 或 cmd_get_buf,函数会对数据解析,当解析到一个完整的命令时会回调上面的函数
或者直接调用本模块的cmd_check_data()函数来检测串口数据。
长度:
cmd是16位,2字节,最多支持65536个指令
len是16位,2字节,最多支持长度是65536字节
```
没有合适的资源?快使用搜索试试~ 我知道了~
串口实现cmd+data形式包协议
共3个文件
md:1个
h:1个
c:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 122 浏览量
2024-05-01
19:34:15
上传
评论
收藏 7KB ZIP 举报
温馨提示
这是一个把单字节通信协议封装成cmd+data形式包的协议,可方便地用于串口等单字节传输场合。 说明: 一、包协议 基本格式: 包头 + 数据包长度高8位 + 数据包长度低8位 + 数据包 包头格式: CMD_ESC+CMD_HEAD 表示包头 CMD_ESC+CMD_DAT 表示是数据,数据值就是CMD_ESC 发送端: 包头 CMD_ESC+CMD_HEAD 数据 检测并发送,当检测到数据是CMD_ESC时,则发送CMD_ESC+CMD_DAT 接收端: 检测到非CMD_ESC 认为是数据 检测到CMD_ESC 进行标记,等待下一个数据 下一个数据检测到CMD_HEAD 认为是包头 下一个数据检测到CMD_DAT 认为是数据CMD_ESC 总体数据格式: 包头 + 数据包长度高位 + 数据包长度低位 + 数据包 发送端和接收端在收发数据包长度时也会进行转义字符检测,防止数据正好和转义字符相同 二
资源推荐
资源详情
资源评论
收起资源包目录
serial-cmd-code.zip (3个子文件)
serial-cmd-code
README.md 2KB
cmd.h 4KB
cmd.c 9KB
共 3 条
- 1
资源评论
MarcoPage
- 粉丝: 2969
- 资源: 3014
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功