• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

【代码库】FRDM-MCXA156 的简单 CAN 引导加载程序项目

9小时前
194
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

dm-frdm-mcxa156-can-bootloader-main.zip

共1个文件

FRDM-MCXA156 的简单 CAN 引导加载程序项目

使用 CAN 更新 MCU 固件是一项基本且常用的任务。本项目采用两块 FRDM-MCXA156 开发板,通过 CAN 总线和 USB 实现固件更新,基本架构概述如下:

  • ?USB-CAN 桥接器?:本项目利用 FRDM-MCXA156 硬件,通过 USB 连接到 PC。在 PC 端,USB 端口被枚举为 CDC(通信设备类)虚拟串行端口(类似于 SDK 示例:usbdevicecdc_vcom)。此配置允许 PC 端使用 blhost 等工具通过 CDC 虚拟串行端口将数据传输到 USB-CAN 桥接器。然后,USB-CAN 桥接器将这些数据中继到 CAN 总线上,从而实现串行数据和 CAN 数据之间的透明传输
  • ?CAN 引导加载程序:?该项目同样使用 FRDM-MCXA156 硬件,用作引导加载程序。它能够通过 CAN 总线接收固件数据并验证新固件的完整性。验证成功后,系统将转换到应用程序

主板:FRDM-MCXA156

类别:工具

外围设备:CAN

工具链:MDK

目录

  1. 软件
  2. 硬件
  3. 设置
  4. 结果
  5. 常见问题解答
  6. 支持
  7. 发行说明

1.软件

本演示实现了一个简单的 CAN 引导加载程序升级框架。它利用一块 FRDM-MCXA156 开发板作为 USB-CAN 桥接器,方便 USB(作为 CDC 虚拟串行端口)和 CAN-FD 之间的数据传输。另一块 FRDM-MCXA156 开发板用作 CAN 引导加载程序项目,通过 CAN 与 USB-CAN 桥接器通信,以接收数据并更新应用程序。

进入bootloader模式的条件:

  1. CAN 引导加载程序代码启动后 1 秒(可配置)。
  2. CAN 引导加载程序接收任何有效的 NXP KBOOT 协议消息。
  3. 当 MCU 复位时按下 SW2(WAKEUP)引脚

项目分类及描述:

项目 小路 描述
usbcanbridge frdmmcxa156usbcanbridge 用作 USB-CAN 桥接器,其中 USB 被枚举为 USB CDC 端口,由 SDK 示例 usbdevicecdcvcom 修改而来
canbootloader frdmmcxa156canbootloader CAN 引导加载程序项目与 USB-CAN 桥接器配合使用
appexample frdmmcxa156appexample CAN 引导加载程序的示例应用程序,其起始地址从默认的 0x00000000 更改为 0x00008000 (32K),仅在这方面与 SDK 的 HelloWorld 示例不同。

默认 CAN 总线配置:

项目 CANFD控制字段波特率 CANFD数据字段波特率 CAN 发送 ID CAN 接收 ID
usbcanbridge 500Kbps 2Mbps 0x09 0x08
can_bootloader 500Kbps 2Mbps 0x08 0x09

用户可以在main.c中修改CAN_TX、波特率等默认参数

```

define CANBITRATE (500*1000)

define CANBITRATE_FD (210001000)

define CANTXID (0x09)

define CANRXID (0x08)

```

软件协议

CANbridge 与 CANBootloader 之间的通信协议非常简单。每个 CANFD 帧传输固定的 64 字节有效载荷,其中前 8 个字节为控制字段(用于兼容 UDS 协议),第 8-64 个字节为串行数据。前 8 个字节定义如下:

  • 字节 0-6:保留
  • 字节7:数据字段长度:1-56

注意,即使数据长度小于56,每个CANFD帧的数据场也固定为64字节。末尾多余的部分将被自动丢弃。

硬件

FRDM-MCXA156

引脚表

以下是该项目中的引脚使用情况,它适用于 usbcanbridge 和 can_bootloader 项目。

功能 通用输入输出 描述
LPUART0RXD 端口02 UARTRXD
LPUART0TXD 端口03 UARTTXD
CAN0TXD? ? ? 端口113 CAN总线传输信号
CAN0RXD 端口112 CAN总线接收信号

3. 设置

在开始之前,您应该:

3.1 步骤 1

如下所示连接您的测试环境:

CAN 引导加载程序板的电源可以连接到任何能够提供 5V 的 PC。

3.2 第 2 步

将 usbcanbridge 和 canbootloader 项目分别烧录到两块开发板上,编译 appexample 项目生成 app_example.hex 文件。将 hex 文件放在与 blhost 软件相同的文件夹中。

