作者:Maxim Integrated,技術(shù)團(tuán)隊資深成員 Greg Steiert “標(biāo)準(zhǔn)的奇妙之處在于有如此之多的選擇。”格蕾絲˙赫柏 引言 多年以來,一直存在標(biāo)準(zhǔn)泛濫的現(xiàn)象,而我們電子業(yè)尤其嚴(yán)重。您是否曾經(jīng)想過,為什么我們對有些奇怪的數(shù)字或測量計的東西建立標(biāo)準(zhǔn)?關(guān)于航天飛機的固體燃料火箭推進(jìn)器的直徑是否真的源自于馬屁股的寬度的討論非常激烈。2相當(dāng)?shù)南∑婧陀腥ぁ5牵邮苁聦崟谐尚В嚎偸菚泻芏鄻?biāo)準(zhǔn),我們必須找到使其很好配合的途徑。工程師和制造商均涉及到一個共同領(lǐng)域,其中標(biāo)準(zhǔn)的不兼容特別麻煩:原型平臺。幸運的是,有些方法可以緩解這些不兼容性。下文中我們將進(jìn)一步分析討論。 開發(fā)板擴(kuò)展標(biāo)準(zhǔn) 多年來,元件制造商一直提供開發(fā)系統(tǒng),幫助其客戶采用其元件設(shè)計應(yīng)用。對于可編程器件,例如FPGA和微控制器,始終存在與其它元件的接口,以便能夠與硬件同步或者早于硬件進(jìn)行軟件開發(fā)。隨著時間推移,涌現(xiàn)出了關(guān)于這些“擴(kuò)展接口”的非常松散的偽標(biāo)準(zhǔn),其中有些標(biāo)準(zhǔn)的一致性相對較好。Xilinx等FPGA廠商推動這些標(biāo)準(zhǔn),例如FMC,使客戶盡可能簡單地遷移到最新平臺。Xilinx也采用第三方標(biāo)準(zhǔn),例如Digilent制定的Pmod標(biāo)準(zhǔn),用于該接口的外圍設(shè)備選擇較廣。微控制器制造商的標(biāo)準(zhǔn)化略慢,許多采用自身的專用接口。然而,制造商動向和Arduino平臺普及等市場力量正驅(qū)使其也向偽標(biāo)準(zhǔn)靠攏。 Pmod非常適合FPGA Pmod接口是將外設(shè)與FPGA開發(fā)板進(jìn)行組合和匹配的很好方式,可利用方便、可手工焊接的連接器連接八個引腳以及電源和地。FPGA的靈活性允許將其八個信號引腳用于幾乎所有功能。盡管這提高了其對于FPGA的實用性,但也造成該接口難以配合那些外設(shè)功能分配給特定引腳的微控制器。為解決這一問題,Digilent定義了多種不同的Pmod引腳排列類型,不同的功能分配給特定的引腳(圖1)。 ![]() 圖1. Pmod引腳排列類型將不同的功能分配給特定引腳。 類型定義使得微控制器板較容易使用Pmod接口標(biāo)準(zhǔn),但仍然存在挑戰(zhàn)。利用許多微控制器有限的引腳復(fù)用能力,難以實現(xiàn)真正的通用接口,已被廢棄的Type 3 UART接口就是很好的例子。然而,即使存在局限性,對于原型或教育目的,Pmod接口是一種非常有用的擴(kuò)展端口。 Arduino偽標(biāo)準(zhǔn) Arduino偽標(biāo)準(zhǔn)是一個完全不同的老頑固,是出于各種原因為不同群體開發(fā)的不同平臺。最初的Arduino開發(fā)板僅提供簡單微控制器引腳,然后增加足夠的支持器件,從而使編程變得簡單,并且愛好者仍然可承受。由于其簡單性,原始引腳排列按照微控制器的性能定義。 隨著平臺發(fā)展到支持功能更多的處理器,該偽標(biāo)準(zhǔn)逐漸碎片化,具有各種引腳復(fù)用組合,可以說是例外多于規(guī)則。有些問題,例如支持不同的I/O電壓以及I2C信號的不一致性,在第3版的UNO板中得到了解決。然而,在將擴(kuò)展板與Arduino開發(fā)板(或任何Arduino衍生產(chǎn)品)配對使用時,必須仔細(xì)檢查兼容性。并且可供選擇的Arduino衍生產(chǎn)品很多(圖2),即使僅限于Arduino網(wǎng)站提供的官方開發(fā)板,引腳兼容性也并不簡單。但是,一般而言,每個具有特殊功能的Arduino引腳也可用作通用I/O (即GPIO)。 ![]() 圖2 .Arduino開發(fā)板配置為多種衍生產(chǎn)品,以支持不同的設(shè)計和應(yīng)用。 與Pmod接口中一個引腳可用作多種特殊功能不同,大多數(shù)Arduino引腳通常執(zhí)行單一的特殊功能。從根源上講,Arduino偽規(guī)范比Pmod接口更適合于微控制器。所以,這就是Arduino規(guī)格的微控制器板比Pmod連接器的微控制器板更容易找到的原因。 Pmod與Arduino接口之間的映射 我們可以采用Pmod接口和Arduino偽標(biāo)準(zhǔn),兩者各有眾多來源可供使用。是否能夠使某個平臺的外設(shè)與另一平臺的控制器進(jìn)行通信呢?當(dāng)然,一切皆有可能,但有時候治療比疾病本身更糟糕。 如果將Arduino UNO第3版引腳排列與Pmod規(guī)范進(jìn)行比較,您馬上會發(fā)現(xiàn)Arduino板上有22個信號引腳,而Pmod連接器上只有8個引腳。從技術(shù)上講,有可能將全部22個引腳串行化,使其通過Pmod提供的8個引腳,然后在另一側(cè)對其進(jìn)行解串,但我們將這一工作留給讀者。將22個Arduino信號自適應(yīng)映射到Pmod規(guī)范定義的不同類型(見圖1),是可以做到的,但仍不輕松。以上圖1所示為5種不同類型的Pmod接口。許多信號采用電平觸發(fā),可由軟件通過GPIO引腳控制。然而,有些信號采用時間觸發(fā)協(xié)議,利用微控制器內(nèi)部的外設(shè)更容易控制。所以,困難在于將微控制器的所有專用引腳映射到Pmod規(guī)范定義的引腳。 建議方案:使用串行控制交叉點開關(guān) 解決映射問題的一種途徑是在電路板上安裝配置跳線陣列。這種方法盡管很簡單明了,但既不美觀也不人性化。適合Arduino板尺寸的說明文字字體會非常模糊難辨。許多引腳可能是雙向的,所以簡單的邏輯門不是信號連接的好選擇。模擬開關(guān)能起作用,但沒有足夠的附加引腳來對其進(jìn)行獨立控制。利用I2C端口擴(kuò)展器,可解決引腳短缺的問題。誠然,這種方法不比跳線更巧妙,但可通過軟件配置。 如果沒有串行控制16:2多路復(fù)用器,MAX14661,這種方法似乎毫無希望。咋一看,支持所有不同類型的Pmod好像需要四片器件,那么這種方法很難說比端口擴(kuò)展器方案好多少。實際情況真的會是這樣,除非...MAX14661具有特殊功能。該器件允許同時激活任意開關(guān)組合,所以可用作8:8交叉點開關(guān)。 至此為止,一切順利。但是,不可否認(rèn),8:8交叉點配置有一個局限性:同時只能傳輸兩路獨立信號,每個COM引腳一路。但同時兩路信號有什么好處?如上所述,大多數(shù)信號可由GPIO驅(qū)動,只有少數(shù)信號要求內(nèi)部外設(shè)控制器。如果每個引腳分配一路GPIO,只有時間觸發(fā)的串行線路需要通過復(fù)用器連接。UART和I2C為2線總線,所以不適合通過復(fù)用器的唯一串行總線是SPI。SPI只有一種接口定義,所以將SPI信號直接連接至連接器,作為這些接口的GPIO連接。當(dāng)其中某個引腳需要用作時間觸發(fā)功能時,只需將GPIO置于三態(tài)。 信號電平怎么樣呢?最初的Arduino設(shè)計及許多后來者使用5V信號電平,但現(xiàn)在5V信號沒有以前那么常見。為解決這一問題,后來的Arduino版增加了IOREF引腳,以表示基于較低電壓微控制器的衍生品。Pmod連接器沒有IOREF引腳,但其絕大多數(shù)模塊支持3.3V信號。幸運的是,MAX14611等雙向電平轉(zhuǎn)化器解決了這一問題。只需將Arduino信號連接至由IOREF供電的電平轉(zhuǎn)換器的一側(cè)。然后將另一側(cè)連接至由Arduino板上專用3.3V電平供電的Pmod連接器。MAX14661多路復(fù)用器采用1.8V至5V的電源供電時可承受及傳輸-5V至+5V的任何信號,所以可安裝在電平轉(zhuǎn)換器的任何一側(cè)。由于至多路復(fù)用器的Arduino連接多于Pmod連接,所以將MAX14611安裝在電平轉(zhuǎn)換器的Arduino很有意義。按照這種方式,Pmod連接器處只需要兩片4通道器件(圖3)。 ![]() 圖3. 建議方案的邏輯圖。 方案評估 該方案的關(guān)鍵是每個通道支持同時多個連接。COM引腳不連接,但在復(fù)用器內(nèi)部用于選擇連接。MAX14661的16個復(fù)用連接中的8個專用于Pmod連接器,也連接至4路支持SPI的信號和4路其它GPIO(圖3)。其它8個復(fù)用連接綁定至2線串行總線和其它時間關(guān)鍵信號,例如PWM或定時器引腳。例如,為實施I2C類型,只需配置復(fù)用器,在通道A上使能SDA引腳和Pmod引腳4,在通道B上使能SCL和Pmod引腳3。通道A和B是任意選擇的,可隨意交換。實際上,甚至可以使能Pmod連接器上第二排的引腳3和4,以訪問另外的6引腳I2C Pmod。如果I2C器件的地址不同,甚至可使兩個端口保持工作狀態(tài),或者動態(tài)激活,以支持相同地址的兩個器件。使用跳線方法,根本不可能在兩個具有相同地址的器件之間進(jìn)行動態(tài)切換。使用MAX14661,能夠以編程方式配置所有指定的Pmod類型,甚至非標(biāo)準(zhǔn)類型,而只需單片尺寸僅為4mm X 4mm的有源器件。 為什么有人設(shè)計非標(biāo)準(zhǔn)Pmod?原因之一是與微控制器相同的引腳復(fù)用問題。例如,MAX14661支持I2C和SPI控制,取決于配置引腳的狀態(tài)。MAX14661的外設(shè)模塊的引腳排列與SPI Pmod類型相匹配,但時鐘和數(shù)據(jù)引腳與Digilent Pmod規(guī)范規(guī)定的I2C引腳不匹配。適配卡上的MAX14661可將SDA和SCL信號映射到任意Pmod引腳,可用于支持非標(biāo)準(zhǔn)MAX14661外設(shè)模塊、I2C引腳映射。MAX14661也有兩個地址引腳,以支持4個不同的I2C器件地址。因此,可將系統(tǒng)設(shè)計為支持同一總線上的多個器件。 使用MAX14661復(fù)用I2C總線時,在帶內(nèi)發(fā)送命令。切換將與I2C總線同步生效。當(dāng)然,在帶外復(fù)用I2C總線具有挑戰(zhàn)性,因為如果不小心,會在從機將SDA線拉低時斷開;下次選擇該總線分支時,分支可能鎖死。MAX14661始終在I2C寫命令結(jié)束時轉(zhuǎn)換總線,此時開關(guān)另一側(cè)的器件應(yīng)為空閑。 結(jié)論 據(jù)考證,沒有證據(jù)表明Pmod規(guī)范或Arduino偽標(biāo)準(zhǔn)源自于馬屁股。然而,導(dǎo)致其產(chǎn)生的遺留問題和因素卻深深根植于其DNA。盡管兩種標(biāo)準(zhǔn)之間的分歧看起來不可調(diào)和,但MAX14661支持我們將Arduino-Pmod轉(zhuǎn)換變?yōu)楝F(xiàn)實。 |