火龍果軟件LINUX設(shè)備驅(qū)動開發(fā)5_第1頁
火龍果軟件LINUX設(shè)備驅(qū)動開發(fā)5_第2頁
火龍果軟件LINUX設(shè)備驅(qū)動開發(fā)5_第3頁
火龍果軟件LINUX設(shè)備驅(qū)動開發(fā)5_第4頁
火龍果軟件LINUX設(shè)備驅(qū)動開發(fā)5_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第五天課程USB協(xié)議基礎(chǔ)

嵌入式LinuxUSB子系統(tǒng)

日程

USB協(xié)議基礎(chǔ)USB總線簡介USB的定義

USB是UniversalSerialBus的縮寫,中文意思就是“通用串行總線”,是連接有USB接口的計算機外圍設(shè)備到計算機的一種計算機外部總線結(jié)構(gòu)

USB的開發(fā)背景制定了USB的規(guī)范:1.連接PC與電話。2.Plug-and-Play(即插即用)。3.端口擴展。USB提供雙向低成本低速到中速(USB2.0可達480Mb/s)的通用外設(shè)總線適用于連接各種各樣的外設(shè)并且易于擴展。

USB的變革

至目前為止,USB共經(jīng)歷以下幾次重大變革:

0.7版本

于1994年11月11日發(fā)布。是USB的最早版本。

1.0版本

于1995年11月13日制定發(fā)布了,規(guī)定USB具有2種傳輸速度

Low-speed1.5Mb/s,Full-speed12Mb/s。

1.1版本

于1998年9月23日制定了1.1規(guī)格版本,速度不變。

2.0(草案)版本

于1999年10月5日發(fā)布。制定了High-speed的概念,規(guī)格

。

2.0版本

于2000年4月27日發(fā)布。

USB系統(tǒng)拓?fù)浣Y(jié)構(gòu)

USB的特點

1.USB為所有的USB外設(shè)提供了單一的、易于操作的標(biāo)準(zhǔn)的連接類型。2.USB整個的系統(tǒng)只有一個端口和一個中;3.USB支持熱插拔(hotplug);4.USB支持PNP;5.USB在設(shè)備供電方面提供了靈活性;6.USB提供全速12Mbps的速率和低速1.5Mbps的速率來適應(yīng)各種不同類型的外設(shè);USB2.0還支持480Mbps的高速傳輸速率;7.USB2.0的High-speed模式支持音頻和視頻設(shè)備,可以保證其固定帶寬;8.為了適應(yīng)各種不同類型外圍設(shè)備的要求USB提供了四種不同的數(shù)據(jù)傳輸類型:控制傳輸,Bulk數(shù)據(jù)傳輸,中斷數(shù)據(jù)傳輸,同步數(shù)據(jù)傳輸。同步數(shù)據(jù)傳輸可為音頻和視頻等實時設(shè)備的實時數(shù)據(jù)傳輸提供固定帶寬。9.USB的端口具有很靈活的擴展性。一個USB端口串接上一個USBHub就可以擴展為多個USB端口。規(guī)范中說,USB可以擴展到127個外設(shè)端口。USB工作原理1、NRZI編碼

2、分組傳送

USB技術(shù)和IP技術(shù)一樣,都是基于分組傳送方式的。對USB總線來講,當(dāng)要傳送一個文件時,程序按照USB協(xié)議,首先把數(shù)據(jù)分成若干塊,然后在每塊數(shù)據(jù)前面添上同步信號、包標(biāo)識,后面添上CRC校驗,就形成了USB封包。一個文件可能可能有多個封包。全速USB總線把1毫秒作為一個時間幀,總線在一個幀內(nèi)依次傳送不同文件的封包。因此從宏觀上,就仿佛總線同時對不同的USB外設(shè)進行數(shù)據(jù)傳送。

3、USB封包

根據(jù)信息包所實現(xiàn)的功能可分為3種類型:令牌包、數(shù)據(jù)包和握手包。

令牌包定義了數(shù)據(jù)傳送的類型。比如圖所示。

USB傳輸方式1、USB的四種傳輸方式(1)同步(isochronous)方式傳輸同步傳輸提供了確定的帶寬和間隔時間,以固定的傳輸速率,連續(xù)不斷地在主機與USB設(shè)備之間傳輸數(shù)據(jù),在傳送數(shù)據(jù)發(fā)生錯誤時,USB并不處理這些錯誤,而是繼續(xù)傳送新的數(shù)據(jù),它被用于時間嚴(yán)格并具有較強容錯性的流數(shù)據(jù)傳輸或者用于要求恒定的數(shù)據(jù)傳輸率的即時應(yīng)用中。(2)中斷傳輸方式(Interrupt)該方式傳送的數(shù)據(jù)量很小,但這些數(shù)據(jù)需要及時處理,以達到實時效果。此方式主要用于定時查詢設(shè)備是否有中斷數(shù)據(jù)要傳輸。(3)控制傳輸方式(Control)控制傳輸是雙向傳輸,數(shù)據(jù)量通常較小,用來處理主機到USB設(shè)備的數(shù)據(jù)傳輸。包括設(shè)備控制指令、設(shè)備狀態(tài)查詢及確認(rèn)命令。(4)批(Bulk)傳輸方式主要應(yīng)用在數(shù)據(jù)大量傳輸和接受數(shù)據(jù)上,同時又沒有帶寬和間隔時間要求的情況下,要求保證傳輸正確無誤的數(shù)據(jù)。

