基于AT89C52单片机和接口芯片实现USB接口的应用设计

usb是一种新型的通用串行总线,它具有即插即用、可热插拔和传输速率高的特点,在工业界已经获得了广泛的支持和应用。迄今为止,各种usb的外设已有上千种,除了象显卡这种需要极高数据量和实时性要求特别高的控制设备,几乎所有的pc外设都可以移植到usb上来。
一般的usb设备都使用一片微控制器作为其核心部件,通过微控制器强火的控制和运算功能,开发者可以很容易地实现usb设备的智能化。而嵌入式设备的实时、小巧等特性使得usb的协议栈和总线驱动的开发设计显得尤为重要,因为它的好坏会直接对usb主机产生影响,从而会对嵌入式系统性能和稳定产生较大影响。本文以pdiusbd12为usb接口芯片,以at89c52为控制器,给出了一种usb接口的设计方法。
1 pdiusbd12芯片介绍
philips公司生产pdiusbd12接口芯片是一款性价比很高的usb器件,它通常通过其高速并行接口进行和微控制器通信,支持本地的dma传输,支持3个usb端点,其中一个端点128b容量,另外2个端点具有256b容量。该器件允许在众多可用的微控制器中选择最合适的系统控制器可,允许使用现存的体系结构并使设备软件投资成本减少,是开发低成本,高效率的usb外围设备的最佳途径。
pdiusbd12特性:
(1) 符合通用串行总线usb1.1版规范
(2)高性能usb接口器件集成了sie fifo存储器收发器以及电压调整器
(3) 符合大多数器件的分类规格
(4) 可与任何外部微控制器/微处理实现高速并行接口2m字节/秒
(5) 完全自治的直接内存存取dma操作
(6) 集成320字节多结构fifo存储器
(7) 主端点的双缓冲配置增加了数据吞吐量并轻松实现实时数据传输
(8) 在批量模式和同步模式下均可实现1m字节/秒的数据传输速率
(9) 具有良好emi特性的总线供电能力
(10) 在挂起时可控制lazyclock输出
(11) 可通过软件控制与usb的连接
(12) 采用goodlink技术的连接指示器,在通信时使led闪烁
(13) 可编程的时钟频率输出
(14) 符合acpi onnow和usb电源管理的要求
(15) 内部上电复位和低电压复位电路
(16) 有so28和tssop28两种封装
(17) 工业级操作温度-40~+85℃
(18) 高于8kv的在片静电防护电路减少了额外元件的费用
(19) 具有高错误恢复率(》99%)的全扫描设计确保了高品质
(20) 双电源操作3.3v或扩展的5v电源,范围为3.6~5.5v
(21) 多中断模式实现批量和同步传输
2 usb通信模块的硬件电路的设计
本系统设计采用pdiusbd12和at89c52配合完成通信设计。其连线图如图1所示。
从上图分析知道,at89c52和pdiusbd12采用总线方式连接,对at89c52来说,pdiusbd12是一个具有8位数据总线的存储设备。pdiusbd12获取usb总线数据,并对数据作相应协议处理之后以中断的方式通知at89c52,mcu根据相应的中断请求往pdiusbd12发送不同请求数据,协同实现usb设备列举和数据传输。当外设经过pdiusbd12连接到集线器后,集线器就会检测外设的连接状态并向主机报告,一但发现该设备,主机就会发送一系列请求给集线器,以使得集线器在主机和设备之间建立一个通信通道。然后主机试图列举该设备,发送设备描述符等请求可,列举成功后,主机即可以从外设能够被主机识别并能和主机进行通信。之后,usb总线进入数据传输阶段。
3 usb固件程序的设计
固件是fireware的中文意思,它实际上足单片机的程序文件,可以采用c语言或是汇编语言编写。它的操作方式与硬件联系紧密,包括usb设备的连接、usb协议、中断处理等,它不是单纯的软件,而是软件和硬件的结合,开发者需要对端口、中断和硬件结构非常熟悉。在本系统中,当pdiusbd12从usb接受到一个数据包,就对cpu产生一个中断请求,cpu立即响应中断。在isr(中断服务程序)中,固件读取数据,并将数据保存值到循环数据缓冲区,随后置柏应事件的标志位,cpu继续前台程序,检测事件标志,执行完成相应的事件任务。固件程序一般放入mcu中,当把设备连接到主机上时,上位机可以发现新设备,然后建立连接。因此,编写固件程序的一个最主要的目的就是让windows可以检测和识别设备。
3.1 固件功能需求
在本系统设计中,固件程序不仅要协助usb控制芯片pdiusbd12完成usb通信的任务,而且还要控制采集模块和标准信号源的工作,具体包括:
(1) 应答主机列举设备的所有请求,完成设备的列举和重列举过程。其中包括用软件来模拟usb设备的断开与从新连接,对接收到的设备包进行分析和判断,对主机的设备请求作出适当的响应工作,直到主机对设备的配制完成。
(2) 初始化工作,这项工作有两个方面,一是对采集模块和信号源模块的硬件进行初始化工作;二是对usb芯片进行初始化,设置一些特殊功能寄存器的初值,例如开或关中断,配制i/o端口等。
(3) 当主机发送数据时,要接收数据包并解析数据包的含义,根据事先约定的协议进行相应的操作。对于采集模块具体包括:写入波形数据,选择频率,选择幅度,选择波形类型等。
(4) 当主机要求回传采集到的数据时,根据设备状态回传数据,或者应答数据未准备好。回传数据后,自动按照原先保存的设置初始化采集参数并启动下一次采集,从而使采集继续下去。
(5) 响应硬件产生的中断,并作出相应的处理。
单片机与pdiusbd12的通信主要是靠单片机给pdiusbd12发命令和数据来实现的。pdiusbd12的命令字分为三种:初始化命令字、数据流命令字和通用命令字。pdiusbd12数据手册给出了各种命令的代码和地址。单片机先给pdiusbd12的命令地址发命令,根据不同命令的要求再发送或读出不同的数据。
因此,可以将每种命令做成函数,用函数实现各个命令,直接调用函数即可。
固件程序流程图如图2所示。
其中:
td_init():此函数用于初始化全局状态变量。
td_poll():此函数在操作外设时反复调用,用于外设功能程序代码的执行。
td suspend():此函数使外设进入低功耗挂起状态。
td_resume():次函数用于对外部恢复事件作出反应,并恢复处理器的正常工作状态。
3.2 驱动程序设计
驱动程序介于硬件与上层应用软件之间,为它们之间的通信提供桥梁。应用程序可以不必知道它想要或者正在与之通信的硬件设备的属性,包括电气连接,物理地址,信号种类。通信协议等,甚至应用程序可以不知道与之通信的是何种接口。这些工作全部是由各个层次的驱动程序来完成的,应用程序只需要知道设备的名称,或是功能就可以了。在windows中,应用程序可以通过驱动程序像操作一般文件一样来访问硬件设备,以实现应用层与设备的交互。与传统pc总线(如pci总线)设备的驱动程序相比,usb设备驱动程序从不直接与硬件对话。相反,它仅靠创建urb(usb请求块)并把urb提交到总线驱动程序就可完成硬件操作。
usb驱动程序现在已经具有工业标准化,一般生产usb芯片的厂家已经设计好其驱动程序,在本设计中,使用了由philips公司提供的pdiusbd12通用驱动程序d12usb.sys,即功能驱动程序。
4 结束语
philips公司的pdiusbd12芯片及其开发环境提供了一个快速有效的开发手段,本文对usb设备端的固件和硬件设计过程以及在主机端的驱动程序和应用程序开发都作了全面详细的介绍。给出了一个快速实现usb控制器的方法与技术,也是开发其他类似设备的参考范例。


Intersil推出极低功耗模数转换器ISLA212Pxx和ISLA214Pxx
物联网连接管理平台成车联网刚需,汽车行业七大差异化诉求
Mini LED和Micro LED的起源及技术特色
移动视频节能问题的解决方案
CAD的设计中心有什么作用?
基于AT89C52单片机和接口芯片实现USB接口的应用设计
苹果推出iOS 15.5测试版 华为在欧专利申请破纪录
龙年限定版红魔9 Pro亮相:全球首发骁龙8 Gen3真全面屏,CQ9视觉盛宴!
太阳能电池板像纸一样薄
芯片的验证模块划分
在VR安全体验中将可以以各种方式来体验安全性
从数小时到数分钟:NVIDIA推出全新渲染引擎GeForce RTX 3080 Ti和3070 Ti
采用R-Car S4和PMIC的汽车网关解决方案
AI芯片科普:边缘AI芯片是什么
语音识别技术在智能客服领域的应用与优化
Microsoft将为运行更低版本的HP设备发布Windows更新
区块链项目是什么?好的区块链项目要素应具备什么?
关于TPS23754输出短路问题分析
模组成为5G商用及推动行业应用创新的关键,助力千行百业的繁荣发展
WIFI在5G时代还有用吗