引言
今天,,嵌入式系統(tǒng)幾乎遍布在人類社會的每個角落,。嵌入式系統(tǒng)可以簡單定義為屬于大型系統(tǒng)或機器一部分的一種專用計算機系統(tǒng),其目的是為該系統(tǒng)或機器提供監(jiān)測和控制服務,。典型的嵌入式系統(tǒng)在開機時會開始運行某些專用應用,,直到關閉時才會停止。當前設計和生產(chǎn)的幾乎每個電子設備都是嵌入式系統(tǒng),。嵌入式系統(tǒng)實例包括:
- 電子鬧表
- 自動柜員機
- 移動電話
- 計算機打印機
- 防抱死剎車控制器
- 微波爐
- 導彈使用的慣性引導系統(tǒng)
- DVD 播放機
- 個人數(shù)字助理 (PDA)
- 工業(yè)自動化和監(jiān)測使用的可編程邏輯控制器 (PLC)
- 便攜式音樂播放機
- 可能還包括烤面包機...
嵌入式系統(tǒng)可能包含許多不同類型的設備,,包括微處理器、微控制器,、DSP,、RAM、EPROM、FPGA,、模數(shù)轉(zhuǎn)換器,、數(shù)模轉(zhuǎn)換器和I/O。這些設備在傳統(tǒng)上一直使用寬并行總線相互通信及與外部世界通信,。然而今天,,嵌入式系統(tǒng)設計中使用的越來越多的構件將用串行總線代替寬并行總線,原因如下:
- 減少了要布線的信號數(shù)量,,降低了要求的電路板空間
- 降低了成本
- 降低了功率要求
- 減少了封裝上的針腳數(shù)量
- 嵌入式時鐘
- 差分信令,,改善抗噪聲能力
- 采用標準串行接口的器件大量供應
盡管串行總線提供了大量的優(yōu)勢,但它們也給嵌入式系統(tǒng)設計人員帶來了某些重大挑戰(zhàn),,因為它以串行方式傳送信息,而不是以并行方式傳送信息,。本應用指南討論了嵌入式系統(tǒng)設計人員的常用挑戰(zhàn),,及怎樣使用泰克新推出的DPO4000系列示波器中提供的功能迎接這些挑戰(zhàn)。
并行與串行比較
在并行結構中,,總線的每個組件都有自己的信號路徑,。可能有16 條地址線,、16 條數(shù)據(jù)線,、一條時鐘線和各種其它控制信號。通過總線發(fā)送的地址或數(shù)據(jù)值會通過所有并行線路同時傳送,。因此,,使用大多數(shù)示波器和邏輯分析儀中的狀態(tài)觸發(fā)或碼型觸發(fā)功能觸發(fā)感興趣的事件相對簡便。同時,,可以簡便地一目了然地了解在示波器或邏輯分析儀顯示屏上捕獲的數(shù)據(jù),。例如,在圖1 中,,我們使用邏輯分析儀從微控制器中采集時鐘線,、地址線、數(shù)據(jù)線和控制線,。通過使用狀態(tài)觸發(fā),,我們隔離了我們查找的總線。為“解碼”總線上發(fā)生的情況,,我們需要查看每條地址線,、數(shù)據(jù)線和控制線的邏輯狀態(tài)。
在串行總線中,,所有這些信息都必須以串行方式在相同的少數(shù)導線 (有時是一條) 上發(fā)送,。這意味著一個信號可能包括地址信息、控制信息、數(shù)據(jù)信息和時鐘信息,。例如,,看一下圖2 中所示的控制器區(qū)域網(wǎng) (CAN) 串行信號。

圖1. 邏輯分析儀采集的微控制器的時鐘,、地址總線,、數(shù)據(jù)總線和控制線。

圖2. CAN總線中采集的一條消息,。

