0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

將USB添加到任何內(nèi)容

星星科技指導(dǎo)員 ? 來源:ADI ? 作者:ADI ? 2023-03-02 14:38 ? 次閱讀

MAX3420E便于使用通用微控制器設(shè)計(jì)USB外設(shè)。在介紹MAX3420E之后,本文重點(diǎn)介紹器件的SPI接口。本文演示了如何使用硬連線SPI單元或?qū)νㄓ肐/O引腳進(jìn)行位敲擊來訪問器件。給出了使用MAXQ2000微控制器的USB設(shè)計(jì)的示例C代碼。

介紹

有關(guān)通用串行總線 (USB) 的文章,首先證明 USB 是個(gè)人計(jì)算機(jī)的新連接標(biāo)準(zhǔn)。值得慶幸的是,這不再是必需的,所以這個(gè)介紹可以很簡短。如果您有嵌入式系統(tǒng)并想連接到PC,則主流管道是USB。

Maxim Integrated的新型芯片MAX3420E可輕松將USB添加到任何系統(tǒng)中。本文重點(diǎn)介紹MAX3420E的集成SPI(串行外設(shè)接口)接口,并提供通用SPI實(shí)現(xiàn)的示例C代碼。本文最后介紹了一個(gè)簡單的USB HID(人機(jī)接口設(shè)備)的代碼,這是一個(gè)基于Windows的緊急按鈕。

將 USB 添加到任何內(nèi)容

微控制器 (μC) 的選擇通?;诩赏庠O(shè)。一些處理器包括USB功能,但大多數(shù)處理器,尤其是真正低成本的版本,沒有。您是否曾經(jīng)選擇過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)的小部件

poYBAGQARFaAFS8eAAAn15_wfpk280.gif

圖1.USB 總線供電的小組件。

圖 1 說明了一種常見的 USB 外設(shè)架構(gòu)。The USB V總線電線為5.3V穩(wěn)壓器提供3V電源,3420.3V穩(wěn)壓器為微控制器和MAX4E供電,無需外部電源。SPI 接口可以包含 5、1 或 5 根電線。表 <> 顯示了完整的 <> 引腳接口。

信號(hào) MAX3420E方向 描述
MOSI In SPI 主站出站,從站輸入
MISO Out SPI 主輸入,從輸出
SCLK In 串行時(shí)鐘
SS# In 從屬選擇
INT Out 中斷(電平或脈沖)

如果應(yīng)用不需要中斷(所有MAX3420E中斷條件都可以通過讀取寄存器位直接測試),則可以省去INT引腳,使用4引腳接口。如果您的SPI主機(jī)具有雙向數(shù)據(jù)接口(MOSI/MISO位于同一雙向引腳上),則可以再減少一個(gè)引腳。因此,不支持中斷和雙向數(shù)據(jù)引腳的SPI接口僅使用三個(gè)引腳。

