注意 1:HID MaxPacket = 64Byte
注意 2:每一个包的前面两个 Byte 固定为命令
注意3:命令按照MSB,LSB的顺序传输
ACK:0XFF00, NACK:0x00FF
命令详解
1. 0x5AA0进入IAP模式
作为一个特定的命令,当用户APP收到这个命令之后将进入IAP模式。实现方式为收到这个命令之后擦除flag然后reset
上位机:[0x5A, 0xA0]
IAP设备响应:[0x5A, 0XA0, ACK/NACK]
2. 0x5AA1 开始下载
上位机:[0x5A,0xA1]
IAP设备响应: [0x5A,0xA1,ACK/NACK]
3. 0x5AA2设置下载地址
设置下载地址需按照1KB对齐,每下载1Kbyte数据之后,都需要重新设置下载地址。
上位机(命令+地址):[0x5A, 0xA2, 0x08, 0x00, 0x40, 0x00]
IAP设备响应:[0x5A,0xA2, ACK/NACK]
4. 0x5AA3 下载数据命令(1KB 对齐多个包发送)
下载数据命令采用 命令+长度+数据的格式进行发送,每包最大数据量为60Byte (64 – 命令 – 长度),当发送数据达到1KB时,上位机需要等待设备的ACK响应。此时设备需将1KB的数据写到FLASH。
上位机(命令(2Byte)+长度(2 Byte)+数据(n byte)):[0x5A,0xA3,LEN1, LEN0,DATA0….DATAn]收完1KB数据后IAP设备响应:[0x5A, 0XA3, ACK/NACK]
5. 0x5AA4 下载结束
上位机:[0x5A, 0xA4]
IAP设备响应:[0x5A, 0xA4, ACK/NACK]
6. 0x5AA5 固件CRC校验
上位机传输固件起始地址和固件大小/1KB(固件大小按1KB对齐,不足补0xFF),由IAP计算CRC之后返回给上位机。
上位机:[0x5A,0xA5, 0x08, 0x00, 0x40, 0x00, LEN1, LEN0]
IAP设备响应: [0x5A, 0xA5, ACK/NACK, CRC3, CRC2, CRC1, CRC0]
7. 0x5AA6 跳转命令
跳转命令将跳转到用户代码进行运行
上位机:[0x5A,0xA6, 0x08, 0x00, 0x40, 0x00]
IAP设备响应: [0x5A,0xA6,ACK/NACK]
8. 0x5AA7 获取IAP设置的app地址
返回IAP设置的app地址
上位机:[0x5A, 0xA7]
IAP 设备响应:[0x5A, 0xA7, ACK/NACK, 0x08, 0x00, 0x40, 0x00]