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.

[参考译文] TMS320F28377S:固件更新闪存写入观测-空十六进制文件地址错误509,连续0x0000不写入空十六进制文件地址

Guru**** 2451970 points
Other Parts Discussed in Thread: TMS320F28379D, TMS320F28377S, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1044064/tms320f28377s-firmware-update-flash-write-observation---error-509-for-empty-hex-file-address-continuous-0x0000-not-writing-for-empty-hex-file-address

器件型号:TMS320F28377S
主题中讨论的其他器件:TMS320F28379DC2000WARE

尊敬的所有人:

我们正在通过 TMS320F28377S 和 TMS320F28379D 实现固件更新功能。

链接到 K、L、M 扇区的主应用程序。 对于固件更新、我们将 主应用程序的 hex 文件复制到 HMI、并将文件通过串行方式发送到控制器。 控制器在 B、C、D 扇区和复位控制器上存储接收十六进制数据。

复位时、引导加载程序代码将十六进  制数据从 B、C、D 扇区复制到 K、L、M 扇区、并跳转到 K 扇区的起始地址。

十六进制文件具有 从0xB8000到0xBD7A8 (扇区 K、L、M)的非空地址空间。  十六进制文件具有从 0xBD7A8 到0xBDFFA (扇区 M)的空地址空间

为了进行测试、我们首先在调试模式下执行主应用程序代码。

在将十六进制文件写入 B、C、D 扇区时、对于十六进制文件地址0xBD966及更高的地址 为空 地址空间、 0x000数据不会写入存储 器、而是保留为0xFFFF。 我们在"Memory"窗口中观察到了相同的情况。 API 未给出任何错误。

为十六进制文件地址0xBDEA8  写入8个字时、  表示地址空间为空、API 返回509个错误。

然后、我们通过更改 hex.cmd 文件中的长度字段来生成没有空地址空间的十六进制文件、并在上述练习中进行了尝试。

我们没有遇到任何错误、固件更新适用于引导加载程序代码。

我们在 上述两种控制器中都观察到了这种行为。

我们的查询:

1) 1) 0x000数据未被写入存储 器、并且保持为0xFFFF 的可能原因是什么 、闪存写入错误509属于空地址空间。

2) 2)我们使用 hex.cmd 文件的长度字段从 hex 文件中删除了空地址空间。 如何使用编译器或其他选项从十六进制文件中删除空地址空间。

此致...

