求教 uboot下USB的移植

时间:2021-02-25 06:37:50
最近公司想通过U盘对内核进行升级,用的是6410的开发板,我根据/common/cmd_usb.c入手,添加了uboot对usb的支持,和USB相关的开关也开了,但usb start 时扫描不到U盘输出:
e)start USB...
USB:   CLK_SRC = 7e00f01c, CLK_DIV1 = 7e00f024,SCLK_GATE = 7e00f038
scanning bus for devices... usb_scan_device :USB_MAX_DEVICE IS 32
New Device 0
usb_control_msg: request: 0x6, requesttype: 0x80
value 0x100 index 0x0 length 0x8


descriptor.bMaxPacketSize0 is 8
set address dev->devnum = 1
usb_control_msg: request: 0x5, requesttype: 0x0
value 0x1 index 0x0 length 0x0
usb_control_msg: request: 0x6, requesttype: 0x80
value 0x100 index 0x0 length 0x12
usb_control_msg: request: 0x6, requesttype: 0x80
value 0x200 index 0x0 length 0x8
usb_control_msg: request: 0x6, requesttype: 0x80
value 0x200 index 0x0 length 0x19
get_conf_no 0 Result 25, wLength 25
if 0, ep 0
##EP epmaxpacketin[1] = 2
set configuration 1
usb_control_msg: request: 0x9, requesttype: 0x0
value 0x1 index 0x0 length 0x0
new device strings: Mfr=0, Product=1, SerialNumber=0
usb_control_msg: request: 0x6, requesttype: 0x80
value 0x300 index 0x0 length 0xFF
USB device number 1 default language ID 0x409
usb_control_msg: request: 0x6, requesttype: 0x80
value 0x301 index 0x409 length 0xFF
Manufacturer 
Product      OHCI Root Hub
SerialNumber 
usb_control_msg: request: 0x6, requesttype: 0xA0
value 0x2900 index 0x0 length 0x4
usb_control_msg: request: 0x6, requesttype: 0xA0
value 0x2900 index 0x0 length 0x9
usb_control_msg: request: 0x0, requesttype: 0xA0
value 0x0 index 0x0 length 0x4
1 USB Device(s) found
       scanning bus for storage devices... 0 Storage Device(s) found


#usb info 时输出:
USB_MAX_DEVICE IS 32
1: Hub,  USB Revision 1.10
 -  OHCI Root Hub 
  - Class: Hub
   - PacketSize: 8  Configurations: 1
    - Vendor: 0x0000  Product 0x0000 Version 0.0
   Configuration: 1
  - Interfaces: 1 Self Powered 0mA
       Interface: 0
  - Alternate Setting 0, Endpoints: 1
  - Class Hub
  - Endpoint 1 In Interrupt MaxPacket 2 Interval 255ms

求教这是怎么回事啊??

27 个解决方案

#1


谁能给点思路,谢谢啦!

#2


无论插不插U盘打印的信息都是一样的!

#3


怎么没人回答啊?难道帖子要沉了!

#4


USB分析仪,或者其它仪器,先验证一下USB上电了没有,数据线上到底有没有数据。

#5


引用 4 楼  的回复:
USB分析仪,或者其它仪器,先验证一下USB上电了没有,数据线上到底有没有数据。

在uboot下插入u盘,u盘上的指示灯不亮,但在有文件系统的情况下插入u盘,u盘上的指示灯就亮,估计不是硬件的问题,以前没弄过,现在完全没有思路,都不知道哪里错了,关键是连错误输出都没有,一切正常,就是扫描不到u盘!!

#6


没人知道吗,第一次发帖难道就这样的沉了o(>﹏<)o

#7


帮忙顶下~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~别沉了~~~~~~~~~~~~~~~~~~

#8


沉啦,就这么沉啦!!

#9


禁用DCache和MMU,把延时加大一点。

#10


U盘也是一种文件系统, 根据你的描述, 在文件系统挂载后,U盘可以识别(灯亮), 那就是你初始化U盘的时候,文件系统还没初始化啊!  你把初始化检测U盘的代码,移到挂载文件系统之后,是不是就好了呢?

