This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR5969:多个 MSP430的现场固件升级

Guru**** 2539500 points
Other Parts Discussed in Thread: MSP-GANG

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/987562/msp430fr5969-field-firmware-upgrade-of-multiple-msp430s

器件型号:MSP430FR5969
主题中讨论的其他器件:MSP-GANG

我正在寻找传感器阵列现场固件升级解决方案、该传感器阵列具有8个到128个 MSP430器件。   我们目前使用基于 BSL-Scripter 的方法、通过一次在一个传感器上调用 UART BSL、使用相同的固件映像更新所有 MSP430。   这种方法运行良好、但耗时、客户希望消除 UART 接线并使用 Spy BiWire (测试和 RST)线路、这些线路通过 FPGA 连接到系统中的每个 MSP430。  

我们希望用户能够在没有特殊硬件工具的情况下更新所有器件上的固件、并且能够向承载 MSP430阵列的 PCB 添加电路。  我已经查看了 SLAU320AI (使用 JTAG 接口进行 MSP430编程)文档、该文档提供了很好的信息、并考虑在专用 MSP430上修改"Replicator for MSP430"固件、该 MSP430可用作其他 MSP430的编程器。    

这对于单个 MSP430目标来说很简单、以这种方式对多个 MSP430进行 Gang 编程是否可行?    我知道2线 SBW 中的 TDIO 引脚是双向的、但想知道是否可以同时将所有 MSP430置于一种无需多个器件驱动 TDIO 线路即可通过单工通信加载固件映像的状态?  

我想询问已经解决了类似的多 MSP430固件负载问题的任何人的经验吗?   由于我们已经在板上安装了 FPGA、是否有人在 FPGA 中实现了硬件接口?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我制作了类似 SBW 主器件的 MSP-GANG、并从 slau320开始、因为此时这个只有开源项目。 如今、TI FET 的所有固件(MSP 调试堆栈)都是开源的(与 slau320相比、故障更少)。

    我的目标是支持所有 MSP SBW 器件、因此比您的器件更复杂。 每个目标器件必须有自己/不共享/分离的 SBW 数据/CLK 线路。 此外、由于只有 FRAM 目标、事情变得更加简单、因为没有闪存问题。 所有操作都可以使用快速读取/写入函数来完成。 还有邮箱系统、可用于在 SBW 主器件和自由运行目标之间交换数据。 但是,这肯定不是一周的工作。

    如果您要逐个更新、而不是并行更新、则系统中的目标设备总数不相关。 但我看不到问题、即使您想并行执行它。 如果目标器件复位(SBW 数据)引脚上有电容器、则在开关期间应注意信号形状和引脚(总)电流。 我使用了具有8个目标器件的系统(主引脚编号/电流/其他 限制)。 我的 SBW 主设备通过 USB 连接到 PC、并且在 PC (Win / Linux / OSX)端使用 CLI、、、

    D:\\>flash -f test_msp430f5510.txt -e -w -v -crcr -MRR
    
    文件:"test_msp430f5510.txt"
    @8000 32768字节
    总大小: 在
    
    COM4
    
    获取器
    件# JTID 保险丝器件核心硬软 LotWafer DieX Diey0
    91 OK 3081 2106 10 B7A50951 0A00 1100
    1 91 OK 3180 1104 12 013BB046 0D00 1E00
    2 91 OK 5435 0100 10 ADE98146 0400 2000
    3 91找到32768字节 SBW+ OK 3180 1104 12 013BB046 1200 1E00
    4 91 OK 3080 1104 30 10 B15B9446 2000 1700
    5 91 OK 3180 1104 12 34449346 2200 3600
    6 91 OK 3881 1106 10 219CA446 1800 0F00
    7 91 OK 3180 1104 12 013BB046 2700 2E00
    
    
    
    写擦除
    时间:423ms 速度:75.7kB/s
    
    验证
    时间:159ms 速度:201.3kB/s
    
    CRC 修订
    文件#0#1#2 #3#4#5#6#7
    C841 C841 C841 C841 C841 C841 C841 C841 C841 C841时间
    :40ms 速度:800.0 kB/s
    
    边界读取模式
    文件#0 #1 #2 #3 #4 #6 #7
    0 C841 C841 C841 C841 C841 C841 C841 C841 C841 C841 C841
    1 C841 C841 C841 C841 C841 C841 C841 C841时间
    :460ms 速度:69.6KB/s
    
    释放设备
    
    总时间:1268ms 


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢 zrno soli 分享您系统的详细信息以及对 MSP 调试堆栈的引用、这非常有用。  深入探究之后、我要采取的方法是构建在我们系统的主器件上运行的 ezFET Lite 的变体版本。  它只需要在目标上加载固件、希望这只涉及快速写入(无快速读取)、从而避免 TDIO 上的争用。   因此不会进行 FRAM 写入验证。    我们的系统使用 FRAM 器件(FR5969和 FR5994)、我们有一个带有 USB-UART 桥接器的主设备连接到主机。  但是、主器件和目标器件的 SBW 引脚是公共(共享)线、由于 PCB 布线限制、不能为~128个目标中的每个目标使用单独的线。   这种"仅快速写入"方法是否可行?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    遗憾的是、这是不可能的(共享 TDIO)。 任何 SBW 移位操作(在快速读取/写入/任何内容中)将有2个位输出(主 TDIO 写入、从 TDIO 读取)的多个组合、之后是一个位输入(从 TDIO 写入、主 TDIO 读取)。 您可以在 slau320图片中看到这种情况。 因此、当所有目标器件响应并写入一个位时、其中一些将为高电平、另一些将为低电平、从而导致短路和目标复位。

    在第一个 MSP-GANG 版本中(您可以在某些 TI 文档的原理图中看到这一点)、TCLK 线(用于六个目标)在所有目标器件之间共享。 我不喜欢这个、但它可以正常工作。 TDIO 不是共享的、每个目标器件使用单独的。

    SBW 不支持链接、因此无法在串行连接中使用目标器件。 仅并行。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 zrno sori、我现在看到共享 SBW 是不可能的。  我在您推荐的 SLAU320参考中看到、即图2.10、从器件在3 个时隙中的一个时隙内驱动 TDIO。   因此、即使受制于所有从器件都有一个通用的 MCLK 并且正在使用并行的相同固件映像进行编程、所有从器件也将在该插槽期间同时驱动 TDIO 线路。

    SBW 不像 JTAG 那样支持菊花链连接。

    我想这种方法的门是关闭的。