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.

[参考译文] 我是否应该在使用不同的 QSPI 闪存时修改源代码

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/579606/should-i-modify-source-code-when-using-different-qspi-flash

主题中讨论的其他器件:J6EVM5777、DRA742

大家好、我将使用 Jacinto 6、GLSDK 7.04.03。

如果我们在 DRA742-EVM 577G-02-21-00 板上将 eMMC 替换为"N25Q064A13E12H0F"、我是否应该修改任何代码?

正如我在 dra7-EVM.dts 文件中看到的、有关 QSPI 的描述如下所示

&QSPI{            

状态="正常";

 SPI-max-frequency =<64000000>;
 m25p80@0{
  兼容="s25fl256s1";
  SPI-max-frequency =<64000000>;

 compatible 的值是原始 QSPI 闪存、因此我认为我应该在这里修改、对吧?

此外、我还应该修改什么地方吗?

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

    您好、Pavel、

    晚餐结束后,系统日志停止,下面是 REST 日志=>e2e.ti.com/.../QSPI_5F00_BOOT_2800_the-rest-msg_2900_.txt   

    此致、

    肖恩

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

    我在您的日志中看到您有:

    "SPL:有效载荷图像:u-Bo 负载 addr:0x807fffc0大小:488872"

    u-boot.img 的大小是多少? 它是否与该尺寸488872匹配?

    在某些时候(在8574行)、QSPI 模块开始从闪存中只读取00、我怀疑这是问题所在。 您能否对 QSPI u-boot.img 进行十六进制转储并将其与 SD 卡 u-boot.img 的十六进制转储进行比较? 我怀疑 QSPI 闪存中 u-boot.img 中的内容不正确。

    您是否还可以在调试模式(启用调试)下从 QSPI 闪存引导一些能够成功引导的电路板(TI EVM 或1GB 电路板)。 我想将此引导日志与工作板的某些引导日志进行比较(在 QSPI 引导模式下)。

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您还可以运行一些内存测试来验证 DDR3内存是否正确:

    u-boot/doc/README.memory-test
    u-boot/common/memsize.c
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Pavel、

    Pavel Bodev 说:
    您的 u-boot.img 大小是多少? 它是否与此大小488872匹配?

    我的 u-boot.img 大小为488.9 KB、它应该与488872匹配。

    [引用 user="Pavel Bodev"]我怀疑 QSPI 闪存中 u-boot.img 中的内容不正确。[/quot]

    是的、您感到很满足。 转储 QSPI 闪存内容后、我发现地址0xFF8之前的一切都正常、之后地址0xFF8的内容为0、0xFF9 ~ 0xFFB 之间的内容正常、但在0xFFB 之后、其余内容全部为0。

    然后我尝试擦除闪存、之后我之前提到的地址(0xFF8、0xFFC~)仍然包含内容0。 部分日志=>e2e.ti.com/.../QSPI_5F00_content.txt   

    我尝试不同的扇区(MLO 和 u-boot.img 的区域)、这两种情况都相同、只有0xFF8之前的地址是可以的。 此 QSPI 闪存是否存在一些配置错误?

    P.S. 我们定制板中的闪存为 STMicro MT25QL128 (但在"SF 探头"之后、系统会将其识别为 N25Q128闪存、可能它们共享相同的 ID)

    此致、

    肖恩

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

    更新当前状态。
    如前所述、我发现闪存数据在某些段中已满0 (在地址0xFFB 之后)。
    因此、我尝试读取 MTD 驱动程序内部的闪存数据。 我通过"SPI_FLASH_READ_COMMON ()"函数进行读取、该函数位于 SF_ops.c
    数据就是我写入闪存的数据(而不是0)。
    基于此结果、我认为"写入和擦除"操作正常、但"读取"操作有问题。 这就是 QSPI 引导失败的原因、因为系统读取了错误的数据。
    你有什么建议让我尝试吗?

    P.S. 目前、我禁用"CONFIG_TI_SPI_MMAP"。 因为如果不禁用它、我从闪存读取的数据将会异常。(内容将具有大量0xCC 或0xCD)。

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

    [引用用户="Shawn LIN]"之前讨论过、我发现闪存数据在某些部分(在地址0xFFB 之后)已满0。 [/报价]

    [引用 USER="Shawn LIN]P.S. 目前、我禁用"CONFIG_TI_SPI_MMAP"。 因为如果不禁用它、我从闪存读取的数据将会异常。(内容将具有大量0xCC 或0xCD)。

    我认为您达到了以下 QSPI IP 限制:

    processors.wiki.ti.com/.../Linux_Core_QSPI_User's_Guide

    QSPI IP 的设计方式是、在4096字传输后、芯片选择自动失效。 因此、无法使用(单/双/四)位读取模式功能在单片选择中读取整个闪存。 而串行闪存 Linux 框架和闪存规范要求在单个芯片选择中使用单个读取命令进行整个读取。 当 QSPI 在存储器映射模式下用于读取时、此限制不适用。 默认情况下、QSPI 驱动器使用存储器映射读取。


    我建议您切换到 MMAP 模式、并调试数据异常的原因。

    另一种方法是尝试从用户空间(而不是从 u-boot)刷写 QSPI、因此您不必使用"SF read" u-boot 命令。

    您还可以测试您的 QSPI 闪存硬件设计是否正确。 为此、您可以从 MMC/SD 卡引导并使用 MTD-utils 和/或 dd 命令、如以下 wiki 中所述:

    processors.wiki.ti.com/.../Linux_Core_QSPI_User's_Guide

    此致、
    帕维尔

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

    您好、Pavel、

    [引用 user="Pavel Bodev"]我建议您切换到 MMAP 模式,并调试数据异常的原因。

    我已经在我们的两个定制板上启用 MMAP (一个使用 S25FL256、另一个使用 MT25QL128)。 我尝试擦除长度为0x10000的闪存、然后读取内容。 它在 S25FL256下工作正常、但在 MT25QL128下失败。

    下面是S25FL256=>e2e.ti.com/.../QSPI_5F00_S25F.txt   和MT25QL128=>e2e.ti.com/.../QSPI_5F00_MT25QL128.txt 的测试日志   

    [引用 user="Pavel Bodev"]另一种方法是尝试从用户空间(而不是从 u-boot 刷写 QSPI),因此不必使用"SF read" u-boot 命令。

    我也尝试一下、但也失败了。 使用"SF write"命令将数据闪存到 QSPI 是可以的、但问题应该是"read"。 如果我尝试使用 QSPI 引导、那么我应该尝试修复"SF Read"问题。

    S25FL256和 MT25QL128的测试结果不同、因此问题是否可能在于命令格式存在差异?(例如、 命令 ID、虚拟字节数量等)

    此致、

    肖恩

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

    [引用用户="Shawn LIN"]

    我已经在我们的两个定制板上启用 MMAP (一个使用 S25FL256、另一个使用 MT25QL128)。 我尝试擦除长度为0x10000的闪存、然后读取内容。 它在 S25FL256下工作正常、但在 MT25QL128下失败。

    下面是 S25FL256=>(请访问站点查看此文件)   和 MT25QL128=>(请访问站点查看此文件)的测试日志。    

    [/报价]

    您可能遇到硬件问题。 在您的 MT25QL128定制板上、是否可以尝试用 S25FL256闪存替换 MT25QL128闪存并检查该板是否可以正常工作?

    您能否检查在 u-boot 中禁用 CONFIG_TI_EDMA 时(对于 S25FL256和 MT25QL128)的结果是什么?

    此外、您还可以将 u-boot 与最新的 QSPI u-boot 驱动程序进行比较、以查看是否实现了与 Micron QSPI 四路读取相关的一些新功能。


    {PSDKLA 3.02}/board-support/u-boot-2016.05/drivers/spi/ti_qspi.c

    [引用 user="Shawn LIN] S25FL256和 MT25QL128的测试结果不同、因此问题是否可能在于命令格式存在差异?(例如、 命令 ID、虚拟字节数...等)[/QUERP]

    在尝试测试之前、您是否在 Linux 内核中移植了 MT25QL128? 您可以共享测试日志吗?

    S25FL256和 MT25QL128是非 TI 器件。 为了获得完全不同、您应该比较数据表。 您还可以在 u-boot-2014.07中与 Micron (MT25QL128供应商)核实其 QSPI 闪存是否支持四路读取

    此致、
    帕维尔

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

    在我比较 S25FL256和 MT25QL127的数据表后、我发现应该在 ti_QSPI.c 中修改一些设置、以便让四通道成功读取。
    现在、我可以从 QSPI (MT25QL127)引导。 感谢您的帮助。

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

    最近、我们将 BSP 版本从7.04.00.03更新为3.02.00.03。
    最初、我在 u-boot 阶段修复了"SF Read"问题、但现在、在新的 BSP 版本下、SF Read 再次失败。
    我已经将我的解决方案放在新的 BSP 版本上、但是从闪存读回的数据仍然不正确。
    我上次解决"SF Read"问题是修改 u-boot/drivers/spi/ti-qspi.c (我修改 QSPI_CMD_Read_Quad 和 QSPI_SETUP0_NUM_A_bytes 定义值、因为 Spanion 和 STMicro 之间的值不同)

    对于具有 QSPI 功能的新 BSP 版本、是否有任何地方需要注意?

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

    我看到您已打开有关新问题的新 e2e 线程。 这个新问题将在这个新的 e2e 线程上得到解决。

    e2e.ti.com/.../619953

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

    您好、Pavel、

    好的、谢谢

    此致、

    肖恩