超级串口通信协议

上传人:艾力 文档编号:36578006 上传时间:2018-03-30 格式:PDF 页数:12 大小:94.01KB
返回 下载 相关 举报
超级串口通信协议_第1页
第1页 / 共12页
超级串口通信协议_第2页
第2页 / 共12页
超级串口通信协议_第3页
第3页 / 共12页
超级串口通信协议_第4页
第4页 / 共12页
超级串口通信协议_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《超级串口通信协议》由会员分享,可在线阅读,更多相关《超级串口通信协议(12页珍藏版)》请在金锄头文库上搜索。

1、 通信协议 撰写 叶春勇 2011- 8- 26 起 版本 V 1.0 一. 为了规范所有需要的通信操作 二. 帧格式 字节序号 0 1 2 3 4 5 6 . N 字节内容 FF xx xx xx xx xx xx . xx 字节含义 帧头标记 帧长 发送端 设备号 接收端 设备号 帧类型 操作类型 帧参数 校验和 (注: xx 表示恰当的某数值, zz 表示任意数值;) 帧头标记: 一帧传输的起始标记, 固定为 FFH 帧长:该帧的总长度;使用两个字节表示传输一帧长度最大为 64KB,帧长=8+帧参数长度 发送端设备号: 指明该帧数据是谁发送的(源); 1 接收端设备号: 指明该帧数据是向

2、谁发送的(目的); 1 帧类型:表明该帧的类型, 它可以是数据帧, 命令帧.等等 操作类型: 表明该帧指明的具体操作, 比如命令帧中用于指明是什么命令,执行怎样的操作 帧参数:可以是数据,状态的参数等 校验和:该帧的校验和字节,校验方法是该帧的所有数据从字节 0 到字节 N 的和必须为 0 1 : 设备号 00 特指主机, FF 特指广播地址. 01FE 指任意普通设备号 2 : 帧格式结构体 typedef struct uint8 head; /帧头 uint8 length_h; /帧长度高字节 uint8 length_l; /帧长度低字节 uint8 source_no; /发送设备

3、号 uint8 directory_no; /接收设备号 uint8 type; /帧类型 uint8 handle; /操作类型 uint8 *parameter; /参数域内容指针 uint8 check_sum; /校验和 struct_frame; 3在某些帧中, 帧参数域可以是不存在的 帧类型字含义表 帧类型字 类型名称 含义 00 空闲帧 通常用于通知对方传输告一段落, 通信结束 01 数据帧 这一帧以传输数据为目的的帧, 02 命令帧 这是一帧传输命令的帧 03 状态帧 对命令帧的响应 4 对在所有过程中,任何时刻,通信各方都有可能收到到 “命令帧 重传上一帧”的命令请求. 后文

4、解释各帧中, 不再分别解释. 5 对于通信的任何一端, 它发送的任何帧都应该得到对方对此帧的应答,通信必须是”有去有回” 6 一次通信过程可以由任何一端发起, 任何端接收到空闲帧,返回 “状态ok”并且结束一次传输任务,直到它收到有新的通信请求,或其自身需要引发一次传输请求. 7 可以使用本协议的部分帧来进行通信交流, 但是此时设备收到他不使用的帧时, 应该返回 “状态帧 - - - - 错误” 错误字=2(收到不支持帧) 8 举例; mcu 从 pc 获取 MP3 文件进行解码, 并返回解码 pcm 结果值的通信流程PC MCU 请求数据 返回 OK 返回 OK 返回数据 请求数据 返回 O

5、K 返回 OK 返回数据 请求数据 返回 OK 返回 OK 空帧 MCU 向 PC 请求 mp3 数据请求接收数据 返回 OK 发出数据 返回 OK PC MCU 返回 OK 发出数据 返回 OK MCU向PC发送PCM数据请求接收数据 返回 OK 空帧 解码 解码 三. 空闲帧 0 1 2 3 4 5 6 . 7 FF xx 08 xx xx 00 zz 不存在 xx 帧头 标记 帧长 发送端 设备号 接收端 设备号 帧类型 操作类型 帧参数 校验和 a. 空闲帧通常用于通知对方任务完成, 比例文件传输完毕(所有字节已经发完) b. 对此帧的应答是 “状态帧ok”四. 数据帧 4.1 数据帧

6、 0 1 2 3 4 5 6 . N FF xx xx xx xx 01 xx . xx 帧头 标记 帧长 发送端 设备号 接收端 设备号 帧类型 操作类型 帧参数 校验和 a. 数据帧. 单纯地表示此帧中帧参数携带的是数据. b. 帧参数携带的是需要传输的数据部分 c. 操作类型含义表 操作类型 含义/作用 00 表示该帧是结尾帧, 数据传输完毕 01 表示该帧之后还有后续帧, 这是因为需要传输的数据量比较大, 需要进行多帧传输. d. 应答表 应答 含义/作用 状态帧 ok 表示成功接收到数据 命令帧 展缓传输(只用于多帧传输中) 需要暂缓传输下一帧 命令帧 - - - 继续传输(只用于多

7、帧传输中) 要求传送下一帧 五. 命令帧 5.1 命令帧 - - - - 数据请求 0 1 2 3 4 5 6 7 8, 9 10,11 12 FF 00 0d xx xx 02 01 xx xx xx xx 数据类型 总长度 单帧最大长度 帧头 标记 帧长 发送端 设备号 接收端 设备号 帧类型 操作类型 帧参数 校验和 a. 操作类型 01 表示数据请求 b. 数据类型: 指出需要请求何种数据, 因为接收此帧数据的设备可以提供多种数据, 不同系统中对数据类型的区别由用户自行定义 c. 总长度: 表示此次请求需要的数据总量 c. 单帧最大长度: 指出对方返回一帧数据可以携带的最大数据量(数据

8、域长). (因为设备接收一帧数据的 buf 是有限长的). c.对此命令的响应是 “数据帧” 或 ”空闲帧” 5.2 命令帧 - - - - 接收请求 0 1 2 3 4 5 6 7 8, 9 10 FF 00 0b xx xx 02 02 xx xx xx 数据类型 总长度 帧头 标记 帧长 发送端 设备号 接收端 设备号 帧类型 操作类型 帧参数 校验和 a. 操作类型 02 表示通知对方准备接收数据 b. 数据类型, 总长度与 “命令帧 - - - 数据请求” 相同 c.对此命令的响应是 “状态帧 - - - 信息报告” 得到接收端可以接收的最大单帧数据长度(参数长度), 如果发送端需要

