![Rank: 8](images/default/star_level3.gif) ![Rank: 8](images/default/star_level3.gif)
- UID
- 872238
|
![](http://images.eccn.com/silabs/silicon_chip_980x60_202203.jpg)
2 USB系统软件设计
USB 的系统软件是与μC/OS-II 操作系统和业务应用模块紧密关联的。在μC/OS-Ⅱ对USB 进行初始化时,不但要对USB 硬件接口初始化,还需要对其相关软件进行初始化,比如:设置中断处理函数,以及单独创建一个TaskSetup 任务以完成上位机对USB 系统主机的枚举。中断处理过程采用的是非向量中断的方式,首先由中断状态寄存器的值判断中断产生的原因,然后由不同的原因设置不同的中断处理函数。如果是数据中断话则在相应的中断处理函数中发送对应端点的信号量,这样USB 驱动程序中读写接口才能成功被调用。TaskSetup 是系统的第一个任务,只有在TaskSetup 任务中USB 主机系统被成功枚举后才能进行通信。枚举过程主要是通过0 号端点的控制传输方式进行的,在此过程中USB 主机系统接收上位机发送的Setup 包,然后根据Setup 包的不同请求进行相应的处理再通过控制端点将结果返回给上位机。在USB 中0 号端点为控制端点一共有2 个分别为输入和输出端点。设备枚举其实就是一个上位机识别USB 主机系统的过程,标准USB 枚举过程如下:获取设备描述符、复位、设置地址、再次获取设备描述符、获取配置描述符、获取接口和端点描述符、获取字符串描述符、选择设备配置。枚举成功之后USB 主机系统处于就绪状态并且配置所有的接口与端点。
在USB 体系结构中数据的交互是以端点为基本单位的,端点的集合表现为接口,在USB 协议中一个接口表现为一个功能。USB 协议中规定端点0 只用于控制传输的,其余端点用于数据传输。本USB 主机系统的数据传输方式为端点1 采用中断传输,端点2 采用批量传输。不论哪种传输方式都是以中断的方式和系统交互的,但在中断处理程序中所做的工作非常少只是发送信号量,真正与数据相关的操作并没有在中断处理程序中。这种中断理念是根据Linux 操作系统的中断上下文思想而设计的:使中断时间尽量的短,将一些对时间要求不是那么严格的事务延迟在中断之外进行。在Linux 中把中断处理分为上下两部分,中断处理程序是上部分,收到一个中断后它会立即执行,但只做有严格时限的工作例如对接收到的中断进行应答或硬件复位,能够被允许稍后完成的工作推迟到下半部去。比如网卡:数据包的接收是至关重要的以提高网络吞吐量和传输周期以及避免超时,处理和操作数据包的其他工作被推迟到下半部执行。
3 结语
随着电脑外设和数码产品的不断发展,各种设备之间的互连成为当前需要解决的难题。USB 是现今PC领域广泛运用的总线接口技术,在一些嵌入式系统中,人们希望有USB 的出现,然而和系统其他模块相比,USB 模块显得更加的复杂。本文详细阐述了设计一个USB 主机系统的过程,综合考虑USB 协议,USB 硬件连接和μC/OS-II 系统使软件易于维护,移植型强。 |
|