在协议栈的最底部是USB主控制器USB HC(USBHost Controller),这是主系统中控制每一个USB设备的硬件部分。口前主要有两大类USB主控制器:一种是通用主控制器接口UHCI(Universal Host Controller Inter-face),另一种是开放主控制器接口OHCI(Open HostController Interface)。硬件厂商一般根据这两个规范设计USB主控制器。对于每一类型的主控制器都有一个与硬件独立的USB主控制器驱动器HCD(Host ControllerDriver)。WindRiver公司提供了两类驱动:usbHedUhciLib(UHCl主控制器库)和usbHcdOhciLib(OHCI主控制器库)。
USB主驱动器USBD(USB host Driver)和HCD之间的接口允许一个或超过一个的底层主控制器,而且WindRiver公司的USBD能够同时连接多个USB HCD。这样的设计特点可以使开发者建立复杂的USB系统。USBD是在HCD之上的与硬件独立的模块。USBD管理每一个与主机相连的USBD设备,向更高层次提供了可与USBD设备通信的路径。它还负责自动处理USBD电力管理以及USBD带宽管理;而且,USBD还管理USBHub。Hub能否正确工作,是对USBD进行评价的标准之一,因此WindRiver公司的USBD设计者要使USBD透明地实现Huh的功能。这意味着USBD还能处理USBHub和设备的动态插拔。嵌入式算it行业吗, 海康威视嵌入式面试题, 深圳嵌入式一般工资, 嵌入式开发需求少, 嵌入式浏览器的发展, 对嵌入式课程的认识, 嵌入式脸盆怎么粘, 做嵌入式工程师, 木桶spa嵌入式, 高考中嵌入式, 嵌入式金本电工, 嵌入式扰动是指, 嵌入式开发教材, 嵌入式开发职业认知, vr中的嵌入式, 嵌入式ai上市公司, 硬件嵌入式开发经历, 嵌入式在线视频, 嵌入式编程能力提升, rust嵌入式, 欧普嵌入式卡簧, 表格统计图嵌入式,
USB客户模块在USBD主驱动协议栈的顶端。USB类驱动(USB Class Driver)是Client模块的典型例子。USBD类驱动负责管理连接到USBD上的不同类型的设备,它们依靠USBD提供与每个设备的通信路径。USBClient模块的其他例子就是那些利用USBD与USB设备通信的应用程序。
2 嵌入式实时系统优盘启动软件程序设计
为实现对优盘的操作,在基于VxWorks设计的嵌入式实时系统中,需要设计的程序包括:USB主控制器驱动器、USBD主驱动器、USB块存储设备驱动程序、文件系统的安装以及应用程序通过文件系统读写优盘设备程序等,如图3所示。故要实现从优盘启动,需要在bootConfig..c文件中的usrRoot函数巾添加4个函数。
(1)初始化USB主控制器的函数
初始化HCD(USB Host Controler Driver)函数,即初始化SL81lHS并将其连接到指定总线上:LOCAL int fn-cAttach(pHRB_ATTACH pHrb)。
该函数词用SL811Init()初始化SL811控制芯片。执行函数taskSpawn(“tSl81lint“,0,0,0x4000,(FUNCPTR)intThread,(int)pHost,0,0,0,0,0,0。0,0,O),创建intThread任务对发生的中断作出处理。
这里的intTbaead调用OSS_SEM_TAKE(pHost->in-tPendi
ng,interval)阻塞,与中断服务程序intHandle同步。
调用函数processSl811hInterrupt()处理硬件中断,读取中断状态寄存器判断中断类型。
调用UHC_INT_CONNECT(pHost,intHandler,pHost,&s)函数连接SL811主控制器芯片中断。UHC_INT_CONNECT是一个宏定义。
函数intHandler完成对中断的处理,调用函数OSS_SEM_GIVE(pHost->imPending),释放用于中断和任务之间同步的二进制信号量。