常州市润邦电子科技有限公司

热保护器测试专业供应商

 

WinCE PXA270 下USB驱动的修改

 

硬件

USB主机控制器分类

USB Hoster Controller: OHCI vs.UHCI

-OHCI=Open Host Controller Interface.是一种标准的USB主控制器接口,由Compaq,Microsoft National Semiconductor Corp.提出,目前已被25个上的公司支持。.大多数便携式计算机使用 OHCI标准芯片,台式PC目前的熟练也成增长趋势。

-UHCI=Universal Host Controller Interface.
是一种标准的USB主控制器接口,该版本由Intel. 公司开发。大多数台式PC使用这种接口标准,便携式PC很少使用。

WinCE2种都支持,但对于我们的PXA270,进行代码跟踪以后发现,使用的是OHCI

PXA270USB接口

       1 USB Host接口

              2个,他们公用一个OHCI 内核,共同使用大部分USB寄存器。

USB1已经有硬件驱动,DP1DM1可以直接接USB设备或者USB Hub。我们用的是17HUB,TUSB2077,接鼠标,键盘,显示器和U盘等。

USB2没有硬件驱动,必须外扩驱动芯片。我们的系统用的是USB1T11,专门接打印机。

逻辑框图如下:

OHCI root驱动器

USB PORT1

USB PORT2

USB PORT1 DRIVER

TUSB2077

USB1T11

PXA270

Peripheral

       2 USB Client接口        

              就一个USB接口,在我们系统中,USBC_PUSBC_N直接接主机,软件中配制为系统同步口。

 

 

软件

         总的框图如下图,左边是USB Client,右边是USB Host,其对应的软件分别分布在Drivers"USBFNDrivers"HCD目录中。

  

   1 Host软件

