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.

[参考译文] AM2634:QSPI 闪存地址在16位寻址周围回绕

Guru**** 2024750 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/1447349/am2634-qspi-flash-address-wrapping-around-over-16-bit-addressing

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

工具与软件:

你(们)好

使用的闪存是 LP Devboard - 16MB S25FL128SAGNFI000、与 TI 提供的闪存示例相同的 syscfg。 寻址模式4字节不启用。

我注意到的是、如果我将某些 内容写入地址0x00040000、我可以从0x00040000中读取它、但在0x00840000中将出现相同的内容。
以特定模式写入、并且 0x00040000 与0x00840000相同、 但  使用 Flash_write TI 驱动程序调用仅写入0x00040000。

两个地址都低于16M、这种回绕不应发生。

遵循调用 Flash_READ 的代码、该代码到达 QSPI_spiMemMapReadDma、映射的地址为 0x60840000、似乎正确。

QSPI_edmaTransfer/edmaParam.srcAddr 仍为 0x60840000。

地址<= 16位时可以正常工作、写入那里的映像也可以、我可以从给定的地址使用 TI SBL 示例进行引导。
问题从24位开始(理论上不应该、3字节寻址在 0x00840000处也应有效)。

代码本身来自引导加载程序和 QSPI 闪存示例、syscfg 没有任何改变。

 由于我不知道 DMA 传输、是否存在任何16位还是24位限制?

编辑:仔细检查它甚至不是16位、因为0x00040000已经超过16位、但是问题是24位地址的较高位(0x00840000)。

EDIT2:我将当前日期时间作为字符串、并使用特殊字符 Seq 来标识闪存中的条目-我使用了 UNIFLASH 读取、但似乎有重复的数据:

0x60040000 F8AD1BC2 0000FFFF 30320001 32313432 38303530 36333935
0x60840000 F8AD1BC2 0000FFFF 30320001 32313432 38303530 36333935

0x60240000 F8AD1BC2 0000FFFF 30320003 32313432 39303530 38333430
0x60A40000 F8AD1BC2 0000FFFF 30320003 32313432 39303530 38333430

0x60340000 F8AD1BC2 0000FFFF 30320002 32313432 38303530 38323135
0x60B40000 F8AD1BC2 0000FFFF 30320002 32313432 38303530 38323135

但同一日期不可能出现两次(日期始终更改、并且我从未触摸过闪存的上部-最后一个标头被写入0x60340000)。

问题是24位地址(0x800000)的最后一位。  

此致

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

    我确实对 LP 开发板和 uniflash (不涉及客户代码)重复了测试、结果是相同的。

    我创建了一个具有特定模式的小文件:

    将其加载于:

    读取 Uniflash 存储器:

    0x60040000 33323130 37363534 61303938 65646362 00000066 00000000 00000000 00000000
    0x60840000 33323130 37363534 61303938 65646362 00000066 00000000 00000000 00000000

     两个地址上都有我的"01234567890abcdef"字符串模式(0x33323130 ='3210')

    由于16M 闪存不需要8M 分页和扩展寻址、因此我无法解释为什么会发生这种情况。

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

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

    尊敬的 Barna Sentri:


    很抱歉耽误你的时间、

    有关对 QSPI 中超过8MB 的地址进行存储器映射访问的硬件勘误表。 从 SoC 互连到 QSPI 控制器的地址线为23。 因此、在存储器映射模式下、这会将 QSPI 闪存的使用限制为每个芯片选择8MB。  尽管在配置模式(/间接访问模式)下、闪存可以存取全部4GB。



    请在 https://www.ti.com/lit/er/sprz488e/sprz488e.pdf 中查找勘误详情 

    谢谢。此致、
    Rijohn

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

    你(们)好

    因此、对于需要快速数据速率(映射模式 DMA)的 SBL、我们通常采用8MB。 我对吗?

    配置模式有什么含义?  

    是否 可以在映射模式下使用当前闪存驱动器来使用前8MB 以 SBL、并使用固件(不需要访问前8MB)将前8M 用于通过不同的驱动器进行存储(配置数据)? SDK 是否允许此操作? 如果是、是否有任何可用的示例或至少有可用的配置模式驱动程序?  

    此致、
    巴纳

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

    尊敬的 Bama:

    CONFIG 模式用于连接到串行 SPI 器件。

    您可以在 TRM 一节:13.3.4.4.1 QSPI 方框图中了解更多这方面的信息

    此外、我们的 SDK API 允许您在模式之间切换:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否 可以在映射模式下使用当前闪存驱动程序和固件(无需访问前8MB)将前8MB 用于存储(配置数据)与另一个驱动器配合使用? SDK 是否允许此操作? 如果是、是否有任何可用的示例或至少有可用的配置模式驱动程序?  [报价]

    这是可能的。 但我们目前不支持配置模式的读写 API。 计划在未来的 SDK 版本中使用。 您目前将需要在应用中执行此操作。 它将类似于 SPI 命令、规定写入/读取位置、然后是存储器以及数据和大小。 TRM 第 13.3.4.4.1.3节 SPI 控制接口中介绍了此顺序