Ymodem 协议 改进的CAN—Ymodem协议

来源:互联网 发布:淘宝便利店入口 编辑:程序博客网 时间:2024/05/17 16:12


1、超级终端 SecureCRT 可以按照Ymoden 协议发送文件.目前在单片机IAP固件升级模式中常常利用超级终端的Ymodem 协议发送新固件包实现用户自定义Bootload 功能。


Ymodem协议是一种发送并等待的协议。即发送方发送一个数据包以后,都要等待接收方的确认。如果是ACK信号,则可以发送新的包。如果是NAK信号,则重发或者错误退出。

2、文件传输过程

文件传输过程的开启:

(1)开启是由接收方开启传输,它发一个大写字母C开启传输。然后进入等待(SOH)状态,如果没有回应,就会超时退出。然后继续发送大写字母C等待传输。

(2)发送方开始时处于等待过程中,等待C。收到C以后,发送(SOH)数据包开始信号,发送序号(00),补码(FF),“文件名”,“空格”“文件大小”“除去序号外,补满128字节”,CRC校验两个字节。进入等待(ACK)状态。

(3)接收方收到以后,CRC校验满足,则发送ACK。发送方接收到ACK,又进入等待“文件传输开启”信号,即重新进入等待“C”的状态。准备接收下一个包。

Ymodem 协议中第一包是传输文件信息包,一般采用128字节(1024字节,也可以实现,不过比较浪费资源)
一个完整包数据内容(SOH模式为例)为 包头(3字节)+ 数据段(128字节)+ CRC16校验码(2字节)。所以整包长度是128+5 =133字节,现举例如下(16进制):

01 00 FF 41 42 43 2E 62 69 6E 00 31 30 32 34 20 00 00 ...... 09 E8

第1字节 : 01  表示SOH模式,此包数据段大小为128字节,如果该位置是02,表示STX模式,此包数据段大小为1024字节。

2字节: 00 包序列号为0,以后发送或接收的包序列号要依次递增。

3字节 : FF 包序列号的补码(与第2字节00对应)。在Ymodem接收中会对第2,第3字节做检验。所以这两个字节数据要按照协议保持一致。 

4字节到131字节:数据段内容, 41 42 43 2E 62 69 6E 表示文件名(ASCII码 ABC.bin), 00 为文件名结束标志。31 30 32 34 表示文件大小 (ASCII码 1024字节), 20(ASCII码  空格符 '\0')为文件大小结束标志。此后到数据段的128字节全部填 00.

132,133字节 : 09 E8 为CRC16校验码,此校验码只计算数据段128字节内容,不计算包头的3字节。此处09 E8 只是举例。

(4)文件发送完以后,发送方发出一个“EOT”信号,接收方也以“ACK”回应。

然后接收方会再次发出“C”开启另一次传输,若接着发送方会发出一个“全0数据包”,接收方回应“ACK”后,本次通信正式结束。
注意:“全0数据包”,包头并不为 0, 包头数据可写 01 00 FF. 

文章转自:http://blog.sina.com.cn/s/blog_b5e6d3de0102vv97.html
以上为转载内容
对上述内容的一些补充以及改进
     在官方的Ymodem协议中,发送数据包以1024为一包发送,当最后一包不足1024字节,但是大于128字节,以1024字节数据包发送,不足的填0;当最后一包数据不足1024,且不足128字节时,以128字节数据包发送,不足部分填0 。
基于CAN卡改进的Ymodem协议
     CAN卡每次可以接收发送8字节的数据,比起stm32一次收发一个字节,CAN收发数据快了很多。基于CAN卡改进的Ymodem协议也就是在这个地方做了改进,每次发送8字节的数据,其他和Ymodem协议相同。