Yogesh

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

    Yogesh、  

    对于引导加载程序、您是否使用 C2000Ware 中提供的闪存内核? 您的应用是否符合128位边界? 如果不是这种情况、写入闪存可能不会按预期发生。  

    我将向十六进制实用程序专家询问您的第二个问题、然后返回给您。  

    谢谢、  

    Anu

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

    感谢 Anu 的回复。

    我在查询中提到的引导加载程序是位于扇区 A 中的单独代码。在执行引导加载程序代码后、它会跳转到主应用程序所在的 K 扇区的起始地址。

    我们的闪存写入操作是128位对齐的。

    我们的十六进制文件具有从 0xB8000到0xBD7A8 (扇区 K、L、M)的非空地址空间。  十六进制文件具有从 0xBD7A8 到0xBDFFA (扇区 M)的空地址空间。  在固件更新期间、控制器用于接收具有 K、L、M 扇区地址的十六进制文件数据。 控制 器、用于通过偏移0x36000来计算扇区 B、C、D 的地址并将其写入闪存。  

    如我们的查询中所述、对于非空地址空间、所有写入操作都能正常工作。 对于地址0x87EA8 (十六进制文件中为0xBDEA8且属于空地址空间)上的8字写入、我们遇到509个错误。  0x87EA8 mod 8 = 0、因此它是128位对齐地址。 我们可以在该地址写入8个字。

    我们 在 TMS320F28377S 和 TMS320F28379D 上多次观察到相同的行为。

    正如我在查询中提到的、在将十六进制文件写入 B、C、D 扇区时、 对于十六进制文件地址0xBD966和更高的 地址为空 地址空间、 0x000数据不会写入到存储 器、而是保留到0xFFFF。 我们在"Memory"窗口中观察到了相同的情况。 API 未给出任何错误。  对于空地址空间 0xBD7A8至 0xBD966、0x0000字写入工作正常。

    因此、看起来将连续0x0000写入闪存是上述观察结果的路由原因。  

    请提供您对相同和可能的观察方法的看法。

    此致...

    Yogesh

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

    Yogesh、  

    我将与一名员工一起回顾您的问题、并在下周之前回复您。  

    有几个问题-您遇到的509个错误是否有枚举值? 遇到此错误时、您能否共享正在使用的闪存 API 函数?  

    十六进制实用程序使用的命令是什么? 您可以共享吗?

    谢谢、  

    Anu

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

    谢谢 Anu、

    与509关联的枚举为 Fapi_Error_AppelincorrectDataBufferLength。

    我们在 Fapi_DataOnly 模式下使用'Fapi_issueProgrammingCommand'

    为了生成十六进制文件、我们使用具有 以下配置的 hex.cmd 文件

    -image
    -memwidth 16.

    ROM

    FW_IMAGE:
    origin = 0x0B8000、length = 0x00584D、romwidth = 16
    文件={fwImage.hex}

    如上所述、我们将调整'length'以避免十六进制文件中出现空地址空间。 寻找克服十六进制文件中空地址空间的简单选项

    此致...

    Yogesh

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

    谢谢 Yogesh、下周再见。

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

    Yogesh、

    添加几条注释。

    当程序命令的"给定起始地址+给定长度"从128位对齐的段中退出时、会发生 Fapi_Error_OccasIncorrectDataBufferLength。  这意味着起始地址+长度不在具有起始地址的128位段中。  当您从闪存 API 中获得此错误时、请检查您为实例传递的长度。

    API 不会阻止地址 0xBD966及更高版本的程序。  您可以向我们发送一个特定的测试用例以进行复制。  从我们的角度来看、我们看不到任何问题。  请检查此处的起始地址和长度。

    我将让 Anu 继续与您进行进一步的讨论。

    谢谢、此致、
    Vamsi

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

    您好、Vamsi、

    感谢您的反馈。

    我们正在创建测试用例、我们可以将其与您分享。 此外、我们还将重复我们多次面临的问题、以了解问题的确切模式或根本原因。

    此致...

    Yogesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="496917" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1044064/tms320f28377s-firmware-update-flash-write-observation---error-509-for-empty-hex-file-address-continuous-0x0000-not-writing-for-empty-hex-file-address/3864555 #3864555">我们将调整'length'以避免十六进制文件中出现空地址空间。 寻找简单的选项来克服十六进制文件中的空地址空间

    我想了解与该空空间对应的是什么。  为了让我能够做到这一点、请提交链接器映射文件。  它通常与 CCS 工程具有相同的名称、但文件扩展名为.map。  请将其放入 zip 文件中。  然后将该 zip 文件附加到您的下一个帖子。

    谢谢、此致、

    乔治

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

    你(们)好  

    感谢您的回复。  

    很抱歉我的回复很晚。

    如前所述、我们使用 hex.cmd 实用程序 来生成 hex 文件、如下所示。

    --图像
    -memwidth 16.

    ROM

    FW_IMAGE:
    origin = 0x0B8000、length = 0x006000、romwidth = 16
    文件={fwImage.hex}

    我们配置为为为为 K、L、M 扇区生成代码的链接器文件。

    因此 ,对于 hex.cmd 实用程序,我们将 K 扇区的起始地址和 K、L、M 的长度一起传递为0x6000。

    生成的用于为非空间地址区域填充0x00的十六进制文件。

    为了避免0x00填充、我们使用调整长度= 0x006000。

    我们正在寻找在不 更改 hex.cmd 实用程序中的字段长度或使用其他一些选项的情况下生成不带0x00填充的十六进制文件的选项。

    您仍然需要地图文件、请告诉我。 明天我将与大家分享同样的内容

    谢谢。。。

    Yogesh。

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

    是的、我仍然需要映射文件。  谢谢!

    乔治

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

    尊敬的乔治:

    查找以下地图文件供您参考。

    e2e.ti.com/.../Machine_5F00_F28377S.zip

    请为我们提供可能的解决方案、

    • 以避免在十六进制文件的末尾填充0x00数据
    •  在十六进制文件末尾填充0xff、而不是0x00数据

     

    正如我们在本帖子开始时提到的那样、我们仍然面临着这个问题。 简称为以下问题。

    • 十六进制文件具有活动地址的非零数据、 以及位于十六进制文件末尾的非活动地址的零填充数据
    • 作为固件更新的一部分、通过串行方式接收每行十六进制文件、并在保留扇区中写入相同的十六进制文件。
    • 写入 活动地址的数据工作正常
    • 为非活动地址结果写入数据(0x00)闪存内容保持0xFF、没有任何闪存 API 错误。 几次写入后、闪存 API 返回无效长度错误。

    我们尝试使用所编写的附加函数来模拟错误   

    • 活动地址的非零数据
    • 非活动地址为零数据

    e2e.ti.com/.../TestWrtiteToFlash.c

    该函数正常工作、不会像我们在上面提到的那样提供错误。

    我们的应用程序代码会在函数基础上更新通过串行方式接收到的命令参数。 这是唯一的区别。

    noOfWordsToWrite
     lflashWriteAddress;
    flashWRDataBuf

    因此,为什么“非活动地址的零数据”失败,我们仍在进行同样的工作。

    请向我们提供错误的可能原因以及诊断问题的可能方法。

    谢谢。。。

    Yogesh

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

    请理解、我的专业知识仅限于十六进制实用程序 hex2000。  我在闪存编程或相关问题方面没有专业知识。  因此、我在这里的评论仅限于十六进制实用程序。

    在十六进制实用程序中使用映像模式。  这是通过使用选项--image ROMS 指令来指示的。  基于我对这种情况的有限理解、您不应使用图像模式。  如果您删除--image ROMS 指令、我认为您将获得所需的 hex 文件。   

    要了解有关图像模式的更多信息、 请在 C28x 汇编工具手册中搜索 标题为 图像模式和--fill 选项的子章节。

    以上所述、请理解我无法测试建议的解决方案、因此我无法确定它能解决问题。

    谢谢、此致、

    乔治

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

    尊敬的乔治:

    感谢您的回复。 它解决了生成具有0xFFFF 填充和不填充的十六进制文件的要求。

    对于与闪存相关的查询、我将在我们一侧经过几次实验后重新打开新 TT。

    此致...

    Yogesh