最近在公司处理关于BootLoader的一些升级细节,使用了一个星期左右,使用了官方的flash down load的软件。
当时看了A2602和AN3155有关于botlooder的描述,但是在编程的时候依旧遇到了很多问题了。
比如用官方提供的代码,在升级程序完成的时候时无法得到read memory的反馈的
if(HAL_UART_Transmit(&huart2, (uint8_t*)*p_read_address, bytes_number, 0xFFFF)!= HAL_OK)
// {
// while(1)
// {
// }
// }
这段代码是无法得到host的回应的
流程如下:
1、GET_CMD host端发送,muc端发送软件的版本号,和支持的指令/
2、GID_CMD host端发送,muc端将芯片的ID发送出去,
3、RM_CMD 这个指令在官方的BootLoader里是可以的,但是的在自己的的升级程序中是不行的,具体原因也不知道是为什么。 (所以自己的BootLoader关键就是处理这一部分,来模拟官方的数据,包括芯片的型号和容量)
4、 ER_CMDhost端发送,是用来清除flash的。会发送需要清除的page,更具page和datasheet来自己清除内部的flash。
5、WM_CMD 是用来写入flash的。更具keil的设置,会发送特定的地址,用来写入程序。
6、GO_CMD这个指令是用来跳转的,但是在官方的软件里是不支持的,没有接收到过。
以上是对bootloader的总结,使用的方式是,用原程序来,接串口来检测数据的发送,然后自己的程序来模拟发送相同的指令。