位置:51电子网 » 技术资料 » 嵌入式系统

嵌入式系统中USB-HOST协议栈的设计

发布时间:2008/5/27 0:00:00 访问次数:466

1 引言

在移动设备大力发展的今天,移动设备间的大量数据交流的需求大大刺激了嵌入式usb主机系统的发展,这必然要求嵌入式系统必须提供usb的主机驱动。而传统意义上的lisb驱动程序的开发都是usb外设驱动程序的开发,主控制器驱动大部分由操作系统来提供,开发者所要做的就是调用操作系统提供的驱动程序的接口。两大主流操作系统中,windows不公开源码而linux的代码却不方便移植。对于目前使用μcos,vxworks和qnx等os的嵌入式系统和一些无os的单片机系统来说,建立好一整套方便移植的usb主机驱动程序将会有更大的意义。

2硬件平台

硬件平台的mcu选择的是tms320 dm642,他是tic6000产品系列中的一款,基于c64x的内核,工作频率为600 mhz,兼容c6000平台上的代码。他有3个双通道视频口,可以支持多达6路视频输入输出。dm64.2的处理能力较突出,一块单片的dm642可以同时解码4路mpeg2格式的视频流。

usb主控制器选用的是cypress的一款主/从控制器sl811hs,其既可以工作在主机(host)模式又可以工作在从机(slave)模式,能与全速(full-speed)和低速(low-speed)外设通讯。sl811hs可以与微处理器、微控制器和dsp无缝连接,并可直接连到诸如isa,pcmcia等一些总线上,图1是sl811hs的结构框图。sl811hs提供一个长度为256 b内部ram空间,该空间的前16 b分配给控制寄存器使用,后面的则作为数据缓冲区(最大240 b)。

3 usb协议栈的基本知识

3.1 usb设备的拓扑

usb的拓扑结构像金字塔,位于塔尖的是根集线器(root hub),根集线器是系统中所有usb端口的起点,根集线器提供了一定数量的usb端口,usb设备和附加的集线器可以连接到那里。

3.2 usb主机驱动框架

主机与外设之间的信息流与互连关系如图2所示,主机与设备都被划分成不同的层次。主机上黑实的箭头是实际的数据流向,设备上对应的接口是基于不同实现的。在主机与设备之间的所有通信最终都是通过usb的电缆进行,然而,在上层的水平层之间是一种逻辑的对应关系,其最终的通信还必须是通过黑实箭头标示的方向。这个结构与tcp/ip协议栈的结构类似,因此也可以用usb协议栈来形象的描述usb主机驱动程序。

4 usb协议栈的实现

4.1协议栈的兼容性

为了使协议栈便于移植,整个程序使用c语言编写,将一些诸如进程与互斥操作和数据格式的定义等与操作系统和硬件平台的相关部分从协议栈的核心部分分离开来。在移植到其他操作系统时尽量维持协议栈的核心部分不动或微小改动,只在与操作系统相关程序中添加相关代码即可。

4.2 usb-host协议栈的框架

基于图2的usb通信层次图,以对大容量存储设备的支持为例,usb-host协议栈的设计如图3所示。

文件系统层提供与用户的交互接口。该层提供对文件的一些基本操作,诸如创建文件、删除文件、读写文件等常用操作。为与windows兼容,可以在该层实现fat32,fatl6,ntfs等文件系统。

hdm为每个设备建立统一的数据结构和接口提供给文件系统对硬盘进行读写扇区操作。鉴于系统中可静会同时存在ide硬盘,hdm对两种硬盘进行统一管理,对文件系统掩盖硬盘的细节,使得文件系统在对两种硬盘操作时没有什么不同。

usb设备驱动层目前只实现了大容量设备类驱动对于其他类型的设备类诸如音频设备类、通信设备类、显示设备类、人机接口设备类驱动在本层添加,对大容量存储设备类,usb规范针对不同的设备又选用不同的协议,如:rbc,scsh-2,ufi,sff-8020i,qic-157等,对于usb硬盘,使用scsi协议。设备类驱动的协议层将来自usb硬盘的读写操作翻译成scsi命令,而传输层则将命令分解为一个个usb事务发送到usb总线驱动层。

总线驱动层实现usb总线协议,管理usb设备和usb事务管理以及总线枚举。总线驱动层先初始化所有的主控制器,每当成功检测和初始化一个主控制器,并给这个控制器建立一套虚拟根集线器。在初始化主控制器后,注册所有已支持的驱动。如果有支持的设备插入的话,就可以自动找到相应的驱动工作。

硬件抽象层对上层掩盖硬件细节,为了增加软件可移植性,与usb控制器芯片相关的部分放在该层的hcd部分中,在移植到其他平台上时,针对该平台使用的控制器芯片

