jerryshuuei 发表于 2024-5-11 10:35:39

自制nuc980开发板上电启动Linux未成功-卡在内核初始化外设阶段

本帖最后由 jerryshuuei 于 2024-5-12 08:31 编辑

Hi 大家好! 根据上一个帖子大家指出的问题, 我又重新画了块板子.

上一块板子电压上电不对, 排查来排查去发现3v3, 1v2, 1v8单独接入时都是正常的,
但是1v2和3v3同时接入, 1v2被拉到了2v2... 感觉只有芯片内部出问题了.

现在重新画了块板子, 分成了好几块板子拼接. 电源板, 核心板, 底板. 留了以太网的接口.
目前可以实现的:
1. 上电后电压正常;
2. USB启动: 与PC机上的新唐Nuwriter烧录软件建立连接;
3. SD卡启动: 未完全成功

目前我的板子算一个最小系统板:
1. SD卡作为"启动盘",
2. 一个串口输出调试信息,
3. 一个USB口来和Nuwriter烧录软件对接.
4. 核心板上引出了一组SPI Flash接口和RMII以太网接口作为后续扩展

现在的实物板子和SD卡启动的问题


-------------------------------
之前在新唐官方开发板NUC980-IIOT(NUC980DR61Y)开发好了软件应用,
现在直接将SD卡用在我的板子(NUC980DR61YC)上.

SD卡启动的时候, 串口有输出, 读取加载uboot成功, 内核已加载到内存.
不知道是不是一些外设没有的原因... 导致一直卡在了
...
nuc980-ohci b0017000.usbh_ohci: Nuvoton NUC980 OHCI Host Controller
nuc980-ohci b0017000.usbh_ohci: new USB bus registered, assigned bus number 2
nuc980-ohci b0017000.usbh_ohci: irq 24, io mem 0xb0017000
...就没有后续了

官方板子上的启动输出是
'''
nuc980-ohci b0017000.usbh_ohci: Nuvoton NUC980 OHCI Host Controller
nuc980-ohci b0017000.usbh_ohci: new USB bus registered, assigned bus number 2
nuc980-ohci b0017000.usbh_ohci: irq 24, io mem 0xb0017000
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 8 ports detected
NUC980 OHCI init done.
'''


我想知道是我硬件的问题还是固件的问题.
重新编译固件可以解决吗?
或者我飞几根线配置对应的引脚可以解决吗?



下面是两块板子的对同一张SD卡的完整启动输出对比
---------------------------
自制新唐NUC980最小系统板的输出:
感觉像是OHCI未能初始化成功就一直卡着了...
一开始的Err-CRC7是什么情况? 同一张卡...

NUC980 IBR 20180813
Boot from SD
Err-CRC7        # 这个是什么意思?
DDR-OK
finish SD dow�d


U-Boot 2016.11-g4739e90-dirty (Feb 26 2024 - 09:56:37 +0800)

CPU: NUC980
Board: NUC980
DRAM:64 MiB
MMC:   NUC980 SD: 0
In:    serial
Out:   serial
Err:   serial
Net:   Net Initialization Skipped
No ethernet found.
Hit any key to stop autoboot:0
reading uImage
3833240 bytes read in 506 ms (7.2 MiB/s)
reading nuc980-dev-v1.0.dtb
27807 bytes read in 8 ms (3.3 MiB/s)
## Booting kernel from Legacy Image at 00007fc0 ...
   Image Name:   Linux-5.10.140+
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3833176 Bytes = 3.7 MiB
   Load Address: 00008000
   Entry Point:00008000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 00c00000
   Booting using the fdt blob at 0xc00000
   XIP Kernel Image ... OK
   Loading Device Tree to 03e7b000, end 03e84c9e ... OK

