基于51单片机和PDIUSB12的USB接口设计
2016-01-27
作者:张学峰,陈 瑾,翟从鸿,彭文超,朱家俊
来源:2015年微型机与应用第5期
摘 要: 为解决51单片机与计算机的串行总线(USB)的通信问题,以PDIUSB12芯片为基础,选择51单片机中的STC89C52为示例,设计了一款USB的接口电路,解决了多款51单片机与计算机的USB通信困难的问题。
关键词: USB;STC89C52;PDIUSB12;通信
0 引言
USB因其使用方便、传输速度快、连接灵活而受到用户和计算机厂商的广泛青睐。微控制器(MCU)在与计算机实现通信时大多依靠USB来实现。在MCU中,51单片机是国内使用最广的单片机之一,但是由于多款51单片机无法直接与计算机实现USB通信,而给许多用户开发和使用带来不便。本文以51单片机中的典型代表STC89C52和恩智浦开云棋牌官网在线客服公司的PDIUSB12为基础设计的USB接口电路,解决了MCU和计算机的USB通信问题。本方案具有价格便宜、使用简单、无需编写复杂的USB驱动程序、即插即用等优点。
1 电路硬件设计
1.1 芯片简介
本系统以单片机STC89C52和PDIUSB12接口芯片为基础而搭建。STC89C52是STC公司生产的一种低功耗、高性能8位CMOS微处理器,具有经典的MCS-51内核,主要有以下功能特点:拥有灵活的8 KB Flash程序存储器和512 B RAM数据存储器,并含有32位I/O口和内置的4 KB EEPROM,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构,全双工串行口;掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止;最高运作频率35 MHz,是一种常用性价比较高的MCU。
USB接口芯片采用的PDIUSB12是一种高性能USB接口器件,集成了SIE、FIFO存储器、收发器以及电压调整器。它支持本地的DMA传输,能够与外部的微处理器实现2 Mb/s的高速并行接口,集成了320 B的多配置FIFO存储器,在块传输模式下有1 Mb/s的数据传输率,可通过软件实现与USB相连,多中断模式实现批量和同步传输[1]。可以把PDIUSB12、MCU与计算机连接,本设计中与计算机相连的结构图如图1所示。
1.2 硬件电路
由STC89C52和PDIUSB12构成的USB接口电路图如图2所示,PDIUSB12的8位并行数据分别与STC89C52的P0口连接;ALE表示地址锁存功能,与GND相连,关闭地址信息锁存;CS_N表示片选功能,与GND相连,芯片一直处于工作状态;SUSPEND与GND相连,挂起功能失效;中断请求引脚INT_N与MCU的外部中断INT0相连,低电平时有效;RD_N和WR_N为控制信号,分别与单片机P3.3口和P3.4口相连;地址位A0与单片机P3.5口相连,当A0为高电平时表示单片机发出命令指令,当A0为低电平时表示单片机发出数据指令;DMA请求引脚DMREQ悬空;DMA应答引脚DMACK_N低电平时有效,它与VCC相连无DMA应答;可编程时钟输出DMACK_N悬空[2]。
USB设备有两种供电方式:总线供电和自供电方式,为了方便使用、减少外围电路的复杂程度,本文选择了总线供电方式。USB接口有4个引脚,分别是5 V的VCC口、GND、数据口D+和D-。LED灯D2与USB的VCC口和GND相连,当系统与USB接口连接时,D2灯亮。数据口D+、D-用于通信,也可通过D+、D-的电位状态来判断系统是否被计算机识别。当电位差接近GND时,表示系统与计算机连接未成功;当电位差接近VCC时,表示系统已做好准备可以与计算机通信。也可以通过GL_N脚的LED灯D1来进行判断:当D1间歇闪烁,表示系统正在与计算机进行识别;当D1一直点亮,表示已成功完成识别,可以通信。
2 系统软件设计
对51单片机和PDIUSB12的USB系统而言,其核心部分是程序设计,主要包括驱动软件部分、固件程序部分和应用软件部分。为简化设计,驱动软件利用Windows自带的驱动软件,使用HID系统接口协议,省去了驱动软件的开发过程。因此固件程序和应用软件程序是系统的关键部分。
2.1 USB设备与计算机通信过程
PDIUSB12拥有PSIE(Philips串行接口引擎)功能,PSIE实现了全部的USB协议层,并完全由硬件实现而不需要软件的参与。该模块的功能包括同步模式的识别、并行/串行转换、位填充/解除填充、CRC校验/产生、PID校验/产生、地址识别和握手评估/产生。要实现计算机与USB设备的通信,需要在USB设备接入计算机时进行枚举过程[3],也就是让计算机识别与设置USB设备、设备与主机之间的通信通过控制传输模式进行。其过程主要如下:
(1)当USB设备接入计算机时,USB设备处于上电状态,单片机和PDIUSB12上电。在PDIUSB12芯片内部的D+、D-上集成有1.5 k?赘的上拉电阻,默认状态下此上拉电阻不与VCC相连。上电后,若将D+拉至高电平,根据集线器监测到的数据变化,识别出有高速设备接入;若上拉电阻将D-拉至高电平,识别出有低速设备接入。本系统设定的是高速USB设备。在MCU完成初始化操作中,设置D+为高电平。
(2)当计算机检测USB设备已经接入并判断出是高速设备还是低速设备后,计算机会发送Set_Port_Feature请求给集线器用以管理端口USB设备,并将D+、D-置低电平状态(即复位状态),持续10 ms后回到通信状态。在计算机发送完Set_Port_Feature后,会不断向集线器发送Get_Port_Status请求,以查询USB设备是否完成复位功能。当集线器完成复位后,USB设备处于空闲状态,等待计算机发送新的指令。USB设备和计算机传输的默认地址是0和端点0。
(3)计算机通过发送Set_Address请求向USB设备分配一个唯一的地址。此后计算机与USB设备的所有通信都通过这个地址来实现。
(4)地址分配完毕后,计算机从新地址获取设备描述符。设备描述符中规定了一个或多个配置描述符,计算多次发送Get_Descriptor()命令来读取这些配置描述符。设备描述符包括端点0的最大包长度、设备支持配置和个数、设备类型、PID、VID等。计算机收到后发送0 B数据包作为应答。
(5)计算机读完设备描述符后对设备进行配置,此时计算机端口会弹出窗口,展示发现新设备的信息、产商、产品描述、型号等。
(6)计算机从描述符中得到足够的信息之后开始为设备安装驱动。加载驱动后,计算机发送Set_Configration()命令请求为设备选择一个合适的配置,至此USB枚举过程结束[4]。此时,若计算机向USB发送某一数据指令,数据通过USB口传送给PDIUSB12,经PDIUSB12交由MCU进行处理,处理完毕后其结果经USB接口返还给上位机软件显示出来。至此,实现USB设备与计算机的最基本通信。
2.2 固件程序设计
2.2.1 固件结构
固件结构和数据流向如图3所示。在硬件提取层中首先要对系统进行底层设置和识别,主要是对PDIUSB12和MCU的I/O口进行识别和加载的过程;PDIUSB12命令接口包含若干子程序命令,需要时可对子命令进行直接调用;中断服务程序(ISR)的主要功能是当PDIUSB12发送中断请求时,接收传来的数据并设定标志传给主循环程序;标准设备处理表示对USB的标准设备请求进行处理;厂商请求处理表示对用户添加的厂商请求进行处理[5];主循环主要是处理用户按键、I/O口等用户自定义功能和接收各模块的数据处理的功能。
2.2.2 PDIUSB12接口命令
该模块包含PDIUSB12的所有子程序,当需要时只要从中直接调用即可。下面列举其中几个主要功能:
INT16U D12_ReadChipID(void)//读取芯片ID
void D12_SetEndpointEnable(INT8U bEnable)
//设置端点使能
void D12_SetMode(INT8U bConfig,INT8U bClkDiv)
//模式设置
void D12_SetDMA(INT8U bMode)//DMA工作方式设置
INT16U D12_ReadInterruptRegister(void)
//读取中断寄存器值
INT8U D12_SelectEndpoint(INT8U bEndp)//端点选择
INT8U D12_ReadEndpointStatus(INT8U bEndp)
//读取端点状态
INT8U D12_WriteEndpoint(INT8U endp,INT8U len,
INT8U*buf)//写入数据
void D12_AcknowledgeEndpoint(INT8U endp)//答应setup
在该模块下的大多函数都是D12开头的。其详细功能就不一一介绍,可参阅PDIUSB12数据手册。
2.3 应用软件及程序设计
应用软件是将计算机发送过来的数据经单片机处理后再返回给计算机,并通过上位机将发送和接收的数据显示出来。
以计算机将发送给MCU的数字进行+1操作为例,实现该功能的应用程序如下:
if(bEPPflags.bits.ep2_rxdone)
{
bEPPflags.bits.ep2_rxdone=0;
D12_WriteEndpoint(5,EP2_PACKET_SIZE,EpBuf);
}
本设计选择单片机多功能调试助手作为上位机软件,这是一款集串口/USB/网络调试、进制转换、字模与数码管字型码制作、常用校验值计算、UNICODE码转换、位图输出C文件等众多功能于一身的综合型调试软件。将实验数据和实验结果显示出来,其实现结果如图4所示。
3 结论
本文研究了基于STC 51单片机和PDIUSB12的USB接口设计,以STC89C52为示例提出了整体研究方案。该方案采用HID系统接口协议,经试验发现其性能稳定、使用方便、性价比高,可作为STC 51单片机与计算机的通信接口使用。同时也可为其他USB接口电路的研究提供解决思路。
参考文献
[1] 宏晶公司.宏晶STC89C5X系列单片机器件手册[Z].2009.
[2] Philips Corp. Firmware programming guide for PDIUSBD12 version 1.0[Z]. 1998,9.
[3] 徐华中,冯波.基于PDIUSBD12芯片的USB模块设计[J].武汉理工大学学报(信息与管理工程版),2008,30(2):225-227,239.
[4] 任卫华,叶明.基于PDIUSBD12芯片的USB接口实现方案[J].国外电子元器件,2005(6):25-27.
[5] 张明,金宁德,赵鑫.采用PDIUSBD12实现USB高速数据传输[J].测控技术,2005,24(8):24-27.