根据USB主机控制器的不同,软件也分为OHCIUHCI,但对于我们的系统,只要关注OHCI

       PLATFORM中,USB Controller配置信息在文件Src"Drivers"HCD" ms2_ohci2.cpp中, 用于配制多功能脚和电源使能等。

   由于标准的WinCE5.0并不支持PXA270USB PORT2,在此文件(或者init.c)中加入了相关代码:

      //SEOS=3. Host controller single-ended operation using GPIO pads with an

      //                    external transceiver.

      //HEOX=1    On-chip host controller transceiver enabled.

      //HXS=1              Output signals from USB host controller.

      //DMPDE=1 Host Port 2 Transceiver D– Pull Down Enable

      //DPPDE=1 Host Port 2 Transceiver D+ Pull Down Enable

              //Add by Bruce 2008-5-22 9:23

              //for 2nd USB HOST

              //GPIO34 USBH_P22 AF1/O

              //GPIO35 USBH_P21 AF2/I

              //GPIO36 USBH_P24 AF1/O

              //GPIO37 USBH_P28 AF1/O

              //GPIO38 USBH_P23 AF3/I

              //GPIO39 USBH_P26 AF1/O

              //GPIO40 USBH_P25 AF3/I

              //GPIO41 USBH_P27 AF0/O

     

              ulPinArrayParms[0] = 1;

              ulPinArrayParms[1] = 35;

              XllpGpioSetDirectionIn( m_pDCGPIOReg, ulPinArrayParms );

              ulAlternateFunctionParms[0] = 1;

              ulAlternateFunctionParms[1] = XLLP_GPIO_ALT_FN_2;

              XllpGpioSetAlternateFn( m_pDCGPIOReg, ulPinArrayParms, ulAlternateFunctionParms );

     

              ulPinArrayParms[0] = 1;

          ulPinArrayParms[1] = 38;

          XllpGpioSetDirectionIn( m_pDCGPIOReg, ulPinArrayParms );

          ulAlternateFunctionParms[0] = 1;

          ulAlternateFunctionParms[1] = XLLP_GPIO_ALT_FN_3;

          XllpGpioSetAlternateFn( m_pDCGPIOReg, ulPinArrayParms, ulAlternateFunctionParms );

             

              ulPinArrayParms[0] = 1;

          ulPinArrayParms[1] = 40;

          XllpGpioSetDirectionIn( m_pDCGPIOReg, ulPinArrayParms );

          ulAlternateFunctionParms[0] = 1;

          ulAlternateFunctionParms[1] = XLLP_GPIO_ALT_FN_3;

          XllpGpioSetAlternateFn( m_pDCGPIOReg, ulPinArrayParms, ulAlternateFunctionParms );

 

              ulPinArrayParms[0] = 1;

          ulPinArrayParms[1] = 41;

          XllpGpioSetDirectionIn( m_pDCGPIOReg, ulPinArrayParms );

          ulAlternateFunctionParms[0] = 1;

          ulAlternateFunctionParms[1] = XLLP_GPIO_ALT_FN_2;

          XllpGpioSetAlternateFn( m_pDCGPIOReg, ulPinArrayParms, ulAlternateFunctionParms );

 

              ulPinArrayParms[0] = 1;

          ulPinArrayParms[1] = 34;

          XllpGpioSetOutput0( m_pDCGPIOReg, ulPinArrayParms );

          XllpGpioSetDirectionOut( m_pDCGPIOReg, ulPinArrayParms );

          ulAlternateFunctionParms[0] = 1;

          ulAlternateFunctionParms[1] = XLLP_GPIO_ALT_FN_1;

          XllpGpioSetAlternateFn( m_pDCGPIOReg, ulPinArrayParms, ulAlternateFunctionParms );

     

              ulPinArrayParms[0] = 1;

          ulPinArrayParms[1] = 36;

          XllpGpioSetOutput0( m_pDCGPIOReg, ulPinArrayParms );

          XllpGpioSetDirectionOut( m_pDCGPIOReg, ulPinArrayParms );

          ulAlternateFunctionParms[0] = 1;

          ulAlternateFunctionParms[1] = XLLP_GPIO_ALT_FN_1;

          XllpGpioSetAlternateFn( m_pDCGPIOReg, ulPinArrayParms, ulAlternateFunctionParms );

     

              ulPinArrayParms[0] = 1;

          ulPinArrayParms[1] = 37;

          XllpGpioSetOutput0( m_pDCGPIOReg, ulPinArrayParms );

          XllpGpioSetDirectionOut( m_pDCGPIOReg, ulPinArrayParms );

          ulAlternateFunctionParms[0] = 1;

          ulAlternateFunctionParms[1] = XLLP_GPIO_ALT_FN_1;

          XllpGpioSetAlternateFn( m_pDCGPIOReg, ulPinArrayParms, ulAlternateFunctionParms );

     

              ulPinArrayParms[0] = 1;

          ulPinArrayParms[1] = 39;

          XllpGpioSetOutput0( m_pDCGPIOReg, ulPinArrayParms );

          XllpGpioSetDirectionOut( m_pDCGPIOReg, ulPinArrayParms );

          ulAlternateFunctionParms[0] = 1;

           ulAlternateFunctionParms[1] = XLLP_GPIO_ALT_FN_1;

           XllpGpioSetAlternateFn( m_pDCGPIOReg, ulPinArrayParms, ulAlternateFunctionParms );

 

       PHYSICAL_ADDRESS ioPhysicalBase = { 0x40600000, 0};

       volatile XLLP_UDC_T *udc=(volatile XLLP_UDC_T*)MmMapIoSpace(ioPhysicalBase, sizeof(XLLP_UDC_T),FALSE);

//SEOS=26:24  0b011 = Host controller single-ended operation using GPIO pads with an

//             //                          external transceiver.

//             //HXOE=17:17   0 = On-chip host controller transceiver disabled.

//             //HXS =16:16     0 = Output signals from USB device controller.

udc->UP2OCR=0x03020000;     

 

       PXA270主机驱动器类的实现在目录"PUBLIC"COMMON"OAK" CSP"ARM"INTEL"PXA27X"HCD。在USB测试的过程中,我们发现最多只能插2U盘,更不能同时接U盘和打印机,为此修改如下变量:

PUBLIC"COMMON"OAK"CSP"ARM"INTEL"PXA27X"HCD"bul_ohci.cpp

// Constant

static const DWORD gcTotalAvailablePhysicalMemory = 65536*3; // 64K

static const DWORD gcHighPriorityPhysicalMemory = 0x4000*3; // 16K

USB主机系统的各种协议驱动在PUBLIC"COMMON"OAK"DRIVERS"USB目录下。

 

 

2 Client软件

      没有做任何修改,有关文件分布在以下目录:

端口,数据地址,注册表的配置在PLATFORM"Mtct_smt_2700g"Src "Drivers"USBFN

              PXA270的硬件驱动类在PUBLIC"COMMON"OAK"CSP"ARM"INTEL"

PXA27X"USBFN

              各种协议驱动在PUBLIC"COMMON"OAK"DRIVERS"USBFN目录下。

posted on 2009-07-03 10:45  常州市润邦电子科技  阅读(1153)  评论(0编辑  收藏  举报

导航