0

我正在使用 u-boot (2021.04+fslc) 开发具有 Spansion s25hs512 的定制板,
该板正在从 NXP mfgtool 启动,并且运行正常。QSPI 也被正确检测到。读取没有问题,但写入失败而没有错误。
(我已启用日志级别 9 和调试驱动程序)

我的 dtsi 内容如下:

qspi {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_qspi>;
        status = "okay";

        flash0: s25hs512t@0 {
                #address-cells = <1>;
                #size-cells = <1>;
                compatible = "spansion,s25hs512t", "jedec,spi-nor";
                spi-max-frequency = <40000000>;
                spi-rx-bus-width = <4>;
                spi-tx-bus-width = <4>;
                reg = <0>;
                spi-mode = <0>;
                m25p,fast-read;
                status = "okay";

                /* some partition related Information here */
        };
};

由于 s25hs512 id 不是本机的,因此在
rivers/mtd/spi/spi-nor-ids.c 中添加了以下内容:

{ INFO6("s25hs512t",  0x342b1a, 0x0f0390, 256 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES | USE_CLSR) },

我的配置

CONFIG_SPI=y
CONFIG_DM_SPI=y
CONFIG_FSL_QSPI=y
CONFIG_QSPI_BOOT=y
CONFIG_CMD_SPI=y
CONFIG_ENV_IS_IN_SPI_FLASH=y
CONFIG_DM_SPI_FLASH=y
CONFIG_SPI_FLASH_SPANSION=y
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
CONFIG_SPI_FLASH_MTD=y

在我的板上 sf 探针工作得很好

=> sf probe
drivers/core/uclass.c:319-uclass_find_device_by_seq() 0
drivers/core/uclass.c:327-uclass_find_device_by_seq()    - 0 'spi@21e0000'
drivers/core/uclass.c:330-uclass_find_device_by_seq()    - found
drivers/spi/spi-uclass.c:271-spi_find_chip_select() fsl_qspi spi@21e0000: spi_find_chip_select: plat=9ef1af60, cs=0
drivers/core/uclass.c:319-uclass_find_device_by_seq() 0
drivers/core/uclass.c:327-uclass_find_device_by_seq()    - 0 'spi@21e0000'
drivers/core/uclass.c:330-uclass_find_device_by_seq()    - found
drivers/spi/spi-uclass.c:271-spi_find_chip_select() fsl_qspi spi@21e0000: spi_find_chip_select: plat=9ef1af60, cs=0
drivers/core/uclass.c:319-uclass_find_device_by_seq() 0
drivers/core/uclass.c:327-uclass_find_device_by_seq()    - 0 'iomuxc@20e0000'
drivers/core/uclass.c:330-uclass_find_device_by_seq()    - found
drivers/pinctrl/pinctrl-uclass.c:296-pinctrl_select_state_simple() jedec_spi_nor s25hs512t@0: set_state_simple op missing
drivers/spi/fsl_qspi.c:464-fsl_qspi_prepare_lut() fsl_qspi spi@21e0000: CMD[9f] lutval[0:1c00049f        1:0     2:0     3:0]
drivers/spi/fsl_qspi.c:464-fsl_qspi_prepare_lut() fsl_qspi spi@21e0000: CMD[c8] lutval[0:1c0004c8        1:0     2:0     3:0]
drivers/spi/fsl_qspi.c:464-fsl_qspi_prepare_lut() fsl_qspi spi@21e0000: CMD[6] lutval[0:406      1:0     2:0     3:0]
drivers/spi/fsl_qspi.c:464-fsl_qspi_prepare_lut() fsl_qspi spi@21e0000: CMD[1] lutval[0:20000401         1:0     2:0     3:0]
drivers/spi/fsl_qspi.c:464-fsl_qspi_prepare_lut() fsl_qspi spi@21e0000: CMD[5] lutval[0:1c000405         1:0     2:0     3:0]
drivers/spi/fsl_qspi.c:464-fsl_qspi_prepare_lut() fsl_qspi spi@21e0000: CMD[5] lutval[0:1c000405         1:0     2:0     3:0]
drivers/spi/fsl_qspi.c:464-fsl_qspi_prepare_lut() fsl_qspi spi@21e0000: CMD[5] lutval[0:1c000405         1:0     2:0     3:0]
drivers/spi/fsl_qspi.c:464-fsl_qspi_prepare_lut() fsl_qspi spi@21e0000: CMD[5] lutval[0:1c000405         1:0     2:0     3:0]
drivers/spi/fsl_qspi.c:464-fsl_qspi_prepare_lut() fsl_qspi spi@21e0000: CMD[5] lutval[0:1c000405         1:0     2:0     3:0]
drivers/spi/fsl_qspi.c:464-fsl_qspi_prepare_lut() fsl_qspi spi@21e0000: CMD[5] lutval[0:1c000405         1:0     2:0     3:0]
drivers/spi/fsl_qspi.c:464-fsl_qspi_prepare_lut() fsl_qspi spi@21e0000: CMD[35] lutval[0:1c000435        1:0     2:0     3:0]
SF: Detected s25hs512t with page size 256 Bytes, erase size 256 KiB, total 64 MiB. <============== DETECTED
drivers/mtd/mtdcore.c:494-add_mtd_device() mtd: Giving out device 0 to nor1
drivers/spi/spi-uclass.c:410-spi_get_bus_and_cs() spi_get_bus_and_cs: bus=9ef1ae80, slave=9ef1b720

