基于LUFA開源框架庫(kù)對(duì)AVR芯片進(jìn)行USB終端設(shè)備開發(fā)
摘要:本文針對(duì)一般USB設(shè)備的開發(fā)過程過于困難、復(fù)雜、繁瑣等不利于快速開發(fā)的問題,引入了LUFA(Lightweight USB Framework for AVRs)開源框架庫(kù),解決了基于AVR芯片的USB設(shè)備的快速開發(fā)問題。這種方法能實(shí)現(xiàn)快速開發(fā)并實(shí)現(xiàn)相關(guān)的產(chǎn)品,并且有穩(wěn)定的性能表現(xiàn),具有工程實(shí)踐意義。
本文引用地址:http://2s4d.com/article/262220.htm概述
目前,USB控制器主要有兩種:一種是帶USB接口的單片機(jī)(MCU),另一種是純粹的USB接口芯片。前者的最大優(yōu)勢(shì)在于,開發(fā)者對(duì)系統(tǒng)結(jié)構(gòu)和指令集非常熟悉,開發(fā)工具簡(jiǎn)單,容易進(jìn)行功能拓展,但其成本相對(duì)較高;后者的最大特點(diǎn)是,價(jià)格便宜,接口方便,可靠性高,但其硬件架構(gòu)相對(duì)復(fù)雜,軟件部分限制相對(duì)較大。
在工程實(shí)踐中,有時(shí)需要快速可靠地開發(fā)出相應(yīng)的USB終端設(shè)備,或者針對(duì)特定領(lǐng)域開發(fā)出專用產(chǎn)品。此時(shí),如果有一個(gè)成熟可靠的軟件框架,可以事半功倍地滿足相應(yīng)的需求。本文針對(duì)AVR的部分帶USB接口的單片機(jī),如:AT90USB系列,ATmega8U系列,ATmega16U系列,AT32UC3系列的部分型號(hào),ATXmega系列的部分型號(hào)等,介紹LUFA開源框架,以實(shí)現(xiàn)快速開發(fā)USB終端設(shè)備,或者針對(duì)特定領(lǐng)域開發(fā)專用產(chǎn)品。
1 USB協(xié)議概述
USB是一種串行接口協(xié)議,應(yīng)用日益廣泛。但是,要熟悉其協(xié)議內(nèi)容并不簡(jiǎn)單,其協(xié)議文檔繁雜羅嗦,Linux uhci驅(qū)動(dòng)作者之一Alan Stern曾經(jīng)就說(shuō)過:
The USB documentation is downright evil. Most of it is just crap, written by a committee. You're better off ignoring most of it.
他同時(shí)還對(duì)軟件開發(fā)者指出,開發(fā)者最需要注意的是兩點(diǎn):一、底層協(xié)議(非常簡(jiǎn)單,但很多小細(xì)節(jié)要注意),二、其他。
簡(jiǎn)而言之,USB協(xié)議,在硬件上,靠D+,D-兩條數(shù)據(jù)線進(jìn)行差分傳輸,以及NRZI的編碼方式。在通信上,依靠封包(package)格式進(jìn)行數(shù)據(jù)傳輸。封包由若干個(gè)域(Package Field)構(gòu)成,每個(gè)域由若干位組成(具體的位數(shù)由具體的域決定)。其細(xì)節(jié)部分繁多復(fù)雜,上手困難,也極其容易出錯(cuò)。
2 LUFA開源框架
LUFA(Lightweight USB Framework for AVRs),由澳大利亞人Dean Camera開發(fā),是一個(gè)基于MIT協(xié)議分發(fā)的開源框架。針對(duì)帶USB接口的Atmel AVR8單片機(jī)和部分AVR32單片機(jī)系列,LUFA實(shí)現(xiàn)了一個(gè)完全符合USB通信協(xié)議的開源框架庫(kù)。基于這個(gè)框架,不僅能開發(fā)出合適的終端設(shè)備,也能在部分設(shè)備上開發(fā)出合適的主控制端。
該框架庫(kù)經(jīng)過多年的測(cè)試改進(jìn),現(xiàn)已處于穩(wěn)定版本。其針對(duì)AVR-GCC編譯器進(jìn)行了優(yōu)化設(shè)計(jì),使用了部分GCC特有的拓展方式,使得這個(gè)庫(kù)的相關(guān)API能更穩(wěn)定流暢地運(yùn)行。相關(guān)的編譯器AVR-GCC,能在Atmel網(wǎng)站下載到相應(yīng)系統(tǒng)的版本。在LUFA源碼庫(kù)里面,有多達(dá)三四十種不同應(yīng)用的示例版本。
● 支持的芯片類型
LUFA是針對(duì)帶USB接口的Atmel AVR 8/32位單片機(jī)進(jìn)行開發(fā)的,所以只要是帶USB接口的Atmel AVR單片機(jī),均可使用LUFA開源框架庫(kù)。例如:AT90USB系列,ATmega8U系列,ATmega16U系列,AT32UC3系列,ATXmega系列等。詳情可查看LUFA的相關(guān)文檔。
● 源碼下載
LUFA的項(xiàng)目主頁(yè)(英文)在http://www.fourwalledcubicle.com/LUFA.php。該項(xiàng)目的源碼版本管理托管在github上,相關(guān)地址在http://github.com/abcminiuser/lufa。更多詳情,可以在LUFA的項(xiàng)目主頁(yè)上查看。
● 開發(fā)環(huán)境搭建
Atmel提供了相關(guān)的工具鏈,使得開發(fā)者可以簡(jiǎn)單方便地進(jìn)行開發(fā),包括Linux平臺(tái)和Windows平臺(tái)。除了Atmel提供的工具鏈之外,還可以使用第三方工具鏈,按照自己的需要來(lái)進(jìn)行開發(fā)。同時(shí),LUFA已經(jīng)成為Atmel Studio 6.1及后續(xù)版本的原生插件之一。無(wú)論是編譯固件,還是固件上傳,LUFA文檔都提供了詳細(xì)的說(shuō)明。詳情請(qǐng)參閱LUFA文檔部分:LUFA Library -> Getting Started。
3 設(shè)備開發(fā)示例說(shuō)明
在本示例中,本文以ATmega32U4制作一個(gè)可編程鍵盤為示例,演示LUFA開源框架庫(kù)的開發(fā)流程方式。該示例分成兩大部分:一、制作bootloader,以便對(duì)設(shè)備進(jìn)行編程燒錄;二、實(shí)現(xiàn)矩陣鍵盤功能。
● ATmega32U4微處理器
ATmega32U4是一款采用低功耗CMOS工藝生產(chǎn)的基于AVR RISC(精簡(jiǎn)指令集)接口的高性能、低功耗8位單片機(jī)。處理器具有可控制的上電復(fù)位延時(shí)電路和可編程的前沿檢測(cè)電路,帶有雙周期乘法器,以及32個(gè)8位通用工作寄存器,內(nèi)部和外部共計(jì)13個(gè)中斷源,加上豐富的的指令集,使得大部分的指令執(zhí)行時(shí)僅為一個(gè)時(shí)鐘周期。因此可達(dá)到1MIPS/MHz的性能,運(yùn)行速度比普通單片機(jī)高得多。
評(píng)論