首页>
技术资讯>
详情

WinCE PXA270 下USB驱动的修改

2016-05-12 来源:佚名 阅读量: 0
关键词: WINCE

    一 硬件

    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很少使用。

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

    PXA270的USB接口

    1 USB Host接口

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

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

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

    逻辑框图如下:

    OHCI root驱动器

    USB PORT1

    USB PORT2

    USB PORT1 DRIVER

    TUSB2077

    USB1T11

    PXA270

    Peripheral

    2 USB Client接口

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

    二 软件

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

    1 Host软件

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

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

    由于标准的WinCE5.0并不支持PXA270的USB 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;

    XllpGpi

热门推荐 查看更多