3.3 步骤 3

  • 将 USB 线缆插入 USB-CAN-bridge 开发板的 J23 接口(MCU FS USB),然后按下复位按钮。PC 应该会枚举一个 USB-CDC 串口并弹出相应的 COM 端口。如果 USB 无法正确识别,您可以使用 SDK 示例代码(boardsfrdmmcxa156usbexamplesusbdevicecdcvcom)验证您的软硬件设置。

  • 将 USB 线缆插入 CAN 引导加载程序板的 J21(MCU-Link USB)接口,也可以连接到 J23。此 USB 端口仅用于为开发板供电。

3.4 步骤4

使用双绞线电缆连接两块板的 CANH 和 CANL,如上图所示。

3.5 步骤 5

按住 CAN 引导加载程序板上的 SW2(WAKEUP)。然后按下 SW1(RESET),CAN 引导加载程序将进入引导模式。打开命令行并输入:

shell
$ ./blhost.exe -p COM22 get-property 1

如果收到以下回应,则表明硬件连接正常,blhost已经成功连接到CAN bootloader:

shell
Ping responded in 1 attempt(s)
Inject command 'get-property'
Response status = 0 (0x0) Success.
Response word 1 = 1258357760 (0x4b010400)
Current Version = K1.4.0

3.6 步骤 6

输入 flash-image 命令,后跟已编译的 app_example.hex 文件的路径。此命令将擦除应用程序所在的 Flash,并将新的十六进制固件写入 Flash。

shell
$ ./blhost.exe -p COM22 -- flash-image app_example.hex erase

如果一切按计划进行,您应该会看到如下响应:

shell
Ping responded in 1 attempt(s)
Inject command 'flash-image'
Successful generic response to command 'flash-erase-region'
Wrote 7340 bytes to address 0x8000
Successful generic response to command 'write-memory'
(1/1)100% Completed!
Successful generic response to command 'write-memory'
Response status = 0 (0x0) Success.

4.结果

重置 CAN 引导加载程序板;其 LED 将闪烁。如果您检查开发板的串行日志输出,它将显示如下消息:

shell
MCXA CAN bootloader
APP ADDR:0x8000
TIMEOUT!, JUMP!
jump to 0x 8000
I AM MCX APP EXAMPLE APP
MAIN ADDRESS:0x98B5
LED Toggle!
LED Toggle!
LED Toggle!
...

blhost 命令和日志的完整列表:

```shell
$ ./blhost.exe -p COM22 get-property 1
Ping responded in 1 attempt(s)
Inject command 'get-property'
Response status = 0 (0x0) Success.
Response word 1 = 1258357760 (0x4b010400)
Current Version = K1.4.0

$ ./blhost.exe -p COM22 -- flash-image app_example.hex erase
Ping responded in 1 attempt(s)
Inject command 'flash-image'
Successful generic response to command 'flash-erase-region'
Wrote 7320 bytes to address 0x8000
Successful generic response to command 'write-memory'
(1/1)100% Completed!
Successful generic response to command 'write-memory'
Response status = 0 (0x0) Success.

$ ./blhost.exe -p COM22 reset
Ping responded in 1 attempt(s)
Inject command 'reset'
Successful generic response to command 'reset'
Response status = 0 (0x0) Success.
```

. 常见问题解答

  • 为什么不使用 BootROM 内置的 CAN 接口,而是实现一个新的 CAN 引导加载程序?
    BootROM 提供的 CAN 协议在官方文档中没有完整描述,并且需要一个名为 BusPal 的工具进行串口转 CAN 协议。无论从软件和硬件架构的角度,还是从客户定制的角度,这都不太实用。
  • 这个演示是否考虑了可靠的更新或安全方面?
    不,此演示旨在为客户提供 CAN 引导加载程序实现的概念验证,而不考虑任何“高级”功能。

6. 支持

项目元数据

董事会徽章

类别徽章

周边徽章

工具链徽章

来源:恩智浦appcodehub

  • dm-frdm-mcxa156-can-bootloader-main.zip
    下载
恩智浦

恩智浦

恩智浦半导体创立于2006年,其前身为荷兰飞利浦公司于1953年成立的半导体事业部,总部位于荷兰埃因霍温。恩智浦2010年在美国纳斯达克上市。恩智浦2010年在美国纳斯达克上市。恩智浦半导体致力于打造全球化解决方案,实现智慧生活,安全连结。

恩智浦半导体创立于2006年,其前身为荷兰飞利浦公司于1953年成立的半导体事业部,总部位于荷兰埃因霍温。恩智浦2010年在美国纳斯达克上市。恩智浦2010年在美国纳斯达克上市。恩智浦半导体致力于打造全球化解决方案,实现智慧生活,安全连结。收起

查看更多

相关推荐