基于Blackfin532和Netchip2272的USB接口设计与实现

时间:2011-08-26

  USB ,是英文Universal Serial BUS(通用串行总线)的缩写,而其中文简称为“通串线,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。USB接口支持设备的即插即用和热插拔功能。USB是在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出的。

  随着计算机硬件飞速发展,外围设备日益增多,键盘、鼠标、调制解调器、打印机、扫描仪早已为人所共知,数码相机、MP3随身听接踵而至,这么多的设备,如何接入个人计算机?USB就是基于这个目的产生的。USB是一个使计算机周边设备连接标准化、单一化的接口,其规格是由Intel(英特尔)、NEC、Compaq、DEC、IBM(商业机器公司)、Microsoft(微软)、Northern Telecom联系制定的。 目前USB设备虽已被广泛应用,比较普遍的是USB2.0接口,它的传输速度为480Mbps每秒。用户的需求,是促进科技发展的动力,厂商也同样认识到了这个瓶颈。这时, COMPAQ、Hewlett Packard、Intel、Lucent、Microsoft、NEC和PHILIPS这7家厂商联合制定了USB 2.0接口标准。USB 2.0将设备之间的数据传输速度增加到了480Mbps,比USB 1.1标准快40倍左右,速度的提高对于用户的好处就是意味着用户可以使用到更高效的外部设备,而且具有多种速度的周边设备都可以被连接到USB 2.0的线路上,而且无需担心数据传输时发生瓶颈效应。

  1 USB接口电路的硬件设计

  1.1 Blackfin532DSP处理器简介

  文中DSP处理器选用Blaclkfin532,它是ADI(Analog Device Instruments)公司推出的一款高性能、低功耗定点处理器,内核时钟频率可达400 MHz,具有两个40位的算术逻辑单元(ALU),及4个8位视频ALU,两个16位硬件乘法器,两个40位累加器,是具有较高性价比的DSP处理器。Blackfin532片上集成了84 kB的RAM,可寻址空间为4 GB,可与多种存储器实现无缝连接。此外,片上集成了多个外设接口,具体包括1个UART口,1个SPI口,2个串行口(Sports),4个通用定时器,1个实时时钟,1个看门狗定时器,1个并行外设接口等。

  1.2 Netchip2272简介

  文中USB接口芯片选用了Netchip2272。它在片上集成了USB收发模块,串行接口引擎(SIE),USB协议控制器,端点数据缓冲区,本地总线接口模块等。Netchip2272具有如下特点

  (1)支持全速/高速数据传输模式。

  (2)具有3个可配置的物理端点,及30个逻辑端点。

  (3)片上集成了3 kB的数据缓冲区,支持双缓冲模式。

  (4)可方便地与通用微处理器进行连接。

Netchip2272内部结构方框图

  点击看原图

  在Blackfin533的EZ-KIT开发板中也采用了Blackfin533和Netchip2272实现USB接口电路,但EZ-KIT开发板中使用了设备管理器等,使得程序变得较大,在Blackfin533和Netchip2272之外,需要大约8 MB的存储空间来存放部分程序和支持程序运行时对存储空间的要求,这就需要在外部添加一块SDRAM。同时,在EZ-KIT开发板的例程中只提供了USB接口电路的基于设备管理器的顶层源代码,对于Blackfin533如何控制Netehip2272实现设备的枚举和数据传输则没有提供底层的源代码,这些都使得开发板中提供的USB接口电路方案,在实际应用中不方便。

  1.3 USB接口电路的原理

  USB接口电路的硬件连接原理图如图2所示,其中D0~D15是Blackfin532和Netchip2272的数据线,A1~A5是地址线,PF10和PF11是Black-tln532的PF(Programmable Flags)口的第10、ll管脚,分别用作Netehip2272的中断输入管脚和复位控制管脚,ASMl是Blacktin532的异步存储块1的片选信号用作Netehip2272的片选信号,IOW,IOR是Blackfin532的写、读选通输出信号用作Netchip2272的写选通和读选通信号。IRQ全称为Interrupt Request,即是“中断请求”的意思(以下使用IRQ称呼)。IRQ的作用就是在我们所用的电脑中,执行硬件中断请求的动作,用来停止其相关硬件的工作状态,比如我们在打印一份图片,在打印结束时就需要由系统对打印机提出相应的中断请求,来以此结束这个打印的操作。在每台电脑的系统中,是由一个中断控制器8259或是8259A的芯片(现在此芯片大都集成到其它的芯片内)来控制系统中每个硬件的中断控制。目前共有16组IRQ,去掉其中用来作桥接的一组IRQ,实际上只有15组IRQ可供硬件调用。

USB接口电路的硬件连接原理图

  Blackfin532和Netchip2272的数据交换采用中断驱动方式,当2272发生了特定的某些事件如收到主机发送的Setup包,收到主机发送的数据包等,需要Blackfin 532对事件进行处理时,2272在其IRQ管脚产生1个低电平,与它相连接的PF10管脚在检测到此低电平之后。在DSP内部产生中断,DSP在中断处理函数内部读取2272相关寄存器的值,并根据这些寄存器的值对发生的事件作出相应的处理。

  2 USB接口电路的软件设计

  接口电路的软件设计包括固件程序和PC端的驱动程序。固件程序的设计需要对硬件电路和USB的通信协议比较熟悉,因而开发起来难度比较大,这里对固件程序的开发作以介绍。

  2.1 固件程序

  设备的固件程序是指运行在设备端CPU中的程序,它主要用来完成对接收到的数据包的类型,内容进行识别和分析,并在分析的基础上对主机的请求做出相应的处理,完成设备的枚举,读取主机发送的数据和向主机发送数据,从而实现和主机之间的数据交换。固件程序的流程图如图3所示。

