qnx学习笔记- QNX USB device与host模式下驱动脚本详解

来源:互联网 发布:linux双系统怎么切换 编辑:程序博客网 时间:2024/05/17 04:25

锋影

e-mail 174176320@qq.com



IMX6Q有4种独立的USB控制器核心:OTG控制核与3个host控制核。

The USB 2.0 Controller Core 0 supports HS/FS/LS operation in Host mode and HS/FS
operation in device mode.

1、OTG CORE管脚初始化流程:
     1> 配置VBUS;打开电源,QNX BSP中是通过IIC总线控的,这部分代码暂时没有看明白。
     2> 配置USB ID管脚,根据电路图可以看出,我们需要将ENET_RX_ER光脚配置在USB模式,配置如下:
            pinmux_set_swmux(SWMUX_ENET_RX_ER, MUX_CTL_MUX_MODE_ALT0);
    pinmux_set_padcfg(SWPAD_ENET_RX_ER, MX6X_PAD_SETTINGS_USB);
     3> 硬件管脚配置完成之后,就应该初始化OTG controller Core了,这个BSP提供了对应的接口,直接调用即可。
     4> OTG Host connects to PHY0 这步暂时不知道是不是必须的,但是根据手册说明,OTG CORE 只能与PHY0对接;如下:




2、USB接口初始化流程:
     1> 为外围芯片USB2514BQFN36提供reset信号:配置管脚SD1_CLK为GPIO1模式
     2> 初始化host1 controller core,直接调用BSP提供的接口即可。
     3>  USB Host1 connects to PHY1(和上面OTG一样,只能和PHY1对接)


3、启动USB OTG相关的服务:
       在启动脚本build中,找USB相关的信息,可以查看到当前存在有两种模式:device和host模式。
       无论处于何种模式下,都需要依赖于io-usb-otg这个服务程序,这个就是usb的管理器,它依据所要加载的动态库来决定当前工作在何种模式下。但是如果要加载一个device的DLL,则必须要在host模式的DLL之前加载。所以在build脚本中,我们先写device模式下的服务。
       3.1 device模式下的服务:
           a. 开发板作为大容量存储设备来用,此处所用的是该开发板上的内存RAM
[html] view plain copy
  1.           # Step 1 - Create a ram disk  
  2. # This driver no longer formats the RAM disk by default, so the nodinit is no longer supported.  
  3. devb-ram ram capacity=1024000,cache=512k disk name=hd@10  
  4. waitfor /dev/hd10  
  5. fdisk /dev/hd10 add -t 12  
  6. mount -e /dev/hd10  
  7. waitfor /dev/hd10t12  
  8. mkdosfs -F 32 /dev/hd10t12  
  9.   
  10. # Step 2 - Start device stack  
  11. io-usb-otg -d dcd-usbumass-mx6sabrelite-ci ioport=0x02184000,irq=75 -n /dev/io-usb-dcd/io-usb  
  12. waitfor /dev/io-usb-dcd/io-usb 4  
  13. #waitfor /dev/io-usb-dcd/devu-usbumass-omap543x-dwcotg3.so 4  
  14.   
  15.   
  16. # Step 3 - Start Mass Storage function driver and enable USB soft connect  
  17.         devu-umass_client-block -l lun=0,devno=1,iface=0,fname=/dev/hd10  
  18.         ulink_ctrl -l 1  

                备注:

               step1:主要是用来产生一个ram disk,命令参数可以参看QNX_Neutrino_RTOS_Utilities_Reference.pdf中的devb-ram说明。

step2:上面提到,如果要想使用usb功能就必须要用到io-usb-otg服务(负责管理USB的准备工作),该服务主要用来start device stack。-d后面是usbmass的DLL,也需要写在build脚本用来DLL库中。ioport就是OTG controller core的base addr,irq是该OTG控制核的中断号。-n 指定这个管理器的名称,默认是/dev/usb/io-usb-otg
step3:大容量存储器的驱动功能。

          

b.开发板USB作为串口来用:

[plain] view plain copy
  1.           # Step 1 - Start USB device stack  
  2. io-usb-otg -d dcd-usbser-mx6sabrelite-ci ioport=0x02184000,irq=75 -n /dev/io-usb-dcd/io-usb  
  3. waitfor /dev/io-usb-dcd/io-usb 4  
  4. waitfor /dev/io-usb-dcd/devu-usbser-mx6sabrelite-ci.so 4  
  5.   
  6. # Step 2 - Start USB CDC-ACM function driver and enable USB soft connect  
  7. devc-serusb_dcd -e -v -F -s -d iface_list=0,path=/dev/io-usb-dcd/io-usb  
  8. waitfor /dev/serusb1  
  9. ulink_ctrl -l 1  

c.开发板USB作为网口来用:
[plain] view plain copy
  1. # Step 1 - Start USB device stack  
  2.         io-usb-otg -d dcd-usbncm-mx6sabrelite-ci ioport=0x02184000,irq=75 -n /dev/io-usb-dcd/io-usb  
  3.         waitfor /dev/io-usb-dcd/io-usb 4  
  4.         waitfor /dev/io-usb-dcd/devu-usbncm-mx6sabrelite-ci.so 4  
  5.   
  6.         # Step 2 - Start USB NCM function driver and enable USB soft connect  
  7.         io-pkt-v6-hc -d usbdnet name=usbeth,mac=000304030405,path=/dev/io-usb-dcd/io-usb,protocol=ncm -p tcpip -d **(其他的DLL)  
  8.         #control a usb DCD link  para: -l :Set the USB link state to disconnected (0) or connected (1).  
  9.         ulink_ctrl -l 1  
  10.         ifconfig usbeth0 192.168.15.100  

       3.2 host模式下的服务(目前我们在开发板上只用了HOST1,对应的是PHY2):

[plain] view plain copy
  1. # the USBPHY1 base address is 0x20C9000 the USBPHY2 base address is 0x20CA000  
  2.         # controller base address(irq): OTG--0x02184100 (75), host1--0x02184300(72), host2--0x02184500(73), host3--0x02184700 (74)  
  3.         # host1 mode ioport is the address of host1 and its irq is 72.   
  4. #step1  启动所依赖的ehci服务,并将由host1管理器管理  
  5. io-usb-otg -d hcd-ehci-mx28 ioport=0x02184300,irq=72,verbose=5  
  6.         waitfor /dev/usb/io-usb-otg 4  
  7.   
  8. #step2 : Driver for USB Mass Storage interface, para pnp means plug in-plug out  
  9.         display_msg Launching devb-umass...  
  10.         devb-umass cam pnp &  

阅读全文
0 0