CH9344L工作异常

在ZYNQ启动过程中,USB设备会报如下错误:

Run /sbin/init as init process
usb 1-1: new low-speed USB device number 2 using ci_hdrc
INIT: version 2.99 booting
usb 1-1: device descriptor read/64, error -71
Starting udev
Starting version 249.7+
usb 1-1: device descriptor read/64, error -71
usb 1-1: new low-speed USB device number 3 using ci_hdrc

加载完之后,再去测量CH9344L硬件上的30Mhz晶振不工作。

使用示波器测量D+ D-和30Mhz晶振的输出,发现在USB和CH9344L通讯过程中,30Mhz晶振会从正常输出变化为无输出(高电平),请问可能是什么原因引起的?

硬件设计参照官方评估板设计。

您好,如上提示确为硬件工作不正常导致枚举过程失败,和设备驱动是否加载没有关联。CH9344为USB高速设备,如上信息识别为低速,可见设备上电时的枚举过程就发生了异常。芯片USB无法工作时,晶体会停振,所以根因并非晶体电路问题。

1、尝试断开串口负载(或保证CH9344比连接的串口设备先上电)再进行测试;

2、异常后,CH9344重新上下电(彻底掉电);

3、用示波器监控下CH9344的V33电源上电波形,确认下上电过程是否稳定。注:2和3均需要在断开串口负载的时候测试。


你好,我刚刚按照你的第一点操作之后,断开了四路串口所有的负载,目前是悬空状态,在第一次上电之后,在ZYNQ加载过程中并未出现刚刚的错误,但是在系统中并未找到挂载的USB设备,后面上电过程中依然会出现刚刚的错误。

后来使用示波器测量过该芯片的3V3电源,上电过程正常,并没有发现明显的掉电情况。

CH9344使用整板的3V3供电



可以提供下刚才操作的日志过程,即串口负载悬空时,上电后的和ch9344相关的系统日志。


如下

Starting kernel ...

Booting Linux on physical CPU 0x0
Linux version 5.15.19-xilinx-v2022.1 (oe-user@oe-host) (arm-xilinx-linux-gnueabi-gcc (GCC) 11.2.0, GNU ld (GNU Binutils) 2.37.20210721) #1 SMP PREEMPT Mon Apr 11 17:52:14 UTC 2022
CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
OF: fdt: Machine model: xlnx,zynq-7000
earlycon: cdns0 at MMIO 0xe0000000 (options '115200n8')
printk: bootconsole [cdns0] enabled
Memory policy: Data cache writealloc
cma: Reserved 36 MiB at 0x3dc00000
Zone ranges:
  Normal   [mem 0x0000000000000000-0x000000002fffffff]
  HighMem  [mem 0x0000000030000000-0x000000003fffffff]
Movable zone start for each node
Early memory node ranges
  node   0: [mem 0x0000000000000000-0x000000003fffffff]
Initmem setup node 0 [mem 0x0000000000000000-0x000000003fffffff]
percpu: Embedded 12 pages/cpu s16588 r8192 d24372 u49152
Built 1 zonelists, mobility grouping on.  Total pages: 260608
Kernel command line: console=ttyPS0,115200 earlycon root=/dev/mmcblk0p2 rw rootwait
Dentry cache hash table entries: 131072 (order: 7, 524288 bytes, linear)
Inode-cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
mem auto-init: stack:off, heap alloc:off, heap free:off
Memory: 990392K/1048576K available (7168K kernel code, 252K rwdata, 1932K rodata, 1024K init, 121K bss, 21320K reserved, 36864K cma-reserved, 225280K highmem)
rcu: Preemptible hierarchical RCU implementation.
rcu:    RCU event tracing is enabled.
rcu:    RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
        Trampoline variant of Tasks RCU enabled.
rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
efuse mapped to (ptrval)
slcr mapped to (ptrval)
GIC physical location is 0xf8f01000
L2C: platform modifies aux control register: 0x72360000 -> 0x72760000
L2C: DT/platform modifies aux control register: 0x72360000 -> 0x72760000
L2C-310 erratum 769419 enabled
L2C-310 enabling early BRESP for Cortex-A9
L2C-310 full line of zeros enabled for Cortex-A9
L2C-310 ID prefetch enabled, offset 1 lines
L2C-310 dynamic clock gating enabled, standby mode enabled
L2C-310 cache controller enabled, 8 ways, 512 kB
L2C-310: CACHE_ID 0x410000c8, AUX_CTRL 0x76760001
random: get_random_bytes called from start_kernel+0x364/0x5d4 with crng_init=0
zynq_clock_init: clkc starts at (ptrval)
Zynq clock init
sched_clock: 64 bits at 199MHz, resolution 5ns, wraps every 4398046511102ns
clocksource: arm_global_timer: mask: 0xffffffffffffffff max_cycles: 0x2e2049cb99, max_idle_ns: 440795211806 ns
Switching to timer-based delay loop, resolution 5ns
Console: colour dummy device 80x30
Calibrating delay loop (skipped), value calculated using timer frequency.. 399.99 BogoMIPS (lpj=1999999)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 2048 (order: 1, 8192 bytes, linear)
Mountpoint-cache hash table entries: 2048 (order: 1, 8192 bytes, linear)
CPU: Testing write buffer coherency: ok
CPU0: Spectre v2: using BPIALL workaround
CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
Setting up static identity map for 0x100000 - 0x100060
rcu: Hierarchical SRCU implementation.
smp: Bringing up secondary CPUs ...
CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
CPU1: Spectre v2: using BPIALL workaround
smp: Brought up 1 node, 2 CPUs
SMP: Total of 2 processors activated (799.99 BogoMIPS).
CPU: All CPU(s) started in SVC mode.
devtmpfs: initialized
VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
futex hash table entries: 512 (order: 3, 32768 bytes, linear)
pinctrl core: initialized pinctrl subsystem
NET: Registered PF_NETLINK/PF_ROUTE protocol family
DMA: preallocated 256 KiB pool for atomic coherent allocations
thermal_sys: Registered thermal governor 'step_wise'
cpuidle: using governor menu
amba f8801000.etb: Fixing up cyclic dependency with replicator
amba f8803000.tpiu: Fixing up cyclic dependency with replicator
amba f8804000.funnel: Fixing up cyclic dependency with replicator
amba f889c000.ptm: Fixing up cyclic dependency with f8804000.funnel
amba f889d000.ptm: Fixing up cyclic dependency with f8804000.funnel
hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
hw-breakpoint: maximum watchpoint size is 4 bytes.
zynq-ocm f800c000.ocmc: ZYNQ OCM pool: 256 KiB @ 0x(ptrval)
e0001000.serial: ttyPS1 at MMIO 0xe0001000 (irq = 33, base_baud = 6249999) is a xuartps
vgaarb: loaded
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
pps_core: LinuxPPS API ver. 1 registered
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <个人信息保护,已隐藏>
PTP clock support registered
EDAC MC: Ver: 3.0.0
FPGA manager framework
Advanced Linux Sound Architecture Driver Initialized.
clocksource: Switched to clocksource arm_global_timer
NET: Registered PF_INET protocol family
IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)
tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 6144 bytes, linear)
TCP established hash table entries: 8192 (order: 3, 32768 bytes, linear)
TCP bind hash table entries: 8192 (order: 4, 65536 bytes, linear)
TCP: Hash tables configured (established 8192 bind 8192)
UDP hash table entries: 512 (order: 2, 16384 bytes, linear)
UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)
NET: Registered PF_UNIX/PF_LOCAL protocol family
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
PCI: CLS 0 bytes, default 64
armv7-pmu f8891000.pmu: hw perfevents: no interrupt-affinity property, guessing.
hw perfevents: enabled with armv7_cortex_a9 PMU driver, 7 counters available
workingset: timestamp_bits=30 max_order=18 bucket_order=0
jffs2: version 2.2. (NAND) (SUMMARY)  ? 2001-2006 Red Hat, Inc.
bounce: pool size: 64 pages
io scheduler mq-deadline registered
io scheduler kyber registered
zynq-pinctrl 700.pinctrl: zynq pinctrl initialized
dma-pl330 f8003000.dmac: Loaded driver for PL330 DMAC-241330
dma-pl330 f8003000.dmac:        DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16
brd: module loaded
loop: module loaded
physmap-flash 60000000.flash: physmap platform flash device: [mem 0x60000000-0x61ffffff]
physmap-flash 60000000.flash: map_probe failed
spi-nor spi0.0: found n25q256a, expected n25q128a11
spi-nor spi0.0: n25q256a (32768 Kbytes)
4 fixed-partitions partitions found on MTD device spi0.0
Creating 4 MTD partitions on "spi0.0":
0x000000000000-0x000000fe0000 : "boot"
0x000000fe0000-0x000001000000 : "bootenv"
0x000001000000-0x000001fc0000 : "kernel"
0x000001fc0000-0x000002000000 : "spare"
CAN device driver interface
macb e000b000.ethernet eth0: Cadence GEM rev 0x00020118 at 0xe000b000 irq 35 (00:0a:35:00:b4:ee)
e1000e: Intel(R) PRO/1000 Network Driver
e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
ehci-pci: EHCI PCI platform driver
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
ohci-pci: OHCI PCI platform driver
uhci_hcd: USB Universal Host Controller Interface driver
usbcore: registered new interface driver cdc_acm
cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
usbcore: registered new interface driver usb-storage
usbcore: registered new interface driver usbtest
ULPI transceiver vendor/product ID 0x0451/0x1507
Found TI TUSB1210 ULPI transceiver.
ULPI integrity check: passed.
ci_hdrc ci_hdrc.0: EHCI Host Controller
ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1
ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
i2c_dev: i2c /dev entries driver
cdns-wdt f8005000.watchdog: Xilinx Watchdog Timer with timeout 10s
EDAC MC: ECC not enabled
Xilinx Zynq CpuIdle Driver started
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
ledtrig-cpu: registered to indicate activity on CPUs
clocksource: ttc_clocksource: mask: 0xffff max_cycles: 0xffff, max_idle_ns: 447945978 ns
timer #0 at (ptrval), irq=48
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
fpga_manager fpga0: Xilinx Zynq FPGA Manager registered
NET: Registered PF_INET6 protocol family
Segment Routing with IPv6
In-situ OAM (IOAM) with IPv6
sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
mmc0: SDHCI controller on e0100000.mmc [e0100000.mmc] using ADMA
NET: Registered PF_PACKET protocol family
can: controller area network core
NET: Registered PF_CAN protocol family
can: raw protocol
can: broadcast manager protocol
can: netlink gateway - max_hops=1
Registering SWP/SWPB emulation handler
e0000000.serial: ttyPS0 at MMIO 0xe0000000 (irq = 32, base_baud = 6249999) is a xuartps
printk: console [ttyPS0] enabled
printk: console [ttyPS0] enabled
printk: bootconsole [cdns0] disabled
printk: bootconsole [cdns0] disabled
of-fpga-region fpga-full: FPGA Region probed
of_cfs_init
of_cfs_init: OK
ALSA device list:
  No soundcards found.