#11


USB设备在检测阶段和文件系统没有关系。

#12


还没到这里

#13


引用 10 楼  的回复:
U盘也是一种文件系统, 根据你的描述, 在文件系统挂载后,U盘可以识别(灯亮), 那就是你初始化U盘的时候,文件系统还没初始化啊! 你把初始化检测U盘的代码,移到挂载文件系统之后,是不是就好了呢?


还没有到那里呢,现在是检测usb的阶段

#14


引用 9 楼  的回复:
禁用DCache和MMU,把延时加大一点。


这么做貌似可以解决一些问题,但这么做的原理是什么啊?能说说嘛,谢谢,本人比较菜,刚转行做这个不到1年,请赐教0.0

#15


你的USB驱动是HOST驱动还是device驱动呀?要host驱动才能检测U盘插入,才能给u盘供电。应该跟DCASH和MMU没有关系,也和延时没有关系的。USB驱动是要host先发起通讯,device回应。

#16


引用 15 楼  的回复:
你的USB驱动是HOST驱动还是device驱动呀?要host驱动才能检测U盘插入,才能给u盘供电。应该跟DCASH和MMU没有关系,也和延时没有关系的。USB驱动是要host先发起通讯,device回应。



是host 驱动现在的情况是 
stat = 000000ff
MY: we will join in the hc_interrupt()
stat = 000000ff
MY: we will join in the hc_interrupt()

stat = 000000ff
MY: we will join in the hc_interrupt()

stat = 000000ff
MY: we will join in the hc_interrupt()

stat = 000000ff
ERROR: CTL:TIMEOUT 
DEBUG: submit_common_msg: TO status ff

DEBUG: roothub.a: 02001202 POTPGT=2 NOCP NPS NDP=2
DEBUG: roothub.b: 00000000 PPCM=0000 DR=0000
DEBUG: roothub.status: 00000000
DEBUG: roothub.portstatus [0] = 0x00000103 PPS PES CCS
DEBUG: roothub.portstatus [1] = 0x00000100 PPS
MY: we will join in the rh_check_port_status()

MY: dev->status = 80000000

DEBUG: RET(ctlr) URB:[   0] dev: 0,ep: 0-I,type:CTRL,len:0/8 stat:0x20
MY: we will join in the urb_free_priv()


dev->status == 32

USB device not responding, giving up (status=20)
        hub: disabling port 
        ......................
......................
           DEBUG: RET(rh) URB:[   0] dev: 1,ep: 0-I,type:CTRL,len:4/4 stat:0x0
  usb_ohci.c: cmd(8): a3 00 00 00 02 00 04 00
  usb_ohci.c: data(4/4): 00 01 00 00
  Port 2 Status 100 Change 0
  2 USB Device(s) found

#17


引用 14 楼  的回复:
引用 9 楼 的回复:
禁用DCache和MMU,把延时加大一点。


这么做貌似可以解决一些问题,但这么做的原理是什么啊?能说说嘛,谢谢,本人比较菜,刚转行做这个不到1年,请赐教0.0



不好意思,这个回复写错了,当我禁用MMU之后我根本就无法启动板子了,uboot不好使了,怎么回事?求指教~~           :我怎么连我自己发的帖子都没有权限删除,有没有搞错啊!!

#18


USB device not responding, giving up (status=20)
这样看来还是U盘没有响应。从你之前的描述来看,硬件上是OK的,重点查驱动吧。
这里status代表什么意思?

#19


引用 18 楼  的回复:
USB device not responding, giving up (status=20)
这样看来还是U盘没有响应。从你之前的描述来看,硬件上是OK的,重点查驱动吧。
这里status代表什么意思?

第一个是是usb_ohci.c文件中sub_comm_msg(struct usb_device *dev,...)中的在usb_def.h中查找是USB_ST_NOT_PROC 0X8000000 //not yet process  不知道是什么意思,也没找到是在哪里赋的值

