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.

[参考译文] AM5716:U-boot 中的 QSPI 闪存访问失败

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/659169/am5716-qspi-flash-access-fails-in-u-boot

器件型号:AM5716

我将定制板与 Sitara AM5716搭配使用。 我已通过 U-boot 通过 UART 发送 SPL 和 U-boot 映像成功引导它。 我的板上有器件型号为"S25FS512S"的 QSPI 闪存。 我想使用 u-boot 命令测试外设。

因此、SF 探针的输出是

=> SF 探头
SF:检测到 s25fs512s、页大小为512字节、擦除大小为4 KiB、总共64 MIB、映射地址为5c000000

因此,这意味着检测到设备。 但是、当我尝试擦除、写入和读取数据时、我会得到错误的输出。

我在 u-boot 中尝试测试 QSPI 存储器的命令为:

=> MW 90000000 ff 40000
=>MW a0000000 aa 40000
=> SF 擦除0 40000
SF:262144字节@ 0x0已擦除:确定
=> SF 写入90000000 0 40000
器件0偏移量0x0、大小0x40000
SF:262144字节@ 0x0写入:正常
=> SF 读取 a0000000 0 40000
器件0偏移量0x0、大小0x40000
SF:262144字节@ 0x0读取:正常
=> MD a0000000 ff
A0000000:00000000 00000000 00000000 00000000   …
a0000010:00000000 00000000 00000000 00000000   …
a0000020:00000000 00000000 00000000 00000000   …
a0000030:00000000 00000000 00000000 00000000   …
a0000040:00000000 00000000 00000000 00000000   …
a0000050:00000000 00000000 00000000 00000000   …
a0000060:00000000 00000000 00000000 00000000   …
a0000070:00000000 00000000 00000000 00000000   …
a0000080:00000000 00000000 00000000 00000000   …
a0000090:00000000 00000000 00000000 00000000   …
a00000a0:00000000 00000000 00000000 00000000   …
a00000b0:00000000 00000000 00000000 00000000   …
a00000c0:00000000 00000000 00000000…    
a00000d0:00000000 00000000 00000000…    
a00000e0:00000000 00000000 00000000 00000000   …
a00000f0:00000000 00000000 00000000 00000000   …

  在执行 SF 读取命令后、我希望内存 a0000000中的数据'ff'。 问题出在哪呢? 请指导我、我需要检查哪些地方?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请访问 processors.wiki.ti.com/.../Linux_Core_U-Boot_User's_Guide
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已参阅您提到的页面。 我的配置中的 QSPI 与 dra7xx_EVM_config 中的配置相同。 那么我还应该做什么呢? 问题仍然存在。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    本站点介绍了如何使用 QSPI 闪存进行引导。 但我无法写入和读取闪存本身。 请指导我,我需要做什么来写入和读取 s25fs512s 闪存。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉耽误你的时间。 我已将此问题上报给软件团队。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我已修改 u-boot 源文件中的一些文件,以注释出串行闪存读取命令期间从内存映射读取的内容,并强制发送读取命令,而我的当前状态为:

    U-Boot 控制台输出:


    => SF 探头
    SF:检测到 s25fs512s、页大小为512字节、擦除大小为256 KiB、总共64 MIB、映射地址为5c000000
    => SF 擦除80000 40000
    SF:262144字节@ 0x80000已擦除:确定
    =>兆瓦90000000死牛肉10.
    => MD 90000000 20
    90000000:死牛肉死牛肉死牛肉死牛肉…
    90000010:死牛肉死牛肉死牛肉死牛肉…
    90000020:死牛肉死牛肉死牛肉死牛肉…
    90000030:死牛肉死牛肉死牛肉死牛肉…
    90000040:87ac6eef 9fc8e7a3 fdac8f29 6de86b59 .n... )。。。
    90000050:ef89768b ee74a18d bf2ebc9b e52d43e3 .v.... t C-。
    90000060:fddfddca fb3bbdaa 577df7f7 c6ed3534...... ;...} W45..
    90000070:5b4d6bc9 b269ff05 b78c7edc 137bd8b0 .km[.I..~………
    => SF 写入90000000 80000 10.
    器件0偏移量0x80000、大小0x10
    SF:16字节@ 0x80000写入:正常
    => MW a0000000 0 10
    => MD a0000000 20
    A0000000:00000000 00000000 00000000 00000000…
    a0000010:00000000 00000000 00000000 00000000…
    a0000020:00000000 00000000 00000000 00000000…
    a0000030:00000000 00000000 00000000 00000000…
    a0000040:49fffe5f 8e6d6ffe 2dc97fd5 db6e7f04 _…….I.om.....n..
    a0000050:fa3cefef 57930bdf ca2967e5 f2b378e5 .<.... W.g).x..
    a0000060:ff919f45 912fa75c d1a80869 f37de2d9 e.../../I..... }。
    a0000070:f7c9c3e8 eddbff9f 65fc7e71 df7afe77… q~.ew.z
    => SF 读取 a0000000 80000 20
    器件0偏移量0x80000、大小0x20
    SF:32字节@ 0x80000读取:正常
    => MD a0000000 20
    a0000000:efdeadbe deadbe efdeadbe deadbe fdeadbe ffdeadbe…
    a0000010:FFFFFFFF FFFF FFFF FFFF FFFF FFFF FFFF…
    a0000020:00000000 00000000 00000000 00000000…
    a0000030:00000000 00000000 00000000 00000000…
    a0000040:49fffe5f 8e6d6ffe 2dc97fd5 db6e7f04 _…….I.om.....n..
    a0000050:fa3cefef 57930bdf ca2967e5 f2b378e5 .<.... W.g).x..
    a0000060:ff919f45 912fa75c d1a80869 f37de2d9 e.../../I..... }。
    a0000070:f7c9c3e8 eddbff9f 65fc7e71 df7afe77… q~.ew.z
    =>


    因此、当我从串行闪存读回时、数据是0xefdeadbe、而不是0x deadf牛肉。 原因可能是什么??


    我在 u-boot 源文件中所做的修改是:

    文件:drivers/MTD/SPI/SPI_flash_ids.c

    Quest@TVMDT2175-Ubuntu:~/Nithin/U-Boot_Git/u-boot git diff drivers/MTD/SPI/SPI_FLASH_IDS.c
    diff --git a/drivers/MTD/SPI/SPI_FLASH_IDS.c b/drivers/MTD/SPI/SPI_FLASH_IDs.c
    索引:262d81e.04e629b 100644
    -- a/drivers/MTD/SPI/SPI_FLASH_IDS.c
    ++ b/drivers/MTD/SPI/SPI_FLASH_IDS.c
    @@-104、7 +104、8 @@ const 结构 SPI_FLASH_INFO SPI_FLASH_IDs[]={
    {"s25fl256s_256k"、信息(0x010219、0x4d00、256 * 1024、128、 RD_FULL | WR_QPP)}、
    {"s25fs256s_64k"、INFO6 (0x010219、0x4d0181、64 * 1024、512、 RD_FULL | WR_QPP | sect_4K)}、
    {"s25fl256s_64k"、信息(0x010219、0x4d01、64 * 1024、512、 RD_FULL | WR_QPP)}、
    - {"s25fs512s"、 INFO6 (0x010220、0x4d0081、128 * 1024、512、RD_FULL | WR_QPP | Sect_4K)}、
    +/- {"s25fs512s"、 INFO6 (0x010220、0x4d0081、128 * 1024、512、RD_FULL | WR_QPP | Sect_4K)}、
    + {"s25fs512s"、 INFO6 (0x010220、0x4d0081、256 * 1024、256、RD_FULL | WR_QPP)}、
    {"s25fl512s_256k"、信息(0x010220、0x4d00、256 * 1024、256、 RD_FULL | WR_QPP)}、
    {"s25fl512s_64k"、信息(0x010220、0x4d01、64 * 1024、1024、 RD_FULL | WR_QPP)}、
    {"s25fl512s_512K"、信息(0x010220、0x4f00、256 * 1024、256、 RD_FULL | WR_QPP)}、


    文件:drivers/MTD/SPI/SPI_flash.c

    Quest@TVMDT2175-Ubuntu:~/Nithin/U-Boot_Git/u-boot git diff drivers/MTD/SPI/SPI_flash.c
    diff --git a/drivers/MTD/SPI/SPI_flash.c b/drivers/MTD/SPI/SPI_flash.c
    索引51e28bf..45f77ca 100644
    -- a/drivers/MTD/SPI/SPI_flash.c
    ++ b/drivers/MTD/SPI/SPI_flash.c
    @@-473、7 +473、7 @@ int spi_flash_cmd_read_ops (struct spi_flash * flash、u32 offset、
    u32 lust_len、read_len、read_addr;
    int bank_SEL = 0;
    int ret =-1;
    -
    +#if 0 // quest -删除内存映射
    /*句柄内存映射 SPI */
    if (flash->memory_map){
    RET = SPI_REACK_BUS (SPI);
    @@-487,7+487,7 @@ int spi_flash_cmd_read_ops (struct spi_flash * flash、u32 offset、
    SPI_RELEASE_BUS (SPI);
    返回0;

    -
    +#endif
    cmdsz = SPI_FLASH_CMD_LEN + FLASH->伪 字节;
    cmd = calloc (1、cmdsz);
    如果(!cmd){
    @@-516、6 +516、7 @@ int spi_flash_cmd_read_ops (struct spi_flash * flash、u32 offset、
    其他
    read_len = late_len;

    + CMD[0]= 0x03;
    spi_flash_addr (read_addr、cmd);

    RET = SPI_FLASH_READ_COMMON (FLASH、cmd、cmdsz、data、read_len);

    U-boot 源代码是 git 存储库中的最新版本(git 克隆 git://git.denx.de/u-boot.git)。 还可以吗?
    请帮助我解决问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您能否使用最新的处理器 Linux SDK 并对其进行测试?

    Steve K.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    也无法在最新的 SDK 中工作。 我接下来应该尝试什么??
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在最新的 Processor SDK 中、我进行了"make am57xx_evm_config"
    已将 MLO 和 u-boot.img 复制到 SD 卡。
    从卡引导。
    已输入:
    加载 MMC 0 0x82000000 MLO
    SF 探头
    SF 擦除0 0x20000
    SF 写入0x82000000 0 0x20000

    我重置电路板并输入
    SF 探头
    SF 读取0x82000000 0 0x20000
    MD.L 0x82000000

    和锯片 MLO
    82000000:00000040 0000000c 00000000 00000000 @..........
    82000010:00000000 45534843 4e495454 00005347.... CHSETINGS..
    82000020:FFFFFFFF FFFF FFFF FFFF FFFF FFFF FFFF…
    82000030:FFFFFFFF FFFF FFFF FFFF FFFF FFFF FFFF…
    82000040:c0c0c1 00000100 00000000 00000000 ........
    82000050:00000000 00000000 00000000 00000000…

    已卸下 SD 卡并重置板。 MLO 从 QSPI 引导
    U-Boot SPL 2017.01-00444-g17f04deb6736-脏(2018年2月28日- 12:38:15)
    DRA762-GP ES1.0 ABZ 封装
    尝试从 SPI 引导
    **第一个描述符不是1:1上的主要描述符**
    ***警告- CRC 错误,使用默认环境

    因为我没有闪存 u-boot、所以它停止了。

    Steve K.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是否解决了您的问题?

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

    否 我修改了 QSPI 闪存的 u-boot 驱动程序代码以绕过存储器映射、然后它开始工作。