如何解决SPI Nor Flash 传输失败
我在 SPI 闪存上运行操作系统。我用 buildroot 编译了操作系统,文件系统是 jffs2
。系统正常工作但有时突然或在系统打开后,屏幕上不断显示以下错误消息。我无法修复此错误消息。
错误信息:
[ 425.524033] spi_master spi0: spi0.0: timeout transferring 64 bytes@10000000Hz for 210(200)ms
[ 425.524033] timeout:0
[ 425.534943] spi-nor spi0.0: SPI transfer Failed: -110
[ 425.539999] spi_master spi0: Failed to transfer one message from queue
[ 425.546540] jffs2: Write of 68 bytes at 0x004637c0 Failed. returned -110,retlen 0
[ 425.554117] jffs2: Not marking the space at 0x004637c0 as dirty because the flash driver returned retlen zero
[ 425.794025] spi_master spi0: spi0.0: timeout transferring 64 bytes@10000000Hz for 210(200)ms
[ 425.794025] timeout:0
[ 425.804941] spi-nor spi0.0: SPI transfer Failed: -110
[ 425.810003] spi_master spi0: Failed to transfer one message from queue
[ 425.816553] jffs2: Write of 68 bytes at 0x004637c0 Failed. returned -110,retlen 0
[ 425.824129] jffs2: Not marking the space at 0x004637c0 as dirty because the flash driver returned retlen zero
第一次运行时Dmesg 输出:
[ 0.000000] Memory policy: Data cache writeback
[ 0.000000] OF: reserved mem: node default-pool compatible matching fail
[ 0.000000] Zone ranges:
[ 0.000000] normal [mem 0x0000000040000000-0x000000005fe88fff]
[ 0.000000] HighMem empty
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000040000000-0x000000005fe88fff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000040000000-0x000000005fe88fff]
[ 0.000000] On node 0 totalpages: 130697
[ 0.000000] normal zone: 1022 pages used for memmap
[ 0.000000] normal zone: 0 pages reserved
[ 0.000000] normal zone: 130697 pages,LIFO batch:31
[ 0.000000] cpu: All cpu(s) started in SVC mode.
[ 0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[ 0.000000] pcpu-alloc: [0] 0
[ 0.000000] Built 1 zonelists,mobility grouping on. Total pages: 129675
[ 0.000000] Kernel command line: console=ttyS0,115200 root=/dev/mtdblock3 rw rootwait rootfstype=jffs2 loglevel=9
[ 0.000000] Dentry cache hash table entries: 65536 (order: 6,262144 bytes,linear)
[ 0.000000] Inode-cache hash table entries: 32768 (order: 5,131072 bytes,linear)
[ 0.000000] mem auto-init: stack:off,heap alloc:off,heap free:off
[ 0.000000] Memory: 510128K/522788K available (4096K kernel code,642K rwdata,1348K rodata,1024K init,216K bss,12660K reserved,0K cma-reserved,0K highmem)
[ 0.000000] SLUB: HWalign=64,Order=0-3,MinObjects=0,cpus=1,Nodes=1
[ 0.000000] NR_IRQS: 16,nr_irqs: 16,preallocated irqs: 16
[ 0.000000] random: get_random_bytes called from start_kernel+0x2d0/0x4bc with crng_init=0
[ 0.000003] sched_clock: 32 bits at 24MHz,resolution 41ns,wraps every 89478484971ns
[ 0.000048] clocksource: timer: mask: 0xffffffff max_cycles: 0xffffffff,max_idle_ns: 79635851949 ns
[ 0.000217] clocksource: timer: mask: 0xffffffff max_cycles: 0xffffffff,max_idle_ns: 6370868154 ns
[ 0.000463] Console: colour dummy device 80x30
[ 0.000519] Calibrating delay loop... 1001.88 BogoMIPS (lpj=5009408)
[ 0.040105] pid_max: default: 32768 minimum: 301
[ 0.040264] Mount-cache hash table entries: 1024 (order: 0,4096 bytes,linear)
[ 0.040289] Mountpoint-cache hash table entries: 1024 (order: 0,linear)
[ 0.040963] cpu: Testing write buffer coherency: ok
[ 0.041020] cpu0: Spectre v2: firmware did not set auxiliary control register IBE bit,system vulnerable
[ 0.041537] Setting up static identity map for 0x40100000 - 0x40100060
[ 0.042018] devtmpfs: initialized
[ 0.045616] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
[ 0.045784] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff,max_idle_ns: 19112604462750000 ns
[ 0.045817] futex hash table entries: 256 (order: -1,3072 bytes,linear)
[ 0.045903] pinctrl core: initialized pinctrl subsystem
[ 0.046808] NET: Registered protocol family 16
[ 0.047398] DMA: preallocated 256 KiB pool for atomic coherent allocations
[ 0.048133] thermal_sys: Registered thermal governor 'step_wise'
[ 0.048496] hw-breakpoint: debug architecture 0x4 unsupported.
[ 0.062150] vgaarb: loaded
[ 0.062490] SCSI subsystem initialized
[ 0.062627] usbcore: registered new interface driver usbfs
[ 0.062678] usbcore: registered new interface driver hub
[ 0.062731] usbcore: registered new device driver usb
[ 0.063904] clocksource: Switched to clocksource timer
[ 0.064659] simple-framebuffer 5fe89000.framebuffer: framebuffer at 0x5fe89000,0x177000 bytes,mapped to 0x(ptrval)
[ 0.064693] simple-framebuffer 5fe89000.framebuffer: format=x8r8g8b8,mode=800x480x32,linelength=3200
[ 0.070604] Console: switching to colour frame buffer device 100x30
[ 0.076093] simple-framebuffer 5fe89000.framebuffer: fb0: simplefb registered!
[ 0.082570] PCI: CLS 0 bytes,default 64
[ 0.083662] Initialise system trusted keyrings
[ 0.083946] workingset: timestamp_bits=30 max_order=17 bucket_order=0
[ 0.087846] jffs2: version 2.2. (NAND) (SUMMARY) © 2001-2006 Red Hat,Inc.
[ 0.088253] Key type asymmetric registered
[ 0.088270] asymmetric key parser 'x509' registered
[ 0.088326] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)
[ 0.088339] io scheduler mq-deadline registered
[ 0.088348] io scheduler kyber registered
[ 0.091719] sun5i-pinctrl 1c20800.pinctrl: initialized sunXi PIO driver
[ 0.139196] Serial: 8250/16550 driver,8 ports,IRQ sharing disabled
[ 0.140801] sun5i-pinctrl 1c20800.pinctrl: supply vcc-pg not found,using dummy regulator
[ 0.141725] printk: console [ttyS0] disabled
[ 0.161855] 1c28400.serial: ttyS0 at MMIO 0x1c28400 (irq = 33,base_baud = 1500000) is a U6_16550A
[ 0.626274] printk: console [ttyS0] enabled
[ 0.637985] loop: module loaded
[ 0.641727] sun5i-pinctrl 1c20800.pinctrl: supply vcc-pc not found,using dummy regulator
[ 0.650972] spi-nor spi0.0: mx25l12805d (16384 Kbytes)
[ 0.656207] 4 fixed-partitions partitions found on MTD device spi0.0
[ 0.662560] Creating 4 MTD partitions on "spi0.0":
[ 0.667376] 0x000000000000-0x0000000e0000 : "bootloader"
[ 0.673764] 0x0000000e0000-0x000000100000 : "dtb"
[ 0.679405] 0x000000100000-0x000000400000 : "kernel"
[ 0.685294] 0x000000400000-0x000000e00000 : "rootfs"
[ 0.691632] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 0.698240] ehci-pci: EHCI PCI platform driver
[ 0.702741] ehci-platform: EHCI generic platform driver
[ 0.708327] ehci-platform 1c14000.usb: EHCI Host Controller
[ 0.713962] ehci-platform 1c14000.usb: new USB bus registered,assigned bus number 1
[ 0.721820] ehci-platform 1c14000.usb: irq 23,io mem 0x01c14000
[ 0.753936] ehci-platform 1c14000.usb: USB 2.0 started,EHCI 1.00
[ 0.760211] usb usb1: New USB device found,idvendor=1d6b,idProduct=0002,bcdDevice= 5.12
[ 0.768496] usb usb1: New USB device strings: Mfr=3,Product=2,SerialNumber=1
[ 0.775727] usb usb1: Product: EHCI Host Controller
[ 0.780603] usb usb1: Manufacturer: Linux 5.12.0-rc3 ehci_hcd
[ 0.786354] usb usb1: SerialNumber: 1c14000.usb
[ 0.791446] hub 1-0:1.0: USB hub found
[ 0.795274] hub 1-0:1.0: 1 port detected
[ 0.799862] usbcore: registered new interface driver usb-storage
[ 0.806322] usb_phy_generic usb_phy_generic.0.auto: supply vcc not found,using dummy regulator
[ 0.815815] musb-hdrc musb-hdrc.1.auto: MUSB HDRC host driver
[ 0.821599] musb-hdrc musb-hdrc.1.auto: new USB bus registered,assigned bus number 2
[ 0.829667] usb usb2: New USB device found,bcdDevice= 5.12
[ 0.837954] usb usb2: New USB device strings: Mfr=3,SerialNumber=1
[ 0.845182] usb usb2: Product: MUSB HDRC host driver
[ 0.850145] usb usb2: Manufacturer: Linux 5.12.0-rc3 musb-hcd
[ 0.855896] usb usb2: SerialNumber: musb-hdrc.1.auto
[ 0.861388] hub 2-0:1.0: USB hub found
[ 0.865208] hub 2-0:1.0: 1 port detected
[ 0.870408] dummy_hcd dummy_hcd.0: USB Host+Gadget Emulator,driver 02 May 2005
[ 0.877794] dummy_hcd dummy_hcd.0: Dummy host controller
[ 0.883110] dummy_hcd dummy_hcd.0: new USB bus registered,assigned bus number 3
[ 0.890769] usb usb3: New USB device found,bcdDevice= 5.12
[ 0.899065] usb usb3: New USB device strings: Mfr=3,SerialNumber=1
[ 0.906305] usb usb3: Product: Dummy host controller
[ 0.911268] usb usb3: Manufacturer: Linux 5.12.0-rc3 dummy_hcd
[ 0.917108] usb usb3: SerialNumber: dummy_hcd.0
[ 0.923128] hub 3-0:1.0: USB hub found
[ 0.926961] hub 3-0:1.0: 1 port detected
[ 0.932117] sunxi-wdt 1c20c90.watchdog: Watchdog enabled (timeout=16 sec,Nowayout=0)
[ 0.941500] sun4i-ss 1c15000.crypto-engine: Die ID 1
[ 0.946822] sun5i-pinctrl 1c20800.pinctrl: supply vcc-pf not found,using dummy regulator
[ 0.955919] sunxi-mmc 1c0f000.mmc: Got CD GPIO
[ 0.961970] usbcore: registered new interface driver usbhid
[ 0.967613] usbhid: USB HID core driver
[ 0.972182] Loading compiled-in X.509 certificates
[ 0.995529] sunxi-mmc 1c0f000.mmc: initialized,max. request size: 16384 KB
[ 1.005319] random: fast init done
[ 1.319829] VFS: Mounted root (jffs2 filesystem) on device 31:3.
[ 1.327773] devtmpfs: mounted
[ 1.332423] Freeing unused kernel memory: 1024K
[ 1.337237] Run /sbin/init as init process
[ 1.341334] with arguments:
[ 1.344311] /sbin/init
[ 1.347016] with environment:
[ 1.350152] HOME=/
[ 1.352508] TERM=linux
[ 1.480229] random: crng init done
[ 1.723305] process '/bin/busyBox' started with executable stack
[ 2.323926] spi_master spi0: spi0.0: timeout transferring 64 bytes@10000000Hz for 210(200)ms
[ 2.323926] timeout:0
[ 2.334837] spi-nor spi0.0: SPI transfer Failed: -110
[ 2.339893] spi_master spi0: Failed to transfer one message from queue
[ 2.346432] jffs2: Write of 68 bytes at 0x004637c0 Failed. returned -110,retlen 0
[ 2.354008] jffs2: Not marking the space at 0x004637c0 as dirty because the flash driver returned retlen zero
[ 2.573913] spi_master spi0: spi0.0: timeout transferring 64 bytes@10000000Hz for 210(200)ms
[ 2.573913] timeout:0
[ 2.584796] spi-nor spi0.0: SPI transfer Failed: -110
[ 2.589850] spi_master spi0: Failed to transfer one message from queue
[ 2.596386] jffs2: Write of 68 bytes at 0x004637c0 Failed. returned -110,retlen 0
[ 2.603964] jffs2: Not marking the space at 0x004637c0 as dirty because the flash driver returned retlen zero
[ 2.833925] spi_master spi0: spi0.0: timeout transferring 64 bytes@10000000Hz for 210(200)ms
[ 2.833925] timeout:0
[ 2.844831] spi-nor spi0.0: SPI transfer Failed: -110
[ 2.849887] spi_master spi0: Failed to transfer one message from queue
[ 2.856427] jffs2: Write of 68 bytes at 0x004637c0 Failed. returned -110,retlen 0
[ 2.864003] jffs2: Not marking the space at 0x004637c0 as dirty because the flash driver returned retlen zero
[ 3.083914] spi_master spi0: spi0.0: timeout transferring 64 bytes@10000000Hz for 210(200)ms
[ 3.083914] timeout:0
[ 3.094792] spi-nor spi0.0: SPI transfer Failed: -110
[ 3.099846] spi_master spi0: Failed to transfer one message from queue
[ 3.106379] jffs2: Write of 68 bytes at 0x004637c0 Failed. returned -110,retlen 0
[ 3.113952] jffs2: Not marking the space at 0x004637c0 as dirty because the flash driver returned retlen zero
[ 3.343926] spi_master spi0: spi0.0: timeout transferring 64 bytes@10000000Hz for 210(200)ms
[ 3.343926] timeout:0
[ 3.354836] spi-nor spi0.0: SPI transfer Failed: -110
[ 3.359892] spi_master spi0: Failed to transfer one message from queue
[ 3.366433] jffs2: Write of 68 bytes at 0x004637c0 Failed. returned -110,retlen 0
[ 3.374009] jffs2: Not marking the space at 0x004637c0 as dirty because the flash driver returned retlen zero
[ 3.593914] spi_master spi0: spi0.0: timeout transferring 64 bytes@10000000Hz for 210(200)ms
[ 3.593914] timeout:0
[ 3.604791] spi-nor spi0.0: SPI transfer Failed: -110
[ 3.609844] spi_master spi0: Failed to transfer one message from queue
[ 3.616378] jffs2: Write of 68 bytes at 0x004637c0 Failed. returned -110,retlen 0
[ 3.623952] jffs2: Not marking the space at 0x004637c0 as dirty because the flash driver returned retlen zero
.dts文件的部分SPI flash:
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins_a>,<&spi0_cs0_pins_a>;
status = "okay";
flash@0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "mxicy,mx25l12805d","jedec,spi-nor";
spi-max-frequency = <0x989680>;
reg = <0>;
mode = <0>;
partition@0 {
label = "bootloader";
reg = <0x0 0xE0000>;
// read-only;
};
partition@E0000 {
label = "dtb";
reg = <0xE0000 0x20000>;
// read-only;
};
partition@100000 {
label = "kernel";
reg = <0x100000 0x300000>;
};
partition@400000 {
label = "rootfs";
reg = <0x400000 0xA00000>;
};
};
}
U-boot 配置:
BOOTARGS = console=ttyS0,115200 root=/dev/mtdblock3 rw rootwait rootfstype=jffs2 loglevel=9
BOOTCOMMAND = run distro_bootcmd;sspi;sf probe;sf read 0x43000000 0xE0000 0x4000;sf read 0x42000000 0x100000 0x2F0000;bootm 0x42000000 - 0x43000000;
#!/bin/bash
DIR="/home/ubuntu/buildroot/output/images"
sudo sunxi-fel -v -p \
spiflash-write 0x0 ${DIR}/u-boot-sunxi-with-spl.bin \
spiflash-write 0xE0000 ${DIR}/sun5i-a13.dtb \
spiflash-write 0x100000 ${DIR}/uImage \
spiflash-write 0x400000 ${DIR}/rootfs.jffs2 \
uboot ${DIR}/u-boot-sunxi-with-spl.bin
谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。