9、发送的总长度超过这个值, 则需要进行多帧拆分传输 5.2 命令帧 重复上一次帧传输 0 1 2 3 4 5 6 . 7 FF 00 08 xx xx 02 03 不存在 xx 帧头 标记 帧长 发送端 设备号 接收端 设备号 帧类型 操作类型 帧参数 校验和 a 要求发送端重复上一帧传输, 这通常是由接收设备发现它接收到的帧不合法, 或者校验错误等引起的. b. 帧参数域不存在, c. 对此帧命令的响应是重复上一次的发送 5.3 命令帧 暂缓传输 0 1 2 3 4 5 6 . 07 FF 00 08 xx xx 02 04 不存在 xx 帧头标记 帧长 发送端 设备号 接收端 设备号 帧类型

10、 操作类型 帧参数 校验和 a. 此帧通常用于通知对方暂缓传输数据, 比如接收方对上一次接收的数据还没有处理完毕. b . 帧参数域不存在 b. 此帧的响应为 状态帧 ok 5.4 命令帧 继续传输 0 1 2 3 4 5 6 . 07 FF 00 08 xx xx 02 05 不存在 xx 帧头标记 帧长 发送端 设备号 接收端 设备号 帧类型 操作类型 帧参数 校验和 a. 此帧用于通知对方继续完成没有完成的帧传输 b. 此帧通常是用于唤起由 帧命令 暂缓传输 引发的多帧传输中止,或者要求传输多帧传输中没有传输完毕的帧 c. 对此帧的应答是 数据帧 六. 状态帧 6.1 状态帧 - - -

11、 ok 0 1 2 3 4 5 6 . 7 FF 00 08 xx xx 03 00 不存在 xx 帧头标记 帧长 发送端 设备号 接收端 设备号 帧类型 操作类型 帧参数 校验和 a. 此帧用于对各命令的确认, 一次发起的传输系列成功结束, 对消息的确认等等; 6.2 状态帧 - - - - 错误 0 1 2 3 4 5 6 7 8 FF 00 09 xx xx 03 01 xx xx 帧头 标记 帧长 发送端 设备号 接收端 设备号 帧类型 操作类型 帧参数 校验和 a. 报告各种命令状态, 错误详情由帧参数确定 b. 错误字(帧参数) 帧参数 含义 00 未知错误 01 设备没有准备好

12、02 不支持上一次接受到的命令 6.3 状态帧 - - - 信息报告 0 1 2 3 4 5 6 7 8 9 FF 00 0A xx xx 03 02 xx xx xx 帧头 标记 帧长 发送端 设备号 接收端 设备号 帧类型 操作类型 帧参数 校验和 a. 此帧表明必要的报告信息, 例如对”命令帧 接收请求”响应时, 参数指出自身单帧携带数据最大长度. 对不同响应下,其参数含义可以是不同的 #define local_no 1 /本机地址 #define pc_no 0 /pc 地址 #define frame_data_size 512 /帧数据域数组长度 typedef struct /

13、帧结构* uint8 head; /帧头 uint8 length_h; /帧长度高字节 uint8 length_l; /帧长度低字节 uint8 source_no; /发送设备号 uint8 directory_no; /接收设备号 uint8 type; /帧类型 uint8 handle; /操作类型 uint8 parameterframe_data_size; /参数域 buf uint8 check_sum; /校验和 /非标准成员 uint16 para_len; struct_frame; /*帧类型* #define idle_frame 0 /空帧 #define da

14、ta_frame 1 /数据帧 #define command_frame 2 /命令帧 #define state_frame 3 /状态帧 / 操作类型 #define last_frame 0 /最后帧 /* 命令帧的操作类型* #define require_data_frame 1 /简单数据请求 #define ask_to_receive_data 2 /简单数据接收请求,要求对方准备接收数据 #define repeat_last_frame 3 /重复上一帧 #define stop_transmit 4 /暂停传输 #define continue_transmit 5 /继续传输 /* 状态帧 参数 */ #define state_ok 0 /ok #define state_error 1 /错误 #define state_report_message 2 /信息报告 /* 错误字含义 */ #define unknown_error 0 /未知错误 #define un_ready 1 /未准备好 #define unsupport_last_command 2 /不支持上一次接收到的命令 void frame_send(uint8 directory_no,uint8 type, uint8 handle,uint16 para_len);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号