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.

[参考译文] ospi 闪存写入

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1327286/ospi-flash-write

尊敬的 Aakash:

我又恢复了对闪存的写入问题。

您建议使用其他 API 来写入闪存、因此我使用了 TI SDK 中的示例、该示例是有效的。

TI 的示例  ospi_flash_io -  工作正常我可以擦除写入和读取闪存。

当我在项目中执行相同的代码时-只执行擦除和读取操作。 写入失败时出现的错误。

它在 ospi_v0.c :1464之后失败

1464  ofi_writeFifoData (attrs->dataBaseAddr、pSrc、wrBytes);

1465

1466  pSrc += wrBytes;
1467  remaingSize–= wrBytes;
1468  

1469

1470  if (wrFlag == 0U && OSPI_waitIndWriteComplete (preg)!= 0)
1471  {
1472  wrFlag = 1U;
1473  STATUS =-1;
1474  

OSPI_waitIndWriteComplete (preg)返回-1;

请告知如何继续?

谢谢。

此致、

Eli

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

    尊敬的 

    您的项目中是否使用了  ospi_flash_io  或者您是否正在使用 OSPI API?

    此致、
    Aakash

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

    尊敬的 Aakash:

    以下是两个项目中的代码:

    int main (空)

    {

    #define APP_OSPI_FLASH_OFFSET_BASE (0x600000U)
    #define APP_OSPI_DATA_SIZE (256)  

    system_init();
    Board_init();

    drivers_open();
    Board_driversOpen();

    int32_t status = SystemP_Success;
    uint8_t gOspiTxBuf[APP_OSPI_DATA_SIZE]={0};
    uint32_t offset = APP_OSPI_FLASH_OFFSET_BASE;

    STATUS = Flash_WRITE (gFlashHandle[CONFIG_FLASH0]、OFFSET、gOspiTxBuf、APP_OSPI_DATA_SIZE);

    返回0;

    }//main

    在该示例中、我的代码中的所有工作 在 SDK 中  1464  ofi_writeFifoData (attrs->dataBaseAddr、pSrc、wrBytes);

    什么地方出错了? 如何进行?

    谢谢。

    此致、

    Eli

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

    尊敬的 

    为了安全起见,你可以在任何后续"写入"之前尝试"擦除"操作吗?

    此致、
    Aakash

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

    尊敬的 Aakash:

    我做了擦除和没有擦除,读取和没有读取。

    仍然 clang 工程始终成功写入 - status=0;GCC 工程始终失败写入- status=-1

    请帮助我 进一步调试。

    谢谢。

    此致、

    Eli

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

    尊敬的 Eli:

    这听起来像是一个编译器问题。 您之前应该已经提到过、我们本来可以更快地对其进行调试。

    让我在一天之内回来提出一个解决方案。

    此致、
    Aakash

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

    尊敬的 Aakash:

    谢谢!

    此致、

    Eli

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

    尊敬的 Eli:

    您是否可以尝试以下步骤并检查它是否有效:

    1) 1)尝试将优化标志级别降低为-O1或-O0、并重新编译示例

    2) 2)检查写入操作中使用的基地址和偏移量是否正确

    您使用的是哪个版本的 MCU+SDK?

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

    您好!

    我已 在两个项目上将优化设置为-O0。

    我正在两个项目上使用 mcu_plus_sdk_am243x_08_06_00_43。

    两个项目上的相同代码(据我所见)  

    在 GCC 编译的工程中->问题发生在第1386行:   int32_t OSPI_writeInDirect (OSPI_Handle handle、OSPI_Transaction * Trans) 查找

    1408:const csl_ospi_flash_cfgRegs *preg=(const csl_ospi_flash_cfgRegs *) attrs->baseAddr;   <-- baseAddr=0x0FC40000

    1464:ofi_writeFifoData (attrs->dataBaseAddr、pSrc、wrBytes);  <--failures    <--  atts->dataBaseAddr=0x60000000

    我有两个项目似乎有 相同的代码,相同的 SDK ,相同的 syscfg。

    项目在同一电路板上运行-同一闪存器件

    首次编译时使用 克朗 -所有工作擦除写读

    第二次编译时使用 gcc -擦除读  写-失败

      如果基地址或偏移不正确,则 CLANG 可能无法正常工作。

    我可以检查什么,以找到差异或为什么 GCC 项目无法写入?

    有什么解决方法吗?

    谢谢。

    Eli

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

    尊敬的 

    您是否可以尝试仅写入4字节的数据? 这是否起作用? 此外、请与我们共享该项目、以便我们能够重现该问题。

    此致、
    Aakash

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

    尊敬的 Aakash:

    我尝试了1、2和4字节的数据-结果相同。

    我正在使用 GCC 编译-所以你需要我的所有文件,包括 SDK 与它的 makefile -正确吗?

    谢谢。

    此致、

    Eli  

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

    尊敬的 Aakash:

     闪存问题发生在我们的电路板上-而不是 EVM 上!

    谢谢。

    此致、

    Eli

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

    尊敬的 Aakash:

    我将尝试附加我的项目(7zipped)-我看不到它附件-可能项目容量过大、140KB

    谢谢。

    此致、

    Eli

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

    您好、Eli

    应该可以附加一个140KB 的项目、只需尝试拖放即可查看它是否起作用。

    如果没有、请直接通过电子邮件分享。

    此致

    卡兰

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

    Karan、您好!

    我曾尝试过通过电子邮件拖放、但似乎太大了。

    我会问我的老板如何发送它。

    基本上是 SDK FLASH_IO 示例、其中包含 gd25q64e 闪存器件的 json 文件(1s-1s-4s 配置)

    它可以与 clang 配合使用,但只有写入函数在 GCC 中失败。

    它发生在我的电路板上-我还不知道 EVM 上发生了什么- 可能是下一步。

    谢谢。

    此致、

    Eli

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

    尊敬的 Eli:

    我们计划了一个针对2024年03月01日 的调试会话。 让我们尝试 确定 此处的问题。

    此致、
    Aakash

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

    3/1调试会议的注意事项

    Aakash, Anand, Sanmveg. 来自 TI 的 Vaibhav 和 Karan 加入了调试调用以支持该问题。 根本原因不是 OSPI 存储器空间未按严格顺序从 R5F MPIU 映射。 在将内存属性更改为严格排序后、事情开始在 Eli 的设置中工作。

    客户现已解除阻止。

    开放性问题: 为什么同样的设置适用于 TI ARM CLANG。

    此致

    卡兰