新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 将应用从串行接口移植到USB接口的简便方法

将应用从串行接口移植到USB接口的简便方法

作者:时间:2009-01-04来源:网络收藏

由于可以获得很多支持的微控制器和接口器件,所以对嵌入式应用设计工程师而言,没有COM端口并不会带来障碍。选择正确的工具和软件解决方案提供了一条转移到的捷径。

硬件补丁程序

对那些需要为基于串行端口的老项目提出快速解决方案的设计工程师来说,最先有吸引力的策略是采用一种补丁系统。

这可通过在嵌入式控制器串行接口与PC机连接器之间增加一个定制的USB-UART转换器来实现(图1)。

这些器件通常配有支持各种操作系统的定制驱动程序,完全可以仿真一个标准的串行端口。

图1:与采用大部分USB-UART接口器件相比,兼容USB接口的单芯片解决方案具有更高的性能和更低的成本。

该方法意味着需要重新设计嵌入式应用电路板以腾出空间容纳新的元件,但它不用改变固件和PC应用程序。拆除已证明无用的串行端口接收器有时只增加几美元成本,但却失去了采用USB所带来的大部分好处。

实际上,USB能够更快地传输数据,传输速度可达到典型串行端口的100倍(12 Mbps与115 kbps),继续使用UART,就会成为主要的设计瓶颈。另外,由于大部分USB-UART接口器件缺乏灵活性,无法实现灵活的电源管理,而这在许多嵌入式设计中是一个关键特性。

单芯片解决方案

从串行端口转移到USB的一个更好的硬件选择是采用单芯片解决方案,即选用具有USB接口的微处理器,并开发驱动程序(图2)以模仿串行端口。从硬件角度来看,单芯片解决方案显得非常有趣。

图2:采用单芯片解决解决方案可很好地将应用从串行接口移植到USB接口。

几乎不增加额外成本就可以在通用模型上使用兼容USB的通用型微控制器。拆除了串行端口接收器,电路板上元件的数量也就相应减少,可以在低成本USB连接器与新型兼容USB微控制器的D+/D-管脚间建立直接链接。

当通用微控制器和兼容USB的微控制器引脚互相兼容,就能将电路板重新设计的成本和工作量减小到最低。此外,不再为那些可以使用USB总线5V电源的应用配备电源适配器,也可以进一步降低成本。

软件界面

一旦我们选择了单芯片解决方案,我们就为应用需要开发新的PC驱动程序,甚至可能是新的固件。幸运的是,软件开发人员有多种选择,可通过重复使用应用界面种类的方法来减小开发工作量。

被构建到现在PC操作系统中,并具有最好支持的最常见USB接口类大概要算所谓的人机接口设备(通常指HID类)。所有的PC都需要一些像键盘或鼠标这样的人机接口,这些设备的连接已经从串行或者PS/2端口升级进USB。

所有操作系统都可以很好地支持HID,因为其驱动程序已经捆绑在Windows、Linux和MAC OS的每个拷贝中。因此,对于那些想从不太复杂的嵌入式设备中读写少量数据的设计工程师而言,HID是一个非常有吸引力的选择。

不幸的是,应用编程接口(API)没有什么能比得上COM端口接口,其结果是,将API移植到现有系统上更成问题,特别当PC上已经有一个复杂的应用软件的时候。

其它像打印机类和海量存储这样的标准USB接口类都是可能与嵌入式设备进行通讯。它们将遭遇同样问题,即陌生的接口和开发新PC应用软件的需求。

驱动程序开发需要有操作系统底层的深厚知识。就Windows PC机而言,这意味着要熟悉通常叫做WDM的Windows驱动程序模型。如果没有这方面的专业知识(大部分嵌入式控制设计工程师并不是WMD方面的专家),那么开发一个可基本工作的驱动程序原型也需要花费数月时间。

幸运的是,在大部分最新版本的Windows内的一个接口类可以使我们摆脱困境。微软公司原先开发这个叫做USB通讯设备类(CDC)是用来支持调制解调器应用。例如,开发人员可以获得CDC接口的完整源代码,以进行面向PIC18F4550系列的快闪USB 8位微控制器的开发。

CDC接口提供以下有用特性:固件库的代码量相对较小,为3KB;单芯片解决方案;数据存储仅占用大约50B的存储器空间(不包括缓冲区);最大吞吐量为80 KBps;完全由USB协议控制数据流量(不需要RS-232 XON/XOFF和硬件流控)。

简单的固件移植

在以后情况中,我们假设原先的串行端口代码是用C语言编写的,并且使用了可访问集成UART外设的公共C库。给定这些条件后,将固件移植到CDC需要进行如下的修改:

在主文件头部,用相应的USB声明代替针对串行端口的#include声明;

在主函数中,增加对USB-CDC初始化代码的调用;

在主循环中,增加对USB后台任务的调用;

验证应用程序代码,以实现与USB后台任务的协同多任务处理;

最后,为链接器提供USB-CDC专用库,生成最终的可执行代码,然后对快闪芯片进行编程。

在实践中,上述这种情况要求包含阻塞循环的应用程序不能调用任何功能,换而言之,它不能占用100%的处理器时间,也不能妨碍USB后台任务执行。反过来,所有USB控制函数、中断、标志和缓冲机制都由CDC类固件后台任务管理,设计工程师无需关注其实现细节。所有显示出来的只是一个非常类似于公共串行端口库的小的函数集。

联机的时间

现在可以将应用连接到PC上,Windows即插即用技术该登场了。在对所有USB应用都适用的初始枚举阶段后,屏幕上将弹出一个对话框,提醒用户已经发现一个新的硬件设备,需要为操作系统对其进行配置,以便使用它。

虽然CDC驱动程序已经是操作系统的一部分,但仍然需要更多的信息来帮助将它们与新发现的设备进行绑定,这也在Windows硬件管理器中创建一个端口特定的“属性页”,以后用户可以用它卸载或重新配置端口。在安装阶段,一个很小的纯文本文件(扩展名为.inf)非常有用,它需要先用(文本编辑器)准备好,当即插即用向导要求时提供。

获得COM端口

如果一切顺利,此时即插即用已经完成了安装过程,一个新的串行设备就会出现在硬件管理器中,系统会自动使用下一个可用的序列号为它指定一个名称(例如,已经安装了COM2和COM1,就会出现COM3),用户可以使用已经编写好用来访问实际COMx端口的程序来访问这个端口(如所有Windows软件中的超级终端程序)。

连接好后,除了通讯速度提高了,功能上没有什么区别。与PC上最快的串行端口相比,通讯速度提高了一个或两个数量级。Visual Basic或C++程序员可通过标准的Windows OpenFile()、ReadFile() 和WriteFile() API 来对仿真的COM端口进行读写,而不用改变任何代码。

现在已经可以使用兼容USB的、完整版闪存微控制器,这些单芯片解决方案为嵌入式控制设计工程师提供了最低的成本和最大的灵活性。通过使用CDC类库,串行端口仿真为工程师们将应用程序移植到更快的USB通讯、摆脱传统串行端提供了一条捷径,同时也消除了Windows开发中的障碍。按照上述步骤,嵌入式设计工程师可以快速地从串行端口转移到USB,使他们将100%的精力集中到嵌入式应用这个主要的专业领域。



关键词: MCU USB

评论


相关推荐

技术专区

关闭