天天看點

CAN的資料鍊路層和實體層注意事項

1、CAN節點在總線上TX的同時還在RX上監聽發送資料

       節點在發送每個位的同時讀取總線上的電平信号,所有從節點上發送的位必須與回讀的位一緻,否則就是一個位錯誤

2、有些CAN收發晶片會有資料幀的自動重發功能,實作驅動時需要注意

3、CAN電平--隐性與顯性

實體信号

  CAN2.0B規範定義了兩種互補的邏輯數值:“顯性”和“隐性”,同時傳送“顯性”和“隐性”位時,總線結果值為“顯性”。“顯性”(“Daminant”)數值表示邏輯“0”,而“隐性”(“Recessive”)表示邏輯“1”。

  在CAN規範中并未定義代表邏輯電平的實體狀态(例如電壓),iCAN網絡使用符合ISO11898-2标準的電平信号,典型地,CAN總線為“隐性”(邏輯1)時,CAN_H和CAN_L的電平為2.5V(電位差為0V);CAN總線為“顯性”(邏輯0)時,CAN_H和CAN_L的電平分别是3.5V和1.5V(電位差為2.5V)

由此可見,無論從實時性、适應性、靈活性,還是可靠性上來看,CAN總線都是一種比RS-232更為優秀的串行總線。當兩台序列槽裝置的相距較遠,不能直接用RS-232把它們連接配接起來時,就可以把RS-232轉換為CAN,通過CAN總線來實作序列槽裝置的網絡互連。

但是,RS-232和CAN在電平和幀格式上都是很大的不同。具體表現如下:

    RS-232标準電平采用負邏輯,規定+3V~+15V之間的任意電平為邏輯“0”電平,-3V~-15V之間的任意電平為邏輯“1”電平。而CAN信号則使用差分電壓傳送,兩條信号線稱為“CAN_H”和“CAM_L”,靜态時均為2.5V左右,此時的狀态表示為邏輯“1”,也可以叫做“隐性”;用CAN_H比CAN_L高表示邏輯“0”,稱為“顯性”。顯性時,通常電壓值為:CAN_H=3.5V,CAN_L=1.5V;

差分電壓定義:  Vdiff = CAN_H - CAN_L

那個圖中黃線為CAN_H波形,綠線為CAN_L

在波形左,右兩端時,CAN_H=CAN_L=2.5v,稱為"隐性"  (內插補點為"0v")

在波形中間時,CAN_H=3.5V,CAN_L=1.5V,稱為"顯性"  (內插補點為"2v")

繼續閱讀