如果微控制器沒有SPI端口,該怎么辦?沒關(guān)系。通過直接切換通用I/O引腳,很容易制作固件驅(qū)動(dòng)的SPI主機(jī)。USB 的一個(gè)強(qiáng)大功能是它是自節(jié)流的;它自動(dòng)適應(yīng)SPI側(cè)的任何速度接口。(它通過使用 USB 端的 NAK 握手來指示“現(xiàn)在忙,請(qǐng)重試”來實(shí)現(xiàn)此目的。許多USB外設(shè),尤其是那些連接到人類的外設(shè),即使是最慢的SPI接口,也能非常靈敏地運(yùn)行。

如果圖1中的微控制器真的很小,可能不到10個(gè)引腳怎么辦?您是否需要使用所有這些有價(jià)值的I / O引腳來與USB芯片通信?是的,但這正是MAX3420E提供3420路通用輸入和3420路通用輸出的原因。簡單地說,MAX3420E有<>個(gè)通用I/O來代替與其通信所需的引腳,但MAX<>E增加了更多的I/O。因此,連接MAX<>E后,您的系統(tǒng)實(shí)際上有更多的I/O引腳。

大籌碼

pYYBAGQARFeAMK74AAAgr5LHRBw543.gif

圖2.連接到大芯片的一個(gè)小角落。

MAX3420E不限于小型系統(tǒng)。圖 2 說明了如何將 USB 功能添加到大型 ASICFPGADSP 或其他大型芯片。這樣做的一個(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

pYYBAGQARFiADfUQAABGRT38qVk625.gif

圖3.隔離 USB。

如上圖3所示,SPI接口是放置光隔離的簡單位置。這是因?yàn)镾PI信號(hào)是單向的,它們可以在低頻下工作,以支持低成本光耦合器。

SPI 接口

SPI是一個(gè)簡單的串行接口,使用兩條數(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ī)通過返回 SS# 高電平來終止傳輸。

SPI接口有四種時(shí)鐘模式,反映兩種模式信號(hào),稱為CPOL(時(shí)鐘極性)和CPHA(時(shí)鐘相位)。這些信號(hào)以(CPOL,CPHA)的形式表示。期望在第一個(gè)正邊沿之前同時(shí)提供正邊沿 SCKS 和 MOSI 數(shù)據(jù)的接口可以在模式 (0,0) 和 (1,1) 下工作而無需更改。該特性允許MAX3420E工作在上述任一模式,無需模式引腳。

圖4和圖5給出了微控制器(MAXQ2000,稍后介紹)和MAX3420E之間的相同數(shù)據(jù)傳輸。圖 4 使用 SPI 模式 (0,0),圖 5 使用 SPI 模式 (1,1)。區(qū)別在于SCLK信號(hào)的非活動(dòng)電平,模式(0,0)為低電平,模式(1,1)為高電平。

poYBAGQARFmAWS7vAABLtU5Fhh0533.gif

圖4.SPI 接口在模式 (0,0) 下工作。

pYYBAGQARFqAHBhnAABMT-7LyrQ248.gif

圖5.SPI 接口在模式 (1,1,) 下工作。

MAX3420E接受命令字節(jié)作為每次傳輸?shù)牡谝粋€(gè)字節(jié)。命令字節(jié)包含寄存器編號(hào)和方向位。第二個(gè)和后續(xù)字節(jié)包含數(shù)據(jù)。圖3420和圖4中的命令字節(jié)輸入(MOSI引腳)時(shí),來自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方案隔離開來。使用宏使代碼易于閱讀且獨(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微控制器。簡而言之,MAXQ2000是低功耗、16位、高性能RISC處理器系列中的首款產(chǎn)品。MAXQ2000中的“Q”表示“安靜”,表示該架構(gòu)設(shè)計(jì)為與敏感的模擬電路良好共存。MAXQ2000具有內(nèi)置的SPI端口,使其對(duì)MAX3420E特別友好。以下示例使用MAXQ2000開發(fā)板和MAX3420E構(gòu)建一個(gè)簡單但有趣的Windows小部件。

MAXQ2000硬件SPI單元提供SCLK、MOSI和MISO,但不提供SS#。由于 SS# 的工作方式各不相同(例如,用于訪問一個(gè)字節(jié)與字節(jié)突發(fā)),因此最好對(duì) SS# 使用通用 I/O 引腳。

MAXQ I/O 單元

poYBAGQARFuADtJyAAApi05yv5k472.gif

圖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 的位編寫的?!癘”表示輸出。你總是可以寫這個(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”表示輸入。無論引腳如何驅(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端,代碼直接測試掛起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)用不需要雙緩沖的吞吐量優(yōu)勢(shì)。

一個(gè)常見的 HID 誤解是 HID 設(shè)備僅以低速運(yùn)行。此應(yīng)用程序演示了即使是像鍵盤這樣慢的東西也可以從全速運(yùn)行中受益。這是正確的,因?yàn)殒I盤使用較少的總線帶寬,發(fā)送 12MHz 而不是 1.5MHz 數(shù)據(jù)包。

poYBAGQAR26AUHaCAAC4RkwOXAk410.png

圖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 說明了處理這些請(qǐng)求的簡單狀態(tài)機(jī)。枚舉器件后,微控制器會(huì)重復(fù)執(zhí)行此例程。為簡化起見,此應(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()中的無限循環(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通過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)分支來檢測按鈕釋放。當(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通過驅(qū)動(dòng)總線上的“K”狀態(tài)10ms來發(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)前的控制傳輸,因此通過確認(rèn)其狀態(tài)級(jí)來終止CONTROL傳輸。盡管 ACKSTAT 作為內(nèi)部寄存器位存在,但將其包含在 SPI 命令字節(jié)中可以更快地執(zhí)行此常用操作,并且使用更少的代碼。

readbytes(), writebytes() 函數(shù)

readbytes()、writebytes()功能利用了MAX3420E的突發(fā)功能。它們不是每字節(jié)發(fā)送兩個(gè) SPI 字節(jié)訪問(一個(gè)命令字節(jié)和一個(gè)數(shù)據(jù)字節(jié)),而是首先丟棄 SS#,然后發(fā)送命令字節(jié),輸入/輸出字節(jié)突發(fā),最后引發(fā) SS# 以終止 SPI 傳輸。

在哪里可以找到產(chǎn)品 ID

pYYBAGQARF2AXxGKAABeyhC2E4o528.jpg

圖8.此處顯示產(chǎn)品 ID 字符串。

產(chǎn)品 ID (PID) 字符串(以 Panic_Button_Enum_Data.h 為單位)在您首次插入緊急按鈕時(shí)顯示為短消息。此 ID 字符串在枚舉過程中彈出,該過程將緊急按鈕標(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 中所示的屏幕。您可以通過右鍵單擊“我的電腦”,選擇“屬性”、“硬件”選項(xiàng)卡、“設(shè)備管理器”按鈕,展開“人機(jī)接口設(shè)備”項(xiàng),右鍵單擊“USB 人機(jī)接口設(shè)備”并選擇“屬性”來訪問此屏幕。

符合 USB 標(biāo)準(zhǔn)

也許你看了代碼,然后想,“對(duì)于一個(gè)一鍵式USB設(shè)備來說,這是很多工作。這是正確的,因?yàn)榇嬖谂c任何 USB 設(shè)備關(guān)聯(lián)的特定開銷。幸運(yùn)的是,USB 被精心指定,以至于此枚舉代碼可以用作任何 USB 設(shè)備的模板(如復(fù)制粘貼)。

像所有勤奮的開發(fā)人員一樣,我們希望我們的設(shè)計(jì)可以通過USB-IF認(rèn)證,這有助于確保它在任何PC上都能正常運(yùn)行。此應(yīng)用程序通過了 USB 命令驗(yàn)證程序(USBCV 版本 1.2.1.0)和 HID 測試,測試套件可供開發(fā)人員在 USB-IF 網(wǎng)站上使用。下面的圖 9 是此緊急按鈕的記分卡。

pYYBAGQARF6AUJISAACivkriFiU411.jpg

圖9.此緊急按鈕上的 USB 和 HID 測試的測試日志和狀態(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。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7334

    瀏覽量

    150093
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    7772

    瀏覽量

    262366
  • SPI
    SPI
    +關(guān)注

    關(guān)注

    17

    文章

    1666

    瀏覽量

    90724
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    EZ-USB FX3 SuperSpeed Explorer套件使開發(fā)人員能夠USB 3.0設(shè)備功能添加到任何系統(tǒng)

    CYUSB3KIT-003,EZ-USB FX3 SuperSpeed Explorer套件是一個(gè)易于使用且價(jià)格低廉的開發(fā)平臺(tái),使開發(fā)人員能夠USB 3.0設(shè)備功能添加到任何系統(tǒng)。
    發(fā)表于 08-12 07:06

    如何使用vhdl這種東西添加到TEMAC上?

    捕獲它。到目前為止它正在工作我想將UDP / IP堆棧添加到該MAC,任何人都可以建議我如何使用vhdl這種東西添加到TEMAC上。請(qǐng)盡快建議我。此致,Pavan Patil
    發(fā)表于 03-24 08:01

    新庫添加到Petalinux rootfs的最簡單方法是什么

    嗨,新庫添加到Petalinux rootfs的最簡單方法是什么?1>如何預(yù)編譯的庫添加到rootfs,這將在petalinux-config -c rootfs中檢測到2>如何
    發(fā)表于 05-22 08:32

    為什么無法DMA添加到SDMMC?

    你好!我有最新版本的 CubeMX我嘗試 DMA 添加到 SDMMC1但我看不到“DMA”選項(xiàng)表。如何添加 DMA?
    發(fā)表于 01-13 06:15

    如何應(yīng)用程序添加到任務(wù)欄?

    如何應(yīng)用程序添加到任務(wù)欄? ­圖形用戶界面有一些有趣的現(xiàn)象,其中一個(gè)就是盡管是圖形界面,幫助文件卻是文本的形式。因此,如果您不熟悉文字處理,不知道斜
    發(fā)表于 07-31 14:12 ?6044次閱讀

    如何TDM業(yè)務(wù)添加到WiMAX平臺(tái)上

    如何TDM業(yè)務(wù)添加到WiMAX平臺(tái)上 對(duì)于今天的運(yùn)營商來說,“接入”是一個(gè)熱門詞匯。盡管傳統(tǒng)接入鏈路依然是主要的收入來源,但它同時(shí)也成為限制
    發(fā)表于 10-20 21:29 ?689次閱讀

    如何Crosswalk添加到Cordova應(yīng)用程序中

    英特爾開源技術(shù)中心的Bob Spencer解釋了如何Crosswalk添加到Cordova應(yīng)用程序中,以提供具有世界級(jí)性能的可預(yù)測運(yùn)行時(shí)。
    的頭像 發(fā)表于 11-07 06:37 ?2231次閱讀

    怎樣Siri語音控件添加到任何樹莓派項(xiàng)目

     就是這樣!現(xiàn)在,您可以通過創(chuàng)建自己的模塊來控制任何內(nèi)容,并為任何項(xiàng)目添加出色的語音控制。借助Siri的強(qiáng)大功能,一切皆有可能!
    的頭像 發(fā)表于 10-12 11:34 ?2263次閱讀

    S7-1200模塊添加到組態(tài)的方法

     使用硬件目錄模塊添加到 CPU 。 有三種類型的模塊。
    的頭像 發(fā)表于 03-11 10:30 ?5146次閱讀

    如何WizFi360 EVB Mini添加到樹莓派Pico Python

    電子發(fā)燒友網(wǎng)站提供《如何WizFi360 EVB Mini添加到樹莓派Pico Python.zip》資料免費(fèi)下載
    發(fā)表于 12-01 14:38 ?0次下載
    如何<b class='flag-5'>將</b>WizFi360 EVB Mini<b class='flag-5'>添加到</b>樹莓派Pico Python

    LED添加到十字繡圖片

    電子發(fā)燒友網(wǎng)站提供《LED添加到十字繡圖片.zip》資料免費(fèi)下載
    發(fā)表于 02-09 10:12 ?0次下載
    <b class='flag-5'>將</b>LED<b class='flag-5'>添加到</b>十字繡圖片

    USB添加到任何內(nèi)容

    如果需要制作USB外設(shè),可以考慮使用MAX3420E。該設(shè)備體積小,易于編程,并帶有免費(fèi)的示例代碼。MAX3420E在設(shè)計(jì)中增加了I/O引腳,可在任何支持SPI的系統(tǒng)中很好地工作。由于SPI非常容易位爆炸,因此該設(shè)計(jì)包括每個(gè)微控制器。如果需要更高的性能,可以
    的頭像 發(fā)表于 03-31 11:26 ?937次閱讀
    <b class='flag-5'>將</b><b class='flag-5'>USB</b><b class='flag-5'>添加到任何</b><b class='flag-5'>內(nèi)容</b>

    如何溶解氧添加到WiFi水培套件

    電子發(fā)燒友網(wǎng)站提供《如何溶解氧添加到WiFi水培套件.zip》資料免費(fèi)下載
    發(fā)表于 06-14 10:00 ?0次下載
    如何<b class='flag-5'>將</b>溶解氧<b class='flag-5'>添加到</b>WiFi水培套件

    西門子博途S7-1200:模塊添加到機(jī)架的方法

    在網(wǎng)絡(luò)視圖中將設(shè)備從硬件目錄添加到組態(tài)后,即可向設(shè)備中添加模塊。
    的頭像 發(fā)表于 09-04 15:22 ?6098次閱讀
    西門子博途S7-1200:<b class='flag-5'>將</b>模塊<b class='flag-5'>添加到</b>機(jī)架的方法

    安裝python怎么添加到環(huán)境變量

    Python是一種簡單易學(xué)的腳本語言,廣泛應(yīng)用于開發(fā)各種類型的應(yīng)用程序。為了在Windows操作系統(tǒng)上使用Python的命令行工具,需要將Python添加到系統(tǒng)的環(huán)境變量中。本文向您詳細(xì)介紹如何在
    的頭像 發(fā)表于 11-23 16:40 ?2169次閱讀