MPU 通过 CAN FD 将需要升级的固件包发送给 MCU,升级过程在 Bootloader 里进行,程序采用 XIP 的模式运行。上电后从 Flash 里将 Bootloader 程序复制到 RAM 里运行,再跳转到应用程序 SF 中运行,注意:Bootloader 工程的大小要小于 RAM 的大小。
二、WPI E3210 评估板简介
图 2.1 WPI E3210 评估板
(1)DC-DC 电路,支持 5V 输入转成 3.3V;
(2)SD 卡;
(3)CAN/LIN 收发器;
(4)10/100M 以太网;
(5)USB 调试串口;
(6)E3210 USB 接口;
(7)DAC/ADC 电路;
(8)外部 Flash(支持 hyperflash 和 norflash 二选一);
(9)音频放大电路;
(10)按键及扩展接口等;
三、应用层协议
- 握手包
- 数据包
- 应答包
- 结束包
协议主要是在 CAN FD 的数据帧中的数据域指定协议,如图 3.1 所示,同时本篇博文只包含 MCU 方面的控制讲解。
图 3.1 CAN 数据帧
(1)握手包,由 2 Byte 的帧头、2 Byte 的指令类型、3 Byte 的数据字节长度和 2 Byte 的数据值组成,数据字节长度采用小端序方式存放;
(2)数据包,由 64 Byte 组成;
(3)应答包,由 2 Byte 的帧头、2 Byte 的指令类型和CRC 校验码(Y/N)组成,MCU 给 MPU 的应答是发送 CRC 校验码,MPU 给 MCU 的应答发送的是 Y/N。
(4)结束包,由 2 Byte 的帧头、2 Byte 的指令类型和数据值组成。
表 3.1
包类型 |
帧头 |
指令类型 |
长度 / CRC |
数据值 | |
握手包 |
0xCA,0xFD |
命令 |
0x32,0x48 |
√ |
√ |
文件大小 |
0x48,0x32 | ||||
数据包 |
× |
× |
× |
× |
√ |
应答包 |
0xCA,0xFD |
CRC |
0x01,0x53 |
× |
√ |
结束包 |
0xCA,0xFD |
END |
0x53,0x01 |
× |
√ |
四、软件逻辑
具体帧格式流程说明,如图 4.1。
图 4.1 帧格式说明
应用代码流程如下:
(1)MPU 请求发送版本号
(2)MCU 发送版本号给 MPU
(3)MPU 发送提示 MCU 升级
图 4.2 应用代码流程图
Bootloader 代码流程如下:
(1)MCU 发送确认升级给 MPU
(2)MPU 发送给固件包给 MCU
(3)MCU 发送 CRC 校验码给 MPU
(4)MPU 发送 CRC 校验是否成功给 MCU
(5)MCU 发送结束包给 MPU
(6)MPU 发送结束包给 MCU
图 4.3 Bootloader 代码流程图
五、应用代码实现
接收 MPU 请求发送版本号:MCU 接收 MPU 发送的 CAN FD 数据。CAN 接收中断函数触发后,判断师帧头是否正确,若是则判断指令类型、获取命令长度和命令数据,判断指令是否是请求发送版本号,若正确则,MCU 发送版本号给 MPU。如图 5.1。
图 5.1
接收 MPU 发送提示 MCU 升级:MCU 接收 MPU 发送的 CAN FD 数据。CAN 接收中断函数触发后,判断师帧头是否正确,若是则判断指令类型、获取命令长度和命令数据,判断指令是否发送提示 MCU 升级,若正确则,MCU 映射跳转到 Bootloader,然后软件复位,从 Bootloader 开始运行。如图 5.2。
图 5.2
六、Bootloader 实现
软件复位进入 Bootloader 后,读取当前 Flash 里的 bin 文件信息,并将其写到 0x10240000 中,发送确认升级给 MPU,如图 6.1。同时开启定时器定时 7秒,等待 MPU 回应,超时则继续往下运行,运行旧的 bin 文件。
图 6.1
若在七秒内接收到 MPU 发送得固件包信息,则由 CAN 中断函数接收固件包。如图 6.2。
图 6.2
接收完成后,对固件包进行 CRC 校验,将校验值发送给 MPU进行对比,若正确 MPU 则在应答包的第四位写 0x01,反之写 0x00,如图 6.3。
图 6.3
接收到 MPU 发送的 CRC 校验成功的应答包后,MCU 发送结束包给 MPU,然后等待 MPU 发送结束包回来,收到后将将固件包写入 Flash,若写入成功,则升级成功,运行新的代表,若写入失败,则从 Flash 0x10240000 中读取旧的固件包并将其写入 0x10140000 的地址中运行旧的代码。如图 6.4。
图 6.4
七、Demo 演示
开发板连接方式如下图 7.1。
图 7.1 开发板连接示意图
将程序下载入开发板,从 Bootloader 里运行到应用代码。如图 7.2。
图 7.2
收到 MPU 发送的命令包后,软件复位进入 Bootloader。如图 7.3。
图 7.3。
软件复位进入 Bootloader,备份旧的固件包,发送握手包 2,接收握手包 3 获取固件包大小,就收固件包,接收完成后进行 CRC 校验,发送应答包 1,接收应答包 1 CRC 校验正确,发送结束包1,接收结束包 1,写入新的固件包到 Flash,写入成功跳转到 SF,运行新的代表。如图 7.4。
图 7.4
《E3_SSDK_PTG2.1_Source_Code.tar.gz》(作者:SemiDrive 官网,出处:首页 - 客户支持系统 - 芯驰科技SemiDrive)
评论