圖3. I2C總線中采集的一條消息,。
即使是比較簡單的串行標準,,如I2C,與并行協(xié)議相比,,觀察總線上傳輸?shù)膬?nèi)容仍要明顯困難得多,。I2C采用分開的時鐘線和數(shù)據(jù)線,因此至少在本例中,,您可以使用時鐘作為參考點,。但是,您仍需要找到消息開頭(數(shù)據(jù)變低,,時鐘為高),,手動檢查和記下每個時鐘上升沿上的數(shù)據(jù)值,然后把各bit 位整理成消息結構,。在長采集中解碼一條消息就會需要幾分鐘時間,,而您不知道這是不是實際要找的消息。
如果不是,,您需要在下一條消息上重新開始這一麻煩的,、容易出錯的過程,。最好只觸發(fā)查找的消息內(nèi)容,但多年來示波器的邏輯分析儀上使用的狀態(tài)觸發(fā)和碼型觸發(fā)并不能發(fā)揮作用,。它們是為了考察多條通道中同時發(fā)生的問題設計的,。為處理串行總線,其觸發(fā)引擎深度必需有幾千種狀態(tài)(每個bit位一個狀態(tài)),。即使存在這種觸發(fā)功能,,但為所有這些bit位逐個狀態(tài)編程也不是件好玩的事。必須找到一種更好的方式,!

圖4. I2C消息結構,。
I2C
背景知識
I2C 或"I squared C" 是指集成電路間總線,。它最初是飛利浦公司在20世紀80年代研制的,為把控制器連接到電視機上的外設芯片提供了一種低成本方式,,但之后其已經(jīng)發(fā)展成為嵌入式系統(tǒng)設備之間通信的一項全球標準,。它采用簡單的兩線設計,廣泛用于領先芯片制造商生產(chǎn)的各種芯片中,,如I/O、模數(shù)轉(zhuǎn)換器,、數(shù)模轉(zhuǎn)換器,、溫度傳感器、微控制器和微處理器,,芯片制造商則包括:Analog Devices, Atmel, Infineon,Cyprus, 英特爾,Maxim, 飛利浦, Silicon Laboratories, ST Microelectronics,德州儀器, Xicor 等等,。
工作方式
I2C的物理兩線接口由雙向串行時鐘(SCL)和數(shù)據(jù)(SDA)線組成。I2C 支持總線上多個主從設備,,但一次只能激活一個主設備,。任何I2C設備可以連接到總線上,允許任何主設備與從設備交換信息,。每臺設備都使用唯一的地址識別,,可以作為發(fā)射機或接收機操作,具體取決于設備功能,。在開始時,,I2C 只使用7 位地址,但隨著時間推移,,它演變成也支持10 位地址,。它支持三種位速率:100 kbps (標準模式), 400 kbps (快速模式)和3.4Mbps (高速模式)。最大設備數(shù)量取決于400 pf 的最大容量,,或大約支持20-30 臺設備,。I2C 標準規(guī)定了下述格式,,如圖4 所示:
-
Start - 表明設備控制總線,一條消息將開始傳送
-
Address -7 位或10 位數(shù)字,,表示將要讀取或?qū)懭氲脑O備地址
-
R/W Bit - 1 位,,表明是否將從設備中讀取數(shù)據(jù)或向設備寫入數(shù)據(jù)
-
Ack - 1 位,來自從設備,,確認主設備的操作,。通常每個地址和數(shù)據(jù)字節(jié)有一個確認位,但不總是有確認位
-
Data - 從設備中讀取或?qū)懭朐O備的字節(jié)的整數(shù)
-
Stop - 表明消息結束,,主設備已經(jīng)釋放總線

圖5. I2C總線設置菜單,。

