首页 > 应用 > 智能硬件
[导读]摘要:随着计算机技术的更新换代,USB接口已经成为个人计算机上最重要的外部设备扩展接口,在进行USB外设开发的过程中需要编写其固件程序。在此对USB接口固件程序进行了开发,在Keil C51软件环境中,采用C语言开发。

摘要:随着计算机技术的更新换代,USB接口已经成为个人计算机上最重要的外部设备扩展接口,在进行USB外设开发的过程中需要编写其固件程序。在此对USB接口固件程序进行了开发,在Keil C51软件环境中,采用C语言开发。介绍了固件程序的主要功能,给出了固件程序的流程、结构和端点配置,并给出了重点地方的具体程序。该固件编写采用分层结构简洁且易于修改和测试,既增加了代码的可读性,又增加了程序的通用性和移植性。
关键词:PDIUSBD12;USB;固件程序;分层结构

    在设计开发一个USB外设的时候,开发者主要需要编写3部分的程序:固件程序、USB驱动程序和客户端应用程序。当把设备连接到主机上(USB连接线插入插孔)时,上位机可以发现新设备,然后建立连接。因此,编写固件程序的一个最主要的目的就是让Windows可以检测和识别设备。固件程序可以在Keil C51软件环境中,用C语言开发。Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,KeilC51软件提供了大量的库函数和功能强大的集成开发调试工具,使用的是全Windows界面,具有方便实用的特点。另外,Keil C51生成的目标代码效率非常高,多数语句生成的汇编代码很紧凑,容易理解。因此,本文考虑采用此方法开发PDIUSBD12芯片的USB固件程序。

1 固件程序主要完成的工作
    
固件设计的目标就是完成主机与设备之间的命令与数据传输与转换,使PDIUSBD12在USB上达到最大的传输速率。它的操作方式与硬件联系紧密,包括USB设备的连接、USB协议、中断处理等。在系统中,当PDIUSBD12从USB接收到一个数据包,就对CPU产生一个中断请求,CPU立即响应中断。在ISR(中断服务程序)中,固件读取数据,并将数据值保存到循环数据缓冲区,随后置相应事件的标志位,CPU继续前台程序,检测事件标志,执行完成相应的事件任务。
    USB单片机固件程序通常由3部分组成:初始化单片机和所有的外围电路(包括PDIUSBD12);主循环部分:这部分是可中断的;中断服务程序,可以中断执行。根据USB协议,任何传输都是由主机开始的,这样单片机作它的前台工作,等待中断。主机首先要发令牌包给USB设备(这里是PDIUSBD12),PDIUSBD12接收到令牌包后就给单片机发中断,单片机进入中断服务程序,首先读PDIUSBD12的中断寄存器,判断USB令牌包的类型,然后执行相应的操作,因此,USB单片机程序主要就是中断服务程序的编写,在USB单片机程序中要完成对各种令牌包的响应。
    单片机与PDIUSBD12的通信主要是靠单片机给PDIUSBD12发命令和数据来实现的。PDIUSBD12的命令字分为3种:初始化命令字、数据流命令字和通用命令字。PDIUSBD12给出了各种命令的代码和地址,单片机先给PDIUSBD12的命令地址发命令,根据不同命令的要求再发送或读出不同的数据。因此,可以将每种命令做成函数,用函数实现各个命令,以后直接调用函数即可。

2 固件程序的流程及结构
    
USB设备启动流程如下:
    (1)USB设备接入USB口,发出连接USB命令;
    (2)主机发出读设备描述符2次;
    (3)主机根据设备描述符(厂商ID、产品ID),启动相应设备驱动程序;
    (4)设备驱动程序初始化USB设备:
    ①读设备描述符;
    ②读配置描述符;
    ③选择接口、端点(管道),确定传输方式。
    在编写USB的单片机固件程序时,单片机的中断应设置为电平触发,中断后一定要读上次传输状态寄存器(命令40H~45H),以清除中断寄存器中的中断标志,这样PDIUSBD12的中断输出变回为高电平。
    PDIUSBD12固件编写采用分层结构简洁且易于修改和测试,既增加了代码的可读性,又增加了程序的通用性。PDIUSBD12固件的开发一般都是在周立功单片机公司提供的固件源码的基础上做相应的修改。由于该固件采用分层分模块的结构,在做移植的时候只要修改部分代码就可以运行于特定的平台,比较方便。
    固件程序采取如图1的积木式结构。

