1 综述
移动数据交换和存储,是近年来IT行业的热点。如今,各式各样的移动存储有如雨后春笋般出现。从最早的存储量为几K、能存储用户个人信息的USB小钥匙,到容量可与PC硬盘媲美的USB活动硬盘,再到以Flash作为存储介质的真正能够“移动”起来的USB闪盘和优盘,直到今天大量的PC外设和多媒体家电中大量使用的数据存储器……可见,数据交换的可移动性和便捷性是整个数字化时代大厦的根基。移动数据交换刺激了IT业的发展,便利了人们的生活。
与此同时,我们还应注意到这样一个问题:移动数据交换业,是伴随着通用串行总线(Universal Serial Bus,简称为USB)的成熟而兴起的。USB既是数据交换的媒介,又是其核心。可以这样说,没有USB,就不会有移动数据业务如此迅猛地发展。
2 为什么要开发嵌入式的USB主机?
从USB问世,到协议规范2.0版本,USB在不断自我完善,并走向成熟。从普通计算机用户,计算机工程师,到硬件芯片生产厂商,都已经完全认可了USB。厂商对于USB的硬件和软件支持的也越来越完备,现在开发一
个USB外设产品,所需要投入的成本和时间大大降低了,几年前是没有办法做到这一点的。但是,随着USB应用领域的逐渐扩大,人们对于USB的期望也越来越高,希望USB能应用在各种计算机领域中,尤其是在移动数据领域中,希望能通过PDA等移动设备直接和USB外设通信,使得USB能应用在没有PC的领域中。
非PC应用领域?
这正是USB一个致命的弱点。USB的拓扑结构中居于核心地位的是Host(也称为主机),任何一次USB的数据传输都必须由主机来发起和控制,所有的USB外设都只能和主机建立连接,任何两个外设之间或是两个主机之间无法直接通信。而目前,大量的扮演主机角色的是个人电脑PC。因此,我们目前所买到和使用的USB移动设备,都是USB的外设(device),比如USB的移动硬盘、比如USB接口的数码相机等等。所有这些设备都只能在PC上使用,只能通过PC来进行相互的文件和数据交换。没有了PC,这些设备就“失灵”了(指数据交换的功能)。
因此,“如何将USB应用到嵌入式领域?如何实现USB点对点的通信?”等问题,开始进入了USB开发者的讨论议程。正是在这种新的需求之下,USB 主机的嵌入式应用成了USB领域新的兴奋点。
正是在这种背景下,业界和用户的需求呼唤USB主机实现嵌入式化,也就是开发和设计嵌入式的USB主机。
3 嵌入式USB主机在数据存储和交换中的应用
我们来看一幅图,如图1所示,这里有3个我们日常生活中可能碰到的场景:
● 朋友的移动硬盘上有一些好听得MP3歌曲,我想直接通过我的MP3播放器拷贝过来;
● 想换掉手机,买个PDA,手机里的电话本想直接复制到PDA中;
● 出门在外,用数码相机照了很多漂亮的风景,想在身边的打印机上直接打印出来;
……
图 1
这样的场景我们可能早已梦想着能够实现。图中的每一个设备都是一个USB的外设,现在的技术条件下,我们只能通过PC作为数码文件的“交换器”。比如第3中场景,我们首先是把数码相机连接到PC上,并且安装相应的驱动程序和用户界面,把数码相机存储盘上的内容复制到PC硬盘上。然后,把USB打印机连接到PC。最后,再把照片打印出来。整个过程,很是复杂,更是不方便。
因此,有了嵌入式的USB主机,那么图1所示的场景将不再是梦想!这里,需要做的就是在MP3播放器、数码相机里嵌入USB主机模块,使其由传统的USB外设成为USB主机,这样,这些嵌入式的主机就可以直接和移动硬盘、打印机等USB的外设连接,实现特定的功能。那么,而当我们需要再次把数码相机等连接到PC上时,就需要让其恢复USB外设的功能。
可以预见,嵌入式USB 主机最大的市场和增长点在于移动家电,比如PDA与USB记忆棒传递数据、MP3之间传递歌曲、数码相机连接打印机。因此,具有很强的应用背景和市场前景。
4 以嵌入式USB主机作为核心的USB On-The-Go
USB On-The-Go,顾名思义,是USB应用在便携式移动设备领域中,因此,我们姑且将其翻译为“便携式USB”(或者“移动USB”),简记成USB OTG。符合USB OTG的设备完全抛开了PC,既可以作为Host,也可以作为外设,而与另一个OTG设备直接实现点对点(Pear to Pear)通信。因此,这类OTG设备也被称为是双角色设备(Dual-Role Device,简称为DRD),并能够根据接入设备的特性和数据传输过程中的情况,自动切换为Host或是外设。
可见,USB OTG正是符合了图1所示的场景需求。
我们注意到,USB OTG虽然是具备了更强大的功能,但是其核心仍然是嵌入式USB主机,只不过需要加入一个能够自动切换角色的功能。而这个新功能的实现,就要借助于USB OTG接口芯片的物理层来实现。而且,在很多场合下,不需要实现USB外设的功能,只需要实现USB主机功能。比如一个工业数据采集的领域中,我们需要使用USB优盘作为数据存储的载体,那么就要在项目中实现一个嵌入式的USB主机来采集数据,并且把数据存储到优盘中。这里,这个USB主机就不必实现外设的功能,因为其根本不用连接到PC。而且,很多USB方案的提供商,在设计USB OTG时,就是设计一个嵌入式的USB主机,然后通过软件实现角色切换的功能。
可以说,嵌入式USB主机,是整个USB系统发展的未来和趋势。
5 设计嵌入式USB主机
传统意义的USB开发,仅仅是对USB外设的开发,USB底层驱动程序和USB主控制器驱动程序都由Windows等操作系统提供,有关这些驱动程序的细节过程都蒙着一层神秘的面纱。所以,要设计USB 主机,就须设计这两部分驱动程序,Windows源码不公开,这些细节资料就无从得到。
因此,设计就要遵循USB主机的协议规范。可以阅览参考文献。具体的设计就要包括固件Firmware和硬件两大部分。
硬件上首先要选择USB主机的接口芯片。现在比较成熟的有Cypress公司的SL811HS和Philips公司的ISP1161。并且选用一款合适的MCU和MPU来控制。那么这款MCU的选用需要比较讲究。因为,整个USB协议框架是非常复杂的。那么这就需要MCU具有足够的RAM,用以处理大量的数据缓冲区、大量的变量、数据存储等等。一般8KB的RAM是最最基本的要求,而且越大越好,当然,小到2K,也可以实现基本功能,但是已经非常捉襟见肘了。其次系统要有大量的程序存储区,一般Flash的需求大概在10~60KB左右。之所以有如此大的范围,这是因为USB定义很多的类,用以支持不同类型的USB外设。每一类就有其不同的驱动程序,因此,设计的嵌入式USB主机支持的类越多,那么需要的程序空间就越大。有个例子就是,要实现Mass Storage类就需要10K所有的Flash空间。
固件方面,就是要实现完整的USB主机协议类,包括设备的上电检测、设备重起、分配地址、读取设备的各种描述符等基本的操作,更重要的是要实现每一类USB设备的协议栈。简单来说,每一类设备的协议栈,就是一个特定的驱动程序,传统的做法,我们是在PC上使用WDM来编制驱动程序。这里,在我们的嵌入式系统的开发环境里,我们就要像开发嵌入式的软件一样,可以用C语言、可以用汇编语言等来实现。限于篇幅所限,这里,无法进一步展开。笔者将在以后进一步展开讨论。
笔者目前就已经设计出了一款USB主机的演示系统,选用的USB主机接口芯片是Cypress公司的SL811HS,MCU选用的是Motorola公司的16位单片机MC68HC912D60A。整个USB主机系统支持的是USB的Mass Storage类,也就是海量存储类,这一类是USB专门为支持磁盘存储功能设计的。因此,现在的结果是,这个嵌入式的USB主机能够具有同装有Windows 2000操作系统的PC一样的功能,能够直接对USB的移动存储设备进行读取,能够自动识别设备并把设备配置为标准的磁盘驱动器,因此能够直接进行文件的读取、格式化等一系列操作。为了通用,选用了朗科公司的USB优盘作为外设。目前整个系统可以直接对优盘进行操作,读取优盘中的文件、写文件到优盘中,等等。
6 嵌入式USB主机的其他应用前景分析
1. 以嵌入式USB主机做为核心的数据采集系统,可以应用在大量工业和民用领域中,比如城市轻轨铁路的数据采集黑匣子中。中国幅员辽阔,铁路线纵横驰骋,如果每辆机车上都安装一套这样的“黑匣子”系统,那么需求量将是非常大的,同时将带来很大的经济效益和市场前景。
2. 嵌入式USB 主机作为USB的延伸,国外处于刚刚起步的阶段,仅有不多的半导体公司提供接口芯片,还没有完整的嵌入式USB 主机产品上市。厂家和USB论坛所能提供的Demo也限于依靠嵌入式操作系统WinCE和Linux等。国内的研究也刚开始起步。因此,项目研究具有一定的领先和前瞻性。
3. 在开发USB 主机,编写底层驱动程序的同时,注意整个系统的可移植性,使得有关USB通信的各个任务模块化,尽量编写API。这样,就可以在不同的操作系统、不同的主控制器CPU上尽量方便的实现USB 主机的功能。这就可以为日后嵌入式USB 主机的产品化和进一步研究打好基础。这个工作有待进一步完善。
1 综述
移动数据交换和存储,是近年来IT行业的热点。如今,各式各样的移动存储有如雨后春笋般出现。从最早的存储量为几K、能存储用户个人信息的USB小钥匙,到容量可与PC硬盘媲美的USB活动硬盘,再到以Flash作为存储介质的真正能够“移动”起来的USB闪盘和优盘,直到今天大量的PC外设和多媒体家电中大量使用的数据存储器……可见,数据交换的可移动性和便捷性是整个数字化时代大厦的根基。移动数据交换刺激了IT业的发展,便利了人们的生活。
与此同时,我们还应注意到这样一个问题:移动数据交换业,是伴随着通用串行总线(Universal Serial Bus,简称为USB)的成熟而兴起的。USB既是数据交换的媒介,又是其核心。可以这样说,没有USB,就不会有移动数据业务如此迅猛地发展。
2 为什么要开发嵌入式的USB主机?
从USB问世,到协议规范2.0版本,USB在不断自我完善,并走向成熟。从普通计算机用户,计算机工程师,到硬件芯片生产厂商,都已经完全认可了USB。厂商对于USB的硬件和软件支持的也越来越完备,现在开发一
个USB外设产品,所需要投入的成本和时间大大降低了,几年前是没有办法做到这一点的。但是,随着USB应用领域的逐渐扩大,人们对于USB的期望也越来越高,希望USB能应用在各种计算机领域中,尤其是在移动数据领域中,希望能通过PDA等移动设备直接和USB外设通信,使得USB能应用在没有PC的领域中。
非PC应用领域?
这正是USB一个致命的弱点。USB的拓扑结构中居于核心地位的是Host(也称为主机),任何一次USB的数据传输都必须由主机来发起和控制,所有的USB外设都只能和主机建立连接,任何两个外设之间或是两个主机之间无法直接通信。而目前,大量的扮演主机角色的是个人电脑PC。因此,我们目前所买到和使用的USB移动设备,都是USB的外设(device),比如USB的移动硬盘、比如USB接口的数码相机等等。所有这些设备都只能在PC上使用,只能通过PC来进行相互的文件和数据交换。没有了PC,这些设备就“失灵”了(指数据交换的功能)。
因此,“如何将USB应用到嵌入式领域?如何实现USB点对点的通信?”等问题,开始进入了USB开发者的讨论议程。正是在这种新的需求之下,USB 主机的嵌入式应用成了USB领域新的兴奋点。
正是在这种背景下,业界和用户的需求呼唤USB主机实现嵌入式化,也就是开发和设计嵌入式的USB主机。
3 嵌入式USB主机在数据存储和交换中的应用
我们来看一幅图,如图1所示,这里有3个我们日常生活中可能碰到的场景:
● 朋友的移动硬盘上有一些好听得MP3歌曲,我想直接通过我的MP3播放器拷贝过来;
● 想换掉手机,买个PDA,手机里的电话本想直接复制到PDA中;
● 出门在外,用数码相机照了很多漂亮的风景,想在身边的打印机上直接打印出来;
……
图 1
这样的场景我们可能早已梦想着能够实现。图中的每一个设备都是一个USB的外设,现在的技术条件下,我们只能通过PC作为数码文件的“交换器”。比如第3中场景,我们首先是把数码相机连接到PC上,并且安装相应的驱动程序和用户界面,把数码相机存储盘上的内容复制到PC硬盘上。然后,把USB打印机连接到PC。最后,再把照片打印出来。整个过程,很是复杂,更是不方便。
因此,有了嵌入式的USB主机,那么图1所示的场景将不再是梦想!这里,需要做的就是在MP3播放器、数码相机里嵌入USB主机模块,使其由传统的USB外设成为USB主机,这样,这些嵌入式的主机就可以直接和移动硬盘、打印机等USB的外设连接,实现特定的功能。那么,而当我们需要再次把数码相机等连接到PC上时,就需要让其恢复USB外设的功能。
可以预见,嵌入式USB 主机最大的市场和增长点在于移动家电,比如PDA与USB记忆棒传递数据、MP3之间传递歌曲、数码相机连接打印机。因此,具有很强的应用背景和市场前景。
4 以嵌入式USB主机作为核心的USB On-The-Go
USB On-The-Go,顾名思义,是USB应用在便携式移动设备领域中,因此,我们姑且将其翻译为“便携式USB”(或者“移动USB”),简记成USB OTG。符合USB OTG的设备完全抛开了PC,既可以作为Host,也可以作为外设,而与另一个OTG设备直接实现点对点(Pear to Pear)通信。因此,这类OTG设备也被称为是双角色设备(Dual-Role Device,简称为DRD),并能够根据接入设备的特性和数据传输过程中的情况,自动切换为Host或是外设。
可见,USB OTG正是符合了图1所示的场景需求。
我们注意到,USB OTG虽然是具备了更强大的功能,但是其核心仍然是嵌入式USB主机,只不过需要加入一个能够自动切换角色的功能。而这个新功能的实现,就要借助于USB OTG接口芯片的物理层来实现。而且,在很多场合下,不需要实现USB外设的功能,只需要实现USB主机功能。比如一个工业数据采集的领域中,我们需要使用USB优盘作为数据存储的载体,那么就要在项目中实现一个嵌入式的USB主机来采集数据,并且把数据存储到优盘中。这里,这个USB主机就不必实现外设的功能,因为其根本不用连接到PC。而且,很多USB方案的提供商,在设计USB OTG时,就是设计一个嵌入式的USB主机,然后通过软件实现角色切换的功能。
可以说,嵌入式USB主机,是整个USB系统发展的未来和趋势。
5 设计嵌入式USB主机
传统意义的USB开发,仅仅是对USB外设的开发,USB底层驱动程序和USB主控制器驱动程序都由Windows等操作系统提供,有关这些驱动程序的细节过程都蒙着一层神秘的面纱。所以,要设计USB 主机,就须设计这两部分驱动程序,Windows源码不公开,这些细节资料就无从得到。
因此,设计就要遵循USB主机的协议规范。可以阅览参考文献。具体的设计就要包括固件Firmware和硬件两大部分。
硬件上首先要选择USB主机的接口芯片。现在比较成熟的有Cypress公司的SL811HS和Philips公司的ISP1161。并且选用一款合适的MCU和MPU来控制。那么这款MCU的选用需要比较讲究。因为,整个USB协议框架是非常复杂的。那么这就需要MCU具有足够的RAM,用以处理大量的数据缓冲区、大量的变量、数据存储等等。一般8KB的RAM是最最基本的要求,而且越大越好,当然,小到2K,也可以实现基本功能,但是已经非常捉襟见肘了。其次系统要有大量的程序存储区,一般Flash的需求大概在10~60KB左右。之所以有如此大的范围,这是因为USB定义很多的类,用以支持不同类型的USB外设。每一类就有其不同的驱动程序,因此,设计的嵌入式USB主机支持的类越多,那么需要的程序空间就越大。有个例子就是,要实现Mass Storage类就需要10K所有的Flash空间。
固件方面,就是要实现完整的USB主机协议类,包括设备的上电检测、设备重起、分配地址、读取设备的各种描述符等基本的操作,更重要的是要实现每一类USB设备的协议栈。简单来说,每一类设备的协议栈,就是一个特定的驱动程序,传统的做法,我们是在PC上使用WDM来编制驱动程序。这里,在我们的嵌入式系统的开发环境里,我们就要像开发嵌入式的软件一样,可以用C语言、可以用汇编语言等来实现。限于篇幅所限,这里,无法进一步展开。笔者将在以后进一步展开讨论。
笔者目前就已经设计出了一款USB主机的演示系统,选用的USB主机接口芯片是Cypress公司的SL811HS,MCU选用的是Motorola公司的16位单片机MC68HC912D60A。整个USB主机系统支持的是USB的Mass Storage类,也就是海量存储类,这一类是USB专门为支持磁盘存储功能设计的。因此,现在的结果是,这个嵌入式的USB主机能够具有同装有Windows 2000操作系统的PC一样的功能,能够直接对USB的移动存储设备进行读取,能够自动识别设备并把设备配置为标准的磁盘驱动器,因此能够直接进行文件的读取、格式化等一系列操作。为了通用,选用了朗科公司的USB优盘作为外设。目前整个系统可以直接对优盘进行操作,读取优盘中的文件、写文件到优盘中,等等。
6 嵌入式USB主机的其他应用前景分析
1. 以嵌入式USB主机做为核心的数据采集系统,可以应用在大量工业和民用领域中,比如城市轻轨铁路的数据采集黑匣子中。中国幅员辽阔,铁路线纵横驰骋,如果每辆机车上都安装一套这样的“黑匣子”系统,那么需求量将是非常大的,同时将带来很大的经济效益和市场前景。
2. 嵌入式USB 主机作为USB的延伸,国外处于刚刚起步的阶段,仅有不多的半导体公司提供接口芯片,还没有完整的嵌入式USB 主机产品上市。厂家和USB论坛所能提供的Demo也限于依靠嵌入式操作系统WinCE和Linux等。国内的研究也刚开始起步。因此,项目研究具有一定的领先和前瞻性。
3. 在开发USB 主机,编写底层驱动程序的同时,注意整个系统的可移植性,使得有关USB通信的各个任务模块化,尽量编写API。这样,就可以在不同的操作系统、不同的主控制器CPU上尽量方便的实现USB 主机的功能。这就可以为日后嵌入式USB 主机的产品化和进一步研究打好基础。这个工作有待进一步完善。
举报