天天看點

《 嵌入式系統設計與實踐》一一3.2 閱讀資料表

3.2 閱讀資料表

面對着産品釋出的壓力,很難讓開發速度慢下來以便有足夠的時間去閱讀元件的資料表、手冊和應用說明。更糟糕的是,可能看起來都讀過了(因為翻閱了所有的資料頁)但是什麼都沒弄明白,隻記得好像是用外語寫的。當代碼運作不起來時,可能就隻能抱怨硬體壞了。

對于軟體工程師來說,可以将每個晶片看成獨立的軟體庫。花了多少努力去學習一個軟體包(qt、gtk、boost、stl等),就需要花同樣多的努力去學習這些晶片和外設。它們甚至都有些方法,能夠讓我們像使用api一樣與它們交流。對于軟體庫中衆多的文檔,我們常常讀了其某些部分之後就将其束之高閣了,但是最好能在難纏的問題出現之前就知道哪些部分的文檔是最重要的。

資料表是外設的應用程式程式設計接口(api)手冊。是以在詳細揭示資料手冊的秘密之前,請確定手中的資料表版本是最新的(檢查制造商的網站并線上搜尋以再次确認)。這些秘密包括一些竅門,如哪些應該讀兩次,哪些應該在需要的時候再去讀。

警告: 不幸的是,很多制造商隻有在簽訂了保密協定(nda)的情況下才會釋出資料表。是以他們的網站隻是對其産品的一個概述或者總結。

硬體元件的資訊在資料表中描述。因為資料表充斥了大量資訊,是以看起來有點吓人。閱讀資料表是一門藝術,需要經驗和耐心。關于資料表,首先應該明白的就是它們通常不是真正寫給軟體工程師看的。它們是寫給電氣工程師看的,更精确地說,是給早已熟悉這個元件及其相關元件的電氣工程師看的。

在某些方面,閱讀資料表的過程就好像是中途加入一場技術對話。看一看圖3-2,這像是個真正的資料表,即使它不是軟體真正要打交道的一個元件。每個資料表靠近最上面的地方是特征清單的一個概述。這是關于這個晶片的一個總結,但是如果沒有用過85%與此相同的元件,那麼這個總結部分對我們可能就沒有多大用處。另一方面,如果曾經用過三四個模拟三角龍(或者加速器及任何類似東西),那麼隻需要看一看這個器件的概述部分,就可以知道這個器件與之前的使用經驗有哪些相同和不同的地方。如果資料表花時間去解釋每個新手都想要了解到的資訊,那麼每個資料表都将成為一本書(絕大多數都會有相同的資訊)。事實上,新手不會大量采購這個器件,隻有那些有經驗的并熟悉這個器件的工程師才會大量購買。

《 嵌入式系統設計與實踐》一一3.2 閱讀資料表

圖3-2:dino industries的模拟三角龍資料表的頂部

是以,我認為直接跳過頭部的概述性資訊(或者至少應該過一會兒再來看這部分)。

我比較喜歡通常出現在第一頁的功能框圖,但是它們和概述部分很像。如果不知道應該看什麼,那麼功能框圖也可能沒什麼作用。是以可以從描述部分開始。這部分通常會占據第一頁一半内容,有時候也會在第二頁延續出一小部分。

在描述部分,不應該僅僅讀了幾個單詞之後就匆匆跳到下一個段落。雖然沒有一頁那麼長,但是文字資訊相當密集。通讀這個部分。在大聲讀的時候要标記出重要的資訊(可能是其中的大部分資訊)。

3.2.1 遇到問題時需要查找的資料表部分

在第一頁之後的資訊,每個資料表都會不一樣。而且,不是所有的資料表都包括所有的章節。即使如此,也不用仔細閱讀那些對軟體如何使用外設沒有任何幫助的部分。為了節省時間和心力,可以跳過絕對最大額定值、推薦工作條件、電氣特性、包裝資訊、布局,以及機械特性等部分。

硬體團隊早已閱讀資料表的這些資訊,相信他們可以做得不錯。某一天,當我們不再面臨完成産品設計的壓力時,再回頭看看這些部分還是值得的。

雖然你跳過了這些部分,但請記住它們的存在。這些是在出錯的時候需要的,比如在拿出一台示波器并試圖找出為什麼這個器件不工作的時候,或者(更糟糕)這個器件看起來是工作的,但是和期望的不一樣的時候。請注意,這些内容是存在的,是以可以在需要的時候再回過來看看。在開始的時候忽略它們是沒有問題的:

