当前位置:文档之家› 超级串口通信协议

超级串口通信协议


完毕.
b . 帧参数域不存在
b. 此帧的响应为 ‘状态帧 – ok’
5.4 命令帧 – 继续传输
0
12
3
4
5
6
…..
07
FF 00 08 xx
xx
02
05
不存在 xx
帧头标 记
帧长
发送端 设备号
接收端 帧类型 操作类型
设备号
帧参数 校验和
a. 此帧用于通知对方继续完成没有完成的帧传输
b. 此帧通常是用于唤起由 ‘帧命令 – 暂缓传输’ 引发的多帧传输中止,或者要求传输
02
命令帧
这是一帧传输命令的帧
03
状态帧
对命令帧的响应
○4 对在所有过程中,任何时刻,通信各方都有可能收到到 “命令帧 – 重传上一帧”的
命令请求. 后文解释各帧中, 不再分别解释.
○5 对于通信的任何一端, 它发送的任何帧都应该得到对方对此帧的应答,通信必须是”
有去有回”
○6 一次通信过程可以由任何一端发起, 任何端接收到空闲帧,返回 “状态—ok”并且结
多帧传输中没有传输完毕的帧
c. 对此帧的应答是 ‘数据帧’
六. 状态帧
6.1 状态帧 --- ok
0
12
3
4
5
6
…..
7
FF 00 08 xx
xx
03
00
不存在 xx
帧头标 记
帧长
发送端 设备号
接收端 设备号
帧类型 操作类型 帧参数
校验 和
a. 此帧用于对各命令的确认, 一次发起的传输系列成功结束, 对消息的确认等等;
6.2 状态帧 ---- 错误
0
12
3
FF 00 09 xx
帧头 标记
帧长
发送端 设备号
4
5
6
7
8
xx
03
01
xx
xx
接收端 设备号
操作类 帧类型

帧参数 校验和
a. 报告各种命令状态, 错误详情由帧参数确定 b. 错误字(帧参数) 帧参数 含义
00 未知错误 01 设备没有准备好 02 不支持上一次接受到的命令
PC
MCU
请求数据
返回数据
返回 OK
返回 OK
解码
PC
MCU
请求接收数据 返回 OK 发出数据 返回 OK
请求数据 返回数据 返回 OK 返回 OK
请求数据 空帧
返回 OK 返回 OK
MCU 向 PC 请求 mp3 数据
解码
请求接收数据 返回 OK 发出数据 返回 OK
空帧 返回 OK
MCU 向 PC 发送 PCM 数据
4
5
6
7 8, 9 10
FF 00 0b xx
xx
02
02 xx xx
xx
帧头 标记
帧长
发送端 设备号
接收端
操作类
帧类型
设备号

数据
总长度
类型
校验和
帧参数
a. 操作类型 02 表示通知对方准备接收数据 b. 数据类型, 总长度与 “命令帧 --- 数据请求” 相同 c.对此命令的响应是 “状态帧 --- 信息报告” 得到接收端可以接收的最大单帧数据长
#define local_no #define pc_no #define frame_data_size
1 //本机地址 0 //pc 地址
512 //帧数据域数组长度
typedef struct //帧结构****************************************
{ uint8
表示该帧之后还有后续帧, 这是因为需要传输的数据量
01 比较大, 需要进行多帧传输.
d. 应答表 应答
状态帧 – ok 命令帧 – 展缓传输(只用于多帧传输中) 命令帧 --- 继续传输(只用于多帧传输中)
含义/作用 表示成功接收到数据 需要暂缓传输下一帧 要求传送下一帧
五. 命令帧 5.1 命令帧 ---- 数据请求
束一次传输任务,直到它收到有新的通信请求,或其自身需要引发一次传输请求.
○7 可以使用本协议的部分帧来进行通信交流, 但是此时设备收到他不使用的帧时, 应
该返回 “状态帧 ---- 错误” 错误字=2(收到不支持帧)
○8 举例; mcu 从 pc 获取 MP3 文件进行解码, 并返回解码 pcm 结果值的通信流程
度(参数长度), 如果发送端需要发送的总长度超过这个值, 则需要进行多帧拆分传输
5.2 命令帧 – 重复上一次帧传输
0
12
3
4
5
6
…..
7
FF 00 08 xx
xx
02
03
不存在 xx
帧头 标记
帧长
发送端 设备号
接收端 帧类型 操作类型 帧参数 校验和
设备号
a 要求发送端重复上一帧传输, 这通常是由接收设备发现它接收到的帧不合法, 或 者校验错误等引起的.
6.3 状态帧 --- 信息报告
0
12
3
4
5
6
7
8
9
FF 00 0A xx
xx
03
02
xx
xx
xx
帧头 标记
帧长
发送端 设备号
接收端 设备号
帧类 操作类


帧参数
校验和
a. 此帧表明必要的报告信息, 例如对”命令帧 – 接收请求”响应时, 参数指出自身单帧 携带数据最大长度. 对不同响应下,其参数含义可以是不同的
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 //暂停传输
12
3
4
5
6
…..
N
FF xx xx xx
xx
01
xx
…..
xx
帧头 标记
帧长
发送端 设备号
接收端 设备号
帧类型 操作类型 帧参数 校验和
a. 数据帧. 单纯地表示此帧中帧参数携带的是数据.
b. 帧参数携带的是需要传输的数据部分
c. 操作类型含义表
操作类型
含义/作用
00
表示该帧是结尾帧, 数据传输完毕
通信协议
撰写 叶春勇 2011-8-26 起 版本 V 1.0
一. 为了规范所有需要的通信操作
二. 帧格式
字节
0 12
3
序号
4
5
6
…..
N
字节
FF xx xx xx 内容
xx
xx
xx
…..
xx
字节 含义
帧头 标记
帧长
发送端 设备号
接收端 设备号
操作类
帧类型
帧参数 校验和

(注: xx 表示恰当的某数值, zz 表示任意数值;)
#define continue_transmit 5 //继续传输
/***************** 状态帧 参数 **********************/
#define state_ok 0 //ok #define state_error 1 //错误 #define state_report_message 2 //信息报告
head;
//帧头
uint8 uint8 uint8 uint8 uint8 uint8 uint8
length_h; //帧长度高字节
length_l; //帧长度低字节
source_no;
//发送设备号
directory_no; //接收设备号
type;
//帧类型
handle;
//操作类型
parameter[frame_data_size]; //参数域 buf
三. 空闲帧
0
12
3ቤተ መጻሕፍቲ ባይዱ
4
5
6
…..
7
FF xx 08 xx
xx
00
zz
不存在 xx
帧头 标记
帧长
发送端 设备号
接收端 设备号
帧类型 操作类型 帧参数 校验和
a. 空闲帧通常用于通知对方任务完成, 比例文件传输完毕(所有字节已经发完)
b. 对此帧的应答是 “状态帧—ok”
四. 数据帧
4.1 数据帧
0
handle;
//操作类型
*parameter; //参数域内容指针
uint8 check_sum; //校验和
} struct_frame;
○3 在某些帧中, 帧参数域可以是不存在的
帧类型字含义表
帧类型字
类型名称
含义
00
空闲帧
通常用于通知对方传输告一段落, 通信结束
01
数据帧
这一帧以传输数据为目的的帧,
b. 帧参数域不存在, c. 对此帧命令的响应是重复上一次的发送
相关主题