2、USB設(shè)備類型USB設(shè)備列舉

在USB規(guī)范中有一個非常重要的“動作”或“過程”。這個動作將會讓PC機知道何種USB設(shè)備剛接上以及其所含的各種信息。這樣,PC機就可以與這個USB設(shè)備開始進行數(shù)據(jù)傳輸?shù)墓ぷ髁?。這個動作稱之為設(shè)備列舉(enumeration)。1、USB描述符

在設(shè)備列舉過程中,USB設(shè)備向主機傳送了一個重要的信息,使主機知道了這個設(shè)備是“誰”,并啟動了該設(shè)備的驅(qū)動程序。這個信息就是USB描述符2、設(shè)備列舉

設(shè)備列舉包含兩方面的功能,一是主機搜集USB設(shè)備的信息,也就是USB描述符。另一個是主機根據(jù)USB描述符對設(shè)備進行配置,比如USB設(shè)備地址設(shè)置,USB設(shè)備各端點數(shù)據(jù)傳輸方式設(shè)置。日程安排嵌入式LinuxUSB子系統(tǒng)端點、接口、配置

端點:實際就是設(shè)備硬件上具有一定大小的數(shù)據(jù)緩沖區(qū)。接口:USBinterfaceshandleonlyonetypeofaUSBlogicalconnection,suchasamouse,akeyboard,oraaudiostream.一個接口對應(yīng)著一個功能。配置:AUSBdevicecanhavemultipleconfigurationsandmightswitchbetweentheminordertochangethestateofthedevice.USB的

Urbs

urb(USBrequestblock):linux內(nèi)核與USB設(shè)備之間通信的數(shù)據(jù)結(jié)構(gòu)。URB的生命周期: 由USB設(shè)備驅(qū)動創(chuàng)建。 分配給某USB設(shè)備的特定端口。 由USB設(shè)備驅(qū)動程序提交給USB核。

USB核把URB提交給特定的USB主機驅(qū)動程序。

USB主機驅(qū)動程序?qū)RB傳送給USB設(shè)備。 當(dāng)URB通信完成,USB主機驅(qū)動通知USB設(shè)備驅(qū)動。結(jié)構(gòu)

structurb

structurb(參見源代碼)創(chuàng)建和銷毀

urbstructurb*usb_alloc_urb(intiso_packets,intmem_flags);

voidusb_free_urb(structurb*urb);初始化URB:voidusb_fill_int_urb(structurb*urb,structusb_device*dev,unsignedintpipe,void*transfer_buffer,intbuffer_length,usb_complete_tcomplete,void*context,intinterval);voidusb_fill_control_urb(structurb*urb,structusb_device*dev,unsignedintpipe,unsignedchar*setup_packet,void*transfer_buffer,intbuffer_length,usb_complete_tcomplete,void*context);

提交URBintusb_submit_urb(structurb*urb,intmem_flags);

完成

urb:完成回調(diào)處理三種情況會調(diào)用完成回調(diào)函數(shù)URB被成功發(fā)送到設(shè)備,并且設(shè)備返回正確回應(yīng)。在同設(shè)備通信時,發(fā)生一些錯誤。URB被USB核刪除。取消

urbintusb_kill_urb(structurb*urb);intusb_unlink_urb(structurb*urb);

編寫USB驅(qū)動程序

structusb_driver初始化示例:staticstructusb_driverskel_driver={.owner=THIS_MODULE,.name="skeleton",.id_table=skel_table,.probe=skel_probe,.disconnect=skel_disconnect,};注冊USB驅(qū)動程序

intusb_register(structusb_driver*new_driver)conststructusb_device_id*id_table示例:staticstructusb_device_idskel_table[]={ {USB_DEVICE(USB_SKEL_VENDOR_ID, USB_SKEL_PRODUCT_ID)},{}};探測和斷開USB設(shè)備

staticstructusb_driverskel_driver={.owner=THIS_MODULE,.name="skeleton",.id_table=skel_table,.probe=skel_probe,.disconnect=skel_disconnect,};提交和控制URB

驅(qū)動與設(shè)備通信的操作過程:usb_alloc_urb

usb_fill_bulk_urb

(其它類型用其它函數(shù))usb_submit_urb

運行回調(diào)函數(shù)。不使用URB的USB傳輸

intusb_bulk_msg(structusb_device*usb_dev,unsignedintpipe,void*data,intlen,int*actual_length,inttimeout); intusb_control_msg(struc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論