控制器區域網路(CAN)最早是由羅伯特博世(Robert Bosch)率先提出,目標是因應汽車功能與網路日趨複雜所衍生的問題。在嵌入式系統發展的初期,內含一個微控制器(MCU)的模組,就能執行單一或多項簡單功能,包括像是透過ADC讀取感測器的數據及控制直流(DC)馬達等(圖1)。
隨著這些功能日趨複雜,研發人員開始採用分散式模組架構,將各項功能建置在同一塊電路板上的兩個或多個微控制器,再運用I2C或串流周邊介面(Serial Peripheral Interface, SPI)通訊協定作為這些功能的聯繫管道。運用上述的模式,一個複雜的模組可利用主MCU來執行所有系統功能、診斷及故障安全防護等作業,另一個MCU則負責直流無刷(Brushless DC, BLDC)馬達的控制功能。廠商可利用市面上廣泛流通的低價通用型MCU,即可開發出上述的產品。
|
圖1 控制器區域網路介紹 |
現今的汽車,內部搭載的各項功能均分散在車體各處,而不是集中在單一模組,因此須要具備高容錯能力的內部模組通訊協定,促使汽車市場推出CAN。
DeviceNet與CANOpen通訊協定應運而生
在90年代中期,CAN被汽車以外的其他產業廣泛採用,在工業控制方面還出現包括DeviceNet與CANOpen等通訊協定。
在市場的推波助瀾下,許多微控制器供應商著手整合CAN控制器,設計成一個整合式周邊元件來搶攻這些市場。雖然以較高的層次看來,CAN的功能類似I2C或SPI,在兩個節點之間搭建通訊管道,但從控制器的層面來看,CAN的通訊方式大不相同,CAN支援下列的服務:CAN通訊是以訊息為主,而不是以位址為主;CAN節點可傳送訊息,或是要求接收匯流排上的訊息;複雜細膩的錯誤處理機制;透過CRC-15保護機制,最多能偵測出連續5個毀損的位元(Bit)資料。
CAN匯排流上的節點,依據訊息或位址模式,來決定本身同步傳輸多個訊息的能力,例如煞車模組訊息可能內含車速資訊、感測器資訊,譬如車輪速度感測器,還有汽車診斷訊息,後者擁有最高的傳輸優先權。
因應各種情況 CAN控制器開枝散葉
初步觀察訊息的優先權以及節點中解碼後的訊息驗證(ID),乍看下會誤以為CAN會對中央處理器產生極高的處理負荷,以致系統無法再加入更多複雜的功能。目前有不同的CAN可以克服這類問題,如圖2所示。
|
圖2 基本型與全功能型CAN控制器 |
|
|
|
建置在CAN控制器硬體中的基本濾波功能,能減輕訊息處理負荷,這導致CPU作業負載偏高。在一個基本CAN控制器中,CPU會從CAN控制器接收到多個岔斷訊號,藉以接收、回應及分析訊息。在應用方面,則根據接收訊息的ID決定是否要傳出回應訊息。基本型CAN控制器僅用在低傳輸速度與低訊息量的通訊,讓CPU還有餘力來處理其他非通訊的作業。 |
|
|
|
在硬體中提供完備的訊息過濾和分析功能,讓CPU有餘力處理其他作業,不必對每個接收到的訊息做回應。全功能CAN控制器可加以設定, 只有當控制器的過濾器接受訊息的辨識子(Identifier)時,CAN控制器才會向CPU發出岔斷訊號。全功能CAN控制器亦可利用多個訊息物件來設定,這些稱為信箱(Mailbox)的物件可儲存特定的訊息資訊,如ID以及接收到的資料位元,供CPU來檢索。
這種情況下,CPU可在任何時間檢索訊息,但必須在接收訊息有任何更新之前,以及信箱當前內容尚未被覆寫之前就完成檢索。這種情況衍生的問題,已被最後一種CAN控制器所克服。
|
|
|
|
提供多一層硬體建置功能,為已接收的訊息提供先進先出(FIFO)硬體設置。這種設計讓系統在CPU收到岔斷訊號之前,能儲存超過一個訊息複本(Instance),讓變動頻率高的訊息,避免出現資訊流失的狀況,甚至能讓CPU有更長的時間專心處理主模組功能。
另一項值得注意的重點,DeviceNet在ID欄位外,將過濾標準進一步延伸到資料的前兩個位元組,讓全功能或延伸型全功能CAN控制器,成為建置這類通訊協定的必要元件。
依照訊息結構,上述兩種組態可並存於單一模組,藉此建置高層級的訊息優先權,並為CPU改進接收訊息的處理效率。
例如,當一個模組接收到一個訊息內的故障安全防護(Failsafe)資訊(例如ID=0x250),並在另一個訊息內接收到溫度感測器的資訊(例如ID=0x3FF),則可將第一個CAN控制器設定成全功能,並搭配四個緩衝區FIFO將第二個CAN控制器設定成延伸型全功能:當接收到每個故障安全防護訊息時,CPU會收到岔斷訊號,且每接收到四個溫度感測器訊息時就會中斷一次。
|
圖3顯示這種CAN控制器,透過一個視覺化CAN控制器客製化工具,藉以快速建置複雜的訊息處理機制,讓所有三種CAN控制器能並存運作:
|
圖3 PSoC Creator - CAN控制器的設定 |
.Message 5→基本型CAN Mailbox.
.Message 0x250→全功能型CAN Mailbox.
.Message 0x3FF→延伸全功能型CAN Mailbox.
優異容錯能力備受肯定
CAN之所以被廣泛採納,除了其運作功能外,還要歸功於優異的容錯能力。1Mbit/s的傳輸速度,加上1,000公尺(傳輸速度達50kbit/s時)匯流排長度,CAN必須建置位元計時(Timing)機制,才能在充斥電子雜訊的環境中運作,並維持高水準的錯誤偵測與校正能力。
為確保高水準的容錯能力,CAN加入次位元(Sub-bit)計時設定,藉以更嚴密控制,並判斷每個CAN匯流排的正確匯流排狀態。一個CAN位元分成四個部分:
|
|
|
補償任何實體的延遲(實體匯流排與內部CAN節點的傳輸延遲)。 |
|
|
|
用來補償相位邊緣誤差(Phase Edge Error )。在進行重新同步化時,此部分的長度會縮短。 |
另外,也可常看到只分成三個部分的CAN控制器,其中的Prop_Seg時間被加到Phase_Seg1時間內。圖4為位元計時的示意圖,以及所有必要的參數。
|
圖4 位元計時示意圖 |
值得一提的是,所有CAN位元計時的計算,都是依據時間配額(Time Quanta, TQ),時間配額的定義是共振器所推導出的固定時間單位,其數值介於8至25之間。
就時間而言,1Mbit/s的匯流排速度加上1微秒(μs)的位元長度,一個TQ等於二十五分之一的位元,或40奈秒(ns)。
CAN位元計時的簡化規則,以下列出可推算出4位元時間區段的數值:
.Sync_Seg=1TQ
.1TQ≦Prop_Seg≦8TQ
.1TQ≦Phase_Seg1≦8TQ
.2TQ≦Phase_Seg2≦8TQ
.1TQ≦SJW≦MIN(Phase_Seg1, 4)
.SJW--Synchronization Jump的長度,其定義為Phase_Seg1能夠延長以及Phase_Seg2能夠縮短的時間
對於每個相關參數而言,上述的等式涵蓋極大的數值範圍,想要成功建置一個穩定的CAN通訊環境,關鍵在於選擇正確的參數組合。研發人員不僅須注意共振器的精準度,以及節點內的傳輸延遲,還得注意其他系統節點,這些節點之間必須建立通訊管道。
根據系統時脈、所需的傳輸率以 及位元取樣點(CANOpen的取樣點為87.5%),為CAN設定位元時序,成為許多設計人員不願面對的難題。如此高的複雜度,促使許多新嵌入式系統仍舊採用舊型MCU,甚至回過頭使用舊軟體,而不願使用更有效滿足整體系統需求的新產品。不幸的是,這種情況讓業者把CAN列為「曲高合寡」的嵌入式周邊元件。
圖5為CAN的取樣位元時序組態,對於一個已經運作的CAN匯流排而言,要建立新的時序分析或修改現有節點組態的傳輸率,已不再充滿風險。藉由提供所有特定與通過驗證的參數組合,設計出一個穩健的CAN時序組態,設計人員可專心處理模組主要功能中更複雜的項目。
|
圖5 PSoC Creator - CAN位元時序組態 |
嵌入系統領域仍待耕耘
雖然CAN誕生至今已有數十年,但在嵌入式設計領域仍被視為一種複雜的周邊元件,尤其是在研發領域。當CAN被作為整體系統的一個元件時,研發過程就會涉及系統組態的倍數重複。
CAN驅動器與CAN堆疊的研發,可外包給專業公司,只要付費就能獲得這些服務,有些公司甚至提供範圍有限的售後修改與設定服務。最近許多半導體廠商推出許多工具,不僅解決需求上的落差,還讓業者能快速自行研發,並加快複雜嵌入式系統的上市時程。
(本文作者為賽普拉斯半導體事業發展資深經理)