Flashloader 协议
无数据命令:
一个无数据的命令协议包括:
来自主机的命令包
发给主机的通用的响应命令包
整个过程如下图所示:
有输入数据的命令:
有输入数据阶段的命令协议包括:
来自主机的命令包
发给主机的通用响应命令包
来自主机的输入数据包
发给主机的通用响应命令包
整个过程如下图所示:
带输出数据的命令:
有输出数据阶段的命令协议包括:
来自主机的命令包
发给主机的读存储器响应命令包
发给主机的数据包
发给主机的通用响应命令包
整个过程如下图所示:
Flashloader 信息包类型
Ping包
主机发给目标机的第一个包就是Ping包,用来在一个选择的外设上 建立连接,对于UART外设来说,Ping 包用来决定波特率,Ping包必须在任何通信前发送,对于主机发送的Ping包,目标机会发送Ping响应包。整个过程如下:
Ping响应包
目标机(Kinetis Flashloader)在收到主机的Ping包后,会发送Ping响应包,如果是通过UART外设进行通信,目标机在发送Ping响应包回复主机的Ping包之前,会根据接收到的Ping包决定波特率。一旦主机接收到Ping响应包,则通信连接建立,主机开始发送命令到目标机。
Ping响应包格式如下:
帧报文包
报文包用来做流控制和错误检测,它也覆盖命令和数据包
报文包格式如下:
值得注意的一点是:有一个比较特殊的报文包,仅仅包含起始字节和打包类型字节,是用来在主机和目标机之间做同步用的。格式如下:
报文包打包类型主要有七种:
命令包:
命令包携带一个32位的命令头和32位参数列表,命令头占四个字节,命令头后会跟由命令头域指定数量的参数个数,因为命令包有32字节,命令头占四个字节,所以最多有七个参数在命令包里。
目标机也使用命令包发送响应命令包给主机,正如前面所提到的,命令包和数据包都会嵌入在报文包里面传输。支持的命令如下所示:
支持的响应包括:
Flags: 每一个命令包包含一个标志字节,只有标志字节的位0被使用,如果位0被置1,则数据包将跟在命令后面。
ParameterCount : 命令包中的参数数量。
Parameter: 参数是32位字长,默认最大的包长度是32字节,其中头占四个字节,参数占28个字节,所以命令包可最大包含七个参数。
数据包:
不管是主机发送数据给目标机还是目标机发送数据给主机,数据包仅仅携带数据,数据的传输方向由上一次主机发送的命令决定,数据包同样包含在报文包里面,以确保正确的包数据被接收。
响应包:
响应包使用与命令包相同的格式包含在报文包中,响应的类型包括:
通用响应
获取属性响应
读存储器响应
未完待续,欢迎继续关注。