調(diào)試嵌入式系統(tǒng)設(shè)計中的低速串行總線
工作方式
I2C的物理兩線接口由雙向串行時鐘(SCL)和數(shù)據(jù)(SDA)線組成。I2C支持總線上多個主從設(shè)備,但一次只能激活一個主設(shè)備。任何I2C設(shè)備可以連接到總線上,允許任何主設(shè)備與從設(shè)備交換信息。每臺設(shè)備都使用唯一的地址識別,可以作為發(fā)射機或接收機操作,具體取決于設(shè)備功能。在開始時,I2C只使用7位地址,但隨著時間推移,它演變成也支持10位地址。它支持三種位速率:100 kbps (標準模式), 400 kbps (快速模式)和3.4 Mbps (高速模式)。最大設(shè)備數(shù)量取決于400 pf的最大容量,或大約支持20-30臺設(shè)備。I2C標準規(guī)定了下述格式,如圖4所示:
– Start – 表明設(shè)備控制總線,一條消息將開始傳送
– Address –7位或10位數(shù)字,表示將要讀取或?qū)懭氲脑O(shè)備地址
– R/W Bit – 1位,表明是否將從設(shè)備中讀取數(shù)據(jù)或向設(shè)備寫入數(shù)據(jù)
– Ack – 1位,來自從設(shè)備,確認主設(shè)備的操作。通常每個地址和數(shù)據(jù)字節(jié)有一個確認位,但不總是有確認位
– Data – 從設(shè)備中讀取或?qū)懭朐O(shè)備的字節(jié)的整數(shù)
– Stop – 表明消息結(jié)束,主設(shè)備已經(jīng)釋放總線
處理I2C
通過DPO4EMBD串行觸發(fā)和分析應(yīng)用模塊,DPO4000系列成為處理I2C總線的嵌入式系統(tǒng)設(shè)計人員的強大工具。前面板有兩個總線按鈕(B1和B2),允許用戶把到示波器的輸入定義為一條總線。I2C總線的設(shè)置菜單如圖5所示。
通過簡單地定義時鐘和數(shù)據(jù)位于哪條通道上及用來確定邏輯1和0的門限,示波器可以理解通過總線傳輸?shù)膮f(xié)議。有了這些知識,示波器可以觸發(fā)任何指定的消息級信息,然后把得到的采集數(shù)據(jù)解碼成有意義的、容易理解的結(jié)果。邊沿觸發(fā)已經(jīng)過了好多天了,希望您已經(jīng)采集到感興趣的事件,然后逐條消息手動解碼消息,找到問題。
例如,考慮一下圖6中的嵌入式系統(tǒng)。I2C總線連接到多臺設(shè)備上,包括CPU、EEPROM、風(fēng)扇速度控制器、數(shù)模轉(zhuǎn)換器和大量的溫度傳感器。
這部儀器被退回工程部分析故障,該產(chǎn)品持續(xù)過熱,自動關(guān)機。要檢查的第一件事是風(fēng)扇控制器和風(fēng)扇本身,但似乎一切正常。然后要檢查溫度傳感器是否有問題。風(fēng)扇速度控制器定期輪詢兩個溫度傳感器(位于儀器中不同的區(qū)域),調(diào)節(jié)風(fēng)扇速度,穩(wěn)定內(nèi)部溫度。您懷疑其中一個或兩個溫度傳感器讀數(shù)不正確。為查看傳感器與風(fēng)扇速度控制器之間的交互。我們只需連接到I2C時鐘和數(shù)據(jù)線,在DPO4000上設(shè)置總線。我們知道,兩個傳感器在I2C總線上的地址分別是18和19,因此我們決定設(shè)置觸發(fā)事件,查找地址18上的寫入操作(風(fēng)扇速度控制器輪詢傳感器的當(dāng)前溫度)。觸發(fā)的采集結(jié)果如圖7中的屏幕圖所示。
在這種情況下,通道1 (黃色) 連接到SCLK,通道2 (青色)連接到SDA。紫色波形是我們向示波器中輸入一些簡單的參數(shù)定義的I2C 總線。顯示器的上方部分顯示了整個采集。在這種情況下,我們已經(jīng)捕獲了大量的總線空閑時間,中間是我們放大的突發(fā)活動。顯示屏下方的較大部分是縮放窗口。您可以看出,示波器已經(jīng)解碼了經(jīng)過總線的每條消息的內(nèi)容。DPO4000系列上的總線使用表1中的顏色/標記,表明消息中的重要部分。
看一下采集的波形,我們可以看到,示波器觸發(fā)地址18上的寫入操作(如顯示屏左下方所示)。事實上,風(fēng)扇速度控制器試圖寫入地址18兩次,但在這兩種情況下,在試圖寫入溫度傳感器時它沒有收到確認。然后它檢查地址19上的溫度傳感器,收回希望的信息。因此,為什么第一個溫度傳感器沒有對風(fēng)扇控制器作出響應(yīng)呢?看一下電路板上的實際部件,我們發(fā)現(xiàn)其中一條地址線焊接不當(dāng)。溫度傳感器不能在總線上通信,結(jié)果導(dǎo)致設(shè)備過熱。由于DPO4000系列的 I2C觸發(fā)和總線解碼功能,我們只需幾分鐘時鐘,就成功地隔離了這個潛在的難檢問題。
在圖7所示的實例中,我們觸發(fā)了寫入操作,但DPO4000強大的I2C觸發(fā)還包括許多其它功能。
– Start – 在SDA變低、SCL為高時觸發(fā)。
– Repeated Start – 在沒有上一個停止條件下發(fā)生開始條件時觸發(fā)。這通常是主設(shè)備發(fā)送多條消息、而沒有釋放總線時發(fā)生的情況。
– Stop – SDA為高、SCL為高時觸發(fā)。
– Missing Ack – 從設(shè)備通常配置成在每個地址和數(shù)據(jù)字節(jié)后發(fā)送確認。在從設(shè)備沒有生成確認位的情況下示波器可以觸發(fā)采集。
– Address – 觸發(fā)用戶指定的地址或任何預(yù)先編程的專用地址,包括全呼、開始字節(jié)、HS模式、EEPROM或CBUS。地址可以是7位或10位地址,以二進制或十六進制輸入。
– 數(shù)據(jù) – 觸發(fā)二進制或十六進制輸入的最多12字節(jié)的用戶指定數(shù)據(jù)值
– 地址和數(shù)據(jù) – 可以輸入地址數(shù)據(jù)值及讀寫,捕獲確切的感興趣的事件
這些觸發(fā)可以隔離您感興趣的特定總線業(yè)務(wù),解碼功能則可以即時查看采集中總線上傳輸?shù)拿織l消息的內(nèi)容。
SPI
背景知識
串行外設(shè)接口總線(SPI)最初是摩托羅拉在20世紀80年代末為其68000系列微控制器研制的。由于該總線簡單、流行,許多其它制造商也已經(jīng)采用這一標準。它現(xiàn)在用于嵌入式系統(tǒng)設(shè)計常用的各種器件中。SPI主要用于微控制器和直接外設(shè)之間。它通常用于蜂窩手機移動電話、PDA和其它移動設(shè)備中,在CPU、鍵盤、顯示器和內(nèi)存芯片之間通信。
評論