圖6. I2C總線實例。
通過DPO4EMBD串行觸發(fā)和分析應用模塊,,DPO4000系列成為處理I2C總線的嵌入式系統(tǒng)設計人員的強大工具,。前面板有兩個總線按鈕(B1 和B2),允許用戶把到示波器的輸入定義為一條總線,。I2C 總線的設置菜單如圖5 所示,。
通過簡單地定義時鐘和數(shù)據(jù)位于哪條通道上及用來確定邏輯1和0的門限,示波器可以理解通過總線傳輸?shù)膮f(xié)議,。有了這些知識,,示波器可以觸發(fā)任何指定的消息級信息,然后把得到的采集數(shù)據(jù)解碼成有意義的,、容易理解的結果,。邊沿觸發(fā)已經(jīng)過了好多天了,希望您已經(jīng)采集到感興趣的事件,,然后逐條消息手動解碼消息,,找到問題。
例如,,考慮一下圖6中的嵌入式系統(tǒng),。I2C總線連接到多臺設備上,,包括CPU,、EEPROM、風扇速度控制器,、數(shù)模轉(zhuǎn)換器和大量的溫度傳感器,。
這部儀器被退回工程部分析故障,該產(chǎn)品持續(xù)過熱,,自動關機,。要檢查的第一件事是風扇控制器和風扇本身,但似乎一切正常,。然后要檢查溫度傳感器是否有問題,。風扇速度控制器定期輪詢兩個溫度傳感器 (位于儀器中不同的區(qū)域),,調(diào)節(jié)風扇速度,穩(wěn)定內(nèi)部溫度,。您懷疑其中一個或兩個溫度傳感器讀數(shù)不正確,。為查看傳感器與風扇速度控制器之間的交互。我們只需連接到I2C時鐘和數(shù)據(jù)線,,在DPO4000 上設置總線,。我們知道,兩個傳感器在I2C 總線上的地址分別是18 和19,,因此我
們決定設置觸發(fā)事件,,查找地址18上的寫入操作 (風扇速度控制器輪詢傳感器的當前溫度)。觸發(fā)的采集結果如圖7 中的屏幕圖所示,。在這種情況下,,通道1 (黃色) 連接到SCLK,通道2 (青色)連接到SDA,。紫色波形是我們向示波器中輸入一些簡單的參數(shù)定義的I2C總線,。顯示器的上方部分顯示了整個采集。在這種情況下,,我們已經(jīng)捕獲了大量的總線空閑時間,,中間是我們放大的突發(fā)活動。顯示屏下方的較大部分是縮放窗口,。您可以看出,,示波器已經(jīng)解碼了經(jīng)過總線的每條消息的內(nèi)容。DPO4000 系列上的總線使用表1 中的顏色/ 標記,,表明消息中的重要部分。

圖7. I2C地址和數(shù)據(jù)總線波形解碼,。

表1.總線條件,。
-
Start - 在SDA 變低,、SCL 為高時觸發(fā)。
-
Repeated Start - 在沒有上一個停止條件下發(fā)生開始條件時觸發(fā),。這通常是主設備發(fā)送多條消息,、而沒有釋放總線時發(fā)生的情況。
-
Stop - SDA 為高,、SCL 為高時觸發(fā),。
-
Missing Ack - 從設備通常配置成在每個地址和數(shù)據(jù)字節(jié)后發(fā)送確認。在從設備沒有生成確認位的情況下示波器可以觸發(fā)采集,。
-
Address - 觸發(fā)用戶指定的地址或任何預先編程的專用地址,,包括全呼、開始字節(jié),、HS模式,、EEPROM或CBUS。地址可以是7 位或10 位地址,,以二進制或十六進制輸入,。
-
數(shù)據(jù) - 觸發(fā)二進制或十六進制輸入的最多12 字節(jié)的用戶指定數(shù)據(jù)值
-
地址和數(shù)據(jù) - 可以輸入地址數(shù)據(jù)值及讀寫,捕獲確切的感興趣的事件
這些觸發(fā)可以隔離您感興趣的特定總線業(yè)務,,解碼功能則可以即時查看采集中總線上傳輸?shù)拿織l消息的內(nèi)容,。
SPI
背景知識
串行外設接口總線(SPI)最初是摩托羅拉在20世紀80年代末為其68000 系列微控制器研制的。由于該總線簡單,、流行,,許多其它制造商也已經(jīng)采用這一標準。它現(xiàn)在用于嵌入式系統(tǒng)設計常用的各種器件中,。SPI主要用于微控制器和直接外設之間,。它通常用于移動電話、PDA 和其它移動設備中,,在CPU,、鍵盤、顯示器和內(nèi)存芯片之間通信,。
工作方式
SPI (串行外設接口)總線是一種主/從結構的4線串行通信總線,。4個信號是時鐘(SCLK), 主輸出/從輸入(MOSI),主輸入/ 從輸出(MISO)和從選擇(SS),。在兩臺設備通信時,一臺設備稱為“主設備”,,另一臺設備稱為“從設備”,。主設備驅(qū)動串行時鐘。它同時收發(fā)數(shù)據(jù),,因此是一種全雙工協(xié)議,。SPI 使用SS 線路指明與哪臺設備傳送數(shù)據(jù),而不是總線上的每臺設備都有一個唯一的地址,。這樣,,總線上的每臺唯一的設備都需要從主設備提供自己的SS 信號。如果有3 臺從設備,,那么主設備有3 條SS 引線,,每條引線都連接到每臺從設備上,如圖8 所示,。
在圖8 中,,每臺從設備只與主設備通話。但是,,SPI 可以串聯(lián)多臺從設備,,每臺從設備依次進行操作,然后把結果發(fā)回主設備,,如圖9 所示,。因此您可以看到,SPI實現(xiàn)方案沒有“標準”,。在某些情況下,,在不要求從設備向回到主設備通信時,MISO 信號可以完全省略,。