StartiÿBooting Linux on physical CPU 0x0
Linux version 5.10.140+ (shuuei@H8) (arm-buildroot-linux-gnueabi-gcc.br_real (Buildroot 2023.02.8) 11.4.0, GNU ld (GNU Binutils) 2.38) #1 PREEMPT Mon Feb 26 10:18:45 CST 2024
CPU: ARM926EJ-S revision 5 (ARMv5TEJ), cr=0005317f
CPU: VIVT data cache, VIVT instruction cache
OF: fdt: Machine model: Nuvoton NUC980 DEV V1.0
Memory policy: Data cache writeback
Zone ranges:
Normal   
Movable zone start for each node
Early memory node ranges
node   0:
Initmem setup node 0
Built 1 zonelists, mobility grouping on.Total pages: 16256
Kernel command line: console=ttyS0,115200n8 noinitrd rootfstype=ext4 root=/dev/mmcblk0p2 rw rootwait mem=64M
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes, linear)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes, linear)
mem auto-init: stack:off, heap alloc:off, heap free:off
Memory: 56516K/65536K available (5789K kernel code, 680K rwdata, 1252K rodata, 168K init, 244K bss, 9020K reserved, 0K cma-reserved)
SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
rcu: Preemptible hierarchical RCU implementation.
rcu:         RCU event tracing is enabled.
        Trampoline variant of Tasks RCU enabled.
rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
NR_IRQS: 545
clocksource: nuc980-timer5: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 62215505635 ns
sched_clock: 24 bits at 120kHz, resolution 8333ns, wraps every 69905062489ns
Console: colour dummy device 80x30
printk: console enabled
Calibrating delay loop... 148.88 BogoMIPS (lpj=744448)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
CPU: Testing write buffer coherency: ok
Setting up static identity map for 0x8400 - 0x843c
rcu: Hierarchical SRCU implementation.
devtmpfs: initialized
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
futex hash table entries: 256 (order: -1, 3072 bytes, linear)
pinctrl core: initialized pinctrl subsystem
NET: Registered protocol family 16
DMA: preallocated 256 KiB pool for atomic coherent allocations
<DT> nuc980_dt_device_init +
<DT> nuc980_dt_device_init -
nuc980-pinctrl apb:pinctrl@b0000000: initialized NUC980 pinctrl driver
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
mc: Linux media interface: v0.10
videodev: Linux video capture interface: v2.00
clocksource: Switched to clocksource nuc980-timer5
NET: Registered protocol family 2
IP idents hash table entries: 2048 (order: 2, 16384 bytes, linear)
tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
TCP established hash table entries: 1024 (order: 0, 4096 bytes, linear)
TCP bind hash table entries: 1024 (order: 0, 4096 bytes, linear)
TCP: Hash tables configured (established 1024 bind 1024)
UDP hash table entries: 256 (order: 0, 4096 bytes, linear)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes, linear)
NET: Registered protocol family 1
NetWinder Floating Point Emulator V0.97 (double precision)
workingset: timestamp_bits=30 max_order=14 bucket_order=0
jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
NET: Registered protocol family 38
Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)
io scheduler mq-deadline registered
io scheduler kyber registered
nuc980_gpio_probe - pdev = b0004000.gpio
nuc980_dma_probe - pdev = b0008000.dma
nuc980-dma b0008000.dma: NUC980 DMA ready
b0070000.serial: ttyS0 at I/O 0xf0070000 (irq = 36, base_baud = 750000) is a NUC980
brd: module loaded
nuc980 mtd nand driver version: 20220317
RX nuc980_qspi0_probe: dma0chan0 module removed
TX nuc980_qspi0_probe: dma0chan1 module removed
spi-nand: probe of spi0.0 failed with error -110
CAN device driver interface
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
EHCI over-current active level low...
nuc980-ehci b0015000.usbh_ehci: Nuvoton NUC980 EHCI Host Controller
nuc980-ehci b0015000.usbh_ehci: new USB bus registered, assigned bus number 1
nuc980-ehci b0015000.usbh_ehci: irq 23, io mem 0xb0015000


---------------------------
新唐官方NUC980-iiot板同一张SD卡的输出正常, 顺利到login

NUC980 IBR 20180813
Boot from SD
DDR-OK
finish SD dow�d


U-Boot 2016.11-g4739e90-dirty (Feb 26 2024 - 09:56:37 +0800)