第二个status 是usb.c文件下usb_control_msg()中的,它是在submit_control_msg(struct usb_device *dev,..)中给的值,这个值是其实就是DEBUG: RET(ctlr) URB:[ 0] dev: 0,ep: 0-I,type:CTRL,len:0/8 stat:0x20
中stat的值,只不过它是十进制的,
if(dev->status == 0)
       return dev->act_len;
else{
       return -1;
    }
很显然此地方返回的是-1,所以下面错了。

现在怀疑是timeout = rh_check_port_status(&gohci);里某部分出错了,导致出现超时错误。
我是把S3C2410上的usb_ohci.c往s3c6410上移植呢,由于是第一次弄,不知道改哪里,请多指教~~

#20


看我给你的私信。Q26451602交流一下。

#21


引用 17 楼 linux_rooter 的回复:
引用 14 楼  的回复:引用 9 楼 的回复:
禁用DCache和MMU,把延时加大一点。


这么做貌似可以解决一些问题,但这么做的原理是什么啊?能说说嘛,谢谢,本人比较菜,刚转行做这个不到1年,请赐教0.0


不好意思,这个回复写错了,当我禁用MMU之后我根本就无法启动板子了,uboot不好使了,怎么回事?求指教~~           :我怎么连我……


忘了告诉你禁用MMU以后就不存在虚拟地址了,U-BOOT的内存地址要改成物理地址。

#22


该回复于2012-11-15 22:29:19被管理员删除

#23


引用 21 楼 RoomHr 的回复:
引用 17 楼 linux_rooter 的回复:引用 14 楼  的回复:引用 9 楼 的回复:
禁用DCache和MMU,把延时加大一点。


这么做貌似可以解决一些问题,但这么做的原理是什么啊?能说说嘛,谢谢,本人比较菜,刚转行做这个不到1年,请赐教0.0


不好意思,这个回复写错了,当我禁用MMU之后我根本就无法启动板子了,uboot不好使了,怎么……


谢啦,这个我知道了,现在该改的也都改了,别人也都这么改的用着就好使,我的怎么还错误呢

DEBUG: SUB URB:[ 32b] dev: 0,ep: 0-I,type:CTRL,len:0/8 stat:0x80000000

DEBUG: SUB URB:[ 32e] dev: 0,ep: 0-I,type:CTRL,len:0/8 stat:0x80000000

DEBUG: 

DEBUG:  USB-error/status: 5 : 57e44aa0

DEBUG: ConditionCode 0x5

DEBUG: RET(ctlr) URB:[ 334] dev: 0,ep: 0-I,type:CTRL,len:0/8 stat:0x20


dev->status == 32


      USB device not responding, giving up (status=20)

hub: disabling port 1

my define  ....usb_clear_port_feature()

INFO: submit_control_msg

DEBUG: SUB URB:[ 33f] dev: 1,ep: 0-O,type:CTRL,len:0/0 stat:0x80000000

usb_ohci.c: cmd(8): 23 01 01 00 01 00 00 00
不知道什么原因,求助。。。。。

#24


我想问一下,s3c6410平台下的uboot usb 到底好不好使,有没有移植成功的啊??

#25


请问 lz移植成功没呢? 我也遇到这个问题了。错误在DEBUG: hc_interrupt: returning.. 。然后就time out 。请问你怎么解决这个问题的呢

#26


进展怎么样,我也开始在调试了,现象和楼主一致,请问楼主进展如何。

haidao2009呢,一起探讨一下、QQ,121313380

#27


也遇到相同的问题,device能识别一个,storage device识别不了。问一下楼主问题解决没?

#1


谁能给点思路,谢谢啦!

#2


无论插不插U盘打印的信息都是一样的!

#3


怎么没人回答啊?难道帖子要沉了!

#4


USB分析仪,或者其它仪器,先验证一下USB上电了没有,数据线上到底有没有数据。

#5


引用 4 楼  的回复:
USB分析仪,或者其它仪器,先验证一下USB上电了没有,数据线上到底有没有数据。

在uboot下插入u盘,u盘上的指示灯不亮,但在有文件系统的情况下插入u盘,u盘上的指示灯就亮,估计不是硬件的问题,以前没弄过,现在完全没有思路,都不知道哪里错了,关键是连错误输出都没有,一切正常,就是扫描不到u盘!!

