将应用从串行接口移植到USB接口的简便方法
时间:11-03
来源:互联网
点击:
由于可以获得很多支持USB的微控制器和接口器件,所以对嵌入式应用设计工程师而言,没有COM端口并不会带来障碍。选择正确的工具和软件解决方案提供了一条转移到USB的捷径。
硬件补丁程序
对那些需要为基于串行端口的老项目提出快速解决方案的设计工程师来说,最先有吸引力的策略是采用一种补丁系统。
这可通过在嵌入式控制器串行接口与PC机USB连接器之间增加一个定制的USB-UART转换器来实现(图1)。
这些器件通常配有支持各种操作系统的定制驱动程序,完全可以仿真一个标准的串行端口。
图1:与采用大部分USB-UART接口器件相比,兼容USB接口的MCU单芯片解决方案具有更高的性能和更低的成本。
该方法意味着需要重新设计嵌入式应用电路板以腾出空间容纳新的元件,但它不用改变固件和PC应用程序。拆除已证明无用的串行端口接收器有时只增加几美元成本,但却失去了采用USB所带来的大部分好处。
实际上,USB能够更快地传输数据,传输速度可达到典型串行端口的100倍(12 Mbps与115 kbps),继续使用UART,就会成为主要的设计瓶颈。另外,由于大部分USB-UART接口器件缺乏灵活性,无法实现灵活的电源管理,而这在许多嵌入式设计中是一个关键特性。
单芯片解决方案
从串行端口转移到USB的一个更好的硬件选择是采用单芯片解决方案,即选用具有USB接口的微处理器,并开发驱动程序(图2)以模仿串行端口。从硬件角度来看,单芯片解决方案显得非常有趣。
图2:采用单芯片解决MCU解决方案可很好地将应用从串行接口移植到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机USB连接器之间增加一个定制的USB-UART转换器来实现(图1)。
这些器件通常配有支持各种操作系统的定制驱动程序,完全可以仿真一个标准的串行端口。
图1:与采用大部分USB-UART接口器件相比,兼容USB接口的MCU单芯片解决方案具有更高的性能和更低的成本。
该方法意味着需要重新设计嵌入式应用电路板以腾出空间容纳新的元件,但它不用改变固件和PC应用程序。拆除已证明无用的串行端口接收器有时只增加几美元成本,但却失去了采用USB所带来的大部分好处。
实际上,USB能够更快地传输数据,传输速度可达到典型串行端口的100倍(12 Mbps与115 kbps),继续使用UART,就会成为主要的设计瓶颈。另外,由于大部分USB-UART接口器件缺乏灵活性,无法实现灵活的电源管理,而这在许多嵌入式设计中是一个关键特性。
单芯片解决方案
从串行端口转移到USB的一个更好的硬件选择是采用单芯片解决方案,即选用具有USB接口的微处理器,并开发驱动程序(图2)以模仿串行端口。从硬件角度来看,单芯片解决方案显得非常有趣。
图2:采用单芯片解决MCU解决方案可很好地将应用从串行接口移植到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类固件后台任务管理,设计工程师无需关注其实现细节。所有显示出来的只是一个非常类似于公共串行端口库的小的函数集。
USB 嵌入式 连接器 仿真 MCU 电路 电源管理 总线 Linux PIC C语言 相关文章:
- 实现WUSB设备控制器的设计考虑因素(09-12)
- 基于USB2.0的高速无线数传接收设备的数据接收存储方法(09-09)
- 四种短距离无线监控解决方案的性能对比(09-16)
- Wibree:一个可供选择的新无线联网技术(11-07)
- TI 单芯片手机多媒体电话解决方案(12-01)
- 蓝牙技术硬件实现模式分析(01-11)