首页 > 应用 > 智能硬件
[导读]摘要:随着计算机技术的更新换代,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的积木式结构。

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固件程序的开发。该固件编写采用分层结构简洁且易于修改和测试,既增加了代码的可读性,又增加了程序的通用性和移植性。

换一批

延伸阅读

[新鲜事] 坚决不学苹果 索尼表示3.5mm耳机接口不会走

坚决不学苹果 索尼表示3.5mm耳机接口不会走

索尼表示,不会和其他的手机厂商一样,仍然会保留Xperia系列新机上的3.5mm耳机接口。上个月索尼高管也在日本的一场新闻发布会上确认了这个消息。......

关键字:索尼 3.5mm 耳机接口

[真心话] 苹果强推USB-C后,用户怀念那些被“砍掉”的接口

苹果强推USB-C后,用户怀念那些被“砍掉”的接口

对于一些用户来说,新款MacBook Pro最大的改动在于USB-C接口的加入。去年秋天,苹果更新了MacBook Pro笔记本,除了新的设计和改进之外,还加入了新的Touch Bar触控栏,然而对于一些用户来说,新款MacBook Pro......

关键字:苹果 USB-C 接口

[图酷] 天啊,我的USB充电线变成了触手怪,长出了吸盘!

天啊,我的USB充电线变成了触手怪,长出了吸盘!

关于如何收纳、整理USB线,让你的桌面清爽、整洁,深圳的“Lofree洛斐生活”有一个好主意,那就是给USB线加上吸盘,让它们变成见啥吸啥的触手怪……......

关键字:

[新鲜事] 这就尴尬了!手机竟然把USB-C接口充电宝充满电了...

这就尴尬了!手机竟然把USB-C接口充电宝充满电了...

USB-C的优点非常明显,反正都可以插、传输音频、快速充电等等,其大有一统手机、PC接口的势头,但是这样真的好吗? Android Central编辑分享了一个让人哭笑不得的故事,自己的安卓手机连到USB-C接口充电器上,一夜时间......

关键字:手机 充电宝 USB-C

[新鲜事] 豪华版升级!HDMI 2.1来了,支持4K 120帧、带宽48Gbps

豪华版升级!HDMI 2.1来了,支持4K 120帧、带宽48Gbps

上月中旬,HDMI Forum Inc组织发布了最新的HDMI 2.0b接口标准,今天,HDMI 2.1的规格细节也正式公开。HDMI是目前统治影音市场最流行的音视频接口,覆盖电视、显示器、PC电脑、手机等几乎全领域。HDMI 2.1作为后......

关键字:HDMI 接口 视频

[真心话] 你真准备好了么?USB-C即将成为未来:心酸

你真准备好了么?USB-C即将成为未来:心酸

如今新出的一些轻薄本为了厚度把我们常用的USB-A型接口都完全取消,全面换上了USB-C型接口。......

关键字:笔记本电脑 USB-C

[新鲜事] 单碟1.75T 西数14TB充氦硬盘今年上

单碟1.75T 西数14TB充氦硬盘今年上

西数去年底更新了机械硬盘的容量纪录,带来了新一代HGST Ultrastar He12系列,高达12TB。据外媒报道,这款12T硬盘最快本月就将出货。He12采用充氦技术,PMR垂直磁记录,8碟,7200转,提供SAS 12Gbps及SAT......

关键字:西数 硬盘 HGST Ultrastar He12

[图酷] USB 3.1究竟有多快?每秒700M不成问题

USB 3.1究竟有多快?每秒700M不成问题

在CrystalDiskMark测速软件进行连续读写测速的情况下,读取速度达到了781.2MB/秒、写入速度为797.8MB/秒。理论上,USB 3.1提供了双信号10Gbps的传输速率,使用了新型的......

关键字:

[新鲜事] NVIDIA下代Volta GPU将使用TSMC 12nm工艺,说好的16nm呢?

NVIDIA下代Volta GPU将使用TSMC 12nm工艺,说好的16nm呢?

NVIDIA、高通的新一代高性能计算芯片都会使用TSMC的16nm、12nm或者10nm工艺,有意思的是NVIDIA去年公布的Xavier SoC处理器现在说是使用12nm工艺,但去年发布时NVIDIA提到它是16nm工艺的。......

关键字:NVIDIA Volta GPU 12nm工艺

[图酷] 超便携USB迷你电动缝纫机

超便携USB迷你电动缝纫机

来自日本的THANKO是一家专注于推广新奇创意电脑周边产品、通讯产品以及其他新潮产品的公司,关注数码的朋友们此前应该就留意过该公司出品的手指鼠标、迷你数码相机等,都非常有意思。近日,又有一款新产品吸引......

关键字:
条评论

我 要 评 论

网友评论

技术子站

更多

推荐博客