下图是我们产品的硬件扩展示意图:
1. PC 和主板通过 TCP 连接。
2.主板通过四条SPI总线与四个子板连接,各子板的功能相同。
3.主板上的UART4可以通过串口切换芯片切换到4个子板的UART1。
foreverwlh2025_0-1789970732170.png
由于项目需要, PC需要通过TCP升级四块RT1064子板的固件程序。基于硬件扩展情况,能否提供最简单的子板固件升级方案(考虑到上位机开发、主板开发和子板开发的工作量)?
亲爱的@foreverwlh2025 ,
谢谢你的提问。
单个子板的逐步升级流程:
对子板 N 施加 RESET 信号;设置 BOOT_MODE[1:0] = 01(串行下载器模式)
将串口切换芯片切换为连接 UART4 和子板 N 的 UART1。
释放 RESET 按钮——子板 N 进入 RT1064 ROM 引导加载程序并等待 UART 命令。
启用 TCP↔UART4 字节转发
切换 RESET 开关并将 BOOT_MODE 恢复为正常模式——子板 N 将使用新固件启动。
将串行选择器切换到下一个子板并重复上述步骤。
请在实施前确认以下硬件条件已具备:
主板对每个子板的BOOT_MODE[1:0]引脚具有独立的 GPIO 控制。
主板对每个子板的RESET引脚具有独立的 GPIO 控制。
该串行切换芯片可通过主板GPIO控制,并支持在所有4个子板之间进行切换。
如有任何疑问或想进一步讨论实施细节,请随时联系我们。
亲爱的@foreverwlh2025 ,
以下是针对您的固件升级场景推荐的解决方案概要。
1. 电脑工具
在 PC 端,我们提供了blhost——一个开源的命令行客户端,它实现了 NXP 的 MCU 引导加载程序私有帧协议(BSD/MIT 许可证)。设备端协议由MCU片上ROM引导加载程序实现。它们共同实现了固件下载和设备配置。
该工具支持 USB 和 UART1,不支持 TCP。
开源仓库: https://github.com/nxp-mcuxpresso/spsdk
blhost 和 ROM 引导加载程序使用专有的帧数据包协议进行通信,请参阅: MCU 引导加载程序 v2.5.0 参考手册 (MCUBOOTRM)
对于固件映像的生成和打包,请使用 NXP 的SPSDK(安全配置 SDK)中包含的nxpimage工具。
2. 推荐方案:通过主板实现 TCP 透明转发
对于你的场景(PC→主板→子板),最省力的方法是让主板充当透明的 TCP 到 UART 桥接器,只需对 blhost 进行少量修改,将串行数据封装在 TCP 中即可:
建筑学:
PC (modified blhost)
↓ TCP packet (include original UART byte stream)
Main Board (TCP Server)
↓ Unpack and forward to sub-board via UART
Sub-board (ROM Bootloader)
关键修改点:
修改 blhost 传输层:在 blhost 源代码中添加一个新的 TCP 传输模块。现有的UART字节流(帧数据包)在发送路径上直接封装成TCP数据包,在接收路径上解封装。
主板实现了一个 TCP 服务器:从 PC 接收 TCP 数据,通过 UART1 将有效载荷逐字节地转发到子板;子板的响应以同样透明的方式通过 TCP 转发回 PC。
子板无需任何更改:子板 MCU 只需处于 ISP 模式,ROM 引导加载程序正在运行,等待标准 UART 命令即可。
4.启用TCP↔UART4字节转发
-----请问,数据传输的这一步骤是否需要额外开发一台上位计算机?例如,PC应该以什么格式传输图像数据?它应该如何解析子板返回的响应数据?以及它应该如何与子板交互?