#6


没人知道吗,第一次发帖难道就这样的沉了o(>﹏<)o

#7


帮忙顶下~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~别沉了~~~~~~~~~~~~~~~~~~

#8


沉啦,就这么沉啦!!

#9


禁用DCache和MMU,把延时加大一点。

#10


U盘也是一种文件系统, 根据你的描述, 在文件系统挂载后,U盘可以识别(灯亮), 那就是你初始化U盘的时候,文件系统还没初始化啊!  你把初始化检测U盘的代码,移到挂载文件系统之后,是不是就好了呢?

#11


USB设备在检测阶段和文件系统没有关系。

#12


还没到这里

#13


引用 10 楼  的回复:
U盘也是一种文件系统, 根据你的描述, 在文件系统挂载后,U盘可以识别(灯亮), 那就是你初始化U盘的时候,文件系统还没初始化啊! 你把初始化检测U盘的代码,移到挂载文件系统之后,是不是就好了呢?


还没有到那里呢,现在是检测usb的阶段

#14


引用 9 楼  的回复:
禁用DCache和MMU,把延时加大一点。


这么做貌似可以解决一些问题,但这么做的原理是什么啊?能说说嘛,谢谢,本人比较菜,刚转行做这个不到1年,请赐教0.0

#15


你的USB驱动是HOST驱动还是device驱动呀?要host驱动才能检测U盘插入,才能给u盘供电。应该跟DCASH和MMU没有关系,也和延时没有关系的。USB驱动是要host先发起通讯,device回应。

#16


引用 15 楼  的回复:
你的USB驱动是HOST驱动还是device驱动呀?要host驱动才能检测U盘插入,才能给u盘供电。应该跟DCASH和MMU没有关系,也和延时没有关系的。USB驱动是要host先发起通讯,device回应。



是host 驱动现在的情况是 
stat = 000000ff
MY: we will join in the hc_interrupt()
stat = 000000ff
MY: we will join in the hc_interrupt()

stat = 000000ff
MY: we will join in the hc_interrupt()

stat = 000000ff
MY: we will join in the hc_interrupt()

stat = 000000ff
ERROR: CTL:TIMEOUT 
DEBUG: submit_common_msg: TO status ff

DEBUG: roothub.a: 02001202 POTPGT=2 NOCP NPS NDP=2
DEBUG: roothub.b: 00000000 PPCM=0000 DR=0000
DEBUG: roothub.status: 00000000
DEBUG: roothub.portstatus [0] = 0x00000103 PPS PES CCS
DEBUG: roothub.portstatus [1] = 0x00000100 PPS
MY: we will join in the rh_check_port_status()

MY: dev->status = 80000000

DEBUG: RET(ctlr) URB:[   0] dev: 0,ep: 0-I,type:CTRL,len:0/8 stat:0x20
MY: we will join in the urb_free_priv()


dev->status == 32

USB device not responding, giving up (status=20)
        hub: disabling port 
        ......................
......................
           DEBUG: RET(rh) URB:[   0] dev: 1,ep: 0-I,type:CTRL,len:4/4 stat:0x0
  usb_ohci.c: cmd(8): a3 00 00 00 02 00 04 00
  usb_ohci.c: data(4/4): 00 01 00 00
  Port 2 Status 100 Change 0
  2 USB Device(s) found

#17


引用 14 楼  的回复:
引用 9 楼 的回复:
禁用DCache和MMU,把延时加大一点。


这么做貌似可以解决一些问题,但这么做的原理是什么啊?能说说嘛,谢谢,本人比较菜,刚转行做这个不到1年,请赐教0.0



不好意思,这个回复写错了,当我禁用MMU之后我根本就无法启动板子了,uboot不好使了,怎么回事?求指教~~           :我怎么连我自己发的帖子都没有权限删除,有没有搞错啊!!

#18


USB device not responding, giving up (status=20)
这样看来还是U盘没有响应。从你之前的描述来看,硬件上是OK的,重点查驱动吧。
这里status代表什么意思?