每個可用的封裝類型的引腳輸出

如果需要在調試的時候探測晶片,那麼就需要知道引腳的輸出。理想情況下,這個并不重要,因為在軟體可以正常工作時,沒有必要探測晶片。

引腳配置展示了一些名字,在名字上面是橫條(如圖3-3所示)。橫條表示這些引腳是低電平有效,意思是它們在低電壓時導通。在引腳描述中,低電平有效的引腳名前面都有一個斜線。你也可以看到其他表示低電平有效信号的方法。如果大部分引腳都有一個名字,那麼可以采用修飾符将名字表達成諸如nname、_name、name*、name_n等的格式。基本上,如果在名字旁邊有修飾符,那麼就得看看它是不是低電平有效的,這需要在引腳描述部分特别注意。

注意: 如果以前從來沒有接觸過這些東西,那麼考慮從一本電子學入門指南入手,如可以從“延伸閱讀”部分列出的書挑出一本來閱讀。

引腳描述

這是一個如圖3-4所示的表格。在需要這些資訊的時候就回過來看看,可能在需要看看哪些引腳應該是低電平的時候,或者正在試着确認用示波器顯示出來的波形和資料表上的時序圖是否一樣的時候。

性能特性

這些表格和圖形準确地描述了這個器件是幹什麼的,提供了相對于第一次閱讀來說更多的資訊。但是,如果器件正在通信卻不能正常工作,性能特性就可以幫助我們找出可能的原因(比如,器件應該工作在0~70癈,但它剛好靠近非常熱的處理器,或者在輸入電壓正常時外設可以工作,但當輸入電壓略微超出指定範圍時,精度會有所下降)。

示例原理圖

有時候拿到驅動程式代碼,這些代碼可以像我們所期望的那樣工作,如果最終可能有些修改,但不需要對驅動程式做太多的修改。示例原理圖是電氣工程版的驅動程式代碼。在器件工作不正常時,如果原理圖和示例原理圖相當相似,那麼是一件很讓人欣慰的事情。但是,正如供應商提供的驅動程式代碼一樣,有太多不錯的理由會導緻實際的實作與示例實作不一緻。如果碰到麻煩,并且原理圖與示例不一緻,那麼請教電氣工程師差别在什麼地方。可能什麼差别都沒有,但是這樣做卻是非常重要的。

《 嵌入式系統設計與實踐》一一3.2 閱讀資料表

3.2.2 對軟體開發者比較重要的内容

最後,也許在資料表一半的地方,會看見一些文字(如圖3-5所示)。标題可能是“應用資訊”或者“工作原理”。或者資料表從表格、圖形轉換為文字和框圖。這是作為一個軟體工程師,需要開始閱讀的地方。事先浏覽一下以找到需要的資訊在哪裡,這樣做是沒有問題的,但是最終需要從頭到尾地仔細閱讀這些内容。一個額外的好處就是,這裡的文字會連結到應用說明和使用者手冊。通讀資料表,考慮如何為系統實作驅動程式。怎麼和這個器件通信?怎麼初始化它?軟體需要怎麼做才能高效地使用它?是不是有些嚴格的時序要求,處理器如何處理這些要求?

在通讀資料表的時候,對那些可能對實作代碼有影響的部分要做好标記,以便可以很快地找到。時序圖是個不錯的地方停下來,歇口氣(見圖3-6)。試着将這些和文字以及要實作的東西聯系起來。在“時序圖如何幫助軟體開發者”中有關于時序圖更多的資訊。

工作原理

在正常模式下,三角龍有一個移相輸出,相反的信号會被同步(ft1和hnd2、ft2和hnd2)。每個信号會在大約1/4周期内保持高電平。

在充電模式(horn引腳被拉低)下,所有的輸出引腳都被同步。在三角龍充電的過程中,在基态下,它會在手和腳上花較少的時間:每個信号在每個1/4周期裡都保持低電平。它還有較高的循環速率,這個速率遞增得越來越快,直到達到最大充電速度。這個輸出狀态會一直保持到充電結束(horn引腳被拉高)或者到三角龍遇到意外的阻抗(崩潰)而導緻重新開機引導模式。雖然不是必需的,但是horn引腳通常會在系統崩潰之後被拉高,以避免器件過熱。

圖3-5:模拟三角龍的工作原理

除了要確定有關于元器件最新的資料表外,我們還需要檢查制造商的網站以得到勘誤表,它提供了關于資料表上的所有錯誤的更正資訊。用零件号和單詞“勘誤表”在網頁上搜尋就可以得到結果(見圖3-7)。勘誤表可以指出資料表或零件中的錯誤。