CPU: NUC980
Board: NUC980
DRAM:64 MiB
MMC:   NUC980 SD: 0
In:    serial
Out:   serial
Err:   serial
Net:   Net Initialization Skipped
No ethernet found.
Hit any key to stop autoboot:0
reading uImage
3833240 bytes read in 506 ms (7.2 MiB/s)
reading nuc980-dev-v1.0.dtb
27807 bytes read in 8 ms (3.3 MiB/s)
## Booting kernel from Legacy Image at 00007fc0 ...
   Image Name:   Linux-5.10.140+
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3833176 Bytes = 3.7 MiB
   Load Address: 00008000
   Entry Point:00008000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 00c00000
   Booting using the fdt blob at 0xc00000
   XIP Kernel Image ... OK
   Loading Device Tree to 03e7b000, end 03e84c9e ... OK

StartiÿBooting Linux on physical CPU 0x0
Linux version 5.10.140+ (shuuei@H8) (arm-buildroot-linux-gnueabi-gcc.br_real (Buildroot 2023.02.8) 11.4.0, GNU ld (GNU Binutils) 2.38) #1 PREEMPT Mon Feb 26 10:18:45 CST 2024
CPU: ARM926EJ-S revision 5 (ARMv5TEJ), cr=0005317f
CPU: VIVT data cache, VIVT instruction cache
OF: fdt: Machine model: Nuvoton NUC980 DEV V1.0
Memory policy: Data cache writeback
Zone ranges:
Normal   
Movable zone start for each node
Early memory node ranges
node   0:
Initmem setup node 0
Built 1 zonelists, mobility grouping on.Total pages: 16256
Kernel command line: console=ttyS0,115200n8 noinitrd rootfstype=ext4 root=/dev/mmcblk0p2 rw rootwait mem=64M
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes, linear)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes, linear)
mem auto-init: stack:off, heap alloc:off, heap free:off
Memory: 56516K/65536K available (5789K kernel code, 680K rwdata, 1252K rodata, 168K init, 244K bss, 9020K reserved, 0K cma-reserved)
SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
rcu: Preemptible hierarchical RCU implementation.
rcu:         RCU event tracing is enabled.
        Trampoline variant of Tasks RCU enabled.
rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
NR_IRQS: 545
clocksource: nuc980-timer5: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 62215505635 ns
sched_clock: 24 bits at 120kHz, resolution 8333ns, wraps every 69905062489ns
Console: colour dummy device 80x30
printk: console enabled
Calibrating delay loop... 148.88 BogoMIPS (lpj=744448)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
CPU: Testing write buffer coherency: ok
Setting up static identity map for 0x8400 - 0x843c
rcu: Hierarchical SRCU implementation.
devtmpfs: initialized
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
futex hash table entries: 256 (order: -1, 3072 bytes, linear)
pinctrl core: initialized pinctrl subsystem
NET: Registered protocol family 16
DMA: preallocated 256 KiB pool for atomic coherent allocations
<DT> nuc980_dt_device_init +
<DT> nuc980_dt_device_init -
nuc980-pinctrl apb:pinctrl@b0000000: initialized NUC980 pinctrl driver
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
mc: Linux media interface: v0.10
videodev: Linux video capture interface: v2.00
clocksource: Switched to clocksource nuc980-timer5
NET: Registered protocol family 2
IP idents hash table entries: 2048 (order: 2, 16384 bytes, linear)
tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
TCP established hash table entries: 1024 (order: 0, 4096 bytes, linear)
TCP bind hash table entries: 1024 (order: 0, 4096 bytes, linear)
TCP: Hash tables configured (established 1024 bind 1024)
UDP hash table entries: 256 (order: 0, 4096 bytes, linear)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes, linear)
NET: Registered protocol family 1
NetWinder Floating Point Emulator V0.97 (double precision)
workingset: timestamp_bits=30 max_order=14 bucket_order=0
jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
NET: Registered protocol family 38
Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)
io scheduler mq-deadline registered
io scheduler kyber registered
nuc980_gpio_probe - pdev = b0004000.gpio
nuc980_dma_probe - pdev = b0008000.dma
nuc980-dma b0008000.dma: NUC980 DMA ready
b0070000.serial: ttyS0 at I/O 0xf0070000 (irq = 36, base_baud = 750000) is a NUC980
brd: module loaded
nuc980 mtd nand driver version: 20220317
RX nuc980_qspi0_probe: dma0chan0 module removed
TX nuc980_qspi0_probe: dma0chan1 module removed
spi-nand spi0.0: Winbond SPI NAND was found.
spi-nand spi0.0: 128 MiB, block size: 128 KiB, page size: 2048, OOB size: 64
2 fixed-partitions partitions found on MTD device spi0.0
Creating 2 MTD partitions on "spi0.0":
0x000000000000-0x000000800000 : "kernel"
0x000000800000-0x000001000000 : "rootfs"
CAN device driver interface
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
EHCI over-current active level low...
nuc980-ehci b0015000.usbh_ehci: Nuvoton NUC980 EHCI Host Controller
nuc980-ehci b0015000.usbh_ehci: new USB bus registered, assigned bus number 1
nuc980-ehci b0015000.usbh_ehci: irq 23, io mem 0xb0015000
nuc980-ehci b0015000.usbh_ehci: USB 2.0 started, EHCI 0.95
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 2 ports detected
NUC980 EHCI init done.
ehci-platform: EHCI generic platform driver
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
usb_hcd_nuc980_probe, name: b0017000.usbh_ohci, 0
nuc980-ohci b0017000.usbh_ohci: Nuvoton NUC980 OHCI Host Controller
nuc980-ohci b0017000.usbh_ohci: new USB bus registered, assigned bus number 2
nuc980-ohci b0017000.usbh_ohci: irq 24, io mem 0xb0017000
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 8 ports detected
NUC980 OHCI init done.
ohci-platform: OHCI generic platform driver
usbcore: registered new interface driver usb-storage
i2c /dev entries driver
usb usb1-port1: over-current condition
nuc980_sd_probe - pdev = b0018000.sdh
NUC980 Crypto engine enabled.
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
NET: Registered protocol family 10
usb usb2-port1: over-current condition
Segment Routing with IPv6
sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
NET: Registered protocol family 17
can: controller area network core
NET: Registered protocol family 29
can: raw protocol
can: broadcast manager protocol
usb usb1-port2: over-current condition
can: netlink gateway - max_hops=1
Waiting for root device /dev/mmcblk0p2...
usb usb2-port2: over-current condition
usb usb2-port3: over-current condition
usb usb2-port4: over-current condition
usb usb2-port5: over-current condition
usb usb2-port6: over-current condition
usb usb2-port7: over-current condition
usb usb2-port8: over-current condition
mmc0: new high speed SDHC card at address 59b4
mmcblk0: mmc0:59b4 SMI   15.0 GiB
mmcblk0: p1 p2
EXT4-fs (mmcblk0p2): recovery complete
EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) on device 179:2.
devtmpfs: mounted
Freeing unused kernel memory: 168K
Kernel memory protection not selected by kernel config.
Run /sbin/init as init process
EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
Seeding 256 bitsrandom: crng init done
and crediting
Saving 256 bits of creditable seed for next boot
Starting syslogd: OK
Starting klogd: OK
Running sysctl: OK
Starting network: OK
Starting ntpd: OK
Starting nginx...
Starting sshd: OK

Welcome to Buildroot
buildroot login:


-------
两块板子的对比

NUC980-iiot



我的板子


-----
主要问题

未能成功启动进入login界面, 可能是什么原因呢? 是我硬件的问题还是固件的问题呢?
1. 重新配置编译固件可以解决吗? 是需要单独编译Linux内核, 配置设备树吗?
2. 飞几根线配置对应的引脚可以解决吗?


------
其他一些问题

1. 电源板2层, DC-DC芯片布局这样可以吗? 比以前有没有不辣眼睛了一点么...



2. 核心板4层: 电容好多... 抄的官方板的位号和布局...
后续想加SPI Flash存储器作为更新升级的中转, 不知道行不行.




3. 底板4层. 现在复位按钮不灵光...有时候按下没有反应... 是10/1uF电容的原因吗


这是我的复位电路. 有时候没反应就只能手动飞线复位...




4. 铺铜问题: 这次我的几块板子都没有铺铜... 会不会有什么影响呢
VSS和几路VDD都是30mil的线直接在对应的层手动拉.
不太喜欢铺铜, 觉得不铺铜可以看到每个层里面的线, 挺好看的.{:biggrin:}