#19


引用 18 楼  的回复:
USB device not responding, giving up (status=20)
这样看来还是U盘没有响应。从你之前的描述来看,硬件上是OK的,重点查驱动吧。
这里status代表什么意思?

第一个是是usb_ohci.c文件中sub_comm_msg(struct usb_device *dev,...)中的在usb_def.h中查找是USB_ST_NOT_PROC 0X8000000 //not yet process  不知道是什么意思,也没找到是在哪里赋的值

第二个status 是usb.c文件下usb_control_msg()中的,它是在submit_control_msg(struct usb_device *dev,..)中给的值,这个值是其实就是DEBUG: RET(ctlr) URB:[ 0] dev: 0,ep: 0-I,type:CTRL,len:0/8 stat:0x20
中stat的值,只不过它是十进制的,
if(dev->status == 0)
       return dev->act_len;
else{
       return -1;
    }
很显然此地方返回的是-1,所以下面错了。

现在怀疑是timeout = rh_check_port_status(&gohci);里某部分出错了,导致出现超时错误。
我是把S3C2410上的usb_ohci.c往s3c6410上移植呢,由于是第一次弄,不知道改哪里,请多指教~~

#20


看我给你的私信。Q26451602交流一下。

#21


引用 17 楼 linux_rooter 的回复:
引用 14 楼  的回复:引用 9 楼 的回复:
禁用DCache和MMU,把延时加大一点。


这么做貌似可以解决一些问题,但这么做的原理是什么啊?能说说嘛,谢谢,本人比较菜,刚转行做这个不到1年,请赐教0.0


不好意思,这个回复写错了,当我禁用MMU之后我根本就无法启动板子了,uboot不好使了,怎么回事?求指教~~           :我怎么连我……


忘了告诉你禁用MMU以后就不存在虚拟地址了,U-BOOT的内存地址要改成物理地址。

#22


该回复于2012-11-15 22:29:19被管理员删除

#23


引用 21 楼 RoomHr 的回复:
引用 17 楼 linux_rooter 的回复:引用 14 楼  的回复:引用 9 楼 的回复:
禁用DCache和MMU,把延时加大一点。


这么做貌似可以解决一些问题,但这么做的原理是什么啊?能说说嘛,谢谢,本人比较菜,刚转行做这个不到1年,请赐教0.0


不好意思,这个回复写错了,当我禁用MMU之后我根本就无法启动板子了,uboot不好使了,怎么……


谢啦,这个我知道了,现在该改的也都改了,别人也都这么改的用着就好使,我的怎么还错误呢

DEBUG: SUB URB:[ 32b] dev: 0,ep: 0-I,type:CTRL,len:0/8 stat:0x80000000

DEBUG: SUB URB:[ 32e] dev: 0,ep: 0-I,type:CTRL,len:0/8 stat:0x80000000

DEBUG: 

DEBUG:  USB-error/status: 5 : 57e44aa0

DEBUG: ConditionCode 0x5

DEBUG: RET(ctlr) URB:[ 334] dev: 0,ep: 0-I,type:CTRL,len:0/8 stat:0x20


dev->status == 32


      USB device not responding, giving up (status=20)

hub: disabling port 1

my define  ....usb_clear_port_feature()

INFO: submit_control_msg

DEBUG: SUB URB:[ 33f] dev: 1,ep: 0-O,type:CTRL,len:0/0 stat:0x80000000

usb_ohci.c: cmd(8): 23 01 01 00 01 00 00 00
不知道什么原因,求助。。。。。

#24


我想问一下,s3c6410平台下的uboot usb 到底好不好使,有没有移植成功的啊??

#25


请问 lz移植成功没呢? 我也遇到这个问题了。错误在DEBUG: hc_interrupt: returning.. 。然后就time out 。请问你怎么解决这个问题的呢

#26


进展怎么样,我也开始在调试了,现象和楼主一致,请问楼主进展如何。

haidao2009呢,一起探讨一下、QQ,121313380

#27


也遇到相同的问题,device能识别一个,storage device识别不了。问一下楼主问题解决没?