MAX3420E便于使用通用微控制器設(shè)計(jì)USB外設(shè)。在介紹MAX3420E之后,本文重點(diǎn)介紹器件的SPI接口。本文演示了如何使用硬連線SPI單元或?qū)νㄓ肐/O引腳進(jìn)行位敲擊來(lái)訪問(wèn)器件。給出了使用MAXQ2000微控制器的USB設(shè)計(jì)的示例C代碼。
介紹
有關(guān)通用串行總線 (USB) 的文章,首先證明 USB 是個(gè)人計(jì)算機(jī)的新連接標(biāo)準(zhǔn)。值得慶幸的是,這不再是必需的,所以這個(gè)介紹可以很簡(jiǎn)短。如果您有嵌入式系統(tǒng)并想連接到PC,則主流管道是USB。
Maxim Integrated的新型芯片MAX3420E可輕松將USB添加到任何系統(tǒng)中。本文重點(diǎn)介紹MAX3420E的集成SPI(串行外設(shè)接口)接口,并提供通用SPI實(shí)現(xiàn)的示例C代碼。本文最后介紹了一個(gè)簡(jiǎn)單的USB HID(人機(jī)接口設(shè)備)的代碼,這是一個(gè)基于Windows的緊急按鈕。
將 USB 添加到任何內(nèi)容
微控制器 (μC) 的選擇通常基于集成外設(shè)。一些處理器包括USB功能,但大多數(shù)處理器,尤其是真正低成本的版本,沒有。您是否曾經(jīng)選擇過(guò)I/O和外設(shè)完美結(jié)合的微控制器,但發(fā)現(xiàn)它缺少USB?另外,是否要添加 USB 并繼續(xù)使用現(xiàn)有的開發(fā)工具?
現(xiàn)在可以使用Maxim的新型MAX3420E將USB添加到任何微控制器中。該芯片提供USB全速收發(fā)器、智能USB串行接口引擎(SIE)和SPI從接口,可與高達(dá)26MHz的SCLK時(shí)鐘信號(hào)一起運(yùn)行。MAX3420E作為全速USB外設(shè)工作,具有一個(gè)控制端點(diǎn)、兩個(gè)雙緩沖64字節(jié)數(shù)據(jù)端點(diǎn)和一個(gè)64字節(jié)中斷端點(diǎn)。
總線驅(qū)動(dòng)的小部件
圖1.USB 總線供電的小組件。
圖 1 說(shuō)明了一種常見的 USB 外設(shè)架構(gòu)。The USB V總線電線為5.3V穩(wěn)壓器提供3V電源,3420.3V穩(wěn)壓器為微控制器和MAX4E供電,無(wú)需外部電源。SPI 接口可以包含 5、1 或 5 根電線。表 <> 顯示了完整的 <> 引腳接口。
信號(hào) | MAX3420E方向 | 描述 |
MOSI | In | SPI 主站出站,從站輸入 |
MISO | Out | SPI 主輸入,從輸出 |
SCLK | In | 串行時(shí)鐘 |
SS# | In | 從屬選擇 |
INT | Out | 中斷(電平或脈沖) |
如果應(yīng)用不需要中斷(所有MAX3420E中斷條件都可以通過(guò)讀取寄存器位直接測(cè)試),則可以省去INT引腳,使用4引腳接口。如果您的SPI主機(jī)具有雙向數(shù)據(jù)接口(MOSI/MISO位于同一雙向引腳上),則可以再減少一個(gè)引腳。因此,不支持中斷和雙向數(shù)據(jù)引腳的SPI接口僅使用三個(gè)引腳。
如果微控制器沒有SPI端口,該怎么辦?沒關(guān)系。通過(guò)直接切換通用I/O引腳,很容易制作固件驅(qū)動(dòng)的SPI主機(jī)。USB 的一個(gè)強(qiáng)大功能是它是自節(jié)流的;它自動(dòng)適應(yīng)SPI側(cè)的任何速度接口。(它通過(guò)使用 USB 端的 NAK 握手來(lái)指示“現(xiàn)在忙,請(qǐng)重試”來(lái)實(shí)現(xiàn)此目的。許多USB外設(shè),尤其是那些連接到人類的外設(shè),即使是最慢的SPI接口,也能非常靈敏地運(yùn)行。
如果圖1中的微控制器真的很小,可能不到10個(gè)引腳怎么辦?您是否需要使用所有這些有價(jià)值的I / O引腳來(lái)與USB芯片通信?是的,但這正是MAX3420E提供3420路通用輸入和3420路通用輸出的原因。簡(jiǎn)單地說(shuō),MAX3420E有<>個(gè)通用I/O來(lái)代替與其通信所需的引腳,但MAX<>E增加了更多的I/O。因此,連接MAX<>E后,您的系統(tǒng)實(shí)際上有更多的I/O引腳。
大籌碼
圖2.連接到大芯片的一個(gè)小角落。
MAX3420E不限于小型系統(tǒng)。圖 2 說(shuō)明了如何將 USB 功能添加到大型 ASIC、FPGA、DSP 或其他大型芯片。這樣做的一個(gè)明顯原因是大芯片可能沒有內(nèi)置USB,或者里面的USB可能不是你想要的。這種架構(gòu)的另一個(gè)很好的原因是,隨著大型芯片在工藝幾何形狀中的縮小,它們不太能夠觸及“高”電壓,例如USB所需的3.3V。具有低壓SPI接口的外部USB芯片是應(yīng)對(duì)這些設(shè)計(jì)挑戰(zhàn)的良好解決方案。為了運(yùn)行低壓接口,MAX3420E具有內(nèi)部電平轉(zhuǎn)換器和一個(gè)VL引腳,用于將SPI接口的工作電壓設(shè)置為1.7V至3.6V之間的任何電壓。
隔離式 USB
圖3.隔離 USB。
如上圖3所示,SPI接口是放置光隔離的簡(jiǎn)單位置。這是因?yàn)镾PI信號(hào)是單向的,它們可以在低頻下工作,以支持低成本光耦合器。
SPI 接口
SPI是一個(gè)簡(jiǎn)單的串行接口,使用兩條數(shù)據(jù)線、一個(gè)串行時(shí)鐘和一個(gè)片選信號(hào)。SPI主機(jī)將SS#降至低電平以開始傳輸,然后驅(qū)動(dòng)串行時(shí)鐘SCLK,以同時(shí)對(duì)數(shù)據(jù)進(jìn)行時(shí)鐘輸入和傳出從設(shè)備。SPI 主機(jī)通過(guò)返回 SS# 高電平來(lái)終止傳輸。
SPI接口有四種時(shí)鐘模式,反映兩種模式信號(hào),稱為CPOL(時(shí)鐘極性)和CPHA(時(shí)鐘相位)。這些信號(hào)以(CPOL,CPHA)的形式表示。期望在第一個(gè)正邊沿之前同時(shí)提供正邊沿 SCKS 和 MOSI 數(shù)據(jù)的接口可以在模式 (0,0) 和 (1,1) 下工作而無(wú)需更改。該特性允許MAX3420E工作在上述任一模式,無(wú)需模式引腳。
圖4和圖5給出了微控制器(MAXQ2000,稍后介紹)和MAX3420E之間的相同數(shù)據(jù)傳輸。圖 4 使用 SPI 模式 (0,0),圖 5 使用 SPI 模式 (1,1)。區(qū)別在于SCLK信號(hào)的非活動(dòng)電平,模式(0,0)為低電平,模式(1,1)為高電平。
圖4.SPI 接口在模式 (0,0) 下工作。
圖5.SPI 接口在模式 (1,1,) 下工作。
MAX3420E接受命令字節(jié)作為每次傳輸?shù)牡谝粋€(gè)字節(jié)。命令字節(jié)包含寄存器編號(hào)和方向位。第二個(gè)和后續(xù)字節(jié)包含數(shù)據(jù)。圖3420和圖4中的命令字節(jié)輸入(MOSI引腳)時(shí),來(lái)自MAX5E (MISO引腳)的<>位是每次輸入命令字節(jié)時(shí)可用的USB狀態(tài)位。此功能僅對(duì)使用單獨(dú)數(shù)據(jù)引腳 MISO 和 MOSI 的接口有效。
SPI 代碼
為MAX3420E編寫通用C代碼的關(guān)鍵是將最少的SPI操作隔離在單獨(dú)的模塊中,并僅定制從SPI接口到SPI接口的模塊。此模塊至少只需要做三件事:
Initialize_SPI
讀取字節(jié)
寫入字節(jié)
此處的示例應(yīng)用程序使用硬件 SPI 單元。對(duì)于沒有這種單元的應(yīng)用,我們將首先回顧一些通用的C代碼,用于位敲擊SPI接口。
位敲擊 SPI
初始化 SPI
Initialize_SPI功能在不同處理器之間變化最大。它負(fù)責(zé)分配接口使用的特定 I/O 引腳,設(shè)置其方向,然后設(shè)置 SS = 1 和 SCLK = 0 的初始條件。(我們正在制作一個(gè)模式 (0,0) SPI 主站。
讀寄存器、寫寄存器
rreg是讀取MAX3420E寄存器的C功能。宏(全部大寫)將功能與各種微控制器的各種I/O方案隔離開來(lái)。使用宏使代碼易于閱讀且獨(dú)立于處理器。wreg 是寫入 MAX3420E 寄存器的例程。
如果更改處理器,則只需更改少量宏即可使用這些例程。例如,下面的宏適用于不包含硬件SPI單元的微控制器。
#define SCLK_HI OUTA = PINSA | 0x02; #define SCLK_LO OUTA = PINSA & 0xFD; #define SS_HI OUTA = PINSA | 0x04; #define SS_LO OUTA = PINSA & 0xFB; #define MOSI(v) OUTA = (PINSA & 0x7F) | (v & 0x80); #define MISO inval |= PINSA & 0x01; BYTE rreg(BYTE r) // Read a register, return its value. { int j; BYTE bv,inval; inval = 0; SS_LO bv = r<<3; // Left-shift the reg number, WRITE=0 for (j=0; j<8; j++) // send the register number and direction bit { MOSI(bv) // put out a bit bv <<= 1; // shift one bit left SCLK_HI SCLK_LO } for (j=0; j<7; j++) // get 7 bits and shift left into 'inval' { SCLK_HI MISO inval <<= 1; // shift in one bit SCLK_LO } SCLK_HI // one more bit, but don't shift 'inval' this time MISO SCLK_LO SS_HI return inval; // return the byte we read in } void wreg(BYTE r,BYTE v) // register, value { int j; BYTE bv; SS_LO bv = (r<<3)+2; // Left-shift the reg number, set the WRITE direction bit for (j=0; j<8; j++) // send the register number and direction bit { MOSI(bv) // put out a bit bv <<= 1; // shift one bit left SCLK_HI SCLK_LO } for (j=0; j<8; j++) // send the register data { MOSI(v) // put out a bit v <<= 1; // shift one bit left SCLK_HI SCLK_LO } SS_HI }
硬件 SPI
本節(jié)討論前面提到的MAXQ2000微控制器。簡(jiǎn)而言之,MAXQ2000是低功耗、16位、高性能RISC處理器系列中的首款產(chǎn)品。MAXQ2000中的“Q”表示“安靜”,表示該架構(gòu)設(shè)計(jì)為與敏感的模擬電路良好共存。MAXQ2000具有內(nèi)置的SPI端口,使其對(duì)MAX3420E特別友好。以下示例使用MAXQ2000開發(fā)板和MAX3420E構(gòu)建一個(gè)簡(jiǎn)單但有趣的Windows小部件。
MAXQ2000硬件SPI單元提供SCLK、MOSI和MISO,但不提供SS#。由于 SS# 的工作方式各不相同(例如,用于訪問(wèn)一個(gè)字節(jié)與字節(jié)突發(fā)),因此最好對(duì) SS# 使用通用 I/O 引腳。
MAXQ I/O 單元
圖6.一個(gè) MAXQ I/O 單元。
圖6所示為基本的MAXQ I/O單元。I/O 端口位以“port.bit”格式標(biāo)記,其中“p”是端口,“b”是位。在本例中,我們專注于 I/O 端口 5 位 3(引腳標(biāo)記為 P53)。
每個(gè) I/O 單元都有一個(gè)觸發(fā)器,在本例中,該觸發(fā)器是使用稱為 PO5.3 的位編寫的。“O”表示輸出。你總是可以寫這個(gè)觸發(fā)器;它是否連接到引腳取決于方向位。配置輸出引腳時(shí),為了避免毛刺,最好在將觸發(fā)器連接到引腳之前寫入觸發(fā)器。
P53引腳的方向由稱為PD5.3的位設(shè)置。“D”表示方向,D信號(hào)用作引腳驅(qū)動(dòng)器的輸出使能:1 = 驅(qū)動(dòng),0 = 浮點(diǎn)。引腳的狀態(tài)始終可以在稱為PI5.3的位中讀取,其中“I”表示輸入。無(wú)論引腳如何驅(qū)動(dòng),由內(nèi)部觸發(fā)器 (PD5.3 = 1) 或外部觸發(fā)器 (PD5.3 = 0) 驅(qū)動(dòng),PI 位指示引腳狀態(tài)。
此結(jié)構(gòu)中有一個(gè)值得注意的功能。如果將P53引腳配置為輸入(PD5.3 = 0),則觸發(fā)器的輸出不用作輸出,因此可以重復(fù)使用為上拉電阻開關(guān)。當(dāng)D = 0時(shí),O信號(hào)被重新定義為“連接上拉電阻”,如圖6中的虛線和開關(guān)所示。
一些I/O引腳具有中斷能力,如圖6下面的模塊所示。中斷塊有三個(gè)信號(hào):
在中斷請(qǐng)求處于活動(dòng)狀態(tài)時(shí)設(shè)置并由 CPU 重置的標(biāo)志位。
一個(gè)邊沿選擇位,用于確定是正信號(hào)轉(zhuǎn)換還是負(fù)信號(hào)轉(zhuǎn)換導(dǎo)致中斷請(qǐng)求。
特定引腳的中斷使能位。
我們的示例應(yīng)用將MAX3420E INT輸出引腳配置為正邊沿觸發(fā)中斷。在MAXQ2000端,代碼直接測(cè)試掛起USB中斷的中斷觸發(fā)器,而不是使用MAXQ2000中斷系統(tǒng)。該程序除了檢查按鈕的狀態(tài)并響應(yīng)USB請(qǐng)求外,什么都不做,因此只需要輪詢循環(huán)。
初始化 SPI
MAXQ2000 I/O引腳在通用I/O和特殊功能硬件(如SPI單元)之間共享。要使用特殊硬件,請(qǐng)先配置硬件塊,然后使其能夠連接到 I/O 引腳。下面的 SPI_Init() 例程設(shè)置引腳方向,配置 SPI 接口,最后啟用它。
void SPI_Init(void) { // MAXQ2000 SPI port CKCN = 0x00; // system clock divisor is 1 SS_HI // SS# high PD5 |= 0x070; // Set SPI output pins (SS, SCLK, DOUT) as output. PD5 &= ~0x080; // Set SPI input pin (DIN) as input. SPICK = 0x00; // fastest SPI clock--div by 2 SPICF = 0x00; // mode(0,0), 8 bit data SPICN_bit.MSTM = 1; // Set Q2000 as the master. SPICN_bit.SPIEN = 1; // Enable SPI // MAX3420E INT pin is tied to MAXQ2000 P60; make it an input PD6 &= ~0x01; // PD6.0=0 (turn off output) }
讀寄存器、寫寄存器
以下功能利用了MAXQ2000的硬件SPI單元,因此比位爆炸的同類產(chǎn)品更小、更快。
// Read a MAX3420E register, return its value. BYTE rreg(BYTE reg) { BYTE dum; SS_LO SPIB = reg<<3; // reg number w. dir=0 (IN) while(SPICN_bit.STBY); // loop if data still being sent dum = SPIB; // read and toss the input byte SPIB=0x00; // data is don't care, we're clocking in MISO bits while(SPICN_bit.STBY); // loop if data still being sent SS_HI return(SPIB); } // Write a MAX3420E register. void wreg(BYTE reg, BYTE dat) { SS_LO // Set SS# low SPIB = (reg<<3)+2; // send reg. number w. DIR bit (b1) set to WRITE while(SPICN_bit.STBY); // loop if data still being sent SPIB = dat; // send the data while(SPICN_bit.STBY); // loop if data still being sent SS_HI // set SS# high }
示例:基于 Windows 的緊急按鈕
這個(gè)USB小部件是基于Windows的USB HID(人機(jī)接口設(shè)備),具有一個(gè)“緊急”按鈕。當(dāng)您按下按鈕時(shí),所有活動(dòng)的PC窗口都將最小化,并且您正在查看桌面。再次按下它,所有應(yīng)用程序窗口都會(huì)恢復(fù)生機(jī)。
USB鍵盤很有趣。如果插入多個(gè)鍵盤,它們將同時(shí)處于活動(dòng)狀態(tài)。因此,此緊急按鈕可與您的普通鍵盤配合使用。
如果電腦掛起,緊急按鈕將扮演新角色 - 它可以用作電腦的遠(yuǎn)程喚醒按鈕。此操作高度依賴于你的電腦是否支持從 USB 喚醒。有些 PCS 可以,有些則不會(huì)。此按鈕可幫助確定你的電腦是否具有此功能。
本代碼示例在MAXQ2000開發(fā)板上運(yùn)行,將小型USB子板(包含MAX3420E)插入擴(kuò)展連接器。
USB 詳細(xì)信息
此應(yīng)用程序包含執(zhí)行枚舉基本工作的 USB 樣板代碼。本文檔末尾的 Panic_Button_Enum_Data.h 列表中的字符數(shù)組完全描述了此設(shè)備的特性。
此應(yīng)用程序使用兩個(gè)終結(jié)點(diǎn):必需的 CONTROL 終結(jié)點(diǎn)零和 EP3-IN(單緩沖 64 字節(jié)終結(jié)點(diǎn))。雖然MAX3420E包含兩個(gè)雙緩沖64字節(jié)端點(diǎn)(EP1輸出和EP2輸入),但本應(yīng)用不需要雙緩沖的吞吐量?jī)?yōu)勢(shì)。
一個(gè)常見的 HID 誤解是 HID 設(shè)備僅以低速運(yùn)行。此應(yīng)用程序演示了即使是像鍵盤這樣慢的東西也可以從全速運(yùn)行中受益。這是正確的,因?yàn)殒I盤使用較少的總線帶寬,發(fā)送 12MHz 而不是 1.5MHz 數(shù)據(jù)包。
圖7.緊急按鈕的流程圖。
中斷終結(jié)點(diǎn)具有輪詢間隔,該間隔確定 USB 主機(jī)向 IN 終結(jié)點(diǎn)請(qǐng)求數(shù)據(jù)的頻率。在每個(gè)時(shí)間間隔內(nèi),我們可以期望主機(jī)向設(shè)備的終結(jié)點(diǎn) 3 發(fā)送 IN 請(qǐng)求。圖 7 說(shuō)明了處理這些請(qǐng)求的簡(jiǎn)單狀態(tài)機(jī)。枚舉器件后,微控制器會(huì)重復(fù)執(zhí)行此例程。為簡(jiǎn)化起見,此應(yīng)用程序輪詢中斷引腳的活動(dòng)。如果在微控制器中運(yùn)行其他操作,則需要調(diào)用 Do_IN3 函數(shù)以響應(yīng)中斷。
狀態(tài)機(jī)使用兩個(gè)全局變量:狀態(tài)和按鈕。C 宏定義了三種狀態(tài):空閑、發(fā)布和等待。狀態(tài)變量初始化為 IDLE。如果按下連接到MAX3420E GPIN0引腳的按鈕,則可變按鈕為高電平,否則為低電平。main()中的無(wú)限循環(huán)遞增按鈕檢查定時(shí)器,到期時(shí)讀取MAX3420E中的GPIO寄存器以確定按鈕狀態(tài)。這樣可以節(jié)省不必要的 SPI 流量。
當(dāng)按鈕向上時(shí),狀態(tài)圖采用兩個(gè)向左的分支,并且不執(zhí)行任何操作。如果在空閑狀態(tài)下按下按鈕,則是時(shí)候發(fā)送鍵碼以清除活動(dòng)窗口了。這是序列 08(Windows 鍵)00(保留)和 07(字母 d)。下一個(gè)狀態(tài)設(shè)置為“發(fā)布”,并且操作已完成。
一旦MAX3420E通過(guò)USB發(fā)送該數(shù)據(jù)包,就會(huì)產(chǎn)生另一個(gè)EP3-IN中斷請(qǐng)求,指示EP3-IN FIFO再次可用于加載數(shù)據(jù)。再次輸入圖 7 函數(shù)。此時(shí)間狀態(tài) = RELEASE,因此函數(shù)發(fā)送序列 00 00 00,指示“鍵啟動(dòng)”。下一個(gè)狀態(tài)設(shè)置為 WAIT,意思是“等待按鈕松開”。
現(xiàn)在,該函數(shù)只需要使用 WAIT 狀態(tài)分支來(lái)檢測(cè)按鈕釋放。當(dāng)按鈕保持按下狀態(tài)時(shí),沒有任何反應(yīng)。釋放按鈕時(shí),狀態(tài)圖采用兩個(gè)向右的分支,并將狀態(tài)變量重新初始化為 IDLE,為下一次按下按鈕準(zhǔn)備函數(shù)。
大多數(shù)時(shí)間執(zhí)行的代碼非常小。下面是整個(gè)函數(shù),它實(shí)現(xiàn)了圖 7 中的流程圖:
void Do_IN3(void) { switch(state) { case IDLE: if (button) { wreg(rEP3INFIFO,0x08); // "Windows" prefix key wreg(rEP3INFIFO,0); wreg(rEP3INFIFO,0x07); // "D" key wreg(rEP3INBC,3); // arm it state = RELEASE; // next state sends the "keys up" code } break; // else do nothing (and the SIE will NAK) // case RELEASE: { wreg(rEP3INFIFO,0x00); // key up wreg(rEP3INFIFO,0x00); wreg(rEP3INFIFO,0x00); // key up wreg(rEP3INBC,3); // arm it state = WAIT; // next state waits for the PB to be unpressed } break; case WAIT: if (!button) state = IDLE; break; default: state = IDLE; } // end switch }
代碼花絮
代碼中的一些細(xì)節(jié)值得評(píng)論。
時(shí)間關(guān)鍵型 USB 事件
MAX3420E通過(guò)驅(qū)動(dòng)總線上的“K”狀態(tài)10ms來(lái)發(fā)出遠(yuǎn)程喚醒信號(hào)。為了減輕SPI主機(jī)的計(jì)數(shù)負(fù)擔(dān),MAX3420E在內(nèi)部對(duì)該信號(hào)進(jìn)行計(jì)時(shí)(實(shí)際上,每隔一個(gè)USB時(shí)間敏感事件),然后在間隔結(jié)束時(shí)給SPI主機(jī)一個(gè)中斷。SPI 主站不需要為這些事件使用自己的定時(shí)器;它只是啟動(dòng)操作,然后等待完成中斷。
ACKSTAT 位
函數(shù) rregAS 和 wregAS 做一件事與 rreg 和 wreg 不同;他們?cè)?SPI 命令字節(jié)中設(shè)置了一個(gè) ACK 狀態(tài)位。SPI主機(jī)(在我們的例子中為MAXQ2000)使用該位告訴MAX3420E它已完成當(dāng)前的控制傳輸,因此通過(guò)確認(rèn)其狀態(tài)級(jí)來(lái)終止CONTROL傳輸。盡管 ACKSTAT 作為內(nèi)部寄存器位存在,但將其包含在 SPI 命令字節(jié)中可以更快地執(zhí)行此常用操作,并且使用更少的代碼。
readbytes(), writebytes() 函數(shù)
readbytes()、writebytes()功能利用了MAX3420E的突發(fā)功能。它們不是每字節(jié)發(fā)送兩個(gè) SPI 字節(jié)訪問(wèn)(一個(gè)命令字節(jié)和一個(gè)數(shù)據(jù)字節(jié)),而是首先丟棄 SS#,然后發(fā)送命令字節(jié),輸入/輸出字節(jié)突發(fā),最后引發(fā) SS# 以終止 SPI 傳輸。
在哪里可以找到產(chǎn)品 ID
圖8.此處顯示產(chǎn)品 ID 字符串。
產(chǎn)品 ID (PID) 字符串(以 Panic_Button_Enum_Data.h 為單位)在您首次插入緊急按鈕時(shí)顯示為短消息。此 ID 字符串在枚舉過(guò)程中彈出,該過(guò)程將緊急按鈕標(biāo)識(shí)為 HID,并將其與內(nèi)置 Windows 驅(qū)動(dòng)程序關(guān)聯(lián)。
每個(gè)后續(xù)附件都是靜音的,除了插入任何 USB 設(shè)備時(shí)聽到的一點(diǎn)“ba-deep”Windows 聲音。如果要隨時(shí)檢查設(shè)備狀態(tài),請(qǐng)轉(zhuǎn)到圖 8 中所示的屏幕。您可以通過(guò)右鍵單擊“我的電腦”,選擇“屬性”、“硬件”選項(xiàng)卡、“設(shè)備管理器”按鈕,展開“人機(jī)接口設(shè)備”項(xiàng),右鍵單擊“USB 人機(jī)接口設(shè)備”并選擇“屬性”來(lái)訪問(wèn)此屏幕。
符合 USB 標(biāo)準(zhǔn)
也許你看了代碼,然后想,“對(duì)于一個(gè)一鍵式USB設(shè)備來(lái)說(shuō),這是很多工作。這是正確的,因?yàn)榇嬖谂c任何 USB 設(shè)備關(guān)聯(lián)的特定開銷。幸運(yùn)的是,USB 被精心指定,以至于此枚舉代碼可以用作任何 USB 設(shè)備的模板(如復(fù)制粘貼)。
像所有勤奮的開發(fā)人員一樣,我們希望我們的設(shè)計(jì)可以通過(guò)USB-IF認(rèn)證,這有助于確保它在任何PC上都能正常運(yùn)行。此應(yīng)用程序通過(guò)了 USB 命令驗(yàn)證程序(USBCV 版本 1.2.1.0)和 HID 測(cè)試,測(cè)試套件可供開發(fā)人員在 USB-IF 網(wǎng)站上使用。下面的圖 9 是此緊急按鈕的記分卡。
圖9.此緊急按鈕上的 USB 和 HID 測(cè)試的測(cè)試日志和狀態(tài)報(bào)告。
結(jié)論
如果需要制作USB外設(shè),可以考慮使用MAX3420E。該設(shè)備體積小,易于編程,并帶有免費(fèi)的示例代碼。MAX3420E在設(shè)計(jì)中增加了I/O引腳,可在任何支持SPI的系統(tǒng)中很好地工作。由于SPI非常容易位爆炸,因此該設(shè)計(jì)包括每個(gè)微控制器。如果需要更高的性能,可以將SPI接口的時(shí)鐘頻率設(shè)置為高達(dá)26MHz。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7649瀏覽量
152107 -
usb
+關(guān)注
關(guān)注
60文章
7980瀏覽量
266081 -
SPI
+關(guān)注
關(guān)注
17文章
1721瀏覽量
92125
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論