本文引用地址: http://www.21ic.com/app/computer/201301/156952.htm

a.JPG


2.1 硬件提取层
    epphal.c文件是固件中的最底层代码,由于在具体应用时所提供的硬件平台都是不同的,因此该文件必须进行修改以适应当前应用。该文件里主要包含了读写PDIUSBD12寄存器的函数,PDIUSBD12芯片各控制线与单片机I/O口的连接等。
    读写PDIUSBD12主要有2种方式:多路复用地址/数据总线方式和A0地址位方式。不同的方式其电路连接完全不同,因此其读写函数也完全不同。本处采用多路复用地址/数据总线方式,即用地址/数据总线的最低位标识总线上是数据还是命令,1代表命令,0则代表数据。
2.2 D12命令接口
    
d12ci.c文件中定义了一套访问D12功能的命令接口。
    D12的命令包括:4个初始化命令、24个数据流命令和2个普通命令。该文件包含了单片机对上述命令的实现函数,基本无须修改。
2.3 中断服务程序
     isr.c部分的代码主要处理PDIUSBD12产生的中断请求。
    硬件设计中,将PDIUSBD12中断一般连到单片机的外部中断0或者1中。由于只有一个中断源,如果要知道是什么中断,就需要读取PDIU SBD12中的中断寄存器的值进行判断。该文件包含了需要处理的各个中断的处理函数。其中许多处理函数仅仅是将相应标志位置1,用来在主函数中处理各类事务。在各个输入/输出端点引发的中断处理函数中,分别进行了读取缓冲区数据和发送数据到缓冲区等动作。其中,控制输入端点的中断处理函数还将相应控制位置1,以用来在主函数中触发标准设备请求和厂商请求。
2.4 主循环
    
主函数文件mainloop.c是一个大循环。在该文件中要执行各个初始化函数,发送USB请求和处理USB总线事件等。设备的各项功能需要在该文件中添加。
     首先,初始化I/O口;然后初始化定时器2,设置中断,设置DMA(设备未用到DMA方式,置为00)等,通过连接指令指示D12完成软连接(SoftConnect)后,电脑就会检测到新设备。
    在进入主循环后,需要用51的定时器2每隔1 ms检测一次电键的电平高低,并且将此信号通过USB接口发送出去,同时将P1.2口取反,以产生500 Hz的方波信号作为电键音。
2.5 协议层
    
chap_9.c:标准设备请求文件。该文件包含了所有设备相关的描述符,以及各个USB设备标准请求的实现函数。一个USB设备的各个特性都包含在了其所有的描述符内,而各个设备都有各自的特点,因此每个设备的描述符都要进行相应修改。其中,设备描述符里的idVendor与idProduct是联系PC端驱动的标志,必须与驱动一致。而各类标准设备请求是每个标准USB设备都要能够响应的,因此也就无须修改了。
    protodma.c:该文件用来描述厂商请求。如果USB设备需要响应厂商请求,那么就要编写该厂商请求的实现函数。由于终端操作平台无须定义特殊的厂商请求,因此该文件不用修改。

3 端点配置
    
在D12芯片内存在三套输入/输出端点,根据配置不同可完成不同的工作,终端操作平台中的固件中是按照表1配置的。

b.JPG


    根据端点的配置和各端点的特点,设置端点1为控制命令的传输端点,接收来自电脑的状态控制指令,共两个字节,如表2所示。

c.JPG


    设置端点2为电键信号传输端口,手电键的按下或抬起通过00和01来标识,传输间隔为1 ms。

4 固件程序
    
多路复用地址/数据总线方式的实现,通过地址线的最低位来分辨命令和数据:
    d.JPG
    e.JPG
    主循环程序首先做初始化I/O口,设置中断等准备工作,然后进入主循环,在主循环内查询事件标志,并做出相应处理。

5 结语
    
本文实现了USB固件程序的开发。该固件编写采用分层结构简洁且易于修改和测试,既增加了代码的可读性,又增加了程序的通用性和移植性。

换一批

延伸阅读

[消费类电子新闻] 避免重蹈覆辙?苹果iOS 12.1将性能管理扩展到iPhone X/8/8 Plus

避免重蹈覆辙?苹果iOS 12.1将性能管理扩展到iPhone X/8/8 Plus

我们知道,前几年苹果iPhone的降频门闹得沸沸扬扬,苹果为了解决这一问题,近期再iOS 12.1中给一些旧手机增加了性能管理功能,以让用户选择要不要通过降频来延长手机使用时间。现在这一性能管理功能扩展到了iPhone 8、iPhone 8......

