TI中文支持网
TI专业的中文技术问题搜集分享网站

am3358 usb功能异常

我现在用的am3358,linux内核版本3.8.13 ,标准版是beaglebone black
首先我做了2次其他实验:
    1、我只将usb0端口设置成host模式,能够发现usb0端口下的设备。

           此时我修改了am33xx.dtsi文件中,关于usb_otg_hs部分的

usb_otg_hs: usb@47400000 {
            compatible = "ti,musb-am33xx";
            reg = <0x47400000 0x1000    /* usbss */
                   0x47401000 0x800        /* musb instance 0 */
                   0x47401800 0x800>;    /* musb instance 1 */
            interrupts = <17        /* usbss */
                      18        /* musb instance 0 */
                      19>;        /* musb instance 1 */
                      
            multipoint = <1>;
            num-eps = <16>;
            ram-bits = <12>;
            port0-mode = <1>;       /*     port1-mode = <1>; */            power = <250>;
            ti,hwmods = "usb_otg_hs";
            status = "disabled";
        };


   2、我只将usb1端口设置成host模式,能够发现usb1端口下的设备。

    此时我修改了am33xx.dtsi文件中,关于usb_otg_hs部分的

usb_otg_hs: usb@47400000 {
            compatible = "ti,musb-am33xx";
            reg = <0x47400000 0x1000    /* usbss */
                   0x47401000 0x800        /* musb instance 0 */
                   0x47401800 0x800>;    /* musb instance 1 */
            interrupts = <17        /* usbss */
                      18        /* musb instance 0 */
                      19>;        /* musb instance 1 */
                      
            multipoint = <1>;
            num-eps = <16>;
            ram-bits = <12>;
       /*     port0-mode = <1>; */           port1-mode = <1>;             power = <250>;
            ti,hwmods = "usb_otg_hs";
            status = "disabled";
        };


     3、目前我把cpu的usb控制器的两个端口均设置成host模式,此时只能发现usb0下的设备,usb1的设备发现不到,这是我遇到的问题。

    此时我修改了am33xx.dtsi文件中,关于usb_otg_hs部分的

usb_otg_hs: usb@47400000 {
            compatible = "ti,musb-am33xx";
            reg = <0x47400000 0x1000    /* usbss */
                   0x47401000 0x800        /* musb instance 0 */
                   0x47401800 0x800>;    /* musb instance 1 */
            interrupts = <17        /* usbss */
                      18        /* musb instance 0 */
                      19>;        /* musb instance 1 */
                      
            multipoint = <1>;
            num-eps = <16>;
            ram-bits = <12>;
            port0-mode = <1>;            port1-mode = <1>;            power = <250>;
            ti,hwmods = "usb_otg_hs";
            status = "disabled";
        };
       更改host模式是通过设备树中的port0-mode和port1-mode设置的。请指教!

Steven Liu1:

kernel 3.8这个是个中间版本,TI发布的Linux SDK release,只有kernel3.2,和3.12两个版本,对于BBB的支持也是在这两个版本上做支持,所以建议你看一下是否Linux SDK7.0(kernel3.12)也会出现这个问题,如果有的话,请反馈给我们。

下载地址:http://software-dl.ti.com/sitara_linux/esd/AM335xSDK/latest/index_FDS.html

Yaoming Qin:

能不能在dts文件里面把usb分两个口描述看看。

albert wang3:

回复 Yaoming Qin:

Thanks!       

        我在musb_core.c文件的 musb_init_controller 函数中,

 加了一句musb_writeb(musb->mregs, MUSB_DEVCTL,0x01); 就可以了。不知道这样设置会不会有其他问题呢。

       您说可以分开来设置,这个我不太会可以给一个例子么?

代码片段:

    if (plat->mode == MUSB_HOST) {    /* host mode */        printk("musb_init_controller host\n");        del_timer(&musb->otg_timer);        MUSB_HST_MODE(musb);        musb->xceiv->otg->default_a = 1;        musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;        status = usb_add_hcd(hcd, 0, 0);        hcd->self.uses_pio_for_control = 1;        musb_writeb(musb->mregs, MUSB_DEVCTL,0x01);        dev_dbg(musb->controller, "%s mode, status %d, devctl %02x %c\n",            "HOST", status,            musb_readb(musb->mregs, MUSB_DEVCTL),            (musb_readb(musb->mregs, MUSB_DEVCTL)                & MUSB_DEVCTL_BDEVICE                ? 'B' : 'A'));        printk("%s mode, status %d, devctl %02x %c\n",            "HOST", status,            musb_readb(musb->mregs, MUSB_DEVCTL),            (musb_readb(musb->mregs, MUSB_DEVCTL)                & MUSB_DEVCTL_BDEVICE                ? 'B' : 'A'));        printk("musb init MUSB_DEVCTL %d \n",MUSB_DEVCTL);            }

Yaoming Qin:

回复 albert wang3:

1. 不建议该usb core的代码,这部分代码我们也没有文档。

2. 我说的就是把usb的节点分成两个节点描述。

binbin wang:

回复 Yaoming Qin:

我们用的是ti-processor-sdk-linux-am335x-evm-01.00.00.00。如何更改设备树让usb0和usb1都工作在host模式。

Jian Zhou:

回复 binbin wang:

和上面提到的修改dts的方法是一样的

binbin wang:

回复 Jian Zhou:

说明下,我们需要用到USB0和USB1。并且都要作为host模式。USB0_DRVVBUS控制电源芯片使USB0_VBUS和USB1_VBUS同时上电。但是发现修改dtb将usb0:usb@47401000中的dr_mode 改为host 。usb1:usb@47401800中的dr_mode也改为host,其它的都没有修改,这个时候usb0和usb1都不是处于otg模式了吧但是内核启动的时候却没有启动任何一个usb。测了USB0_DRVVBUS引脚发现它处于低电平状态,也就是没有使能电源。是不是因为什么错误使得AM335X 拉低USB0_DRVVBUS了。

赞(0)
未经允许不得转载:TI中文支持网 » am3358 usb功能异常
分享到: 更多 (0)