历史上的今天
返回首页

历史上的今天

今天是:2025年01月23日(星期四)

正在发生

2021年01月23日 | 基于51单片机和PDIUSB12的USB接口设计

2021-01-23 来源:eefocus

简介:为解决51单片机与计算机的串行总线(USB)的通信问题,以PDIUSB12芯片为基础,选择51单片机中的STC89C52为示例,设计了一款USB的接口电路,解决了多款51单片机与计算机的USB通信困难的问题。


引言

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


推荐阅读

史海拾趣

Good Sky Electric Co Ltd公司的发展小趣事
电气维护保养是确保摇臂钻床长期稳定运行的重要环节。在维护时,应首先断开电源并锁定开关,以确保安全。然后,可以依次检查电气元件的外观是否完好、接线是否牢固、接触是否良好等。对于老化的元件或损坏的部件,应及时进行更换或修复。此外,还应定期清洁电气元件和散热系统,以保持良好的工作环境和散热效果。
Dearborn Electronics Inc公司的发展小趣事

随着电子行业的快速发展和市场竞争的加剧,Dearborn Electronics Inc.面临着诸多挑战。为了保持竞争优势,公司不断进行转型升级,推出了一系列具有更高性能、更小尺寸、更低成本的新产品。同时,公司也积极拓展新的应用领域和市场,寻找新的增长点。

ACCUTEK公司的发展小趣事

ACCUTEK公司深知人才是企业发展的核心力量。因此,公司始终注重人才培养和团队建设。公司建立了完善的人才培养和激励机制,鼓励员工不断学习和创新。同时,公司还注重营造良好的工作氛围和团队文化,让员工能够在轻松愉快的环境中工作。这些举措不仅提升了员工的归属感和忠诚度,也为公司的持续发展提供了有力的人才保障。

这些故事基于电子行业的一般发展规律和可能的企业发展路径构建,并不代表ACCUTEK公司的真实历史。如需了解该公司的真实发展情况,建议查阅相关资料或访问其官方网站。

全鹏(CHAMPION)公司的发展小趣事

全鹏公司一直重视研发和创新。为了不断满足市场需求,公司投入大量资源用于新技术和新产品的研发。通过引进高素质、高学历的研发人员,建立先进的研发实验室和测试中心,全鹏公司在产品研发方面取得了显著成果。这些新技术和新产品的推出不仅提升了全鹏公司的市场竞争力,也为客户带来了更好的使用体验。

Gilway Technical Lamp公司的发展小趣事
制冷剂是制冷系统中的重要介质,如果制冷剂泄漏,制冷效果将大打折扣甚至完全失效。
功得(CONQUER)公司的发展小趣事

在市场竞争日益激烈的环境下,功得公司意识到仅仅依靠创新是不够的,还需要有高品质的产品来赢得客户的信任。因此,公司开始注重产品质量管理,建立了完善的质量控制体系。功得公司严格把控原材料采购、生产工艺和成品检验等环节,确保每一件产品都符合高标准的质量要求。这种对品质的执着追求,使得功得公司的产品在市场上赢得了良好的口碑,品牌知名度也逐渐提升。

问答坊 | AI 解惑

石英振荡体名企诚招 研发部总工

百利通公司总部设在硅谷,是Nasdaq上市公司,在晶体振荡器领域位居世界前十大。百利通公司在香港和美国都设有研发中心,拥有一批经验丰富的专业设计人员。随着产品线的扩充和区域市场的成熟,先后在台湾、香港、上海设立公司,凭借其遍布全球的销售 ...…

查看全部问答>

求高手们帮忙看看这个射频可调衰减器

求高手们帮忙看看这个射频可调衰减器求高手们帮忙看看这个射频可调衰减器中Q1是用什么管的。型号是多小!!!!!原来上面用的是这个3个脚的管子 …

查看全部问答>

隔离器选型要点

隔离器选型要点 一.共模干扰抑制能力,隔离器优势先决条件。 隔离器在独有行业范围内,无论是温度隔离变送器、信号分配器、隔离配电器及电流、电压变送器等产品内,它们共有特点是端口之间要绝对电气隔离,也就是一次仪表、电源及采集设备之间没有任 ...…

查看全部问答>

如何选择生物识别产品?

  采用生物识别技术的门禁系统在安防行业应用已经越来越多,包括银行、监狱、部队等单位已经采用生物识别的门禁系统来加强其管理的安全性和使用的方便性。由于生物识别技术已经开始达到大规模的应用水平,包括产品价格、品质和技术都已经相对成熟 ...…

查看全部问答>

无法弹出wifi登陆框

wince加了wifi组件,同时里面有wifi的驱动和注册表 但插入wifi模块时候为什么不能够弹出登录框 dnw也没有打印出wifi加载的信息 想问一下 这个现象是不是与定制explore的时候有关呢? 由于需要,将系统的部分功能裁减了,比如说将\"任务栏\"去 ...…

查看全部问答>

window media player下添加菜单

大家好:      请教大家一个问题:      在微软window mobile 的windows media player下的右软键菜单下添加一个菜单项,该怎么添加? 微软是否提供相应的接口?      有谁知道 ...…

查看全部问答>

怎样读出试图列表里文件的名,用OnClickList么?

程序大概这样的,一个试图列表里显示了CF卡中所有的文件,鼠标焦点可以放在文件上,但现在想做一个选取功能,就是,当鼠标单击了一个文件就能直接或按另一个按钮读出他的名字,这样好去CF卡中查找这个文件并对这个文件操作。问题是,怎么读出文件的 ...…

查看全部问答>

I2C总线库函数介绍

函数I2CMasterInitExpClk( )    …

查看全部问答>

单片机浮点与字节数组的转换

void FloatToByte(float floatNum,unsigned char* byteArry){    char* pchar=(char*)&floatNum;    for(int i=0;i<sizeof(float);i++)    {  &nb ...…

查看全部问答>

M4开发板(14):硬件问题,关于Hanker开发板的VREF!

这几天又重新玩起了ADC采样功能,在测试AD采样加速度传感器的时候,我发现了问题,这个问题早在 https://bbs.eeworld.com.cn/viewthread.php?tid=330464这个帖子里,我就发现了,那就是AD采样的值不准确!!那个测倾角的程序,本来使用的那个MSP-E ...…

查看全部问答>