采用USB控制器ISP1161实现USB主机功能的设计研究

网友投稿 298 2022-11-15

采用USB控制器ISP1161实现USB主机功能的设计研究

业界和用户的需求呼唤USB主机的嵌入式化,因此在嵌入式系统中实现USB主机功能成了USB设计领域的热点之一。

USB控制器ISP1161简介

飞利普公司的ISP1161芯片支持OHCI标准,它是一个符合USB2.0全速规范的单片主机控制器和设备控制器。ISP1161可以仅作为主机控制器或设备控制器使用,也可以同时作为主机和设备控制器使用。

ISP1161可分为四大功能模块:

1)主机控制器模块:实现主机控制器的功能。提供两个下行端口,每个下行端口都有自己的过流检测输入管脚和电源转换控制输出管脚。

2)设备控制器模块:实现设备控制器的功能。提供一个上行端口,有其自身的VBUS检测输入管脚。

4)电源调整和上电复位模块:除了可以软件复位外,还可以通过RESET_N管脚实现硬件复位。ISP1161只接受5V或3.3V的电压,当输入5V电压时,电源调整器会将其调整为3.3V。

ISP1161 主机控制器子模块的功能框图示于图1,主机控制器的下行端口可与任意一个符合USB 规范的USB 设备和包含USB 上行端口的USB 集线器相连。类似地,设备控制器的上行端口可与任意一个符合USB 规范的USB主机和包含USB 下行端口的USB 集线器相连。

相关嵌入式应用系统的架构

通过USB主机接口实现嵌入式系统与USB设备——MBF200之间的通信。

鉴于该指纹验证系统要实现网络化,因而配置了CF接口无线网卡。

通过PXA255本身的串口控制器与PC通信,用于调试和下载Windows CE镜像文件。

人机交互用于显示运行结果和注册/增删指纹数据。

USB主机软件设计

系统的软件平台是微软公司的Windows CE。

ISP1161软件模型

ISP1161的数据传输模式

ISP1161提供了HC控制和状态寄存器、ATL缓冲区和ITL缓冲区。其中HC控制和状态寄存器包括一套可操作的符合OHCI的寄存器(32位)和一套ISP1161特定的寄存器(16位)。通过对相应寄存器的操作,主机控制器驱动程序就可以完成对主机控制器初始化和配置工作。ATL缓冲区和ITL缓冲区用来实现USB系统支持的四种不同数据传输:控制传输、批量传输、中断传输和实时传输。ITL是实时传输的缓冲的FIFO,而ATL是USB其它三种类型传输的缓冲FIFO。

#define hcdport base_address

#define CMD_RD 0x00

#define CMD_WR 0x80

void SendlPTD(UINT16 *pPTDdata){ // pPTDdata指针指向PTD数据内容;

WritePTDtoATL(pPTDdata, 16); //把PTD数据写入ATL缓冲区,16为写入数据字节数;

void WritePTDtoATL(UINT16 *pPTDdata, UINT totalbytes){

WriteHCR_UINT16(IDX_HcTransferCounter, databytes);//向HcTransferCounter寄存器写入要传输的字节数;

*hccport = IDX_HcATLBufferPort | COM_WR; //向ATLBuffer端口写入写命令;

DisableInterrupts(); //禁止所有中断;

for (UINT m= totalbytes; m》0; m -=4 ){ //为了维护PTD数据在ATL缓冲区中的结构,采取每四字节循环

*hcdport = * pwPTDdata ++; //的方式;

*hcdport = * pwPTDdata ++; }

EnableInterrupts();} //使能中断;

void ReadPTDfromATL(UINT16 * pPTDdata, UINT totalbytes){

WriteHCR_UINT16(IDX_HcTransferCounter, totalbytes);

*hccport = IDX_HcATLBufferPort | COM_RD;

DisableInterrupts();

for (UINT m= totalbytes; m》0; m -=4 ){

* pwPTDdata ++ = *hcdport;

* pwPTDdata ++ = *hcdport; }

EnableInterrupts();}

数据结构链表的处理

在HCD将PTD从系统内存复制到ATL或ITL缓冲区之前,HCD必须通过集合数据结构来建立和追踪PTD。HCD的责任是追踪所有已连接设备的每个端点的属性,如端点最大封包大小、端点地址和该端点从属的设备地址。另外,HCD必须管理每个端点新的PTD的产生和已经完成的PTD的处理。所以使用一个有效的数据结构体系可以加快主机控制器的操作。本设计实现的数据结构类似于OHCI中定义的数据结构,如图4所示。此数据结构由三部分组成:三种类型端点的队列(控制传输端点、批量传输端点和中断传输端点)、每种端点的一个PTD列和一个完成队列。每个列队由一个全局指针指定,这个全局指针保持队列中第一个端点(EP)队列头的地址。每个EP队列头指向一个PTD列。一个PTD列保留着等待被主机控制器处理的PTD。在控制、批量和中断传输中,PTD被复制到ATL缓冲区。一旦PTD被放入ATL缓冲区,主机控制器就在下一帧中处理该PTD。

结束语

在USB主机端功能实现后,我们又开发了USB设备——指纹传感器MBF200的驱动程序,并按照规定要求实现了指纹数据的采集和传输。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:WinCC实现访问Redis方法
下一篇:解决Java中socket使用getInputStream()阻塞问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~