<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于LUFA開(kāi)源框架庫對AVR芯片進(jìn)行USB終端設備開(kāi)發(fā)

基于LUFA開(kāi)源框架庫對AVR芯片進(jìn)行USB終端設備開(kāi)發(fā)

作者:陳哲川 時(shí)間:2014-08-26 來(lái)源:電子產(chǎn)品世界 收藏
編者按:  摘要:本文針對一般USB設備的開(kāi)發(fā)過(guò)程過(guò)于困難、復雜、繁瑣等不利于快速開(kāi)發(fā)的問(wèn)題,引入了LUFA(Lightweight USB Framework for AVRs)開(kāi)源框架庫,解決了基于A(yíng)VR芯片的USB設備的快速開(kāi)發(fā)問(wèn)題。這種方法能實(shí)現快速開(kāi)發(fā)并實(shí)現相關(guān)的產(chǎn)品,并且有穩定的性能表現,具有工程實(shí)踐意義。   概述   目前,USB控制器主要有兩種:一種是帶USB接口的單片機(MCU),另一種是純粹的USB接口芯片。前者的最大優(yōu)勢在于,開(kāi)發(fā)者對系統結構和指令集非常熟悉,開(kāi)發(fā)工具簡(jiǎn)單,容易進(jìn)行功能

  從示例可以看出,在框架下,bootloader的開(kāi)發(fā)有了極大的效率提升。開(kāi)發(fā)者可以通過(guò)簡(jiǎn)單地修改設備的描述頁(yè)信息,添加或修改相關(guān)的傳輸協(xié)議,即可快速開(kāi)發(fā)出符合需求的bootloader模塊。