当我尝试阅读时,“sf read”工作正常

=> md 0x90000000 0x10
90000000: 02800220 02700840 60282220 4a010000     ...@.p. "(`...J
90000010: 8802a8aa 200a0001 a2a288a0 80160980    ....... ........
90000020: 222a0a88 90e30f04 88088a2a 22080082    ..*"....*......"
90000030: 480282aa c0210400 08088881 06000606    ...H..!.........

=> sf read 0x90000000 0x100000 0x100
device 0 offset 0x100000, size 0x100
drivers/mtd/spi/spi-nor-core.c:918-spi_nor_read() jedec_spi_nor s25hs512t@0: from 0x00100000, len 256
drivers/spi/fsl_qspi.c:464-fsl_qspi_prepare_lut() fsl_qspi spi@21e0000: CMD[6] lutval[0:406      1:0     2:0     3:0]
drivers/spi/fsl_qspi.c:464-fsl_qspi_prepare_lut() fsl_qspi spi@21e0000: CMD[c5] lutval[0:200004c5        1:0     2:0     3:0]
drivers/spi/fsl_qspi.c:464-fsl_qspi_prepare_lut() fsl_qspi spi@21e0000: CMD[6b] lutval[0:818046b         1:1e000c08      2:0     3:0]
SF: 256 bytes @ 0x100000 Read: OK

=> md 0x90000000 0x10               
90000000: ffffffff ffffffff ffffffff ffffffff    ................
90000010: ffffffff ffffffff ffffffff ffffffff    ................
90000020: ffffffff ffffffff ffffffff ffffffff    ................
90000030: ffffffff ffffffff ffffffff ffffffff    ................

当我尝试写作时出现问题

=> md 0x90000000 0x10
90000000: 00000000 00000000 00000000 00000000    ................
90000010: 00000000 00000000 ffffffff ffffffff    ................
90000020: ffffffff ffffffff ffffffff ffffffff    ................
90000030: ffffffff ffffffff ffffffff ffffffff    ................

=> sf write 0x90000000 0x100000 0x100
device 0 offset 0x100000, size 0x100
drivers/mtd/spi/spi-nor-core.c:1247-spi_nor_write() jedec_spi_nor s25hs512t@0: to 0x00100000, len 256
drivers/spi/fsl_qspi.c:464-fsl_qspi_prepare_lut() fsl_qspi spi@21e0000: CMD[6] lutval[0:406      1:0     2:0     3:0]
drivers/spi/fsl_qspi.c:464-fsl_qspi_prepare_lut() fsl_qspi spi@21e0000: CMD[32] lutval[0:8180432         1:2200          2:0     3:0]
drivers/spi/fsl_qspi.c:464-fsl_qspi_prepare_lut() fsl_qspi spi@21e0000: CMD[5] lutval[0:1c000405         1:0     2:0     3:0]
SF: 256 bytes @ 0x100000 Written: OK

=> sf read 0x90000000 0x100000 0x100 
device 0 offset 0x100000, size 0x100
drivers/mtd/spi/spi-nor-core.c:918-spi_nor_read() jedec_spi_nor s25hs512t@0: from 0x00100000, len 256
drivers/spi/fsl_qspi.c:464-fsl_qspi_prepare_lut() fsl_qspi spi@21e0000: CMD[6b] lutval[0:818046b         1:1e000c08      2:0     3:0]
SF: 256 bytes @ 0x100000 Read: OK

