基于应用层协议的 E3210 CAN FD 刷写代码 Demo

一、概述

    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

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论