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.

[参考译文] Linux/DRA722:QSPI (双读、单写)引导卡在映像条目()处

Guru**** 2609895 points
Other Parts Discussed in Thread: DRA722

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/649745/linux-dra722-qspi-dual-read-single-write-boot-stuck-at-image-entry

器件型号:DRA722

工具/软件:Linux

您好!

我尝试从 QSPI (在基于 DRA722的定制板上的 Micron 64 MB SPI NOR 闪存)加载 u-boot。但我现在卡在以下位置:


U-Boot SPL 2016.05 (2017年11月28日- 17:44:59)
DRA722-GP ES2.0
尝试从 SPI 引导
TI_SPI_SET_SPEED:Hz:76800000、时钟分频器0
SPI_REACK_BUS:总线:0 CS:0
SPI_xfer:bus:0 cs:0 bitlen:8标志:1
TX cmd 003a0fff dc 00000000
TX 完成、状态00010002
SPI_xfer:bus:0 cs:0 bitlen:40标志:2
RX cmd 00390fff dc 00000000
RX 完成、状态00020002、读取20
RX cmd 00390fff dc 00000000
RX 完成、状态00030002、读取 BA
RX cmd 00390fff dc 00000000
RX 完成、状态00040002、读取22
RX cmd 00390fff dc 00000000
RX 完成、状态00050002、读取10
RX cmd 00390fff dc 00000000
RX 完成、状态00060002、读取44
SF:获得 IDcode
00000000:20 BA 22 10 44                                      
SPI_REACK_BUS:总线:0 CS:0
SPI_xfer:bus:0 cs:0 bitlen:8标志:1
TX cmd 003a0ff00000
TX 完成、状态00010002
SPI_xfer:bus:0 cs:0 bitlen:8标志:2
RX cmd 00390fff dc 00000000
RX 完成、状态00020002、读取00
SPI_RELEASE_BUS:总线:0 CS:0
SPI_RELEASE_BUS:总线:0 CS:0
不支持的操作系统映像.. 尽管如此,还是跳
已加载-跳转到 U-Boot...图像入口点:0x0
boot-common.c:映像大小:0x0
图像 load_addr:0x0

这是我的 DTB 配置

&QSPI{
       状态="正常";

       /*SPI-max-frequency =<76800000>;*/
       SPI-max-frequency =<1000>;
       m25p80@0{
               兼容="mt25ql02g"、"m25p80";
               /*SPI-max-frequency =<76800000>;*/
          SPI-max-frequency =<1000>;
               reg =<0>;
               SPI-TX-bus-width =<1>;
               SPI-Rx-bus-width =<2>;
               #address-cells =<1>;
               大小单元格=<1>;
      
               /*MTD 分区表。
                * ROM 检查前四个物理块
                *以启动有效文件、此处的闪存为
                * 64KiB 块大小。*/
               分区@0{
                       标签="QSPI.SPL";
                       REG =<0x00000000 0x00040000>;
               };
               分区@1{
                       标签="qspi.u-boot";
                       REG =<0x00040000 0x00100000 >;
               };
               分区@2{
                       label ="qspi.u-boot-spl-os";
                       REG =<0x00140000 0x00080000>;
               };
               分区@3{
                       label ="qspi.u-boot-env";
                       REG =<0x001c0000 0x00010000>;
               };
               分区@4{
                       label ="qspi.u-boot-env.Backup1";
                       REG =<0x001d0000 0x0010000>;
               };
               分区@5{
                       标签="qspi.kernel";
                       REG =<0x001e0000 0x0800000>;
               };
               分区@6{
                       label ="qspi.file-system";
                       REG =<0x009e0000 0x01620000>;
               };
       };

};

我将 MLO、u-boot.img、uImage 和 DTB 文件刷写到相应的分区(尝试使用 SF 写入和 MTD_DEBUG 写入进行刷写)。刷写后、我使用 hexdump -C /dev/mtd0等来检查文件是否已成功写入。写入似乎正常。我尝试更改频率、dtb configs、sf_param.c configs、但从未经历过这一点。

根本原因是什么?映像入口点、映像大小和映像 load_addr 为0x0可能是什么?

此致、

