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.

[参考译文] MSP430F5659:BSL-Scripter 损坏某些二进制文件的复位矢量

Guru**** 2933720 points

Other Parts Discussed in Thread: MSP430F5659, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1650352/msp430f5659-bsl-scripter-corrupting-reset-vector-with-certain-binary-files

器件型号: MSP430F5659
Thread 中讨论的其他器件: UNIFLASH

我将 BSL-Scripter 与提供的示例脚本配合使用、通过 USB 在 MSP430F5659 中写入新固件。

我有固件,工作没有任何问题,和其他的不. 对于没有启动的闪存、程序根本不会在闪存后启动。 进行一些挖掘后、我注意到复位矢量(地址 0xFFFE)以值 0x0200(而不是预期的 0x0283)损坏。 我能够使用 Uniflash 进行确认并导出整个存储器。 请参阅上图、其中显示了输入文件与从 Uniflash 导出文件之间的差异。  

image.png

导出的每个其他字节都与输入文件完全匹配、只有一个 0x00 字节错误。

我可以使用 CCS 以及 MSPFlasher 刷写完全相同的程序、而不会出现任何问题(通过 JTAG 刷写、而不是 USB 刷写)。

我提供了一个包含以下内容的 zip 文件: (仅供参考,这些文件不包含任何专有信息)

  • Input_GOOD.txt
    • 一个与 BSL-Scripter 和提供的示例脚本完美搭配的固件示例(TI-TXT 格式)。
  • Input_BAD.txt
    • 在使用完全相同的 BSL-Scripter 脚本时导致问题的固件示例(TI-TXT 格式)。 尽管如此、如果通过 JTAG (CCS 或 MSPFlasher) 进行了刷写、则其工作正常。
  • EXPORT_Input_GOOD.txt
    • 使用 BSL-Scripter 刷写 Input_GOOD.txt 后直接从 Uniflash 导出的存储器
  • EXPORT_Input_BAD.txt
    • 使用 BSL-Scripter 刷写 Input_BAD.txt 后直接从 Uniflash 导出的存储器
  • Export_Input_bad_Data Flashed_From_JTAG.txt
    • 使用 JTAG 刷写 Input_BAD.txt 后直接从 Uniflash 获取的导出存储器。 它与 Input_BAD.txt 文件完全匹配。 程序刷写后运行正常。
  • 文件夹 BSL-Scripter
    • BSL-Scripter 使用的所有文件(几乎只是 TI 提供的库存 5xx_USB 示例)

注:Input_Good 和 Input_Bad 都来自相同的代码库、只是代码的不同部分略有不同。 该差异与闪存或任何内容无关。 codebase 永远不会使用 flash 播放。 无论如何、根据我的理解、由于复位向量错误、代码永远不会运行。

我尝试将 Input_bad 固件文件修改为从@8000 到'q'(固件结束)的一个连续块、而不是具有不同的段@8000、@ffc6 等 它没有解决问题。

我还尝试添加@10000 段、以便在损坏的复位矢量 (@FFFE) 之后强制使用新段、它也没有解决问题。

 

我是否遗漏了一些明显的信息? 提前感谢。

ZIP 文件:
debug_BSL_Scripter.zip 

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

    您好、

    听起来像每个其他字节都是完美匹配的、并且代码使用 CCS 或 MSPFlash 通过 JTAG 完美闪烁、这将直接指向 TI BSL-Scripter 处理特定 Intel Hex (.hex) 或 TI-TXT (.txt) 文件格式化结构的已知细微差别。  引导加载程序 (BSL) 没有特意损坏。 相反、由于二进制文件最末尾的数据包对齐或解析器不匹配、BSL-Scripter 只丢弃了一个数据有效载荷字节、这会将最终写入字节 (0x83) 移出其预期边界、从而在复位矢量的较高字节中留下默认的 0x00。 您可以尝试以下操作:

    1. 修复编译器输出中缺少的奇数字节填充--> 打开 CCS 工程属性、导航至 Build > MSP430 Hex Utility > General Options、并确保 启用了填充闪存空洞或偶数字节对齐填充选项。 或者、确保链接器命令文件 使用 ALIGN (2) 指令将所有最终闪存段与 2 字节边界对齐
    2. 验证脚本文件--> MSP430F5659 上的 USB BSL 接口中的行结束格式用作严格的基于数据包的解析器。 如果失败的固件生成一个.hex 或.txt 文件、其中包含复位矢量的最后一行(@FFFE 或十六进制 EOF 记录)缺少尾随回车/换行 (CRLF)、BSL-Scripter 将无法正确传输最终块块。
    3. 切换输出生成格式--> 如果要.hex将 Intel Hex () 文件传递给 BSL-Scripter、该工具必须在内部将这些记录转换为地址有效载荷块。 对于许多开发人员而言、BSL-Scripter 中的转换循环可能会因特定编译器封装上部存储器地址的方式而崩溃。  更改 CCS Hex Utility 配置以生成原始 ",="" roboto,="" arial,="" sans-serif;="" font-size:="" 16px;="" font-weight:="" 600;="" margin:="" 0px;="" text-decoration:="" none;="" border-bottom:="" 0px="" rgb(230,="" 232,="" 240);"="">TI-TXT (.txt) 文件而不是 Intel Hex。 TI-TXT 格式将清理程序映射到 BSL 期望的原始存储器块中、从而消除解析器转换下降的问题

    -布赖恩

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

    这似乎忽略了所提供的信息。 这不是奇数字节或者缺少 CRLF、对我来说肯定是 TI-TXT。

    在输入文件中:

    良好:

    @ffd8
    1E 83 1E 83 1E 83 1E 83 1E 83 1E 83 1E 83 00 80 
    1E 83 1E 83 1E 83 1E 83 1E 83 1E 83 1E 83 1E 83 
    1E 83 96 82 1E 83 02 83 4A 14 C9 0E C7 0D C6 0C 
    4F 49 5F 0E 40 18 5A 4F D4 87 07 93 02 24 D6 03

    差:

    @ffd8
    1E 83 1E 83 1E 83 1E 83 1E 83 1E 83 1E 83 00 80 
    1E 83 1E 83 1E 83 1E 83 1E 83 1E 83 1E 83 1E 83 
    1E 83 96 82 1E 83 02 83 4A 14 C9 0E C7 0D C6 0C 
    4F 49 5F 0E 40 18 5A 4F 50 85 07 93 02 24 D6 03 

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

    感谢 Brian 的回复!
    抱歉、我的帖子具有误导性、我提到了“TI-hex “格式、但这不存在。 根据您的建议、它实际上是一种用于所有文件的 TI-TXT 格式。

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

    您好、

    我已联系我们的软件团队以获得更多支持。  此问题似乎并不重要、可能需要一些时间来找到根本原因和解决方案。 您能否为我们提供您与 BSL-scripter(编程器和操作系统)一起使用的设置?

    此致、
    Brian

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

    BSL-Scripter 程序应该会生成日志文件。 检查日志、尤其是在它写入复位矢量/该矢量附近的部分周围可能会有所帮助。

    源代码是可用的,但作者是新学校,认为评论被过度评级,所以弄清楚它正在做什么帽子的方式是一个麻烦.