圖8. 常用的SPI 配置,。

圖9. 串聯(lián)SPI 配置。

圖10. SPI 總線設置菜單,。
處理SPI
DPO4EMBD 串行觸發(fā)和分析應用模塊還可以為SPI 總線實現(xiàn)類似的功能。我們可以再次使用前面板B1或B2按鈕,,簡單地輸入總線基本參數(shù),,包括SCLK, SS, MOSI和MISO位于哪條通道上、門限和極性,,來定義一條SPI總線 (參見圖10),。
例如,考慮一下圖11 中的嵌入式系統(tǒng),。一條SPI 總線連接到一個合成器,、一個DAC及某個I/O上。合成器連接到VCO上,,VCO為其余系統(tǒng)提供一個2.5 GHz 時鐘,。在啟動時,CPU應該對合成器編程,。但是不知道哪里出了問題,,VCO在產(chǎn)生3 GHz的信號。調(diào)試這個問題的第一步是考察CPU和合成器之間的信號,,
確定存在信號,,沒有物理連接問題,但我們找不到發(fā)生了什么問題,。然后,,我們決定看一下SPI 總線上傳送的合成器編程使用的實際信息。為捕獲這些信息,,我們把示波器設成在合成器Slave Select信號激活時觸發(fā)采集,,并對DUT 通電,捕獲啟動編程命令,。采集結果如圖12所示,。

圖11. 通過SPI 控制的合成器。
通道1 (黃色) 是SCLK,,通道2 (青色) 是MOSI,,通道3(洋紅色) 是SS。為確定我們是否對設備正確編程,我們看一下合成器的產(chǎn)品資料,??偩€上的前三個消息假設是初始化合成器、加載分路器比率,、鎖存數(shù)據(jù),。根據(jù)技術數(shù)據(jù),前三個傳送中最后半個字節(jié) (一個十六進制字符) 應該分別是3, 0 和1,,但我們看到的是0, 0 和0,。在消息末尾全是0 時,我們認識到,,我們在SPI 中犯了一個最常見的錯誤,,即在軟件中以相反的順序在每個24位字中對各個位編程。在迅速改變軟件配置后,,得到下
面的采集,,VCO 正確鎖定在2.5 GHz,如圖13 所示,。在上面的實例中,,我們使用簡單的SS Active 觸發(fā)。DPO4000 系列中完整的SPI 觸發(fā)功能包括下述類型:
-
SS Active - 在從設備選擇行對從設備變真時觸發(fā),。
-
MOSI - 在從主設備到從設備用戶指定最多16 個字節(jié)時觸發(fā),。
-
MISO - 在從設備到主設備用戶指定最多16 個字節(jié)時觸發(fā)。
-
MOSI/MISO - 在主設備到從設備及從設備到主設備用戶指定最多16 個字節(jié)時觸發(fā),。
這些觸發(fā)也可以隔離感興趣的特定總線業(yè)務,,解碼功能則可以立即查看采集中總線傳送的每條消息的內(nèi)容。

圖12. 采集SPI 總線之外的合成器配置消息,。

圖13. 正確的合成器配置消息,。