Murugan

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

    我已将您的问题转交给 U-boot 专家。

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

    我假设这是定制 EVM、您是否配置了双读和单写? 您是否已通过测试验证了 QSPI 读/写和完整性检查?

    如何使用 SD/boot 或 SPL-DFU 将 MLO、u-boot.img 刷写到 QSPI?
    您能否使用 DFU 来刷写 MLO 和 u-boot.img、而不是使用 SF_write。

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

    尊敬的 Ravi:

    1)是的、它是定制 EVM。

    2)我尝试了多种配置,因为我找不到任何有关“双读”的文档。所以我不确定我的配置是否正确。这些是我对双读所做的更改:

               a)在 u-boot/drivers/MTD/SPI/SF_params.c 中、我尝试了参数 RD_EXTN 和 RD_NORM

               例如:{"mt25ql02g"、   0x20ba22、0x0、   64 * 1024、 4096、 RD_EXTN、WR_QPP | E_FSR | sect_4K}、

               b)在 u-boot/arch/arm/dra72-EVM-common.dtsi 中,我使用了

                     SPI-Rx-bus-width =<2>;

                  而不是

                      SPI-Rx-bus-width=<4>;

    我是否错过了任何配置?

    3)是、我发现数据写入正确但读取错误。默认情况下使用模式0 (单次写入和单次读取、我猜)。因此我尝试通过修改 u-boot/drivers/spi/ti_qspi.c 强制双路和四路读取  、并观察到一些奇怪的行为:

            我尝试写入以下模式。

                    输入模式:e2e.ti.com/.../qspi_5F00_pattern_5F00_written.txt

                                   输出模式:

                         a)当 MODE 为 SPI_RX_DEufualt (MODE 0)时:e2e.ti.com/.../SPI_5F00_RX_5F00_DEFAULT_5F00_output_5F00_pattern.txt

                                     b)当 MODE 为 SPI_RX_DUAL:e2e.ti.com/.../SPI_5F00_RX_5F00_DUAL_5F00_output_5F00_pattern.txt 时

                                            c)当 MODE 为 SPI_RX_QUAD (MODE 8)时:e2e.ti.com/.../SPI_5F00_RX_5F00_QUAD_5F00_output_5F00_pattern.txt

    4)我使用 SF 读取、写入、擦除命令通过 SD 引导写入 MLO 和 u-boot.img。我还尝试使用 MTD_DEBUG 写入命令进行刷写。但我尚未尝试 SPL-DFU 方法。由于从 QSPI 读取数据时似乎存在问题、这是否会起作用?

                                                                                   如您所见,当模式为四路(至少数据已对齐)时,模式匹配度最高。我将频率更改为比中指定的值更高 自 uboot 起、使用、

                       SF 探测器0 90000000 (SPI-max-frequency 的值为79000000)、奇怪的是、模式完全匹配、但读取 速度非常慢。也无法以该频率写入(再次奇怪)。但它对我来说是无用的、因为我在为 QSPI 引导设置 SYSBOOT 开关时无法执行此操作。

     配置双读和单写模式的正确方法是什么?

    当 I SF 探针的值高于 dtsi 和其他文件中指定的 SPI-max-frequency 时、到底会发生什么情况?

    如何在不移动 ti_qspi.c 文件的情况下更改模式?

    感谢您的耐心和耐心。

    此致、

    Murugan S

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

    您可以尝试禁用 DMA 以进行 QSPI 读取和检查吗? 我想检查 CPU 读取是否正常。

    您可以从 dra7xx_evm.h 中删除"#define CONFIG_TI_EDMA3"来禁用 EDMA。

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

    您好、Venkat、

                                     正如您所建议的、我禁用了 EDMA、这些是输出模式(输入模式与以前相同):

                    a)当 MODE 为 SPI_RX_DEFAULT (MODE 0)时:e2e.ti.com/.../SINGLE_5F00_MODE_5F00_EDMA_5F00_OFF.txt

                    b)当 MODE 为 SPI_RX_DUAL      (模式4)时:e2e.ti.com/.../DUAL_5F00_MODE_5F00_EDMA_5F00_OFF.txt

                    c)当 MODE 为 SPI_RX_QUAD      (MODE 8)时:e2e.ti.com/.../QUAD_5F00_MODE_5F00_EDMA_5F00_OFF.txt

                                                    这些是我的当前设置:e2e.ti.com/.../QSPI_5F00_settings.txt

    回答我自己的问题之一、

                                                        当我们使用大于的值进行探测时 默认情况下,我认为使用了一些非常低的频率。因为当我强制使用 Quad_mode 并使用时,

    SF 探头0 8000000

    我能够正确读取。我甚至从 SPI 闪存(从 MMC 的 uboot)成功加载 uImage 和 DTB。任何超过8MHz 的值都会导致图形不匹配。

    因此、我尝试将所有 DTS、dtsi 和 board.h 频率值更改为8MHz。但这不起作用、并且出现了与以前相同的模式不匹配。

    因此、为了正确读取、目前、我必须:

    1)设置 将 CONFIG_SF_DEFAULT_SPEED 设置为高值、例如166MHz。

    2)使用 SF 探头0 8000000 (8MHz 或更低值)

                                                                              如前 所述、这种技巧对我来说是无用的、因为我必须使用 SYSBOOT 开关从 QSPI 引导。因此、读取和写入都应该能够完美工作、而无需任何运行时修改。

    更新了:当我 降低频率时、我意外地将 CONFIG_DRA7xx_FCLK 值更改为8MHz (76.8MHz)、这是默认值。我将其改回76.8MHz、并在其他任何地方(在 dtsi 和 CONFIG_SF_DEFAULT_SPEED 中)保留8MHz。现在、我可以以8MHz 的频率进行读取和写入(可以高达8.5MHz) 在运行时不更改频率。但当我更改 QSPI 引导(SW 5:0 110110)的开关设置时、它不会超过"image_entry:0x0"。

    感谢您的耐心和耐心。

    此致、

    Murugan S

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、
    我修复了读数问题。双读和单读的命令与我们之前使用的 QSPI 闪存不同(例如:单读的命令对于 SPI 闪存为0x13、默认值为 was0x03)。我根据 SPI 闪存的数据表在 ti_qspi.c 文件中修改了这些命令。现在我可以读取了 并在任何频率下成功写入。

    但我仍面临 QSPI 启动问题。我将为此启动一个新线程。
    此致、
    Murugan S
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您能不能同时引导 QSPI

    1) 1) QSPI1

    2) 2) QSPI4

    模式?

    此致、

    Venkat

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Venkat、
    我能够从 QSPI 引导,但仅在以下情况下:
    1)调试打印已打开。
    2) QSPI 频率<= 8MHz。

    有时、我必须重置电路板5-10次才能从 QSPI 成功引导。但是、至少一次成功引导后、我再重新引导没有问题。但是、要在第一次成功引导时重置电路板可能需要多次。这是否是硬件问题?
    您能否解释一下 QSPI_1和 QSPI_4之间的区别? 以及如何在它们之间切换?

    此致、
    Murugan S
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Venkat、
    现在、我可以从 QSPI 引导。我将频率从8MHz 降低到6MHz。现在、QSPI 引导正在进行调试。我必须弄清楚为什么我们无法使用更高的频率。

    此致、
    Murugan S