本文引用地址:http://dyxdggzs.com/article/262220.htm

  ● 設備開(kāi)發(fā)示例說(shuō)明

  對于設備來(lái)說(shuō),首先進(jìn)行枚舉設定(setup過(guò)程),然后如果沒(méi)錯誤,就可以開(kāi)始USB設備的正常工作狀態(tài)了。既然已經(jīng)為開(kāi)發(fā)者做出了眾多可能的基本設置,開(kāi)發(fā)者只需要知道個(gè)大概流程,大多數事情都可以留給來(lái)做了。

  首先,是0號端點(diǎn)(Endpoint 0)和控制傳輸模式。0號端點(diǎn)主要用于USB設備枚舉。在枚舉過(guò)程中,主機給設備分配相應的地址信息,同時(shí)也在讀取設備信息,如設備類(lèi)型。主機通過(guò)發(fā)送相應的控制指令給設備,設備回復相關(guān)信息給主機,完成握手通信,最后完成相關(guān)的設置。LUFA基本上能全自動(dòng)地完成所有的相關(guān)工作,開(kāi)發(fā)者只需要知道該怎么設置而已。如圖4。

  接下來(lái),是數據傳輸過(guò)程。當設定過(guò)程完成之后,數據傳輸過(guò)程的方向、可用端點(diǎn)的大小等基本信息已經(jīng)確定下來(lái)了。這個(gè)時(shí)候,設備和主機之間就能進(jìn)行正常的數據傳輸了。LUFA提供了多種不同的方式來(lái)接收數據包。通常來(lái)說(shuō),設備端點(diǎn)收到數據之后,會(huì )向主機返回“ACK”指令,以告知數據包已收到,但是最終的一個(gè)“ACK”指令包則不會(huì )自動(dòng)回復,需要用戶(hù)在程序里面實(shí)現。不過(guò),對于開(kāi)發(fā)者來(lái)說(shuō),只需要認真研讀一下示例文件就可以理解,并得知實(shí)現方式。

  以Demo/Device/ClassDriver/Keyboard/這個(gè)項目為例。文件Descriptors.c里面,記錄了USB設備的描述值,包括傳輸過(guò)程中的設備描述值,和枚舉階段的配置描述值,還有返回設備描述值調用的一個(gè)函數。這些相應參數,可在工程實(shí)踐中,按需修改。文件Keyboard.c里面,包含了程序的主入口main()函數。

  main()函數中,SetupHardware()實(shí)現了基本的硬件初始化功能,值得注意的是USB_Init()函數。這個(gè)USB_Init()函數,是LUFA框架實(shí)現的一個(gè)函數。在這個(gè)函數中,它實(shí)現了USB接口相關(guān)的寄存器及I/O的初始化功能,調用了USB_ResetInterface()函數,以實(shí)現USB設備的相關(guān)設置。其中的一個(gè)功能是按照開(kāi)發(fā)的需要,初始化USB設備,使其成為USB控制器或USB設備,在此示例中,初始化為USB設備,調用USB_Init_Device()函數。USB_Init_Device()函數又調用了一個(gè)需要自己按需實(shí)現的函數CALLBACK_USB_GetDescriptor(...)(在Descriptors.c文件中)。至此,完成USB設備的初始化過(guò)程。

  完成USB設備的初始化過(guò)程之后,就開(kāi)始了一個(gè)不斷循環(huán)的函數體。如果是想實(shí)現USB設備的相關(guān)功能,就把相關(guān)的功能模塊寫(xiě)入這個(gè)函數體內就可以了。以Demo/Device/ClassDriver/Keyboard/項目為例,這個(gè)循環(huán)體內包括兩個(gè)函數模塊:HID_Device_USBTask(&Keyboard_HID_Interface)和USB_USBTask()。前者,調用了一個(gè)函數CALLBACK_HID_Device_CreateHIDReport(...),以記錄測試哪個(gè)按鍵被按下或松開(kāi),并記錄下來(lái)。后者,純粹地把相應的按鍵信息按照USB協(xié)議的要求發(fā)送出去。實(shí)現相關(guān)的USB通信。

  因此,如果此時(shí)需要完成一個(gè)矩陣鍵盤(pán),那么只需要在CALLBACK_HID_Device_CreateHIDReport(...)之內,插入相應的矩陣鍵盤(pán)掃描語(yǔ)句,延時(shí)消抖功能等,即可實(shí)現開(kāi)發(fā)需求。其他的設備,如USB音頻設備,U盤(pán),鼠標等,也是類(lèi)似的實(shí)現方式。

  4 結語(yǔ)

  對于開(kāi)發(fā)者而言,LUFA開(kāi)源框架庫不僅能幫助快速完成相應的項目開(kāi)發(fā),如果能細讀其代碼,還可以大大地提高相應的編程水平。同時(shí),LUFA開(kāi)源框架庫的引入,大大地降低了在上開(kāi)發(fā)USB設備的門(mén)檻,極大地提高開(kāi)發(fā)效率,并且減少了開(kāi)發(fā)過(guò)程中的調試測試時(shí)間,增加了系統的穩定性。其示例文檔豐富,入門(mén)容易,代碼優(yōu)美穩定,邏輯架構完美。因此,無(wú)論是出于項目開(kāi)發(fā)的需要,還是能力提升的需要,都可以好好研究或閱讀LUFA開(kāi)源代碼,借鑒其開(kāi)發(fā)經(jīng)驗,做出更好更快更優(yōu)質(zhì)的工程項目。

  參考文獻:
  [1]Atmel.ATmega32u4 Datasheet[M]
  [2]Universal Serial Bus Revision 2.0 Specification[S]
  [3]LUFA Online Documents[R/OL].(2014-03).http://www.fourwalledcubicle.com/files/LUFA/Doc/140302/
  [4]Redecker C.USB Control Transfers with LUFA[R/OL].(2011-10).http://www.avrbeginners.net/new/wp-content/uploads/2011/10/avrbeginners_40_USB_Control_Transfers_with_LUFA_1.0.pdf
  [5]USB in a Nutshell[R/OL].(2014-04).http://www.beyondlogic.org/usbnutshell


上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: LUFA AVR USB MCU 單片機 201409

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>