=> md 0x90000000 0x10                
90000000: ffffffff ffffffff ffffffff ffffffff    ................
90000010: ffffffff ffffffff ffffffff ffffffff    ................
90000020: ffffffff ffffffff ffffffff ffffffff    ................
90000030: ffffffff ffffffff ffffffff ffffffff    ................

没有错误......只是不写!

可预见的“科幻测试”失败

...
Verify failed at 0, good data:
00000000: b8 00 00 ea 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5    ................
00000010: 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5    ................
00000020: 60 00 80 87 c0 00 80 87 20 01 80 87 80 01 80 87    `....... .......
00000030: e0 01 80 87 40 02 80 87 a0 02 80 87 ef be ad de    ....@...........
Bad data:
00000000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
00000010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
00000020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
00000030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
Test failed

我努力了

  • 保护一切
  • sf 保护解锁 0x100000 0x40000
  • 将 SPI_NOR_HAS_LOCK 添加到 spi-nor-ids.c

没有一个工作过

PS:在barebox上更新 - 也不起作用

barebox@Freescale i.MX6 UltraLite Caisteal Board:/ devinfo m25p0.barebox
Parent: m25p0
Parameters:
  erasesize: 262144 (type: uint32)
  oobsize: 0 (type: uint32)
  size: 1048576 (type: uint64)
  writesize: 1 (type: uint32)

barebox@Freescale i.MX6 UltraLite Caisteal Board:/ cp /tmp/barebox /dev/m25p0.barebox
getopt: optindex: 1 nonopts: 0 optind: 1
ramfs_read: 8ef199ac 4096 @ 0
ramfs_read: pos: 0 ofs: 0 len: 569719
m25p80 s25hs512t@00: to 0x00000000, len 4096
ERROR: m25p80 s25hs512t@00: flash operation timed out
write: Connection timed out
cp: Connection timed out

barebox@Freescale i.MX6 UltraLite Caisteal Board:/ erase /dev/m25p0.barebox
m25p80 s25hs512t@00: at 0x0, len 1048576
ERROR: m25p80 s25hs512t@00: flash operation timed out
erase: Connection timed out

使用 barebox_update

barebox@Freescale i.MX6 UltraLite Caisteal Board:/ barebox_update -t spiflash /tmp/barebox 
getopt: optindex: 1 nonopts: 0 optind: 1
getopt: optindex: 1 nonopts: 0 optind: 3
ramfs_read: 8f01c620 606474 @ 0
ramfs_read: pos: 0 ofs: 0 len: 606474
Start tag found at offset 33248
tag at offset 33248 has length 8
tag at offset 33256 has length 40
tag at offset 33296 has length 12
tag at offset 33308 has length 16
tag at offset 33324 has length 48
Image Metadata:
  build: #1 Sun Sep 12 21:52:42 IST 2021
  buildsystem version: 
  release: 2021.08.0-Caisteal-MKV-g8932e77-dirty
Start tag found at offset 33248
tag at offset 33248 has length 8
tag at offset 33256 has length 40
tag at offset 33296 has length 12
tag at offset 33308 has length 16
tag at offset 33324 has length 48
Found crc token at 33308
Calculated checksum from 0 to 33316: 0x80119f42
Calculated checksum from 33321 to 606474: 0x01295a56
Calculated crc: 0x01295a56
CRC: is invalid, but the checksum tag is not enabled
update barebox from /tmp/barebox using handler spiflash to /dev/m25p0.barebox (y/n)?
updating barebox...
m25p80 s25hs512t@00: from 0x00000000, len 512
imx_bbu_protect: unprotecting /dev/m25p0.barebox from 0x00000000 to 0x0009410a
imx_bbu_write_device: erasing /dev/m25p0.barebox from 0x00000000 to 0x0009410a
m25p80 s25hs512t@00: at 0x0, len 786432
m25p80 s25hs512t@00: to 0x00000000, len 606474
ERROR: m25p80 s25hs512t@00: flash operation timed out
ERROR: writing to /dev/m25p0.barebox failed with Connection timed out
update failed
barebox_update: Connection timed out

希望我能在这方面得到一些帮助。我似乎有理由为什么会发生这种情况

4

0 回答 0