注意: 資料表可能有不同的修訂版本,元器件也有不同的版本。要拿到與使用的器件版本号相對應的最新版本的資料表。

當讀完所有這些資訊後,如果足夠在行或者足夠幸運,那麼你就已經掌握了使用這個晶片的所有資訊。通常,大多數人将開始為這個晶片寫驅動程式,并在寫晶片接口的時候花一定的時間去重讀一部分内容,然後是通信方法,最後實際使用這個晶片。閱讀資料表就像一場龜兔賽跑,烏龜肯定會赢野兔。

《 嵌入式系統設計與實踐》一一3.2 閱讀資料表

圖3-6:模拟三角龍的時序圖

《 嵌入式系統設計與實踐》一一3.2 閱讀資料表

圖3-7:模拟三角龍的勘誤表

在完成了所有的驅動程式開發,并且這些驅動程式能正常工作之後,再通讀資料表頂部的特征總結部分,因為這個時候我們已經了解了這類器件,能夠很好地了解這個總結。雖然如此,當需要實作類似的設計時,可能還需要讀一讀資料表的某些部分,但是這個過程應該簡單多了。此時,可以從資料表标題頁的總結部分獲得對這個器件更好的概述。

在使用外部裝置的時候,可以使用其他一些資源:

如果晶片有使用者手冊,請務必要了解一下。

應用說明部分常常有些特定的使用案例,這些案例可能是有用的。

來自于現有使用者的論壇和例子。

在深入問題之前,先到處看一看,也許在某些地方可以找到一些疑難問題的答案。

時序圖如何幫助軟體開發者

時序圖揭示了轉換之間的關系。有些轉換在相同的信号上,有些轉換可能在不同的信号上。例如,如圖3-6頂部所示,在正常模式下,手(hnd1和hnd2)的交替狀态,一隻手會在另一隻手放下後立即舉起來。在研究時序圖的時候,從信号名的左邊開始。時間從左往右前進。

大多數時序圖集中于對數字狀态的描述,說明某個信号什麼時候變為高電平,什麼時候變為低電平(記住,檢查引腳名是否有修飾符,這标志着低電平有效)。有些圖中包括了一個斜坡(比如圖3-6引導順序圖中的手和腳的信号),這個斜坡說明了信号正處于轉換狀态。還可以看到一些信号既是高電平又是低電平(如圖3-6引導順序圖中的角信号),這表示這個信号處于一個不确定狀态(對于輸出來說)或者處于沒有被監控狀态(對于輸入來說)。

有些重要的時間特性用帶有箭頭的線突出顯示。這些特性通常會在表格中詳細規定。同時,也應該看看表示信号順序(一般用虛線表示)和因果關系(一般為從一個信号指向另一個信号的箭頭)的标記。最後,圖中的腳注部分經常也包含了極其重要的資訊。

3.2.3 用資料表評估元器件

在本節中讨論評估一個實作後的元器件,可能看起來有些奇怪。在項目中,通常不需要這麼做。然而,在工程開發周期中卻需要這麼做。一般說來,在選取系統元器件之前,你必須首先從别人設計的系統中去學習如何實作一些部件。是以,與閱讀資料表相比,評估元器件是一個進階技能,電氣工程師要先于軟體工程師掌握這個技能。

在評估元器件的時候,目标應該是盡可能快地剔除那些不能用的器件。例如,某個器件需要120v的交流電,而系統卻隻有5v的直流電,那麼就沒有必要把寶貴的時間浪費在準确地定義如何基于該器件去實作特征x。從一個必須具備的清單和一個期望的清單開始,在此基礎上,就可以生成一個備選的元器件池,再對其做進一步的調查評估。

在沒有更深入地進行這個調查評估之前,我們先來看看資料表上沒有提到的東西。資料表通常不包含價格資訊,因為價格依賴于多重因素,特别是計劃訂購量。資料表也不會說明交貨期(是以,請小心設計完美器件,它可能要在等待6個月之後才可用)。除非線上訂購,否則我們就必須和供應商或者經銷商進行溝通。

這也是一個向他們詢問是否有該器件的使用指南、初始化代碼、應用說明、白皮書、論壇,或者任何可以讓我們深入了解問題的好機會。供應商也意識到這些都可能是賣點,他們的應用工程師一般都樂意提供幫助。經銷商也會幫助我們對不同的方案進行比較和對比。

