问题描述
平台:rk3228 android7.1
问题:板子上有一个USB 4G模块,模块不是用标准的USB接口,而是M2接口。接着4G模组开机是可以正常工作的,但是只要点开任意一个app,就会出现设备断开,之后再重新连接。
相关的log如下:
[ 385.418741] usb 1-1: new high-speed USB device number 18 using ehci-platform
[ 385.571469] usb 1-1: New USB device found, idVendor=2ecc, idProduct=3001
[ 385.571543] usb 1-1: New USB device strings: Mfr=3, Product=2, SerialNumber=0
[ 385.571578] usb 1-1: Product: WUKONG
[ 385.571603] usb 1-1: Manufacturer: MARVELL
[ 386.065871] usb 1-1: USB disconnect, device number 18
[ 393.369346] usb 1-1: new high-speed USB device number 19 using ehci-platform
[ 393.518644] usb 1-1: New USB device found, idVendor=2c7c, idProduct=6005
[ 393.518721] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 393.518764] usb 1-1: Product: Android
[ 393.518801] usb 1-1: Manufacturer: Android
[ 393.518835] usb 1-1: SerialNumber: 0000
[ 393.531364] rndis_host 1-1:1.0 usb0: register 'rndis_host' at usb-30080000.ehci0-1, RNDIS device, 02:0c:29:a3:9b:6d
[ 393.538138] option 1-1:1.2: GSM modem (1-port) converter detected
[ 393.541797] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
[ 393.543830] option 1-1:1.3: GSM modem (1-port) converter detected
[ 393.546451] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
[ 442.186492] usb 1-1: USB disconnect, device number 19
log与正常的拔出完全一样,未见异常报错。
分析过程
从问题描述看,最关键的应该是“只要点开任意一个app,就会出现设备断开”,什么情况下会出现这种问题呢?
- USB供电,点开一个app,CPU的负载可能增大,这时候会提高CPU频率,如果供电不足,可能会导致USB供电不稳定,因此会导致USB供电。要确认供电,一般会把USB相关的供电都确认一遍,USB相关的供电包括:设备的VBUS和USB-PHY的供电,USB-PHY的供电一般在原理图可以看到,如下图的USB_AVDD_3V3,USB_DVDD_1V0:
然而经过示波器测量,在开启app的过程中,USB相关的供电都很稳定,未发现异常。 - 为了确保CPU,DDR变频的影响,把CPU,DDR定频再测试,发现还是不能解决问题。
- 根据经验,有时候LPM也会导致USB设备异常断开,把LPM功能关闭,却发现该SDK本来就没有用到LPM。
- 休眠可能会导致USB异常,为了排除影响,把sutosuspend和USB-PHY休眠都关了,问题还是未能解决。
- 没招了,只能重新查电路,发现M2的接口里面不止有USB数据线,还有4G模块的reset脚,查了一下dts配置,竟然把reset脚配置到codec模块下的spk_ctl_io,这下找到问题了,把该引脚配置改为硬件对应的引脚即可。
问题解释
由于把4G模块的reset脚配置到codec模块的spk_ctl_io,一般android系统会有提示音,点开app的时候会打开音频,因此会操作reset脚,这时候就会误操作到4G模块的reset脚,导致4G模块断开了。