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.

[参考译文] AM625:SPI NOR 闪存驱动程序

Guru**** 2531270 points
Other Parts Discussed in Thread: SK-AM62-LP, SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1559994/am625-spi-nor-flash-driver

器件型号:AM625
主题中讨论的其他器件:SK-AM62-LPSysConfig

工具/软件:

您好:

我的 SDK 版本是  10.01.10.04。

我尝试 在电路板上支持 SPI NOR 闪存 ds25m4cb、然后添加了驱动程序。

当 I TEST 读取时、我使用逻辑分析仪获取信号。 对于每个块 0x10000、我可以得到更多 36 字节、72 个 clk(freq 是 20M)。

地址模式为 4 字节地址。读取命令为 0xEC。

我们检查了 DMA、它向驱动程序发送 0x10000 字节并丢弃 36 个字节。 但对于下一个块 、当我读取它时、偏移量将增加 36、因此我将丢失 36 字节的数据。

为什么它发送更多 36 字节的数据?

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

    亲爱的汤姆。

    您是否会提供有关该问题的更多详细信息?

    1.哪种 SDK? MCU_PLUS SDK 还是 Linux SDK?

    2.您向哪个驱动程序报告问题?  MCU_PLUS SDK 还是 Linux SDK?

    3、哪些 API 和相应的输入参数?

    4.如有可能,请分享您为新闪存所做的代码更改。

    5.请澄清错误信号,特别是 EN。 该引脚是 EN? 最好提供逻辑分析仪捕获的波形并加以介绍。

    非常感谢!

    Yong

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

    尊敬的 Yong:

    e2e.ti.com/.../flash_5F00_driver.zip

    组成部分。

    我们使用 flash_torture 进行测试。 FLASH_torture -c 56 -r /dev/mtd1

    如图所示、 我们读作 0x10000。  范围为 0x80000-0x8FFFF。

    完成读取后、仍然得到 36 个字节。

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

    亲爱的汤姆

    感谢您提供更多详细信息。

    配备 OSPI 闪存的 SK-AM62-LP 上没有类似的问题。

    请通过以下方式帮助办理登机手续。

    1.在 CS/CLK/D0/D1/...上捕获波形。 来进行比较。

    2.请帮助转储您电路板上的 OSPI0 控制器寄存器和 SK-AM62-LP EVM 以进行比较。

    TRM:

    ...

    非常感谢!

    Yong

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

    您好、Tom、
    出于测试目的、我们是否可以在运行闪存读取测试之前将 FSAS_SYSCONFIG[7]=DISXIP 设置为“1"?“?
    请注意、FSAS_SysConfig 寄存器 addr 为 0x0FC10004
    此致、
    - Hong

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

    您好、Tom、
    通过运行“flash_torture..."从“从快速测试中 在调试调用期间在目标板上、将 DISXIP 设置为“1"后“后未观察到问题。
    让我们运行更多测试、并随时更新测试结果。
    您将在 AM62x TRM 中的<14.8.4.2.2.1 FSAS_SysConfig Register>中找到有关 FSAS_SysConfig[7]=DISXIP 的更多详细信息。
    此致、
    - Hong

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

    在今天上午的会议中同步状态。

    falsh_torture 的初始测试效果很好。 请通过修改验证更多信息、并在稍后向我们提供状态。

    还请帮助检查是否可以向我们提供 OSPI 闪存规范。

    非常感谢!

    Yong

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

    我的 SDK 版本是  10.01.10.04。

    我们使用 jffs2 来装载一些 MTD、但在装载时、它总是显示 CRC 错误。

    测试命令为:

       MTD_debug 擦除/dev/mtd1 0x0 0x300000

       mount -t jffs2 /dev/mtd1 /mnt

       echo “1234">“>/mnt/test.txt

       umount /mnt

       mount -t jffs2 /dev/mtd1 /mnt

    当 I dmesg 时、它显示我 CRC 错误:节点标头 CRC 在 0x360080 (FFFF、FFFF、fff、FFFF) 失败

    代码位于 readinode.c jffs2_get_inode_nodes 中、它执行 U.HDR_CRC 检查。

    然后、我在 jffs2 CRC 校验和 cqspi dma 中添加一些调试日志

    我发现当它读取某个位置时、DMA 完成后的数据为 0xFF。

    我还使用逻辑分析仪捕获数据。 数据或闪存发送是正确的、不是 0xFF。  我将数据转储到闪存上的同一偏移量、也不能转储 0xFF

    因此,在闪存上的数据和发送到 soc 是正确的,但有时在 DMA 传输后,在 buf 中的数据将是 0xFF。

     

    如果我再次添加 Read、buf 的 DMA 传输将获得正确的数据。

    我上传的日志是我添加的日志、显示了执行  U.HDR_CRC 检查时我添加两次读取的日志。

    但您可以看到、当它读取 0x330080 fisrt 时间时、jffs2 缓冲区中的数据为 0xFF。 我还转储缓冲区完成 DMA 传输中的数据为 0xFF。

    但当再次读取时,它会得到正确的数据。

    内核中 jffs2 的配置如下:
    CONFIG_JFFS2_FS=y
    CONFIG_JFFS2_FS_DEBUG=0
    未设置#CONFIG_JFFS2_FS_WRITEBUFFER

    未设置#CONFIG_JFFS2_FS_WBUF_VERIFY

    未设置#CONFIG_JFFS2_SUMMARY

    CONFIG_JFFS2_FS_xattr=y

    CONFIG_JFFS2_COMPENSATION_OPTIONS = y

    CONFIG_JFFS2_ZLIB=y

    CONFIG_JFFS2_RTIME=y

    您能帮助我们检查这些配置是否导致了问题吗?

    此外、在 DTS 中、我在闪存的节点中找到了一个值@0

    CDN、;延迟=<2>μ s

    此值是否会导致问题?

    或者是否需要在某些寄存器中设置任何其他设置?

    Thanks.e2e.ti.com/.../3618.jffs2_5F00_error.zip

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

    您好、Tom、
    1/。 在运行显示 CRC 错误的最新 JFFS2 测试时、我们是否已将 FSAS_SysConfig[7]=DISXIP 设置为“1"?“?
    2/。 正如我们昨天在电话中所讨论的、运行“flash_tortal..."后“后的压力测试结果是什么 将 FSAS_SYSCONFIG[7]=DISXIP 设置为“1"后“后、
    此致、
    - Hong

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

    尊敬的 Hong:

    是的、我们已将  FSA_SysConfig[7]=DISXIP 设置为“1",“,但、但仍然存在 CRC 错误

    2.run flash_torture 测试、似乎未失败。 但正如  逻辑分析仪所示、当读取到 1 个块时、它仍然发送更多的 4 字节数据。 但 FLASH_TROTAL 测试运行正常

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

    您好、Tom、

    2.run flash_torture test,它似乎没有失败。 但正如  逻辑分析仪所示、当读取到 1 个块时、它仍然发送更多的 4 字节数据。 但 flash_tortal 测试运行正常

    它看起来像串行或非读取/写入/擦除等... 将 FSAS_sysconfig[7]=DISXIP 设置为“1"(“(这(这会禁用 DMA 预取)时可以正常工作。

    1.yes、我们已将  FSAS_SysConfig[7]=DISXIP 设置为“1",“,但、但仍然存在 CRC 错误

    我建议交叉检查 JFFS2 文件系统创建/操作等...其中 JFFS2 由社区维护。 众所周知、UBI/UBIFS 在 TI Linux SDK 中进行了验证。

    1/。 我们是否使用“sf..."测试“测试了串行 NOR @u-boot 级别 CMD、例如“SF test...“?
    2/。  我附加了一个内核补丁以禁用 OSPI 的 DMA、以防您想在不使用 DMA 的情况下进行测试。

    diff --git a/drivers/spi/spi-cadence-quadspi.c b/drivers/spi/spi-cadence-quadspi.c
    index 33c60f719dc2..20d5d6bf6c3f 100644
    --- a/drivers/spi/spi-cadence-quadspi.c
    +++ b/drivers/spi/spi-cadence-quadspi.c
    @@ -3711,7 +3711,7 @@ static const struct cqspi_driver_platdata k2g_qspi = {
     
     static const struct cqspi_driver_platdata am654_ospi = {
            .hwcaps_mask = CQSPI_SUPPORTS_OCTAL,
    -       .quirks = CQSPI_NEEDS_WR_DELAY,
    +       .quirks = CQSPI_NEEDS_WR_DELAY | CQSPI_DISABLE_DAC_MODE,
     }; 

    此致、
    - Hong

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

    我们添加两次读取以获得正确的数据。
    但另一个问题是、如果我们从一个地址读取的数据少于 8 个字节、那么我们得到的数据全部为 0xFF

    我们使用  逻辑分析仪、发现如果 SPI 读取一个地址、长度 小于 8 个字节、发送到闪存的地址是 0xEEEEEEEE、地址无效

    因此数据为 0xFF

    我已经尝试了 禁用 DMA 的 pacth、但它仍然是 cat 0xFF

    读取差异如下:

    如果 len < 8 个字节、则表示 op->addr.nbytes < 8 个字节。 它运行 cqspi_command_read

    如果 len >= 8 个字节、则表示 op->addr.nbytes >= 8 个字节、它将运行 cqspi_read

    现在:

    在 jffs2_read 中执行 mtd_read 时、我们添加两次 read

    删除 op->data.nbytes <= CQSPI_Stig_DATA_LEN_MAX、让其运行 cqspi_read

    jffs2 可以正常工作。

    但我们想知道原因吗? 您能帮我们分析一下吗?

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

    您好、Tom、
    请查看此内核提交的关于如何为另一个硬件平台禁用 Stig 模式的信息。
    https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/commit/drivers/spi/spi-cadence-quadspi.c?h=11.01.12&id=4b1ccdfe589e478b7c8542bd43f3777b11ea7257
    我建议咨询您的 SPI-NOR 闪存供应商、如果您需要添加禁用 Stig 模式的限制条件、如上所述、请在您的设置中完成上述操作。
    此致、
    - Hong

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

    在提交过程中、 在结构体 socfpga_qspi 中添加了关于 cqsp_disable_stig_mode 的标志  

    我认为 没有使用 socfpga_qspi、我是否应该在 am654_ospi 中添加此标志?

    我 在 am654_ospi 中添加此提交并添加了 CSQSPI_DISABLE_Stig_mode、jffs2 可以安装而不会出现 CRC 错误。

    jffs2 中的数据可以正确读取。

    这是我们更改的补丁。正如 Yong 所建议的、您能帮我们检查一下吗?

    e2e.ti.com/.../disable_5F00_STIG_5F00_mode.zip

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

    尊敬的 Hong:

    另一个问题是:

    我们已将  FSAS_SysConfig[7]=DISXIP 设置为“1" ,“,但、但在完成读取时仍有 4 个字节、但 FLASH_TROTAL 测试没有错误。

    我们想确认为什么还有更多 4 个字节?

    为什么我们需要在 jffs2 中执行 mtd_read 两次读取? 第一次从 DMA 读取时、数据全部是 0xFF?

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

    尊敬的 Hong:

    我们已经咨询过闪存供应商、他们认为闪存是从器件、 不管是否禁用 Stig 模式。

    此外、在数据 逻辑分析仪获取数据时、闪存会发送正确的数据。

    他们认为是否需要禁用 Stig 模式应由 SOC 进行检查

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

    您好、Tom、

    [引述 userid=“658153" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1559994/am625-spi-nor-flash-driver/6016848

    我 在 am654_ospi 中添加此提交并添加了 CSQSPI_DISABLE_Stig_mode、jffs2 可以安装而不会出现 CRC 错误。

    jffs2 中的数据可以正确读取。

    这是我们更改的补丁。正如 Yong 所建议的、您能帮我们检查一下吗?

    [/报价]

    是的、禁用 SITG 模式时的修补程序对我来说很好、很高兴知道该修补程序可以帮助我...
    此致、
    - Hong

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

    您好 Hong:

    您能帮助我们查看另一个问题吗?

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

    您好、Tom、

    我们添加并测试了三项更改:
    - FSAS_SYSCONFIG[7]=DISXIP 设为“1"以“以禁用 DMA 预取
    -内核驱动程序补丁,用于在不使用 DMA 的情况下禁用 OSPI 的 DMA
    -用于禁用 SITG 模式的内核驱动程序修补程序

    对于这些更改、运行“flash_tortor"的“的串行 NOR 压力测试无错误地工作。
    我们现在还有什么异常观察?

    此致、
    - Hong

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

    您好 Hong:

    现在、我们添加了三处更改。

    闪光酷刑测试正常。

    但我们需要检查一个问题。

    我们使用  逻辑分析仪获取信号。如果闪存进行擦除和写入、 大小都是 64K (0x10000)

    总读取大小也是 64K。但它分为两部分。第一部分是 516 字节(0x204)、第二部分是 65020 字节 (0xFDFB)

    您能帮助我们 解释一下吗?

    e2e.ti.com/.../flash_5F00_touture_5F00_read.zip

    -内核驱动程序补丁,用于在不使用 DMA 的情况下禁用 OSPI 的 DMA

    该补丁会禁用 DMA 吗?

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

    您好、Tom、

    [引述 userid=“658153" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1559994/am625-spi-nor-flash-driver/6024292

    闪光酷刑测试正常。

    但我们需要检查一个问题。

    我们使用  逻辑分析仪获取信号。如果闪存进行擦除和写入、 大小都是 64K (0x10000)

    总读取大小也是 64K。但它分为两部分。第一部分是 516 字节(0x204)、第二部分是 65020 字节 (0xFDFB)

    您能帮助我们 解释一下吗?

    [/报价]

    闪光酷刑测试通过、对吗?
    此外、闪光酷刑是社区维护的实用工具、社区将更好地澄清这个问题。

    [引述 userid=“658153" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1559994/am625-spi-nor-flash-driver/6024292

    -内核驱动程序补丁,用于在不使用 DMA 的情况下禁用 OSPI 的 DMA

    该补丁会禁用 DMA 吗?

    [/报价]

    是的、如果您想在不使用 DMA 的情况下对其进行测试、目的是禁用 DMA。

    此致、
    - Hong

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

    尊敬的 Hong:

    闪光酷刑测试通过、对吗?

    -是的。

    但不仅闪光酷刑,当我们做闪光阅读,它也 分为两部分。

    另一个问题是我们不想禁用 DMA、这可能会 导致 CPU 性能下降

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

    您好、Tom、

    但不仅闪光酷刑,当我们做闪光读取,它也 分为两部分。[/报价]

    我们是否测试过“SF 读取...“ @u-boot?
    此致、
    - Hong

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

    亲爱的汤姆。

    我现在可以要求您帮助澄清最新的问题吗?

    [引述 userid=“658153" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1559994/am625-spi-nor-flash-driver/6016848

    我 在 am654_ospi 中添加此提交并添加了 CSQSPI_DISABLE_Stig_mode、jffs2 可以安装而不会出现 CRC 错误。

    jffs2 中的数据可以正确读取。

    [/报价]

    1. jffs2 成功读取数据时应用了什么修改?

    2.之后的新问题是什么?

    非常感谢!

    Yong

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

    尊敬的 Yong:

    更改如下:

    1.- FSAS_SYSCONFIG[7]=DISXIP 设为“1"以“以禁用 DMA 预取             修复 SPI NOR 读取更多 36 个字节
    2.在 jffs2_read 中执行 mtd_read 时、添加两次 read                          fix jffs2 get indoe nodes 错误(第一次读取时 DMA 缓冲区中的数据为 FF)
    3.-删除 op->data.nbytes <= CXSPI_Stig_DATA_LEN_MAX               修复 jffs2 检查节点数据错误

    第 2 和第 3 位以上、都是我们的解决方案。

    然后、您给了我们这些补丁:

    a.用于为 OSPI 禁用 DMA 的内核驱动程序补丁

    b.禁用 Stig 模式

    上面的 b 可以修复 jffs2 检查节点数据错误、因此我们使用修补程序 b 来替换解决方案 3。

    但 A 将禁用 DMA、因此我们不想使用它。

    现在、我删除内核中的求解 2、当我测试 jffs2 mount 时、没有 jffs2 get inode nodes 错误。

    现在、更改如下:

    1.- FSAS_SYSCONFIG[7]=DISXIP 设为“1"以“以禁用 DMA 预取             修复 SPI NOR 读取更多 36 个字节

    2.-禁用 Stig 模式                                                修复 jffs2 检查节点数据错误

    所以我认为修补程序禁用 Stig 模式有效并修复了所有 jffs2 错误问题。

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

    亲爱的汤姆。

    因此,结论是 jffs2 在你的一侧(读/写/擦除)有以下两个修改。 对吗?

    1.- FSAS_SYSCONFIG[7]=DISXIP 设为“1"以“以禁用 DMA 预取             修复 SPI NOR 读取更多 36 个字节

    2.-禁用 Stig 模式                                                修复 jffs2 检查节点数据错误

    如果有新问题、请告知我们? 如果有问题、会出现什么问题?

    非常感谢!

    Yong

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

    尊敬的 Yong:

    是的、jffs2 可用于 2 个解决方案。

    另一条路径将禁用 DMA、因此我们不使用它。

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

    您好、Tom、
    最好是知道 JFFS2 能够与 QSPI-NOR 闪存 DS25M4CB 上的两个补丁配合使用。
    如果您没有其他问题、我们来关闭 e2e。
    此致、
    - Hong