Waiting for root device /dev/mmcblk0p2...
mmc0: new high speed SDHC card at address 5048
mmcblk0: mmc0:5048 SD32G 29.7 GiB
 mmcblk0: p1 p2
random: fast init done
EXT4-fs (mmcblk0p2): recovery complete
EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null). Quota mode: disabled.
VFS: Mounted root (ext4 filesystem) on device 179:2.
devtmpfs: mounted
Freeing unused kernel image (initmem) memory: 1024K
Run /sbin/init as init process
usb 1-1: new low-speed USB device number 2 using ci_hdrc
INIT: version 2.99 booting
usb 1-1: device descriptor read/64, error -71
Starting udev
Starting version 249.7+
usb 1-1: device descriptor read/64, error -71
usb 1-1: new low-speed USB device number 3 using ci_hdrc
zxaxi: loading out-of-tree module taints kernel.
<1>Hello module world.
zxaxi amba_pl:axi_zxdev0@0: Device Tree Probing
ZXAXI: zxaxi_dma.c: zxaxi_dma_init: 184: dev c19ee600
OF: /amba_pl/axi_zxdev0@0: could not get #dma-cells for /amba_pl/flash@60000000
ZXAXI: zxaxi_of.c: zxaxi_of_num_dma_nodes: 159: Device tree node axi_zxdev0: Unable to get the 'dmas' property length.
ZXAXI: zxaxi_dma.c: zxaxi_dma_init: 190: Get number of dma nodes error rc = -22.
ZXAXI: zxdev.c: zxaxi_probe: 91: Init error.
zxaxi: probe of amba_pl:axi_zxdev0@0 failed with error -22
usb 1-1: device descriptor read/64, error -71
usb 1-1: device descriptor read/64, error -71
usb usb1-port1: attempt power cycle
usb 1-1: new low-speed USB device number 4 using ci_hdrc
FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
usb 1-1: device not accepting address 4, error -71
usb 1-1: new low-speed USB device number 5 using ci_hdrc
usb 1-1: device not accepting address 5, error -71
usb usb1-port1: unable to enumerate USB device
EXT4-fs (mmcblk0p2): re-mounted. Opts: (null). Quota mode: disabled.
bootlogd: /dev/ttyPS0hwclock: Cannot access the Hardware Clock via any known method.
hwclock: Use the --verbose option to see the details of our search for an access method.
Fri Mar  9 12:43:58 UTC 2018
hwclock: Cannot access the Hardware Clock via any known method.
hwclock: Use the --verbose option to see the details of our search for an access method.
random: dd: uninitialized urandom read (512 bytes read)
INIT: Entering runlevel: 5
Configuring network interfaces... macb e000b000.ethernet eth0: PHY [e000b000.ethernet-ffffffff:07] driver [Micrel KSZ9031 Gigabit PHY] (irq=POLL)
macb e000b000.ethernet eth0: configuring for phy/rgmii-id link mode
udhcpc: started, v1.34.1
udhcpc: broadcasting discover
macb e000b000.ethernet eth0: Link is Up - 1Gbps/Full - flow control off
IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
udhcpc: broadcasting discover
IPv6: eth0: IPv6 duplicate address fe80::20a:35ff:fe00:b4ee used by 00:0a:35:00:b4:ee detected!
udhcpc: broadcasting discover
udhcpc: broadcasting select for 192.168.0.106, server 192.168.0.1
udhcpc: lease of 192.168.0.106 obtained from 192.168.0.1, lease time 6658
/etc/udhcpc.d/50default: Adding DNS 192.168.0.1
done.

1677055851578.jpg


image.png

从日志这边的信息来看,枚举过程仍然是有问题的。您联系下我们工程师,把图纸也发我们看下。

image.png


好的,谢谢你的解答,最后请问不同批次的芯片会有区别吗?


您好,不同批次的芯片是没有区别的。此外,您关注下是个别硬件有这个问题,还是一个普遍现象?


您好,不同批次的芯片是没有区别的。此外,您关注下是个别硬件有这个问题,还是一个普遍现象?


只有登录才能回复,可以选择微信账号登录