面向嵌入式系統(tǒng)的I2C總線設(shè)計(jì)和測試
I2C是一種中低數(shù)據(jù)速率主/從通信總線。物理層是一種簡單的信號(hào)交換協(xié)議,該協(xié)議基于總線設(shè)備以及用于驅(qū)動(dòng)或釋放總線線路設(shè)備之上的集電極開路輸出。簡單的硬件設(shè)計(jì)和較低的數(shù)據(jù)速率使得所有的工程師都能利用I2C作為一種通信解決方案。由于大多數(shù)微控制器供應(yīng)商在其大部分器件上均提供了I2C主控器和從動(dòng)器功能,因此嵌入式產(chǎn)品設(shè)計(jì)師在利用I2C時(shí)不會(huì)遇到任何障礙。
本文引用地址:http://butianyuan.cn/article/21233.htm測試策略源于設(shè)計(jì)策略
平穩(wěn)順利的設(shè)計(jì)需要采取有計(jì)劃的校驗(yàn)策略。當(dāng)采用主/從通信系統(tǒng)時(shí),這兩部分均需進(jìn)行校驗(yàn)。把校驗(yàn)推遲到主控器和從動(dòng)器通信操作完成之后進(jìn)行是錯(cuò)誤的策略。下文所述是一種旨在盡可能獨(dú)立地對(duì)主控器和從動(dòng)器進(jìn)行有效測試的策略。 在實(shí)現(xiàn)成功設(shè)計(jì)的規(guī)則和指導(dǎo)方針中,以下四點(diǎn)支持有效校驗(yàn):
1)明確定義的接口
2)主控器初始化所有的轉(zhuǎn)換,并支持從動(dòng)器的“緊急”調(diào)用
3)使從動(dòng)器的通信協(xié)議與主功能保持獨(dú)立
4)從動(dòng)器始終保持?jǐn)?shù)據(jù)相關(guān)性。
雖然設(shè)計(jì)階段中的每項(xiàng)工作都對(duì)校驗(yàn)產(chǎn)生影響,但以上事項(xiàng)是支持測試策略的特殊考慮。該策略可被概括為:
分別測試主控器和從動(dòng)器
通過采用盡可能“真實(shí)”的環(huán)境來提高測試覆蓋率
把從動(dòng)器和主控器放在一起,以實(shí)現(xiàn)早期和經(jīng)常性的集成
分別測試主控器和從動(dòng)器 主控器和從動(dòng)器被設(shè)計(jì)成分離、非耦合式的,而且設(shè)計(jì)過程專注于開發(fā)與設(shè)計(jì)細(xì)節(jié)沒有關(guān)聯(lián)的接口。不管是在物理結(jié)構(gòu)上還是在時(shí)間順序上,主控器和從動(dòng)器的這種分離設(shè)計(jì)都支持對(duì)每個(gè)部分進(jìn)行單獨(dú)測試。但為了成功地測試主控器并獲得可以信賴的結(jié)果,在早期必須存在某種形式的從動(dòng)器,即測試從動(dòng)器。這種測試從動(dòng)器應(yīng)該是一種設(shè)計(jì)外殼程序,用于提供商定的接口和一些額外的測試連接程序(如一個(gè)環(huán)回或一個(gè)包含稍有改動(dòng)的數(shù)據(jù)的附加寄存器)。
“外殼程序(shell)”從動(dòng)器使得主控器能夠?qū)崿F(xiàn)并測試其接口。適合這種“外殼程序”或測試從動(dòng)器的最佳平臺(tái)是將被用于從動(dòng)器開發(fā)的微控制器。事實(shí)上,如果采用相同的設(shè)備來測試最終將被用于開發(fā)末級(jí)從動(dòng)器的主控器,則該“外殼程序”將提供用于從動(dòng)器接口的測試平臺(tái)(從動(dòng)器的第一級(jí)開發(fā))。
為了使從動(dòng)器的測試側(cè)成為一個(gè)單獨(dú)項(xiàng),需要比實(shí)際主控器所能提供的更多主控器功能。最后需要做的就是為實(shí)際主控器開發(fā)更多的功能,為測試提供支持。測試主控器應(yīng)是一個(gè)通用主控器,而且,采用一種基于PC并通過PC-I2C總線橋接器件與從動(dòng)器進(jìn)行通信的應(yīng)用程序,將有利于大多數(shù)計(jì)劃的實(shí)施。
采用“真實(shí)”環(huán)境提高測試覆蓋率
最后是完成主控器和從動(dòng)器的單獨(dú)測試,并了解它們何時(shí)被放在一起,旨在實(shí)現(xiàn)最終集成。在最終集成中,主控器和從動(dòng)器均未得到“實(shí)際”測驗(yàn)。如果在一個(gè)與最終結(jié)果不相似的環(huán)境中對(duì)它們進(jìn)行測試,則至少需要重復(fù)某種冗余的測試。事實(shí)上,如果測試環(huán)境與實(shí)際環(huán)境不嚴(yán)格近似,則得出的將是一個(gè)令人驚訝的糟糕結(jié)果。
為避免浪費(fèi)精力,應(yīng)先了解測試和設(shè)計(jì)的相關(guān)知識(shí)。而且,測試將首先要求接口必須穩(wěn)固(形式固定)且不變。如果定義精確并得到了嚴(yán)格遵守,則接口將確定“實(shí)際”環(huán)境,并規(guī)定測試環(huán)境的設(shè)計(jì)。某些信令和定時(shí)特性只在最終集成時(shí)才呈現(xiàn)出來,不過,當(dāng)主控器和從動(dòng)器測試均采用接口驅(qū)動(dòng)型測試環(huán)境時(shí),則大多數(shù)功能測試都能反映出最終結(jié)果的特征。在小概率(不受歡迎的、需要避免的、可預(yù)防的)事件(接口發(fā)生變化)中,必須立即聯(lián)系到測試環(huán)境。 提早并經(jīng)常性地集成從動(dòng)器和主控器
單獨(dú)測試的主控器和從動(dòng)器只在集成和同時(shí)測試時(shí)才是完整的。如上文所述,某些特性將僅在集成過程中才表現(xiàn)出來。項(xiàng)目截止期限之前的一周(或前夜)并不是第一次遇到這種情況。接口驅(qū)動(dòng)、單獨(dú)測試型策略還支持早期集成,不是作為覆蓋率良好的單獨(dú)測試的替代方案,而是作為一種保險(xiǎn)方案(對(duì)接口和器件特性有充分的了解)。為了支持集成,主控器和從動(dòng)器均必須位于彼此都接受的完成點(diǎn)上,設(shè)計(jì)計(jì)劃必須包括這些集成階段。
這里給出了部分需要制定早期集成計(jì)劃的階段或測試場合,并說明需要對(duì)其加以注意的原因:
1)基本的總線電氣兼容性:雖然I2C具有簡單的特性,但這并不能排除諸如上拉電阻器阻值的選擇以及即將共用I2C總線的其他設(shè)備的總線定時(shí)特性等基本問題。重要的是在實(shí)際的總線上進(jìn)行基本的通信操作(并將所有的實(shí)際設(shè)備與總線相連)。
2)功能定時(shí):主控器需要具有針對(duì)從動(dòng)器中的響應(yīng)或定時(shí)的容限,這是一個(gè)現(xiàn)實(shí)問題,而且,很難以書面的形式來明確地給出應(yīng)具有怎樣的容限。
3)緊急情況:制定從動(dòng)器對(duì)主控器的緊急調(diào)用或中斷計(jì)劃并測試它們的發(fā)生方式和響應(yīng)有可能導(dǎo)致從動(dòng)器中的功能變化。
I2C主控器
I2C主控器通常是一種用于系統(tǒng)中的許多其他功能的控制裝置,并具有針對(duì)增加要求或做出變更的最低靈活性,主控器負(fù)責(zé)控制接口。在定義階段,主控器和從動(dòng)器均具有輸入,但是,當(dāng)需要做出詳細(xì)決定時(shí),主控器可以強(qiáng)制一個(gè)接口決定,因?yàn)椴捎靡环N方法對(duì)主控器來說比較簡單。使主控器的決策變得較為簡單將給從動(dòng)器帶來額外的好處。主控器將(而且應(yīng)該)阻礙對(duì)接口的變更,所以從動(dòng)器設(shè)計(jì)師必須及早實(shí)施自己的設(shè)計(jì)并接受接口的變更。
另外,雖然對(duì)接口的變更只應(yīng)由主控器來執(zhí)行(或在主控器同意的情況下進(jìn)行),但是,測試所產(chǎn)生的影響(尤其是對(duì)專為測試而構(gòu)筑的“環(huán)境”的影響)也是必須考慮的。設(shè)計(jì)之初專注于接口,獲得主控器、從動(dòng)器和測試小組的同意,了解測試影響以及特定接口決定帶來的好處,然后不要做任何變更。讓新的功能逐步融入到從動(dòng)器可實(shí)現(xiàn)方案的細(xì)節(jié)(而不是接口)。
設(shè)計(jì)一個(gè)代理從動(dòng)器來支持主控器測試,如果這可以通過開發(fā)從動(dòng)器來實(shí)現(xiàn),效果更好。該代理從動(dòng)器可能與末級(jí)從動(dòng)器并不相似,因?yàn)樗闹饕饔檬侵С纸涌跍y試和校驗(yàn);對(duì)于從動(dòng)器來說,這意味著代理/測試從動(dòng)器中將擁有額外的、非生產(chǎn)性功能。額外功能可能僅用于測試目的的附加寄存器和/或用于指示功能或確認(rèn)命令的特殊I/O動(dòng)作。把這些功能置于具有條件編輯能力的末級(jí)從動(dòng)器中或許有助于在日后發(fā)生變更的情況下支持回歸測試。
最后,應(yīng)提早并經(jīng)常性地集成主控器和實(shí)際從動(dòng)器(在一個(gè)規(guī)定的開發(fā)級(jí)上),以了解不可避免的“未規(guī)定”特性。實(shí)際設(shè)備在實(shí)際I2C上彼此相遇得越早,就能越早地了解并適應(yīng)其特性。
I2C從動(dòng)器
設(shè)計(jì)活動(dòng)的中心是從動(dòng)器,而且它將耗費(fèi)設(shè)計(jì)師大部分的精力(除非能夠重復(fù)使用另一個(gè)項(xiàng)目的從動(dòng)器設(shè)計(jì))。測試工作的重點(diǎn)也放在從動(dòng)器上,而且,從動(dòng)器需要按照主控器及其測試的要求來實(shí)現(xiàn)。從動(dòng)器很可能需要針對(duì)集成期間所了解到的信息做適應(yīng)性調(diào)整,于是,這種情況出現(xiàn)得越早、測試的“真實(shí)性”越強(qiáng),效果就越好。使主控器小組確認(rèn):集成點(diǎn)越多越好;它將對(duì)項(xiàng)目的實(shí)施提供幫助,并直接令從動(dòng)器開發(fā)受益。
對(duì)大多數(shù)測試而言,一個(gè)I2C主控器測試設(shè)備(而不是實(shí)際主控器)將負(fù)責(zé)控制從動(dòng)器。獲得從動(dòng)器完整測試覆蓋率所需的靈活性將不太可能存在于實(shí)際主控器中,而在大部分時(shí)間里實(shí)際主控器將擔(dān)負(fù)其他任務(wù)(配置其他器件、定時(shí)要求、以最終用戶為中心的接口)。采用I2C的好處是主控器測試設(shè)備并不復(fù)雜,而且可行性好。設(shè)計(jì)小組的每一位成員都需要一個(gè)測試主控器,但它們不必是昂貴或精細(xì)復(fù)雜的主控器。
對(duì)于I2C測試主控器,根據(jù)應(yīng)用場合的不同,共有三種獲得途徑:
1)購買一款商用I2C主控器:這些主控器通常附隨一些測試軟件,售價(jià)從100美元到500美元以上不等。如果選擇了一款,則應(yīng)確定它支持腳本編程和記錄,因?yàn)樵谀承c(diǎn)上正式測試對(duì)此有所需求。
2)采用一種免費(fèi)軟件應(yīng)用程序和自行安裝硬件:許多此類產(chǎn)品都可以通過互聯(lián)網(wǎng)搜索的方法找到。雖然這會(huì)使工作量略有增加,但成本較低。而且,由于用于PC的參考應(yīng)用程序是開放式源代碼,因此可對(duì)其進(jìn)行修改以滿足要求。
3)采用一個(gè)微控制器(或主控器MCU)設(shè)計(jì)主控器:明顯的好處是目前的測試主控器在特性上更加接近于實(shí)際主控器,而且已經(jīng)獲得了用于對(duì)其進(jìn)行更新和擴(kuò)展的專業(yè)知識(shí)。可以把回歸測試設(shè)計(jì)在測試主控器中,而不是依靠PC應(yīng)用程序來完成。
結(jié)論
I2C總線通信是許多嵌入式設(shè)計(jì)的普遍現(xiàn)象。每種嵌入式設(shè)計(jì)都能夠從把部分功能交由從動(dòng)器來完成的做法當(dāng)中獲益,這既是出于效率的考慮,也是為了讓許多項(xiàng)目能夠重復(fù)使用經(jīng)過精確測試的功能部件。如能遵循以下擬訂的設(shè)計(jì)和測試策略,則定制從動(dòng)器項(xiàng)目應(yīng)能夠比較順利地繼續(xù)下去:在從動(dòng)器和主控器之間進(jìn)行功能劃分、采用功能強(qiáng)大的不變接口、獨(dú)立地對(duì)主控器和從動(dòng)器進(jìn)行盡可能多的測試、在設(shè)計(jì)過程中對(duì)主控器和從動(dòng)器進(jìn)行早期和經(jīng)常性的集成。 采用微控制器實(shí)現(xiàn)的定制I2C從動(dòng)器設(shè)備令設(shè)計(jì)師能夠重復(fù)使用一系列產(chǎn)品設(shè)計(jì)重復(fù)部分的即插即用功能。如果遵照用于設(shè)計(jì)和測試的規(guī)則和指導(dǎo)方針,則能夠成功地在產(chǎn)品中充分利用I2C,并把更多的時(shí)間集中在市場期待的下一個(gè)出色功能上,并滿足設(shè)計(jì)進(jìn)度要求。
評(píng)論