关键字:苹果 iOS 12.1 iPhone X

[消费类电子新闻] 苹果iPad Pro跑分曝光:A12X性能强到咋舌

苹果iPad Pro跑分曝光:A12X性能强到咋舌

11月1日消息,昨天苹果发布会上正式发布了新版iPad Pro,同时新版的iPad Pro将使用苹果最新的处理器A12X,相较于之前iPhone xs max采用的苹果A12处理器,A12处理器采用了6核CPU和4核GPU架构。而新版iPa......

关键字:苹果 iPad Pro A12X处理器

[消费类电子新闻] iPad Pro 3.5mm耳机孔被砍,苹果推USB-C转3.5毫米耳机转换线

iPad Pro 3.5mm耳机孔被砍,苹果推USB-C转3.5毫米耳机转换线

苹果新一代iPad Pro开始抛弃3.5毫米耳机插孔了,不知道明年的iPhone会不会也会砍掉这一插孔呢。插孔砍掉了,大家是不是担心自己的3.5mm插头的耳机怎么用呢,不用担心,苹果已经替你想好了,苹果推出了新款的USB-C转3.5毫米耳机......

关键字:iPad Pro 3.5mm耳机插孔 USB-C

[单片机应用] 51单片机学习笔记:ST7920控制器的12864液晶使用总结

51单片机学习笔记:ST7920控制器的12864液晶使用总结

总结:1、 控制芯片不同,液晶接口定义,或者寄存器定义也可能不同2、 显示方式有并行和串行,串行方式据说不能读数据寄存器(DR),那指令暂存器IR是否可读?3、 含字库芯片显示字符时不必对字符取模了,但字库有可能缺斤少两......

关键字:51单片机 ST7920控制器 12864液晶

[单片机新闻] 订单增多!环球晶圆将投4.38亿美元扩增一条月产15万片的晶圆产线

订单增多!环球晶圆将投4.38亿美元扩增一条月产15万片的晶圆产线

环球晶圆近日财报会上表示,今年的营收将继续创新高,同时为了满足客户端12英寸晶圆先进制程的新产能需求,公司在韩国天安市的现有晶圆厂MEMC Korea Co.将扩增一条月产能目标为15万片的晶圆产线,预计投资金额达4.38亿美元。 ......

关键字:环球晶圆 12寸晶圆 硅晶圆

[消费类电子新闻] 才发布几个小时,苹果iOS 12.1又发现一个新漏洞

才发布几个小时,苹果iOS 12.1又发现一个新漏洞

就在苹果为iOS 12发布了安全补丁几个小时后,iOS狂热爱好者、黑客Jose Rodriguez在iOS 12.1中发现了又一个漏洞......

关键字:苹果iOS 12.1 漏洞

[消费类电子新闻] 苹果推送iOS 12.1:修复 bug,支持eSIM

苹果推送iOS 12.1:修复 bug,支持eSIM

昨晚苹果发布会的最后,库克宣布 iOS 12.1 将会马上到来。果不其然,目前大多数支持iOS 12的设备都已经收到 iOS 12.1 的更新了,不妨下载 iOS 12.1 试试看。 ......

关键字:iOS 12.1 eSIM

[消费类电子新闻] 升升升!苹果IOS 12.1正式版多项重磅功能曝光!

升升升!苹果IOS 12.1正式版多项重磅功能曝光!

10月29日消息,多家运营商放出消息,苹果即将于10月30日发布IOS 12.1正式版,这次IOS 12.1正式版将带来多项功能的更新,其中包括双卡双待功能的优化,FaceTime聊天功能优化与摄像功能的调整与加强。......

关键字:苹果 IOS 12.1 正式版 双卡双待

[通信技术] L-com推出配置铁氧体磁环的低烟无卤USB 2.0线缆

L-com推出配置铁氧体磁环的低烟无卤USB 2.0线缆

L-com Global Connectivity公司(“L-com”)近日宣布推出一系列配置铁氧体磁环的低烟无卤(LSZH)USB线缆新产品,这些产品非常适合用于在较差通风区域内保护人员和设备免受有毒和腐蚀性气体的影响。 ......

关键字:L-com 铁氧体磁环 USB 2.0线缆

我 要 评 论

网友评论

芯闻号

技术子站

更多

项目外包

更多

推荐博客