圖14. CAN數(shù)據(jù)/ 遠程幀。
背景知識
CAN (控制器區(qū)域網(wǎng))總線是博世公司在20世紀80年代專門研制的一種分層串行數(shù)據(jù)通信協(xié)議,,以在電氣噪聲環(huán)境中作為設備之間的通信總線,。1992 年,梅塞德茲-奔馳率先在其汽車系統(tǒng)中采用CAN,。今天,,幾乎每個汽車制造商都在使用CAN 控制器和網(wǎng)絡,控制雨刷器馬達控制器,、雨水傳感器,、安全氣囊、門鎖,、傳動系統(tǒng)和電動車窗等等,。由于能夠容忍電氣噪聲,、減少連線,、校驗錯誤及高速傳送速率,,CAN 正迅速擴展到其它應用中,如工業(yè)控制,、艦隊,、醫(yī)療、航空等領域,。
工作方式
CAN總線是一種平衡的 (差分) 2線接口,,在屏蔽雙絞(STP)、非屏蔽雙絞線 (UTP) 或帶狀電纜上運行,。每個節(jié)點使用公頭9 針連接器,。非歸零 (NRZ) 位編碼與位填充一起使用,保證緊湊的消息及最小的轉(zhuǎn)換數(shù)量和高抗噪聲能力,。CAN總線接口采用異步傳輸方案,,在總線空閑時每個節(jié)點可以開始傳送信息。消息廣播到網(wǎng)絡上的所有節(jié)點,。在多個節(jié)點同時發(fā)起消息時,,位仲裁用來確定哪條消息的優(yōu)先權較高。消息可以是四種類型中的一種:數(shù)據(jù)幀,、遠程傳輸請求 (RTR) 幀,、錯幀或過載幀??偩€上檢測到錯誤的任何節(jié)點會傳輸一個錯幀,,導致總線上所有節(jié)點能夠看到當前消息不完整,傳輸節(jié)點會重新發(fā)送消息,。接收設備發(fā)起過載幀,,表明還沒有準備好接收數(shù)據(jù)。數(shù)據(jù)幀用來傳輸數(shù)據(jù),,遠程幀由用來請求數(shù)據(jù),。數(shù)據(jù)幀和遠程幀由每個幀開頭和結束的開始位和停止位控制,包括下述字段:仲裁字段,、控制字段,、數(shù)據(jù)字段、CRC 字段和ACK 字段,,如圖14 所示,。
-
SOF - 幀以幀頭 (SOF) 位開始
-
仲裁 - 仲裁字段包括標識符(地址)和遠程傳輸請求(RTR) 位,用來區(qū)分數(shù)據(jù)幀和數(shù)據(jù)請求幀,,其也稱為遠程幀,。標識符可以采取標準格式 (11 位 - 2.0A 版)或擴展格式 (29 位 - 2.0B 版)。
-
控制 - 控制字段由6個位組成,包括標識符擴展 (IDE)位,,它區(qū)分CAN 2.0A (11 位標識符) 標準幀和CAN2.0B (29位標識符)擴展幀,。控制字段還包括數(shù)據(jù)長度代碼 (DLC),。DLC長4 位,,表明數(shù)據(jù)幀中數(shù)據(jù)字段的字節(jié)數(shù)或遠程幀請求的字節(jié)數(shù)。
-
數(shù)據(jù) - 數(shù)據(jù)字段由0-8 個數(shù)據(jù)字節(jié)組成,。
-
CRC - 15 位循環(huán)冗余校驗代碼和隱性分隔符位,。
-
ACK - 確認字段長兩位。第一個位是時隙位,,作為隱性位傳輸,,但之后被成功地收到傳輸消息的任何節(jié)點傳送的顯性位覆蓋。第二個位是是隱性分隔符位,。
-
EOF - 七個隱性位,,表明幀尾 (EOF)。
它定義了大量的不同數(shù)據(jù)速率,,最高數(shù)據(jù)速率為1Mb/s,最低數(shù)據(jù)速率為5kb/s,。所有模塊必須支持至少20kb/s的速率,。電纜長度取決于使用的數(shù)據(jù)速率。正常情況下,,系統(tǒng)中所有設備都以統(tǒng)一的固定位速率傳送信息,。
最大線路長度在低速時可以達到幾千米;典型情況是1Mbps 時40 米,。在電纜每端使用端接電阻器,。
圖15. CAN總線設置菜單。
DPO4AUTO串行觸發(fā)和分析應用模塊可以對CAN總線實現(xiàn)類似的觸發(fā)和分析功能,。我們可以再次使用前面板B1或B2按鈕,,簡單地輸入總線的基本參數(shù),包括探測的CAN 信號類型及位于哪條通道上,、位速率,、門限和樣點(位時間的%),來定義CAN 總線,,參見圖15,。想象一下您需要進行相關定時測量,,確定從司機在司車門儀表板上按下?lián)u車窗開關開始到車窗實際開始移動之間的時延。通過指定司機車門中CAN模塊的ID 及與“下?lián)u車窗”命令有關的數(shù)據(jù),,您可以觸發(fā)采集正在查找的數(shù)據(jù)幀,。通過同時探測司機車門的下?lián)u車窗開關及車門中的馬達驅(qū)動,可以非常簡便地完成這一定時測量,,如圖16 所示。

