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.

[参考译文] MSP432E401Y:以太网引导加载程序和软件

Guru**** 2539430 points
Other Parts Discussed in Thread: MSP432E401Y, MSPBSL

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/692438/msp432e401y-ethernet-bootloader-and-software

器件型号:MSP432E401Y
主题中讨论的其他器件: MSPBSL

你(们)好

我将 MSP432E401Y 用于一种将联网的设计、无需与外界进行任何真正的其他连接。 固件现场更新的计划是使用以太网作为传输方法、在这方面、我有一个使用 FreeRTOS 和 lwip 的设计成功地工作。 (Lwip 用于 NDK,因为 NDK 没有 SNMP 守护程序,这是系统的主要用途)

使用给出的示例、我已将"swupdate.c"复制到我的设计中、所有这些似乎都可以正常工作。 我可以发送"魔法"数据包并将其放入引导加载程序。 这是使用 Wireshark 进行测试的、并使用 netcat 发送数据包。

echo -ne '\XAA\XAA\XAA\XAA\XAA\x52\x00\x2b\xa5\xa0\xa7\x52\x2b\xa5\xa0\xa7\xa7\x52\x00\x2b\xa5\xa0\xa2\xa2\xa2\xa26\xa2b\xa2\xa2\xa2\xa2\xa2\xa2\xa2|-xa2\xa2\xa2\xa2\xa

我可以高兴地看到它 BOOTPing。 (它仍然将自身标识为 Tiva,当您将代码提出时,你们是否甚至不能更改 ROM ID 字符串:-)

现在,正如我理解的那样,如果我的普通 DHCP 服务器使用引导文件发出 BOOTP 响应,它将从 TFTP 服务器中提取该文件并刷写它的内存。

我的第一个问题是文件采用什么格式? 原始二进制映像、还是智能格式?

我知道有一个引导加载程序工具 mspbsl、它可以执行此操作、它需要.txt 文件 EEPROM 映像。 但是、该工具存在一些有趣的问题。 (无论如何在 Linux 下)

  • 在多 NIC 系统上,它发送广播魔术包,BOOTP 应答默认路由端口。 如果您有单独的生产和开发环境,并且 BOOTP 应答将到达错误子网的广播地址,那就不是很好了...
  • 当它尝试侦听 BOOTP 端口并在所有接口上侦听时,我必须关闭 DHCP 服务器才能使用它。 同样、如果您拥有生产和开发系统、这是一场噩梦。

我修复了 NIC 的第一个问题、它具有一些非常糟糕的升压编码、并从源代码重新构建它。 第二个比较烦人、因此我想使用现有的 DHCP/TFTP 系统来提供更新。

第二个问题。

以太网引导加载程序是否超时? 如果发送到引导加载程序模式并且没有 BOOTP (或初始 TFTP),则是否会中止并重新引导? 因此、如果它从未像执行任何擦除/编程那样远、它将会超时或一直保持到下电上电为止?

闪存后、它是否执行完全系统复位(或仅 CPU 复位)? 我问、因为我的设计在启动时似乎会死板、但在下电上电时可以、这很好。 如果您通过调试器执行系统复位、它也会起作用。 我想知道是否需要重置启动代码中未重置的一些外设。  

谢谢!

/\/\arc

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

    文件格式为使用 BSLScripter 的 TI TXT 文件格式。 有关 BSL Scripter 和以太网固件升级的更多详细信息、请参阅以下 SLA

    dev.ti.com/.../

    BOOTP 的某些部分已被 DHCP 取代,作为一种更有效的方法,但 DHCP 仍可以执行 BOOTP 功能。

    当前以太网引导加载程序没有超时。 因此、为了能够管理一个自动复位、一个定时器可被启用以在一个预定义时间内计数。 如果计时器收到 BOOTP 或 TFTP 数据包,则应重置计时器。 这样做的正确方法是将传入的 TFTP 数据包刷写到闪存中未使用的部分。 一旦接收到最后一个数据包、它就会将闪存中未使用的部分的映像刷写到闪存的执行部分、然后跳转到映像。 如果 TFTP 未完成,由于原始固件尚未被覆盖,这将允许系统采用正常的恢复方法。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Amit、您好!

    感谢您的回复。 我本来希望不再使用基于 ROM 的引导加载程序、但现在看一下基于闪存的源代码、这似乎是一种更好的方法、因为这样可以更轻松地将升级系统定制为我们可以使用中央部署的内容 控制器。

    检查引导加载程序代码、它看起来就像 TFTP 数据、只是将要编程到闪存中的内容的原始二进制转储。 TI-TXT 的转换全部在 BSLScripter 中完成。 我非常确信我们可以将 elf 二进制文件转换为原始二进制文件(或将来自 ARM 十六进制工具的输出转换为原始二进制文件)、并使用我们现有的 tftp 服务器系统来处理它。 我认为 tftp 文件名系统类似于 PXE 使用的文件名系统、其中它使用 UUID、然后是 MAC、IP、最后是检查引导内容时的默认文件名。 这样、我们就可以通过更改 tftp 目录指针来轻松地控制单个计算机上安装的内容。  

    我希望我们的应用程序将足够小、能够让我们执行您建议的双缓冲方法、在最后使用 CRC 来验证数据、我相信这将是不会有太多麻烦的。

    此致

    Marc。

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

    您正是关于二进制转储。 BSL Scripter 在内部执行该操作。 因此、从技术上讲、只要可以将任何输出格式转换为原始二进制映像、就可以使用任何输出格式。 如果映像大小是一个问题、我建议使用外部串行闪存或 USB 闪存(如果有足够的引脚可用)来保留新下载固件的副本。 它确实会使引导加载程序复杂化、但对于大尺寸映像来说(我已经测试过)效果非常好。