色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于LUFA開源框架庫對AVR芯片進行USB終端設備開發(fā)

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

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

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

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

            ● 設備開發(fā)示例說明

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

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

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

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

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

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

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

            4 結(jié)語

            對于開發(fā)者而言,LUFA開源框架庫不僅能幫助快速完成相應的項目開發(fā),如果能細讀其代碼,還可以大大地提高相應的編程水平。同時,LUFA開源框架庫的引入,大大地降低了在上開發(fā)USB設備的門檻,極大地提高開發(fā)效率,并且減少了開發(fā)過程中的調(diào)試測試時間,增加了系統(tǒng)的穩(wěn)定性。其示例文檔豐富,入門容易,代碼優(yōu)美穩(wěn)定,邏輯架構(gòu)完美。因此,無論是出于項目開發(fā)的需要,還是能力提升的需要,都可以好好研究或閱讀LUFA開源代碼,借鑒其開發(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


          上一頁 1 2 3 下一頁

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

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