主题中讨论的其他器件:LP-AM243、 SysConfig
工具与软件:
您好!
目前我面临的问题是、 如果启用了 PHY 模式和 memcpy 优化(--use_memcpy=fast)、则通过 octo (四路) SPI 访问 LP-AM243板上的闪存失败(一些字节被错误读取为0x00)。
重现步骤:
- 使用最新 SDK "mcu_plus_sdk_am243x_09_02_01_05"和最新编译器"ti-cgt-armllvm_3.2.Strs"。
- 导入示例"ospi_flash_io_am243x-lp_r5fss0-0_nortos_ti-arm-clang"。
- 在工程设置中设置链接器标志--use_memcpy=fast。 "Project"->"Properties"->"Build"->"Arm Linker"->"Advanced Options"->"Linker Optimization"。 为 --use_memcpy 选择 fast。
- 然后、通过执行以下步骤之一调整示例项目:
- 在用于闪存/OSPI 的 SYSCFG 工具中禁用 DMA 支持;
- 或将 ospi_flash_io.c 中的 APP_OSPI_DATA_SIZE 宏更改为512 (小于1024的单位)。
- 需要上述两个步骤中的一个、以便 闪存 API 的 Flash_READ ()函数最终将使用 memcpy ()、否则(对于大于1024字节的复制操作)将使用 DMA、DMA 正常运行。
- 在用于闪存/OSPI 的 SYSCFG 工具中禁用 DMA 支持;
- 编译示例(我使用了调试构建)并将其与芯片上的调试器加载到芯片上、或将其刷写、无关紧要。
- 该示例将失败、显示"error:ospi_flash_io_compare_buffers:153:OSPI read data mismatch!!"
下面的屏幕截图说明了出现的问题:
我们只是跳过了 memcpy 指令。 pSrc (闪存内的地址;闪存映射至0x60000000)应复制到 pDst。 我们在右上角看到 pSrc[7]=7、但 pDst[7]=0 (我选择仅显示前10个值、因此一切都可以放入一个屏幕、之后也会出现错误)。 因此、优化后的 memcpy 与闪存地址和启用闪存的 PHY 模式组合似乎存在问题。 如果禁用 PHY 模式、也会正常工作。
最初我偶然发现了这一点,因为 EtherCAT Beckhoff 示例 默认设置了--use_memcpy=fast 标志。 它也默认禁用了 PHY 模式,但如果你启用它(和正确的时钟频率设置,否则 Flash_open()将会失败),闪存读取开始失败。
希望我提供了足够的信息。 如果有任何不清楚的地方、可以随时提问。 感谢你的帮助。
此致、
Martin