1 引言

在移动设备大力发展的今天,移动设备间的大量数据交流的需求大大刺激了嵌入式usb主机系统的发展,这必然要求嵌入式系统必须提供usb的主机驱动。而传统意义上的lisb驱动程序的开发都是usb外设驱动程序的开发,主控制器驱动大部分由操作系统来提供,开发者所要做的就是调用操作系统提供的驱动程序的接口。两大主流操作系统中,windows不公开源码而linux的代码却不方便移植。对于目前使用μcos,vxworks和qnx等os的嵌入式系统和一些无os的单片机系统来说,建立好一整套方便移植的usb主机驱动程序将会有更大的意义。

2硬件平台

硬件平台的mcu选择的是tms320 dm642,他是tic6000产品系列中的一款,基于c64x的内核,工作频率为600 mhz,兼容c6000平台上的代码。他有3个双通道视频口,可以支持多达6路视频输入输出。dm64.2的处理能力较突出,一块单片的dm642可以同时解码4路mpeg2格式的视频流。

usb主控制器选用的是cypress的一款主/从控制器sl811hs,其既可以工作在主机(host)模式又可以工作在从机(slave)模式,能与全速(full-speed)和低速(low-speed)外设通讯。sl811hs可以与微处理器、微控制器和dsp无缝连接,并可直接连到诸如isa,pcmcia等一些总线上,图1是sl811hs的结构框图。sl811hs提供一个长度为256 b内部ram空间,该空间的前16 b分配给控制寄存器使用,后面的则作为数据缓冲区(最大240 b)。

3 usb协议栈的基本知识

3.1 usb设备的拓扑

usb的拓扑结构像金字塔,位于塔尖的是根集线器(root hub),根集线器是系统中所有usb端口的起点,根集线器提供了一定数量的usb端口,usb设备和附加的集线器可以连接到那里。

3.2 usb主机驱动框架

主机与外设之间的信息流与互连关系如图2所示,主机与设备都被划分成不同的层次。主机上黑实的箭头是实际的数据流向,设备上对应的接口是基于不同实现的。在主机与设备之间的所有通信最终都是通过usb的电缆进行,然而,在上层的水平层之间是一种逻辑的对应关系,其最终的通信还必须是通过黑实箭头标示的方向。这个结构与tcp/ip协议栈的结构类似,因此也可以用usb协议栈来形象的描述usb主机驱动程序。

4 usb协议栈的实现

4.1协议栈的兼容性

为了使协议栈便于移植,整个程序使用c语言编写,将一些诸如进程与互斥操作和数据格式的定义等与操作系统和硬件平台的相关部分从协议栈的核心部分分离开来。在移植到其他操作系统时尽量维持协议栈的核心部分不动或微小改动,只在与操作系统相关程序中添加相关代码即可。

4.2 usb-host协议栈的框架

基于图2的usb通信层次图,以对大容量存储设备的支持为例,usb-host协议栈的设计如图3所示。

文件系统层提供与用户的交互接口。该层提供对文件的一些基本操作,诸如创建文件、删除文件、读写文件等常用操作。为与windows兼容,可以在该层实现fat32,fatl6,ntfs等文件系统。

hdm为每个设备建立统一的数据结构和接口提供给文件系统对硬盘进行读写扇区操作。鉴于系统中可静会同时存在ide硬盘,hdm对两种硬盘进行统一管理,对文件系统掩盖硬盘的细节,使得文件系统在对两种硬盘操作时没有什么不同。

usb设备驱动层目前只实现了大容量设备类驱动对于其他类型的设备类诸如音频设备类、通信设备类、显示设备类、人机接口设备类驱动在本层添加,对大容量存储设备类,usb规范针对不同的设备又选用不同的协议,如:rbc,scsh-2,ufi,sff-8020i,qic-157等,对于usb硬盘,使用scsi协议。设备类驱动的协议层将来自usb硬盘的读写操作翻译成scsi命令,而传输层则将命令分解为一个个usb事务发送到usb总线驱动层。

总线驱动层实现usb总线协议,管理usb设备和usb事务管理以及总线枚举。总线驱动层先初始化所有的主控制器,每当成功检测和初始化一个主控制器,并给这个控制器建立一套虚拟根集线器。在初始化主控制器后,注册所有已支持的驱动。如果有支持的设备插入的话,就可以自动找到相应的驱动工作。

硬件抽象层对上层掩盖硬件细节,为了增加软件可移植性,与usb控制器芯片相关的部分放在该层的hcd部分中,在移植到其他平台上时,针对该平台使用的控制器芯片
相关IC型号

热门点击

 

推荐技术资料

DFRobot—玩的就是
    如果说新车间的特点是“灵动”,FQPF12N60C那么... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!