固件程序的流程图

  固件程序主要包括初始化和中断服务程序两部分;

  2.1.1 初始化

  初始化程序用以对Blackfin532和Netchip2272进行初始化设置。

  (1)对Blaekfin532进行软复位,对PLL(Phase Locked Loop),EBIU(External Bus InteRFace Unit),PF口进行设置,以及使能PF10引起的中断。

  (2)对Netchip2272进行软复位,对本地总线控制寄存器(LOCCTL,LOCCTL1),USB控制寄存器(USB_CTL0,USBCTL1),端点0的寄存器进行设置,在中断使能寄存器(IRQENDO,IRQENBl)中使能相应的中断。

  2.1.2 中断服务程序

  中断服务程序主要是用来处理主机的Setup标准请求,将主机发送过来的数据读到Blacldin532中和将Blackfin532中的数据发送给主机。

  主机要和USB设备进行数据交换首先要正确的识别USB设备,这需要经过一个枚举过程,这个过程主要通过主机向设备发送Setup请求,设备对该请求进行响应来完成。

  (1)USB设备加电,连接到主机的—个集线器端口。

  (2)主机检测到新设备连接后,总线复位。

  (3)主机使用默认地址(地址O)读取设备描述符。

  (4)主机给设备分配一个地址,在以后的通信里设备就只对这个地址的信息作出应答。

  (5)主机从新的地址获取设备描述符。

  (6)主机读取配置描述符。

  (7)主机读取配置描述符集合,主机除了读取配置描述符之外,还要读取接口描述符及端点描述符。

  (8)主机设置设备的配置。

  在中断服务程序中首先判断是何种类型的中断,如果是Setup请求中断,则调用函数setup_handler()进行处理,函数的参数为设备接收到的Setup数据包的第3~第8 bit(Setup~Setup)。在setup_handler()函数中根据Setup数据包的内容跳转至相应的分支,对Setup请求进行响应。捕获的部分数据如图4所示。

捕获的部分数据

  Bushound5.0只捕获到了设备枚举过程中主机发出获取配置描述符请求及之后的数据,图中的数据是主机发出获取配置描述符请求到主机发出设置配置请求之间的数据。

  USB设备和主机之间的数据交换。当Netchip2272接收到主机发送的数据包之后,就会产生一个中断信号给Blackfin532,Blackfin532在中断服务程序中查询相应的寄存器得知接收到数据包之后,直接将接收到的数据包读到Blackfin532中。USB设备需要向主机发送数据时,先将需要发送的数据放到输入端点的Buffer中,当主机向相应的输入端点发送In Token时,Buffe中的数据包就返回给了主机,数据包发送成功后Netehip2272会产生一个中断信号给Blackfin532,在中断处理函数中将全局变量Tx_data_flag的相应位置1,数据包发送成功。

  2.2 驱动程序

  驱动程序编写是复杂的,选用Jungo的WindowsDriver,在Windows Driver检测到枚举成功的设备之后,输入设备的厂商ID(VID)和产品ID(PID),即可生成一个inf文件,将设备的PID和VID与设备的驱动程序绑定在一起,当设备通过设备描述符将VID,PID传送给主机之后,主机就可以据此找到设备的驱动程序了。

  3 实验结果及分析

  设备枚举成功之后,利用BusView观察到的设备的配置情况如图5所示。

利用BusView观察到的设备的配置情况

  USB设备一共有6个端点,这里仅列出其中两个端点的描述符,其他的和这两个类似。BusView显示的设备配置情况和固件程序中对设备的配置情况完全一致,这表明设备的枚举过程是正确的。

  通过使USB设备循环的向主机发送数据来检验USB输入到主机方向的数据传输,利用Bushound5.0捕获的部分数据如图6所示。图中的数据显示USB设备循环发送的数据是00 01 02 03 04 05 06 07 08 09,在Windows Driver中对相应的管道进行监听,收到的数据如图7所示。实验结果显示数据传输完全正确。对于主机输出到USB设备方向的数据传输,进行了检验,数据传输也完全正确。

利用Bushound5

在Windows Driver中对相应的管道进行监听,收到的数据

 

  4 结束语

  基于Blackfin532和Netchip2272的USB接口电路具有数据传输快速、可靠、接口电路简单、固件程序的可移植性强等优点,具有良好的实用价值和应用前景。


  

参考文献:

[1]. ALU datasheet https://www.dzsc.com/datasheet/ALU_2089372.html.
[2]. D15 datasheet https://www.dzsc.com/datasheet/D15_1092218.html.
[3]. ASMl datasheet https://www.dzsc.com/datasheet/ASMl_2308261.html.
[4]. 8259A datasheet https://www.dzsc.com/datasheet/8259A_961608.html.


上一篇:浅谈硬件实时操作系统信号量管理的设计与实现
下一篇:一种SMC接口研究与PC/104总线仿真设计与实现

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料