基于Cortex-M0的USB密碼鍵盤的設(shè)計(jì)與實(shí)現(xiàn)
引言
密碼鍵盤廣泛地應(yīng)用在金融、電信、會(huì)員卡等很多領(lǐng)域,現(xiàn)在市場(chǎng)的密碼鍵盤主要有三大類接口:PS2、串口和USB。但是隨著個(gè)人計(jì)算機(jī)通用外圍設(shè)備越來越少地使用串口和PS2接口,這兩種接口正在逐漸從個(gè)人計(jì)算機(jī)特別是便攜式電腦上消失。而現(xiàn)在市場(chǎng)上的很多USB密碼鍵盤往往是采用在原來設(shè)計(jì)的基礎(chǔ)上加PS2轉(zhuǎn)USB芯片(HID類)或者UART轉(zhuǎn)USB芯片(CDC類)實(shí)現(xiàn),這就造成硬件版本不兼容,生產(chǎn)必須有兩個(gè)硬件版本。本方案基于一套硬件結(jié)構(gòu),通過軟件的升級(jí)方便地實(shí)現(xiàn)HID類和CDC類產(chǎn)品之間的轉(zhuǎn)換。
1 NUC120概述
NUC120系列是Nuvoton公司推出的內(nèi)嵌ARMCortex-M0核的32位微控制器,該系列最高可運(yùn)行至50MHz外部時(shí)鐘,內(nèi)建32 KB/64 KB/128 KB的Flash存儲(chǔ)器和4 KB/8 KB/16 KB的內(nèi)建SRAM;并內(nèi)置定時(shí)器、看門狗定時(shí)器、RTC、PDMA、UART、SPI/SSP、I2C、I2S、PWM定時(shí)器、GPIO、USB 2.0 FS設(shè)備、12位ADC、模擬比較器、低電壓檢測(cè)和欠壓檢測(cè)功能。
2 USB協(xié)議簡(jiǎn)介
USB通用串行總線不是一種新的總線標(biāo)準(zhǔn),而是應(yīng)用在PC領(lǐng)域的接口技術(shù),USB接口支持設(shè)備的即插即用和熱插拔功能。USB協(xié)議將設(shè)備分為幾大類,每一大類義分為若干子類,分別滿足不同場(chǎng)合的應(yīng)用需求。每一大類都用一個(gè)類型號(hào)標(biāo)識(shí),如音頻設(shè)備為01,人機(jī)界面設(shè)備為03,海量存儲(chǔ)設(shè)備為08。USB的數(shù)據(jù)傳輸共有4種類型:控制傳輸、中斷傳輸、批量傳輸、同步傳輸。在USB標(biāo)準(zhǔn)子類中,本文主要討論兩類子集——HID類和CDC類。
2.1 HID類
HID(Human Interface Device,人機(jī)交互設(shè)備)類是比較大的一個(gè)類,用于控制計(jì)算機(jī)操作的一些方面,如USB鼠標(biāo)、USB鍵盤、USB游戲操縱桿、USB觸摸板、USB軌跡球、電話撥號(hào)設(shè)備、VCR遙控等設(shè)備。另外,使用HID設(shè)備的一個(gè)好處就是,操作系統(tǒng)自帶了HID類的驅(qū)動(dòng)程序,而用戶無(wú)需去開發(fā)很麻煩的驅(qū)動(dòng)程序,只要直接使用API調(diào)用即可完成通信。所以很多簡(jiǎn)單的USB設(shè)備,喜歡枚舉成HID設(shè)備,這樣就可以不用安裝驅(qū)動(dòng)而直接使用。
2.2 CDC類
CDC(Commuuication Devce Class,通信設(shè)備類)類是USB組織定義的一類專門給各種通信設(shè)備(電信通信設(shè)備和中速網(wǎng)絡(luò)通信設(shè)備)使用的USB子類。根據(jù)CDC類所針對(duì)通信設(shè)備的不同,CDC類又被分成以下不同的模型:USB傳統(tǒng)純電話業(yè)務(wù)(POTS)模型、USB ISDN模型和USB網(wǎng)絡(luò)模型。其中,USB傳統(tǒng)純電話業(yè)務(wù)模型又可分為直接線控制模型(Direct Line Control Model)、抽象控制模型(Abstract Control Model)和USB電話模型(USBTelephone Model)。通常一個(gè)CDC類又包括兩個(gè)接口子類——通信接口類(Communication Interface Class)和數(shù)據(jù)接口類(Data Interface Class)。該子類可以實(shí)現(xiàn)虛擬串口通信的協(xié)議。
3 硬件設(shè)計(jì)
3.1 鍵盤設(shè)計(jì)
矩陣鍵盤又稱為行列式鍵盤,本方案是用4根I/O線作為行線,3根I/O線作為列線組成行列式鍵盤,鍵盤設(shè)計(jì)方案如圖1所示。在行線和列線的每一個(gè)交叉點(diǎn)上,設(shè)置一個(gè)按鍵。這樣鍵盤中按鍵的個(gè)數(shù)是3×4個(gè)。這種行列式鍵盤結(jié)構(gòu)能夠有效地提高單片機(jī)系統(tǒng)中I/O接口的利用率。NUC120系列每個(gè)I/O接口都可以作為外部中斷輸入腳,在此硬件基礎(chǔ)上,可以采用中斷式或查詢式程序設(shè)計(jì)思路,本方案采用一個(gè)單獨(dú)的定時(shí)器來定時(shí)掃描按鍵。
3.2 USB通信接口設(shè)計(jì)
NUC120系列自帶USB接口,該接口直接采用內(nèi)置USB串行接口引擎(SIE),而且兼容USB 2.0全速規(guī)格。
其主要特征如下:
◆提供1個(gè)中斷向量和4個(gè)中斷事件(WAKEUP、FLDET、USB和BUS);
◆支持Control/Bulk/Interrupt/Isochronous傳輸類型;
◆在沒有總線活動(dòng)超過3 ms后支持暫停功能;
◆為可配置的Control/Bulk/Interrupt/Isochronous傳輸類型提供6個(gè)端點(diǎn)和最大512字節(jié)的緩存;
◆提供遠(yuǎn)程喚醒功能。
USB通信接口電路如圖2所示。在D+、D-線上采用100Ω電阻進(jìn)行限流。
4 軟件設(shè)計(jì)
4.1 USB接口程序
Nuvoton公司為NUC120系列CPU提供了所有外設(shè)的驅(qū)動(dòng)庫(kù)函數(shù),并在USB應(yīng)用方面提供了大量的例程。
本方案的兩套軟件分別參照Smpl_HID和Smpl_VCOM設(shè)計(jì),大大縮短了開發(fā)時(shí)間。庫(kù)函數(shù)提供的例程如圖3所示。
4.2 鍵盤掃描程序
鍵盤掃描采用定時(shí)器0,設(shè)置定時(shí)器0為每1 ms中斷一次來判斷是否有按鍵。鍵盤掃描程序流程如圖4所示。長(zhǎng)按不連續(xù)輸出,同一個(gè)按鍵,必須按下、抬起才有效。讀者可以根據(jù)自己系統(tǒng)的實(shí)際要求進(jìn)行修改。鍵盤防抖處理可以根據(jù)自己的鍵盤類型來設(shè)置具體的時(shí)間(本方案是10ms)。
結(jié)語(yǔ)
本方案采用基于ARM cortex-M0內(nèi)核的NUC120系列微控制器,并且有很大的擴(kuò)展性,可以方便地連接液晶、語(yǔ)音芯片;由于內(nèi)核主頻最高可達(dá)50 MHz,能夠?qū)崿F(xiàn)3DES加/解密等對(duì)于8位機(jī)來說較復(fù)雜的運(yùn)算功能,具有很高的性價(jià)比。
評(píng)論