在協(xié)議棧的最底部是USB主控制器USB HC(USBHost Controller),這是主系統(tǒng)中控制每一個(gè)USB設(shè)備的硬件部分?谇爸饕袃纱箢怳SB主控制器:一種是通用主控制器接口UHCI(Universal Host Controller Inter-face),另一種是開放主控制器接口OHCI(Open HostController Interface)。硬件廠商一般根據(jù)這兩個(gè)規(guī)范設(shè)計(jì)USB主控制器。對(duì)于每一類型的主控制器都有一個(gè)與硬件獨(dú)立的USB主控制器驅(qū)動(dòng)器HCD(Host ControllerDriver)。WindRiver公司提供了兩類驅(qū)動(dòng):usbHedUhciLib(UHCl主控制器庫(kù))和usbHcdOhciLib(OHCI主控制器庫(kù))。
USB主驅(qū)動(dòng)器USBD(USB host Driver)和HCD之間的接口允許一個(gè)或超過(guò)一個(gè)的底層主控制器,而且WindRiver公司的USBD能夠同時(shí)連接多個(gè)USB HCD。這樣的設(shè)計(jì)特點(diǎn)可以使開發(fā)者建立復(fù)雜的USB系統(tǒng)。USBD是在HCD之上的與硬件獨(dú)立的模塊。USBD管理每一個(gè)與主機(jī)相連的USBD設(shè)備,向更高層次提供了可與USBD設(shè)備通信的路徑。它還負(fù)責(zé)自動(dòng)處理USBD電力管理以及USBD帶寬管理;而且,USBD還管理USBHub。Hub能否正確工作,是對(duì)USBD進(jìn)行評(píng)價(jià)的標(biāo)準(zhǔn)之一,因此WindRiver公司的USBD設(shè)計(jì)者要使USBD透明地實(shí)現(xiàn)Huh的功能。這意味著USBD還能處理USBHub和設(shè)備的動(dòng)態(tài)插拔。嵌入式算it行業(yè)嗎, ?低暻度胧矫嬖囶}, 深圳嵌入式一般工資, 嵌入式開發(fā)需求少, 嵌入式瀏覽器的發(fā)展, 對(duì)嵌入式課程的認(rèn)識(shí), 嵌入式臉盆怎么粘, 做嵌入式工程師, 木桶spa嵌入式, 高考中嵌入式, 嵌入式金本電工, 嵌入式擾動(dòng)是指, 嵌入式開發(fā)教材, 嵌入式開發(fā)職業(yè)認(rèn)知, vr中的嵌入式, 嵌入式ai上市公司, 硬件嵌入式開發(fā)經(jīng)歷, 嵌入式在線視頻, 嵌入式編程能力提升, rust嵌入式, 歐普嵌入式卡簧, 表格統(tǒng)計(jì)圖嵌入式,
USB客戶模塊在USBD主驅(qū)動(dòng)協(xié)議棧的頂端。USB類驅(qū)動(dòng)(USB Class Driver)是Client模塊的典型例子。USBD類驅(qū)動(dòng)負(fù)責(zé)管理連接到USBD上的不同類型的設(shè)備,它們依靠USBD提供與每個(gè)設(shè)備的通信路徑。USBClient模塊的其他例子就是那些利用USBD與USB設(shè)備通信的應(yīng)用程序。
2 嵌入式實(shí)時(shí)系統(tǒng)優(yōu)盤啟動(dòng)軟件程序設(shè)計(jì)
為實(shí)現(xiàn)對(duì)優(yōu)盤的操作,在基于VxWorks設(shè)計(jì)的嵌入式實(shí)時(shí)系統(tǒng)中,需要設(shè)計(jì)的程序包括:USB主控制器驅(qū)動(dòng)器、USBD主驅(qū)動(dòng)器、USB塊存儲(chǔ)設(shè)備驅(qū)動(dòng)程序、文件系統(tǒng)的安裝以及應(yīng)用程序通過(guò)文件系統(tǒng)讀寫優(yōu)盤設(shè)備程序等,如圖3所示。故要實(shí)現(xiàn)從優(yōu)盤啟動(dòng),需要在bootConfig..c文件中的usrRoot函數(shù)巾添加4個(gè)函數(shù)。
。1)初始化USB主控制器的函數(shù)
初始化HCD(USB Host Controler Driver)函數(shù),即初始化SL81lHS并將其連接到指定總線上:LOCAL int fn-cAttach(pHRB_ATTACH pHrb)。
該函數(shù)詞用SL811Init()初始化SL811控制芯片。執(zhí)行函數(shù)taskSpawn(“tSl81lint“,0,0,0x4000,(FUNCPTR)intThread,(int)pHost,0,0,0,0,0,0。0,0,O),創(chuàng)建intThread任務(wù)對(duì)發(fā)生的中斷作出處理。
這里的intTbaead調(diào)用OSS_SEM_TAKE(pHost->in-tPendi
ng,interval)阻塞,與中斷服務(wù)程序intHandle同步。
調(diào)用函數(shù)processSl811hInterrupt()處理硬件中斷,讀取中斷狀態(tài)寄存器判斷中斷類型。
調(diào)用UHC_INT_CONNECT(pHost,intHandler,pHost,&s)函數(shù)連接SL811主控制器芯片中斷。UHC_INT_CONNECT是一個(gè)宏定義。
函數(shù)intHandler完成對(duì)中斷的處理,調(diào)用函數(shù)OSS_SEM_GIVE(pHost->imPending),釋放用于中斷和任務(wù)之間同步的二進(jìn)制信號(hào)量。