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.

[参考译文] TMS570LC4357:将数据存储在程序闪存中

Guru**** 2459220 points
Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1136614/tms570lc4357-storing-data-in-program-flash

器件型号:TMS570LC4357
主题中讨论的其他器件:UNIFLASH

您好!

我有一个文件(大约2MB)、我需要将其存储在程序闪存中。  我已经尝试使用 F021闪存 API (Fapi_issueProgrammingCommand)将数据存储在程序闪存中(将一个小缓冲区写入 FLASH1的起始位置)、并且它正在工作。 但是、我在读回数据时遇到问题。 我尝试使用 Fapi_doMarginReadByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByBy 我确信 src 和 dst 指针指向正确的位置。

另一方面、按住一个指向 FLASH1中某个位置的指针并访问该数据即可。

如前所述、文件大约为2MB、我对 时间有一些顾虑。

处理此问题的正确方法是什么?  

提前感谢。

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

    您好!

    当您将数据编程为 flash1时、是否启用了 ECC 生成?

    fapi_issueProgrammingCommand ((..、..、..、..、..、..、..、 Fapi_AutoEccGeneration);

    ECC 在64位对齐地址上计算得出。

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

    除了使用闪存 API 之外、CCS 或 uniflash 还可用于将2MB 文件加载到 Flash1。

    通常、组擦除时间为300ms、编程2MB 需要5.3秒(第一个25周期)、最坏情况下需要10.6秒(第一个25周期后)。

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

    是的、在发出编程命令时启用 AutoEccGeneration。

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

    您是否使用了正常模式、并且地址与32位或64位边界对齐?  

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

    是的、这是正常模式、我尝试读取256字节的数据。 不过,这又引起了我的另一个问题。

    我正在尝试将另一个 MCU 的映像存储在 LC4320的闪存中。 我通过以太网获取数据、并 不断向 闪存写入数据包有效负载。 我注意到、当有效载荷大小不是32字节的倍数时 、写入操作也会失败、但连续的试验会失败。 下面是一个示例场景;

    写入512字节-->确定

    写入512字节-->确定

    写入511字节-->确定

    写入512字节--> 错误

    我可以通过将 UDP 封包大小限制为32的倍数和最后一个不必是32的倍数的数据包来处理此问题、但我希望在系统的 LC4357端处理此问题。  我该怎么做?

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

    您好、Alperen、

    闪存组宽度为256位(32字节)。  闪存 API 中数据缓冲区的长度(Fapi_issueProgrammingCommand())不能超过组宽度:

    IF (SizeInBytes < 32)
      字节= SizeInBytes;
    其他
      字节= 32;

    511字节应该正常。 最后一次写入的字节数为31字节。  

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

    可以、但写入不是32个数据的倍数的数据后、下一次尝试失败。 它会卡在下面的行上。

    while(FAPI_GET_FSM_STATUS != Fapi_Status_Success);

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

    最后一次写入是否与32位地址对齐?  

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

    否、我将内存指针 wrt 增加到写入的字节数。 因此、在写入31位后、它不再是32的倍数。
    PS:将目标地址与32位对齐时、没有问题、谢谢。 是否可以删除此对齐限制? 我想存储我的图像、数据之间没有任何间隙。 如果无法消除这 种限制、我可以尝试不同的方法来克服这种限制。

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

     起始地址加上数据缓冲器长度不能超过组数据宽度(对于 TMS570LC43x 为32字节)。 例如、不允许在从地址0x31开始的32字节宽的组上对4个字节进行编程。

    在单次操作中、闪存状态机实际上可以对32字节数据和4字节 ECC 进行编程。 它将加快编程速度。