圖16. 觸發(fā)CAN總線上的特定標識符和數(shù)據(jù),,解碼采集中的所有消息,。
圖中的白三角形是我們放在波形上作為參考點的標記。通過簡單地按示波器前面板上Set/Clear Mark (設置/ 清除標記)按鈕,,可以在屏幕中增加或從屏幕中刪除標記,。按前面板上的Previous和Next按鈕,縮放窗口從一個標記跳到另一個標記,,從而可以簡便地在采集中感興趣的事件之間導航,。
現(xiàn)在想象一下,如果沒有這些功能會怎樣執(zhí)行這一任務,。
如果沒有CAN觸發(fā)功能,,您將不得不觸發(fā)開關本身,捕獲時間窗口足夠長的活動,,然后在CAN 總線上逐幀手動解碼,,直到最終找到適當?shù)膸R郧靶枰獛资昼娀驇讉€小時完成的工作,,現(xiàn)在只需要一會兒就可以完成,。
DPO4000 強大的CAN 觸發(fā)功能包括下述類型:
-
幀頭- 觸發(fā)SOF 字段。
-
幀類型- 選項包括數(shù)據(jù)幀, 遠程幀, 錯幀和過載幀
-
標識符- 使用讀/ 寫判定觸發(fā)特定的11 位或29 位標識符
-
數(shù)據(jù)- 觸發(fā)1-8 字節(jié)用戶指定的數(shù)據(jù)
-
Missing Ack- 在接收設備沒有提供確認時觸發(fā)
-
幀尾- 觸發(fā)EOF 字段
這些觸發(fā)類型可以輕松隔離CAN 總線上查找的幾乎任何項目,。但觸發(fā)只是開始,。調(diào)試通常要求檢查觸發(fā)前和觸發(fā)后的消息內(nèi)容??梢酝ㄟ^DPO4000 系列的事件表簡單地查看一次采集中的多個消息的內(nèi)容,,如圖17 所示。

圖17. CAN事件表,。
觸發(fā)與搜索
正如我們在本應用指南中討論的那樣,必需擁有強大的觸發(fā)系統(tǒng),,隔離串行總線上感興趣的事件,。但是,,一旦已經(jīng)采集了數(shù)據(jù) (示波器被停止),而且想分析數(shù)據(jù),,那么觸發(fā)就沒有什么用了,。如果示波器具有類似觸發(fā)的資源、分析停止的波形數(shù)據(jù)不是更好嗎,? DPO4000 系列的Wave Inspector為您提供了強大的搜索功能,。本文中討論的所有總線觸發(fā)功能還作為已采集數(shù)據(jù)的搜索標準使用。例如,,在圖18 中,,示波器已經(jīng)在長采集記錄中搜索了具有特定地址和數(shù)據(jù)內(nèi)容的每條CAN 消息,并在顯示屏頂部在每條消息上標明空心的白三角形,。為在發(fā)生的消息之間導航,,用戶只需按前面板上的Previous和Next 按鈕即可。

圖18. 在CAN總線采集中搜索指定的標識符的數(shù)據(jù),。
總結
盡管嵌入式系統(tǒng)設計從并行總線轉(zhuǎn)向串行總線帶來了許多好處,但它也給設計工程師帶來了許多挑戰(zhàn),。通過傳統(tǒng)測試測量工具,,觸發(fā)查找的事件要困難得多,這些工具僅僅查看模擬信號,,幾乎不可能告訴用戶其提供了哪些信息,,而且手動解碼長時間的總線活動、診斷問題是非常耗時,、非常容易出錯的過程,。DPO4000系列改變了這一切。由于其強大的觸發(fā),、解碼和搜索功能,,當前的設計工程師可以以極高的效率解決嵌入式系統(tǒng)設計問題。