5. 以太网拓展板的问题: 我是想单独做一块以太网板拼接,
但是这样信号通过这么多排针排母, 会有什么问题么...


6: 还有很多看不懂官方设计的问题,
像复位电路, usb电源电路, usb和sd卡座接地电路, 磁珠选型等


官方复位电路




官方外壳接地电路




官方usb标识电源




官方磁珠与0欧电阻




还请大家批评指正! 答疑解惑! 谢谢!
-----
参考资料
1. 新唐官方板使用手册
芯片手册
硬件参考设计
2. 开源NUC980设计
3. B站UP主讲解NUC980
4. 开源f1c200s设计记录

lnso 发表于 2024-5-11 12:50:25

晶振会不会太靠近板边?

liuzhijun2008 发表于 2024-5-11 14:02:13

为啥要用SD卡作为启动呢?官方的板子,要么是用SPI flash。要么使用SPI nand 。

jerryshuuei 发表于 2024-5-11 14:34:42

liuzhijun2008 发表于 2024-5-11 14:02
为啥要用SD卡作为启动呢?官方的板子,要么是用SPI flash。要么使用SPI nand 。 ...
(引用自3楼)

官方的NUC980-iitot型号的板子提供spi nand flash和sd卡两种板上存储介质的启动方式

主要是因为自己之前用树莓派, 觉得SD卡很方便, 想换就换. 嘿嘿

myiccdream 发表于 2024-5-11 14:53:35

官方的复位电路就是为了等VDD12 和 VDD33都稳定。 VDD12在上电过程,通过电容开机三极管,从而拉低RST。

angler12 发表于 2024-5-11 15:00:46

本帖最后由 angler12 于 2024-5-11 15:03 编辑

PG两个脚啥状态,还有PG8,PG9两个脚啥状态?

jerryshuuei 发表于 2024-5-12 07:15:15

本帖最后由 jerryshuuei 于 2024-5-12 07:16 编辑

lnso 发表于 2024-5-11 12:50
晶振会不会太靠近板边?
(引用自2楼)

噢! 好像确实... 这个应该怎么再往里放啊... 边上有一些线要引出, 还是说过孔打到底面?

我想只用0805的电阻电容来着... 好焊一点...

jerryshuuei 发表于 2024-5-12 07:32:04

本帖最后由 jerryshuuei 于 2024-5-12 08:06 编辑

angler12 发表于 2024-5-11 15:00
PG两个脚啥状态,还有PG8,PG9两个脚啥状态?
(引用自6楼)

额 PG1对应SW_2, PG0对应SW_1
拨码开关接到地是开, 对应丝印是ON, 电位表示是0

USB启动的时候PG是00
SD卡启动的时候PG是01

我没有接SPI Flash, PG也会影响么?
目前焊的时候R6是没有焊的, PG8悬空,
PG9对应的R7是焊上接地的.

jerryshuuei 发表于 2024-5-12 07:56:05

myiccdream 发表于 2024-5-11 14:53
官方的复位电路就是为了等VDD12 和 VDD33都稳定。 VDD12在上电过程,通过电容开机三极管,从而拉低RST。
...
(引用自5楼)

信息量好大! 学习了! 感谢!

这个延迟时间和等待电源稳定感觉自己画板子抄板子的时候根本意识不到...

还有像用三极管拉低, FB磁珠, 470欧, 4.7欧等各种阻值的电阻...也想不到

而且像我启动不了的原因应该怎么排查啊, 重新做固件还是飞线呢...

这回把几块板子都分开了, 重新画和焊也方便一点

jerryshuuei 发表于 2024-5-13 16:16:09

啊 把对应设备树dts文件里相应的ohci, ehci的地址给disabled掉了

可以进入系统了{:cry:}

jerryshuuei 发表于 2024-5-13 16:24:40

jerryshuuei 发表于 2024-5-12 07:32
额 PG1对应SW_2, PG0对应SW_1
拨码开关接到地是开, 对应丝印是ON, 电位表示是0

(引用自8楼)

噢... sd卡也是用spi通信的... 所以两个应该只能焊接一个
页: [1]
查看完整版本: 自制nuc980开发板上电启动Linux未成功-卡在内核初始化外设阶段