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.

[参考译文] CCS/F28M35H52C:C28十六进制实用程序、生成奇怪的十六进制格式输出

Guru**** 2538930 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/722731/ccs-f28m35h52c-c28-hex-utility-generating-strange-hex-format-output

器件型号:F28M35H52C
主题中讨论的其他器件:C2000WARE

工具/软件:Code Composer Studio

大家好、

我尝试从简单的 blinky_c28应用程序中生成.hex 文件。 生成的十六进制文件输出一个奇怪的格式、如下所示:

0C806000761F01381E24761AFF69000606
:20806600FFFFA00000000001FFFEA002000000000000FFFEA004000000000000FFFEA00678

现在、我从地址0x138060开始对上面第一行的数据进行编程、直到0x138065 、当我转到下一行开始对地址0x138066中的数据进行编程时、它会抛出一个名为"Fapi_Error_IncorrectEccBufferLength "的错误。

现在,我如何解决这个问题呢?  

下面是一个代码片段、介绍了如何处理.hex 文件中的记录长度。

IF (时长=0x0C)

oReturnCheck = fapi_issueProgrammingCommand ((UINT32 *) flashsectoraddress、
数据缓冲区、
6、
0、
0、
Fapi_AutoEccGeneration);

如果(时钟长度= 0x04)则为其他值

oReturnCheck = fapi_issueProgrammingCommand ((UINT32 *) flashsectoraddress、
数据缓冲区、
2、
0、
0、
Fapi_AutoEccGeneration);

其他

oReturnCheck = fapi_issueProgrammingCommand ((UINT32 *) flashsectoraddress、
数据缓冲区、
8、
0、
0、
Fapi_AutoEccGeneration);

谢谢!

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

    这是一个 wiki 页面、介绍了如何在 CCS 中使用十六进制实用工具。 processors.wiki.ti.com/.../Hex_Utility_in_CCS

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

    您好、Ozino、

    我知道如何使用 CCS 上提供的实用程序生成十六进制文件。

    要为 C28 blinky 生成十六进制文件,我正在使用以下标志:"-memwidth=16 --romwidth=16 --Intel"。

    查看为我生成的 hex 文件:

    e2e.ti.com/.../blinky_5F00_c28.txt

    现在、该文件的末尾几乎有两个同步的十六进制记录、完全不遵守 TI 闪存程序 API 执行的 ECC 检查。

    :0C 8060 00 761F 0138 1E24 761A FF69 0006 06
    :20806600FFFFA00000000001FFFEA002000000000000FFFEA004000000000000FFFEA00678

    在这里、为上述第一个记录生成的地址将为0x138060、并保存值高达0x138065的记录。

    例如  :0x138060程序 761F

        0x138061程序 0138

        0x138062程序 1E24

         0x138063对 761A 进行编程

         0x138064对 FF69进行编程

         0x138065程序 0006


    现在、当我的软件移动到从地址0x138066开始的下一个十六进制记录编程时、我会得到一个 ECC 错误。 因为闪存 API 本来会计算上一实例中0x138066和0x138067的 ECC、并且会限制用户再次对同一地址进行编程。  

    希望现在您能对我所面临的问题有所了解。 我现在如何解决这个问题?  

    谢谢

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

    Preetham、

    您是否在64位边界上对齐链接器命令文件中的段?

    请在 http://processors.wiki.ti.com/index.php/C2000_Flash_FAQ 上的闪存 API wiki 中搜索"为何在 C2000Ware 示例中提供的链接器 cmd 文件中使用 align 指令(align (x))" 

    谢谢、此致、

    Vamsi

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

    感谢您在链接器文件中使用 align (4)的回复解决了问题。

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

    很高兴它帮助了我们。 我要关闭此主题。

    谢谢、此致、
    Vamsi