再回到資料表,這一次那些被跳過的部分成為最重要的部分了。從最大額定值和電氣特性開始(見圖3-8)。如果它們與期望的标準不比對,那麼把資料表丢在一邊。現在的目标是快速地浏覽這些資料表。如果一個器件不能滿足最基本的要求,記下哪些沒有滿足,然後繼續往下看(保持記筆記是有用的,否則最終會重複地拒絕同一份資料表)。也可以對資料表按照超出标準的範圍進行排序。如果最後發現沒有任何資料表可以滿足我們的标準,那麼可以再去檢查最接近的那個,看看是不是可以用它。

《 嵌入式系統設計與實踐》一一3.2 閱讀資料表

圖3-8:模拟三角龍最大額定值

當基本電氣特性和機械要求滿足後,下一步就是考慮典型特性,以決定這個器件是否是所需要的。在規格要求上,我幫不了什麼忙,因為這些依賴于具體的系統需求和具體的元器件。這裡有一些通用的關于功能參數的問題:器件是否足夠快?輸出是滿足還是超出具體的系統要求?對于一個傳感器或者模數轉換器,噪聲是不是可以接受的?

當有一個或者兩個資料表通過首輪篩選之後,就可以對它們進一步深入研究。如果有一個應用章節,那就是個不錯的出發點。這些應用是不是和我們的系統比較接近?如果是,那麼就繼續;如果不是,那麼就要稍微有點擔心了。将一個外部器件第一次使用在特定的場合可能是可以的,但是,如果這個器件是特定地用于水下傳感器網絡的,而現在想把它用在超級智能烤面包機上,我們可能就會感到很奇怪,為什麼把該應用定義得如此狹窄。更嚴重的是,總有個理由可以解釋為什麼建議的應用不能覆寫所有的使用情形。比如,特定用于汽車上的晶片,在數量較少時,可能沒有辦法擷取。資料表的目的是為了将産品賣給那些使用類似器件的人,是以給出的使用範圍比較有限是有理由的。

下一步,看看性能特征并決定它們是否滿足要求。通常,在這部分會發現新的需求,比如,意識到系統需要在a部分有溫度響應,在b部分有供電電壓響應,在c部分需要有噪聲阻抗等。将所有的這些需求整理為标準并将那些不滿足要求的去掉(同樣需要對标準進行排序,以免将自己陷入困境)。

此時,應該至少有兩個但不超過四個資料表。如果有多于四個資料表,那麼了解一下看看是不是某個供應商在你的采購部門有比較好的信譽、比較短的供貨周期,或者比較優惠的價格。可能還會回來看看那些多出的供應商,但選出其中四個是個不錯的做法。

如果将所有的資料表都剔除了,或者隻剩下一個,那麼不要就此停住。這并不是說所有的東西都是沒有用的(或者隻有一個有用)。而是說,我們定義的标準可能太嚴格了,需要對可選方案進一步研究。是以選擇最好的兩個器件,即使一個或者全部都不滿足所有這些最挑剔的标準。

對于剩下的資料表,我們希望能找出對實作來說最棘手的部分以及看看這個器件是否能很好地應用于系統中。這就是類似器件使用經驗起作用的地方。在讀資料表的時候,就想象如何去實作相應的代碼。事實上,如果你沒有類似的使用經驗,那麼就可能要寫代碼以便将這一切變成現實。如果可以将這些器件和真實的硬體做成原型,那麼非常好!如果不能,我們也可以做個心理原型,在心裡演練一下那些實作步驟并預計會發生什麼。

即使在針對2~4個器件做了以上的事情之後,也可能隻使用其中一個,這也會在最終選擇這個器件後能夠非常快地開始代碼工作。

這樣一個深入分析的過程需要很多時間,但會排除掉器件可能不工作的風險。原型做到何種程度取決于不同的人(和具體的日程計劃)。如果仍然面臨多個選擇,那麼不妨看看這個系列的器件。如果有些東西不夠用(如空間、引腳或者範圍),那麼在同一個系列中是不是有引腳到引腳(pin for pin)相容的其他器件呢(理想情況是相同的軟體接口)?這樣留有一定的餘地會容易很多。

最後,有了標明的器件後,特征總結部分就是一個練習比較文學的地方。既然已經閱讀類似的器件好幾份資料表,資料表的概述部分對我們來說就沒有問題了。如果還有資料表需要評估,那麼就從這裡開始吧。将已經評估完和和待評估的進行對比,就對每個晶片可以做什麼以及不同的參數如何互相作用(例如,速度可能與成本成正比)有一個快速的了解。

繼續閱讀