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.

[参考译文] TMS320F28377D:serial_flash_programmer

Guru**** 2535440 points
Other Parts Discussed in Thread: C2000WARE, TMS320F28377D, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1565105/tms320f28377d-serial_flash_programmer

器件型号:TMS320F28377D
Thread 中讨论的其他器件:C2000WAREUNIFLASH

工具/软件:

尊敬的 C2000-TEAM:  

您能否帮助解决此申请?请:  

我正在使用 TMS320F28377D、并希望通过串行接口对其进行更新。 我正在使用 C2000Ware 中名为 Serial_Flash_Programmer 的示例工程、该工程已经包含 CPU1 和 CPU2 的匹配引导加载程序。
编程对两个 CPU 都有效、但 CPU2 出现错误。 在刷新过程中、仅显示以下错误信息:
错误状态:program_error
错误地址:0x90006
闪存 API 错误:数据缓冲区长度不正确。
FMSTAT 寄存器内容:00

我们假设此错误是由于地址而发生的 0x90006 不是 8 的倍数、因此闪存 API 会正确报告错误。 因此、我们尝试始终将固件放置在 8 的倍数存储器区域上。 我们通过 align (8) 在链接器命令文件中实现了此方法、例如:
CODESTART :>开始,页面= 0, align(8)

尽管如此、地址 0x90006 仍然受到影响、尽管它未在映射文件中列出、我们特意不在我们的固件中存储任何内容。 有趣的是、如果我们使用 Uniflash 刷写.out 文件、并且数据在地址 0x90006 处可用、则固件会正常工作。
您能否解释为什么即使映射文件中没有显示地址、也要将数据存储在那里? 是否可以更改或配置该地址?  

谢谢您、  

Marinus  

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

    您好、ASM 团队:  

    您对此主题有任何更新吗?  

    谢谢您、  

    Marinus  

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

    您好:Marinus、

    1.您可以发送用于生成文本文件的链接器 cmd 文件的副本吗?  

    2.您是否使用本 应用手册第 3 节中指定的编译后处理步骤? 如果是这样、是否还可以添加--boot_align_sect 选项并查看这是否有任何区别?  

    "${CG_TOOL_HEX}" "${BuildArtifactFileName}" -boot -sci8 --boot_align_sect -a -o "${BuildArtifactFileBaseName}.txt"
    

    此行为的一个可能原因是此格式的 C2000 十六进制实用程序输出存在异常。 boot -sci8 -a 格式将数据分成多个块、每个块在文本文件中都有一个相应的 16 位大小值。 如果一个块大于 0xFFFF、则下一个块可能会出现一些对齐问题、其中下一个块可能有未正确对齐的目标编程地址。

    此致、

    Skyler