基于ISP1581型接口电路的USB2.0接口设计
时间:01-18
来源:国外电子元器件 作者:张建鹏 解国明 李 刚
点击:
1 引言
通用串行总线(USB)是近年来开发的一种串行总线标准,主要用于PC与外围设备的互联。USB总线具有使用简单、即插即用、易于扩展和传输速度快等优点。其协议主要有USB1.1和USB2.0二个版本,USB1.1的传输速率最高可以达到12Mb/s,USB2.0最高可以达到480Mb/s,因此可以满足大部分数据的传输需要。
目前,用于USB接口的电路主要有二类:一类是带USB接口的微控制器(如Cypress公司的EZUSB,Intel公司的8x931等);另一类是纯粹的USB接口电路,它需要一个外部微控制器(如National Semiconductor公司的USBN9602,Philips公司的PDIUSBD12和ISP1581等)。通常在开发USB设备之间必须根据具体要求选用合适的USB接口电路,以降低开发成本,减少开发时间。
本文给出一种以Philips公司的ISP1581型接口电路作为USB接口,以TI公司的TMS320F2812型DSP作为微控制器的USB2.0接口实现方案和系统软硬件设计方法。
2 ISP1581简介
ISP1581是Philips公司推出的一款高性价比的USB2.0接口电路。它完全遵循它完全遵循USB2.0规范,支持7个IN端点,7个OUT端点和一个固定控制IN/OUT端点。ISP1581支持SUB2.0的自检工作模式和USB1.1的返回工作模式,可以在高速或全速条件下正常运行。内部集成有串行接口引擎(SIE)、PIE、8KB的FIFO存储器、数据收发器、PLL的12MHz晶体振荡器和3.3V的电压调整器。该电路可直接与ATA/ATAPI外设相连,并具有高速DMA接口。同时,可通过软件控制与USB总线的连接(SoftConnect),ISP1581内部具有上电复位电路,支持3.3V和5V二种电源工作方式。
ISP1581与外部微控制器的通信主要通过一个高速通用并行接口来实现。它与微控制器的连接有二种模式:断开总线模式和通用处理器工作模式。在断开总线模式下,AD[7:0]为多路复用的8位地址/数据总线,DATA[15:0]为单独的DMA数据总线;在通用处理器工作模式下,AD[7:0]为单独的8位地址线,DATA[15:0]为16位控制器数据总线,此时,DMA将多路复用到DATA[15:0]控制器的数据总线上。ISP1581适合PDA、存储器类、通讯设备类、数码相机类、复印机类和扫描仪类等大多数USB设备类的设计。
3 硬件电路设计
由TMS320F2812(以下简称F2812)和ISP1581构成的USB2.0接口电路如图1所示。F2812是TI公司的C2000系列DSP,具有很高的运算速度、较大的寻址空间和丰富的片上外设资源。F2812和ISP1581的连接采用通用处理器模式,即8位地址总线和16位数据总线分离。F2812的XCS0AND1作为ISP1581的片选信号,此时ISP1581的寄存器地址映射到F2812的地址空间0x2000-0x4000。F2812与ISP1581的数据交换采用中断方式。ISP1581的唤醒功能引脚WAKEUP接到F2812的一个通用I/O口上;RPU引脚通过1.5kΩ电阻器上拉;RREF引脚通过12.0kΩ精密电阻器接模拟地;MODE引脚在通用处理器模式下也应上拉;BUS_CONF引脚的功能是选择总线模式,上拉后为通用处理模式;MODE0引脚用来选择通用处理器模式下的读/写功能,上拉后为8051型。该电路内部集成了复位电路,将RESET引脚直接接高电平即可复位。由于本设计没有使用DMA传输,所以与DMA相关的引脚没有连接。主机提供的5V电源经过HT7133变换为3.3V后可给整个系统供电。
4 软件设计
软件即微控制器的程序文件,它主要完成USB协议处理和数据交换,目的是让Windows检测和识别设备,建立起正确的通信连接。设备与主机的USB通信可以分为配置通信和应用通信。配置通信 主要指主机在对设备进行检测的过程中设备软件对主机的一系列标准请求所做出的响应。设备必须识别每个请求,并返回被请求的信息,同时采取其他一些请求指定的动作。应用通信主要指主机识别设备后进行的有用数据传输。USB支持控制传输、批量传输、中断传输和等时传输4种传输类型,控制传输主要用于配置通信,其他3种类型主要用于应用通信。所有的USB器件都只有端点0支持控制传输。
根据USB2.0协议,任何传输都是由主机开始的,微控制器做它的前台工作,并等待中断。系统的软件程序主要由三部分组成:一是初始化F2812和所有的外围电路(包括ISP1581);二是主循环部分,其任务是循环扫描USB事件和等待中断;三是中断服务程序,其任务执行系统指令。
在初始化过程中,除了F2812自身初始化外,还要完成对ISP1581各个端点使用的传输类型、传输包大小和中断类型及方式等设备任务。F2812对ISP1581的操作是通过写/读寄存器来实现的。初始化结束后,通过设置ISP1581方式寄存器中的软件连接位(SOFTCT)可使外设连接到USB总线上。主机检测到有设备连接后会进行总线复位。在此期间,ISP1581将发送高速(HS)模式检测信号来判断主控制器支持的是USB2.0还是USB1.1规范,若接收到一个高速(HS)握手信号,则表明有一个HS主机与总线相连,此此ISP1581将转换到高速(HS)状态,否则仍工作在全速(FS)状态。
当ISP1581接收到主机的令牌包、总线复位、挂起和接收到高速模式握手信号等事件后,ISP1581都会给F2812发送中断请求。F2812进人中断服务程序后,首先读ISP1581的中断寄存器,判断中断类型,然后执行相应的操作。总线复位和高速模式中断不需要进行特殊的处理,只需在中断服务程序中设定标志。在软件程序中,比较难处理的是包含标准USB请求的控制传输。由于只有端点0支持控制传输,因此主要是对端点0的编程。控制传输总是在设定(SETUP)阶段开始,之后为可选的数据(DATA)阶段,然后在状态(STATUS)阶段结束。主机会发送建立包(SETUP)、控制读包(CONTROL_IN)和控制写包(CONTROL_OUT)3种包到设备,ISP1581相应的会产生3种中断。在编程中,可以设备空闲(USB_IDLE)、发送(USB_TRANSMIT)和接收(USB_RECEIVE)3种状态来处理控制传输。图2为微控制器对3种包的控制传输处理流程。
USB2.0协议的第九章规定了11种标准请求,软件应对这11种标准请求作出正确响应。这里以"Get_Desctiptor"和"Set_Descriptor"二个标准请求为例,并结合图2来说明软件是如何通过控制传输来响应请求的。"Get_Desctiptor"请求开始时,主机发送一个建立包到ISP1581,ISP1581接收到"Get_Desctiptor"建立包后,将产生一个中断通知F2812。微控制器响应中断,并通过选择端点0SETUP缓冲区来读取建立包的内容并将其存入存储区。微控制器根据建立包的内容判断是否为标准请求,如果是一个标准请求,微控制器必须向控制输出端点发送应答建立命令,以重新使能下一个建立阶段。接下来微控制器再判断控制传输是控制读还是写,这可以通过读建立包中bmRequestType的第8位来确定。如果控制传输是一个控制读,器件将在下一个数据阶段向主机发回数据包。微控制器需要设置一个标准以指示USB设备现在处于传输模式,即准备在主机发送请求时发送数据。
建立阶段结束后,主机会执行数据阶段。当ISP1581接收到所等待的Control_In包后,微控制器将对ISP1581处于传输模式后进行数据包的发送进行确认。ISP1581的控制端点有64B FIFO,每次只能传输64B的数据,微控制器在传输阶段必须控制传输数据的数量。如果剩下的字节数大于64,微控制器将先发送64B并减去参考长度64。当下一个Control_In包到来时,微控制器将确定剩余的字节是否为零。如果已经没有数据要发送,微控制器将发送一个空包向主机表明数据已经发送完毕。
如果建立包为"Set_Descriptor"请求,那么建立包中的控制传输将指示此包为控制写类型。在执行完"Set_Descriptor"请求过程后,F2812进入等待数据阶段。主机发送Control_Out包标志后,当ISP1581接收到该数据包时会对F2812产生一个端点0 OUT中断。微控制器响应中断时,首先确认ISP1581是否处于USB_Receive状态,然后微控制器通过选择控制输出端点来确认缓冲区是否已满,同时将数据从缓冲区读出。
相对于控制传输来说,USB的其他几种传输模式都比较好处理。ISP1581的7个IN端点和7个OUT端点均可通过编程设置为批量传输、中断传输或等时传输模式。在软件编程中需要注意以下几点:
一是ISP1581的8kB FIFO是所有端点共享的,所以在设定各个端点传输包大小时,其总和不能超过8kB;二是在调试时,可根据Windows对USB设备的枚举顺序进行程序调试;第三,为做到与USB1.1兼容,在全速状态下响应主机标准请求时,需要发送全速描述符。
在完成USB软件编程后,还需要在主机方面编写USB设备驱动程序和应用程序。USB驱动程序可使用Windows的DDK编写,也可以使用第三方提供的驱动生成软件编写(如Jungo公司的WinDriver驱动生成软件等)。最后采用批量传输方式对系统进行测试(笔者实际测得的传输速度为9.5MB/s)。本文的设计未采用DMA,实际上,ISP1581采用DMA方式后,最高传输速度可以达到25MB/s。
通用串行总线(USB)是近年来开发的一种串行总线标准,主要用于PC与外围设备的互联。USB总线具有使用简单、即插即用、易于扩展和传输速度快等优点。其协议主要有USB1.1和USB2.0二个版本,USB1.1的传输速率最高可以达到12Mb/s,USB2.0最高可以达到480Mb/s,因此可以满足大部分数据的传输需要。
目前,用于USB接口的电路主要有二类:一类是带USB接口的微控制器(如Cypress公司的EZUSB,Intel公司的8x931等);另一类是纯粹的USB接口电路,它需要一个外部微控制器(如National Semiconductor公司的USBN9602,Philips公司的PDIUSBD12和ISP1581等)。通常在开发USB设备之间必须根据具体要求选用合适的USB接口电路,以降低开发成本,减少开发时间。
本文给出一种以Philips公司的ISP1581型接口电路作为USB接口,以TI公司的TMS320F2812型DSP作为微控制器的USB2.0接口实现方案和系统软硬件设计方法。
2 ISP1581简介
ISP1581是Philips公司推出的一款高性价比的USB2.0接口电路。它完全遵循它完全遵循USB2.0规范,支持7个IN端点,7个OUT端点和一个固定控制IN/OUT端点。ISP1581支持SUB2.0的自检工作模式和USB1.1的返回工作模式,可以在高速或全速条件下正常运行。内部集成有串行接口引擎(SIE)、PIE、8KB的FIFO存储器、数据收发器、PLL的12MHz晶体振荡器和3.3V的电压调整器。该电路可直接与ATA/ATAPI外设相连,并具有高速DMA接口。同时,可通过软件控制与USB总线的连接(SoftConnect),ISP1581内部具有上电复位电路,支持3.3V和5V二种电源工作方式。
ISP1581与外部微控制器的通信主要通过一个高速通用并行接口来实现。它与微控制器的连接有二种模式:断开总线模式和通用处理器工作模式。在断开总线模式下,AD[7:0]为多路复用的8位地址/数据总线,DATA[15:0]为单独的DMA数据总线;在通用处理器工作模式下,AD[7:0]为单独的8位地址线,DATA[15:0]为16位控制器数据总线,此时,DMA将多路复用到DATA[15:0]控制器的数据总线上。ISP1581适合PDA、存储器类、通讯设备类、数码相机类、复印机类和扫描仪类等大多数USB设备类的设计。
3 硬件电路设计
由TMS320F2812(以下简称F2812)和ISP1581构成的USB2.0接口电路如图1所示。F2812是TI公司的C2000系列DSP,具有很高的运算速度、较大的寻址空间和丰富的片上外设资源。F2812和ISP1581的连接采用通用处理器模式,即8位地址总线和16位数据总线分离。F2812的XCS0AND1作为ISP1581的片选信号,此时ISP1581的寄存器地址映射到F2812的地址空间0x2000-0x4000。F2812与ISP1581的数据交换采用中断方式。ISP1581的唤醒功能引脚WAKEUP接到F2812的一个通用I/O口上;RPU引脚通过1.5kΩ电阻器上拉;RREF引脚通过12.0kΩ精密电阻器接模拟地;MODE引脚在通用处理器模式下也应上拉;BUS_CONF引脚的功能是选择总线模式,上拉后为通用处理模式;MODE0引脚用来选择通用处理器模式下的读/写功能,上拉后为8051型。该电路内部集成了复位电路,将RESET引脚直接接高电平即可复位。由于本设计没有使用DMA传输,所以与DMA相关的引脚没有连接。主机提供的5V电源经过HT7133变换为3.3V后可给整个系统供电。
4 软件设计
软件即微控制器的程序文件,它主要完成USB协议处理和数据交换,目的是让Windows检测和识别设备,建立起正确的通信连接。设备与主机的USB通信可以分为配置通信和应用通信。配置通信 主要指主机在对设备进行检测的过程中设备软件对主机的一系列标准请求所做出的响应。设备必须识别每个请求,并返回被请求的信息,同时采取其他一些请求指定的动作。应用通信主要指主机识别设备后进行的有用数据传输。USB支持控制传输、批量传输、中断传输和等时传输4种传输类型,控制传输主要用于配置通信,其他3种类型主要用于应用通信。所有的USB器件都只有端点0支持控制传输。
根据USB2.0协议,任何传输都是由主机开始的,微控制器做它的前台工作,并等待中断。系统的软件程序主要由三部分组成:一是初始化F2812和所有的外围电路(包括ISP1581);二是主循环部分,其任务是循环扫描USB事件和等待中断;三是中断服务程序,其任务执行系统指令。
在初始化过程中,除了F2812自身初始化外,还要完成对ISP1581各个端点使用的传输类型、传输包大小和中断类型及方式等设备任务。F2812对ISP1581的操作是通过写/读寄存器来实现的。初始化结束后,通过设置ISP1581方式寄存器中的软件连接位(SOFTCT)可使外设连接到USB总线上。主机检测到有设备连接后会进行总线复位。在此期间,ISP1581将发送高速(HS)模式检测信号来判断主控制器支持的是USB2.0还是USB1.1规范,若接收到一个高速(HS)握手信号,则表明有一个HS主机与总线相连,此此ISP1581将转换到高速(HS)状态,否则仍工作在全速(FS)状态。
当ISP1581接收到主机的令牌包、总线复位、挂起和接收到高速模式握手信号等事件后,ISP1581都会给F2812发送中断请求。F2812进人中断服务程序后,首先读ISP1581的中断寄存器,判断中断类型,然后执行相应的操作。总线复位和高速模式中断不需要进行特殊的处理,只需在中断服务程序中设定标志。在软件程序中,比较难处理的是包含标准USB请求的控制传输。由于只有端点0支持控制传输,因此主要是对端点0的编程。控制传输总是在设定(SETUP)阶段开始,之后为可选的数据(DATA)阶段,然后在状态(STATUS)阶段结束。主机会发送建立包(SETUP)、控制读包(CONTROL_IN)和控制写包(CONTROL_OUT)3种包到设备,ISP1581相应的会产生3种中断。在编程中,可以设备空闲(USB_IDLE)、发送(USB_TRANSMIT)和接收(USB_RECEIVE)3种状态来处理控制传输。图2为微控制器对3种包的控制传输处理流程。
USB2.0协议的第九章规定了11种标准请求,软件应对这11种标准请求作出正确响应。这里以"Get_Desctiptor"和"Set_Descriptor"二个标准请求为例,并结合图2来说明软件是如何通过控制传输来响应请求的。"Get_Desctiptor"请求开始时,主机发送一个建立包到ISP1581,ISP1581接收到"Get_Desctiptor"建立包后,将产生一个中断通知F2812。微控制器响应中断,并通过选择端点0SETUP缓冲区来读取建立包的内容并将其存入存储区。微控制器根据建立包的内容判断是否为标准请求,如果是一个标准请求,微控制器必须向控制输出端点发送应答建立命令,以重新使能下一个建立阶段。接下来微控制器再判断控制传输是控制读还是写,这可以通过读建立包中bmRequestType的第8位来确定。如果控制传输是一个控制读,器件将在下一个数据阶段向主机发回数据包。微控制器需要设置一个标准以指示USB设备现在处于传输模式,即准备在主机发送请求时发送数据。
建立阶段结束后,主机会执行数据阶段。当ISP1581接收到所等待的Control_In包后,微控制器将对ISP1581处于传输模式后进行数据包的发送进行确认。ISP1581的控制端点有64B FIFO,每次只能传输64B的数据,微控制器在传输阶段必须控制传输数据的数量。如果剩下的字节数大于64,微控制器将先发送64B并减去参考长度64。当下一个Control_In包到来时,微控制器将确定剩余的字节是否为零。如果已经没有数据要发送,微控制器将发送一个空包向主机表明数据已经发送完毕。
如果建立包为"Set_Descriptor"请求,那么建立包中的控制传输将指示此包为控制写类型。在执行完"Set_Descriptor"请求过程后,F2812进入等待数据阶段。主机发送Control_Out包标志后,当ISP1581接收到该数据包时会对F2812产生一个端点0 OUT中断。微控制器响应中断时,首先确认ISP1581是否处于USB_Receive状态,然后微控制器通过选择控制输出端点来确认缓冲区是否已满,同时将数据从缓冲区读出。
相对于控制传输来说,USB的其他几种传输模式都比较好处理。ISP1581的7个IN端点和7个OUT端点均可通过编程设置为批量传输、中断传输或等时传输模式。在软件编程中需要注意以下几点:
一是ISP1581的8kB FIFO是所有端点共享的,所以在设定各个端点传输包大小时,其总和不能超过8kB;二是在调试时,可根据Windows对USB设备的枚举顺序进行程序调试;第三,为做到与USB1.1兼容,在全速状态下响应主机标准请求时,需要发送全速描述符。
在完成USB软件编程后,还需要在主机方面编写USB设备驱动程序和应用程序。USB驱动程序可使用Windows的DDK编写,也可以使用第三方提供的驱动生成软件编写(如Jungo公司的WinDriver驱动生成软件等)。最后采用批量传输方式对系统进行测试(笔者实际测得的传输速度为9.5MB/s)。本文的设计未采用DMA,实际上,ISP1581采用DMA方式后,最高传输速度可以达到25MB/s。
- 基于S3C44B0X的心电血压监测仪USB接口设计(11-28)
- C8051F320在USB设计中的应用(01-18)
- 用CP2101将USB口扩展成串口(01-18)
- TM1300 PCI-XIO口的UART和USB接口设计(01-17)
- 基于CH371的实用USB接口设计(01-23)
- 通用串行总线(USB)原理及接口设计(01-26)