CAN总线规范 11898-1
目錄
前言
CAN總線電氣特性
CAN總線介紹
差分信號
CAN總線架構
?CAN數據類型
CAN幀類型
CAN總線特點
CAN
MAC層描述
?MAC服務描述
MAC幀結構
??MAC DF(數據幀)
????SOF(起始位)
? ? Arbitration field(仲裁場)
????Control field(控制場)
????Data field(數據場)
????CRC(循環冗余校驗場)
????ACK field(應答場)
??MAC RF(遠程幀)
??MAC EF(錯誤幀)
??MAC OF(過載幀)
??MAC ITM(幀間隔)
Error detection(錯誤檢測)
Frame coding(幀編碼)
MAC primitive(MAC 原語)
LLC層描述
? ? LLC服務描述
? ? LLC幀格式
? ? ? ? Identifier field(標識符場)
????????Format field(格式場)
????????Dlc field(數據長度場)
????????Data field(數據場)
? ? LLC primitive
PL層描述
PL服務描述
PCS specification(PCS規范)
??Bit 編碼/解碼(endcoding/decoding)
????Bit time
????CAN位時序構成
????配置時間參考(Configuration of the bit time parameters)
??同步(Synchronization)
????相位誤差(Phase error of an edge)
????硬同步
????再同步
前言
ISO 11898是CAN總線的規范,對應于OSI是層一和層二,即物理層和數據鏈路層。對于物理層來說,定義了CAN總線信號在雙絞線上的電壓形式,對于數據鏈路層來說,定義了CAN幀的各個域的用途
ISO 15765-2是診斷服務在CAN總線上傳輸的實現方式,對應于OSI是層4,傳輸層。對于classical CAN總線來說,它一幀只能承載8個字節,而上層的診斷服務卻可能超過8個字節,這時候就需要傳輸層對數據進行分包重組流控制。ISO 15765-2還定義了應用層、傳輸層、數據鏈路層之間的編程接口,其實就是request, confirm, indication這幾個原語的定義。ISO 15765-3和ISO 14229-3的內容是一樣的,后者取代了前者。ISO 15765-4定義了基于CAN總線實現OBD通信的方式。(診斷有很多大于8字節的包,傳診斷服務的時候TP傳輸協議是怎么實現的,時間參數是怎么定義的。)
ISO 14229-1 對應于OSI的層7,即應用層,就是怎么用CAN總線實現診斷的服務,請求和應答格式是什么樣的。
?
CAN總線電氣特性
CAN總線介紹
??CAN 是控制器局域網絡 (Controller Area Network) 的簡稱,它是由研發和生產汽車電子產品著稱的德國 BOSCH 公司開發的,并最終成為國際標準(ISO11519以及ISO11898),是國際上應用最廣泛的現場總線之一。
??CAN是一種異步通訊bus,沒有時鐘線,所以需要保證一致的波特率,由兩根差分信號組成(CAN_High,CAN_Low)
差分信號
???使用差分信號來減小共模干擾,CAN信號分為顯性和隱形,以高速CAN信號為例CAN_High和CAN_Low線上電壓均為2.5V,當壓差為0V時,表示顯性,即邏輯0,當CAN_High為3.5V,CAN_Low為1.5V時,差值是2V時,為隱性,表示邏輯1.
?
?
CAN總線架構
?CAN數據類型
??按照類型:
????Classical CAN(最高支持1Mbit/s的傳輸速率,8bit有效)
????CAN FD(速度超過1Mbit/s,每次可以傳輸超過8bit)
????按照是否支持拓展:
????CAN Base,
? ?CAN Extend。
note:一共是四種分別是CBFF(Classical Base Frame Format),CEFF(Classical Extended Frame Format),FBFF(FD Base Frame Format),FEDD
(FD Extended Frame Format)。
CAN幀類型
| 幀 | 用途 |
| 數據幀 | 用于發送單元向接收單元發送數據。 |
| 遠程幀/遙控幀 | 用于接收單元想具有相同ID的發送單元發送數據請求。 |
| 錯誤幀 | 用于檢測出錯誤時,通知其他幀錯誤幀。 |
| 過載幀 | 告知接收單元還未做好接收準備。 |
| 間隔幀 | 用于將數據幀和遠程幀與前面的幀分開。 |
CAN總線特點
| 多主控制 | 當總線空閑時,所有單元都可以發送數據。最先發送的獲得總線控制權,當同時發送的時候,根據仲裁場獲得控制權。 |
| 消息發送 | CAN的協議中,消息都是按固定格式發送的,空閑的時候所有的總線都可以發送消息,同時發送按照仲裁結果先后發送消息,但是仲裁失敗的也并不會丟失數據。 |
| 系統柔性 | CAN總線并沒有類似于地址的信息,所以想增加單元時,只需要將單元連接即可 |
| 通信速度 | 因為沒有clk信號線,因此異步通信,同一網絡速率必須保持一致。 |
| 遠程數據請求 | 可以使用遠程幀去請求數據。 |
| 錯誤檢測 | 所有單元都可以檢測數據錯誤。并且通知所有其他所有單元,當檢測錯誤時,會強制停止當前的發送,并且開始重傳(也可以不使用重傳,或定時重傳) |
| 故障封閉 | CAN可以檢測出,是暫時的數據錯誤(如因噪聲導致的),或者是永久的數據故障(如設備出現錯誤)。所以當總線發生持續的錯誤時,將引起故障單元隔離出去。 |
| 連接 | CAN理論上可以連接多個單元,但是收到負載的延遲,會導致通信速率降低的原因,連接的單元越多,通信速率越低 |
CAN
DLL(Data link layer)
| LLC(Data link layer) | 接收濾波(可點到點,廣播,組播) 過載通知(通知節點尚未準備好接收消息) 錯誤恢復(再次發送數據) |
| MAC(Media Access Control) | 消息幀化(DF(錯誤幀),RF(遠程幀),EF(錯誤幀),OF(過載幀)) 連接控制(競爭方式支持多點傳輸) 裁決解決沖突的數據(根據裁決判斷ID優先級和數據優先級) 故障擴散抑制(自動判斷出節點的故障) 錯誤通知(CRC,ACK,位填充錯誤,格式錯誤,位錯誤) 錯誤檢測(所有單元都可以進行錯誤檢測) 應答(ACK,NACK) 通信方式(半雙工) |
PL(Physical layer)
| PCS(Physical Coding Sub-layer) | 編碼/解碼:NRZ不歸零編碼,6位插入填充位 定時:位時序,位采樣數 同步:根據同步段(SS)實現 |
| PMA(Physical Medium Attachment) | 這個也不在11898中 |
| MDI(Medium Dependent Interface) | 這個不在11898中 |
MAC層描述
MAC子層出獄數據鏈路層比較底層的位置,為PL和LLC提供一些服務。
--串行化和非串行化數據 and 接收 / 發送數據
--錯誤檢測和信號的發送
--管理 接收/發送媒介訪問
?MAC服務描述
| 數據封裝 Trans data encapsulation | --接受LLC幀和控制信息的接口 --CRC校驗計算和FD的bit計數 --通過添加(SOF,SRR,IDE,RTR,FDF,res,BRS,ESI,CRC,ACK,EOF)來構建MAC幀 |
| 媒介傳輸過程管理 Transmit medium access management | --在識別總線空后啟動傳播 --串行化MAC幀 --插入填充bit --裁決/ 在裁決失敗的情況下進入接受模式 --錯誤檢測 --ACK檢測 ?? --識別overload 的狀態 ?? --overload幀建立和啟動傳輸 ?? --error幀建立和啟動傳輸 ?? --向PL層提供串行bit流 |
| 接受傳輸過程管理 Receive medium access management | --接受來自PL的串行bit流數據 --幀結構的反序列化和重新編譯 --刪除填充bit --錯誤檢測 --發送ACK --錯誤幀的創建和啟動 --識別過載條件 --過載幀的創建和啟動 |
| 接受數據反串口化 Receive data de-capsultion | --從接受到的幀里移除特定的MAC信息 --承接LLC幀數據,并且把接口信息發送給LLC子層 |
MAC幀結構
??MAC DF(數據幀)
????如果需要發送數據,那么需要將LLC包轉換為MAC包,如果需要接受數據,那么需要把MAC包轉換為LLC包。
| SOF | Arbitration field | Control field | Data field | CRC field | ACK field | EOF |
????SOF(起始位)
????SOF是DFs 或者 RFs的開頭,并且應該由顯性bit組成,只有在bus位于隱形(空閑)的時候SOF才能發送。
? ? Arbitration field(仲裁場)
????CAN總線實際上并沒有優先級標志位,他是依據仲裁位,或的關系判斷是否,自己的報文允許被發送。如果自己并沒有搶占到在bus總線,那么就會等待下一次發送數據
????仲裁位由LLC層的標識符和RTR bit(CBFF and CEFF) 或者是 RRS bit(FBFF and FEFF)組成。RTR 和 RRS 在MAC中應該是顯性的。
????仲裁的結構取決于IDE bit和 FDF bit
????--CBFF中(IDE顯性),仲裁由11位基本標識符和RTR組成。標識符用【ID28~ID18】標識。
????--CEFF中(IDE隱形),仲裁由基本標識符【ID28~ID18】,SSR and IDE【都是隱形】,拓展位【ID17~ID0】,RTR bit組成
????--FBFF中(IDE顯性),仲裁應該由基本標識符【ID28~ID18】,和顯性的RRS組成。
????--FEFF中(IDE隱形),仲裁由基本標識符【ID28~ID18】,SSR and IDE【都是隱形】,拓展位【ID17~ID0】,RRS bit組成
????SRR bit(substitue Remotr Request 替代遠程請求,only CEFF and FEFF)只有拓展幀有
??????SRR bit傳輸在CEFF和FEFF中ID18之后的bit,SRR應該采用隱形傳輸,但是接受機可以接受顯性或者隱形的SRR bit(為了讓標準幀永遠優先于拓展幀)
????RTR bit(Remote Transmission Request 遠程幀傳輸請求,only CBFF and CEFF)
??????數據幀中是顯性,遠程幀中是隱形(為了判斷當ID相同的時候數據幀永遠優先于遠程幀)
????RRS bit (Remote Request Substitution 遠程請求,only FD)
??????RRS應該在FD幀下傳輸,位置屬于CBFF中的RTR的位置。RRS bit應該傳輸顯性,但是接受方可以接受顯性和隱形。(FD優先于Classical)
????IDE bit(IDentifier Extension 拓展標識符)
??????IDE是為了區分CBFF,CEFF,FBFF,FEFF,他們是否屬于
??????--CEFF和FEFF的仲裁位置
??????--CBFF和FBFF的控制位
??????CEFF和FEFF中IDE應該是按照隱性傳輸的,在FBFF和CBFF中IDE應該是按照顯性傳輸。判斷是否有拓展位。
????Control field(控制場)
????Control field 應該由6位(CBFF,CEFF)或者8位(FEFF)或者9位(FBFF)構成。最后四位一個是LLC傳遞給LLC子層的DLC。
????CBFF:這個格式下控制場前兩位是FDF位和r0位,傳輸均為顯性。(6bit)
????CEFF:這個格式下控制場前兩位是FDF位和r0位,傳輸均為顯性。(6bit)
????FBFF:在這個模式下前五位是 IDE(顯) FDF(隱) res(顯) BRS ESI bit。(9位)
????FEFF:這個模式下前4個bit 是FDF(隱) res(顯) BRS ESI。(8位)
????FDF bit(FD指示器)
????這個幀是區分Classical和FD的。(Classica是顯性,在FD中是隱形的)
????r0 bit(Reserved bit in Classical Extended Frame Format,經典拓展幀格式保留位)
????這個只是為了協議方便拓展的占位bit。傳輸的時候應該是顯性的
????res bit(Reserved bit In FD Frames,FD幀格式下的保留位)
????也是為了拓展保留的位,傳輸的時候應該是顯性的,如果傳輸的是一個隱形的信號,那么將看作是一個異常。
????BRS bit(Bit Rate Switch,比特速率開關)
????這個位標識碼率是否在FD幀中切換,當BRS為顯性的時候數據速率和仲裁位的速率是一致的,但是如果BRS是隱性的時候,數據段的速率大于仲裁段的速率
????ESI bit(Error State Indicator,錯誤標志符)
????這個位通過主動的error node傳輸顯性,或者由被動error node 傳輸隱形。 在Classical中ESI不存在。
????Data field(數據場)
????為LLC子層提供數據。
????CRC(循環冗余校驗場)
????CRC sequence:0~8字節使用CRC15。0~16字節使用CRC17。17~64字節使用CRC21。
????CRC分隔符,在Classical CRC delimiter應該是單個隱形的,在FD幀中CRC可能由1個或2個隱性位組成,
????ACK field(應答場)
????Stuff count(FD):CAN FD在CRC場中增加了stuff count 記錄填充位的個數對應8的模,還增加了奇偶校驗,FSB固定位前面的一位的補碼。
????Stuff count 由格雷碼計算和奇偶校驗組成。
????ACK slot:ACK要求,在發送數據的同時就要對總線數據進行回讀,以及ACK slot場進行相應,(接受方需要在slot場的時間內,在報文正確的基礎上,發送一個顯性的位,發送者會監視總線電平上的數據)。發送方會發送2個bit的隱形電平,當監聽到顯性位的時候,證明發送方是正常監聽到數據的。如果沒有檢測到顯性電平,那么表示需要重新發送。
????ACK delimiter:應該是一個隱形的。
????EOF(停止位)
????由7個隱形的bit構成
??MAC RF(遠程幀)
??通過發送RF可以去獲取數據的請求,MAC RF 和MAC DF 在,SOF, CRC,ACK,EOF中的場是等校的。RF中沒有數據段
| SOF | Arbitration field | Control field | CRC field | ACK field | EOF |
??Arbitration field (仲裁場)
??RF中是由LLC中的標識符和RTR組成的,并且RTR按照隱形傳輸,RF中沒有FBFF或在FEFF格式。
??Control field(控制場)
??在CBFF和CEFF中,MAC RF的控制場應該和MAC DF的控制場等效。RF的DLC等于請求需求的DLC。
??MAC EF(錯誤幀)
??EF應該由2個不同的字段組成,第一個字段由不同節點的錯誤標志位疊加而組成,第二個字段由錯誤分隔符組成。
??Error flag:
??主動錯誤:由6個bit的顯性位組成。
??被錯錯誤:由6個bit的隱性位組成。
??Error delimiter(錯誤分割符)由7個隱性位組成。
??MAC OF(過載幀)
??OF type:
??1.LLC要求過載。
??2.被動過載。
??OF應該由2個字段組成1.OF flag 2.OF delimiter
??OF flag
??OF flag應該由6bit 的顯性標志位組成。它破壞了間隔幀的格式,別的節點也可以檢測到過載情況,開始發送 OF flag。
??OF delimiter
??過載分隔符應由8個隱性位組成。在發送過載標志之后,每個節點都應該監視總線,直到它檢測到一個隱性比特。此時,每個節點都應發送完過載標志位,所有節點同時開始多發送7個隱性比特,以完成
??MAC ITM(幀間隔)
? ? ITM:用于將數據幀和遠程幀分隔開,由3個隱形組成,幀間隔的時候,不應該開啟其他DF和RF的傳輸。在錯誤幀和過載幀中,不能插入間隔幀。
Error detection(錯誤檢測)
| 錯誤類型 | 錯誤內容 | 錯誤檢測段 | 檢測單元 |
| Bit error 位錯誤 | 發送方比較輸出電平和總線上電平,當電平不一致就會錯誤 |
| 發送單元 接收單元 |
| Stuff error 填充錯誤 | 連續檢測到6個相同的電平 |
| 發送單元 接收單元 |
| CRC error CRC錯誤 | 接收方計算的CRC校驗值和發送方計算的CRC校驗值不一致 |
| 接收單元 |
| Form error 格式錯誤 | 檢測出與固定格式相反的格式 |
| |
| ACK error ACK錯誤 | 發送單元沒有收到接受單元的顯性ACK |
| 發送單元 |
Frame coding(幀編碼)
bit流采用的是NRZ(不歸零)編碼格式,(在SOF,仲裁,控制,數據,CRC場中)每當檢測到5個連續的一致的bit時,會在其后發送一個占位bit,發送方插入占位符,接收方,自動檢測屏蔽占位符。
FD的CRC場中,stuff bit 被插入在固定的地方。(即使前一個字段的最后幾個比特不是由五個連續的相同值的比特組成的序列。)
MAC primitive(MAC 原語)
?
MA_Data.Request(Identifier,Format,DLC,Data)
MA_Data.Indication(Identifier,Transmission_Status)
MA_Data.Confirm(Identifier,Format,DLC)
MA_Remote.Request(Identifier,Format,DLC)
MA_Remote.Indication(Identifier,Format,DLC)
MA_Remote.Confirm(Identifier,Transmission_Status)
MA_OVLD.Request()
MA_OVLD.Indication()
MA_OVLD.Confirm(Transmission_Status)
LLC層描述
? ? LLC服務描述
? ? ? ? LLC應該提供一下2個服務
????????--未應答的數據的傳輸服務
????????--未應答的遠程數據的請求服務
? ? LLC幀格式
????????LLC應該由identifier field,format field,DLC filed 和LLC data field組成
| identifier | format | DLC | data |
? ? ? ? Identifier field(標識符場)
????????標識字段分為2部分【基本標識字段,拓展標識字段】,基本標識字段為11位[ID28,……,ID18],拓展標識字段為18位[ID17,……,ID0],對于CBFF幀和FBFF幀,拓展位應該忽略
????????Format field(格式場)
????????這個字段分為,CBFF,CEFF,FBFF,FEFF中的幀,在FBFF和FEFF中,包括ESI和BRS位。
????????Dlc field(數據長度場)
????????字段中的字節數應該由DLC標識,一共4位,經典幀最多為8bit(1xxx),拓展最多為64bit(1111)。
????????Data field(數據場)
????????CAN信號傳遞的數據
? ? LLC primitive
Primitives shall be written:Service.type([parameter1.……] )
??1.Service.Request, 2.Service.Indication, 3.Service.Confirm。
| List of LLC service primitive parameter | |
| Identifier | 標識幀的內容 |
| Format | 幀的設置(CBFF,CEFF,FBFF,FEFF,option giving ESI and BRS bit valus) |
| DLC | 數據長度 |
| Data | 傳輸的數據 |
| Transfer_Status | 確認參數 |
| Handle(optional) | 標識設備的要素 |
??L_Data.Request(Identifier,Format,DLC,Data,Handle)
??L_Data.Indication(Identifier,Format,DLC,Data)
??L_Data.Confirm(Identifier,Transfer_Status,Handler)
??L_Data.AortRequest(Handler)
??L_Remote.Request(Identifier,Format,DLC,Handle)
??L_Remote.Indication(Identifier,Format,DLC)
??L_Remote.Confirm(Identifier,Transfer_Status,Handler)
??L_Remote.AbortRequest(Handler)
PL層描述
PL服務描述
? ??--PCS應包含與位編/解碼、定時、同步以及總線故障檢測相關的功能。
? ? --PMA子層包含用于總線傳輸/接收的功能電路。這個不在11898中描述
? ? --PMD子層包括物理介質和PMA子層之間的機械和電氣接口。這個也不在11898中描述
PCS specification(PCS規范)
??Bit 編碼/解碼(endcoding/decoding)
????Bit time
????FD提供了2個bit速率,標定bit速率和數據bit速率,數據比特速率應該小于或等于標定bit速率。
????數據bit速率只在FD的數據幀中只用。當BRS是顯性的時候速率是一致的,當BRS是隱性的時候,data場切換位數據bit速率。當看到CRC的第一個點,或者是EF信號時,階段結束。
????當由于檢測到錯誤條件而切換碼率時,切換時間應在采樣點之后偏移小于或等于兩個時間量。
????Time quantum
????時間量應該是由clk 周期分出的一個固定的值,至少有一個分頻器,計數至少從1 to 32,最少的一個時鐘量應該是一個時鐘周期。
????--time quantum(N) = m(N) · minimum time quantum for the nominal bit time
????--time quantum(D) = m(D) · minimum time quantum for the data bit time
????Bit rates and bit times
????標稱bit時間 = 1 / 標稱比特速率 數據bit時間 = 1 / 數據bit速率
????CAN位時序構成
????Sync_Seg(同步段):期望在這個時間段內檢測到邊緣。
????Prop_Seg(傳播時間段):在這個時間段內應該做補償物理延遲時間。
????Phase_Seg1(相位緩沖段1):用于補償邊緣相位誤差。
????Phase_Seg2(相位緩沖段2):用于補償邊緣相位誤差。
????Sample point(采樣點):采樣點的位置應該是Phase_Seg1的末尾。
????Tnode = Toutput + Tinput
????Tprop_seg >= Tnode_A + Tnode_B + 2 * Tbusline
????配置時間參考(Configuration of the bit time parameters)
????位時間段的配置應滿足以下限制條件
????--信息處理時間應小于或等于2個時間量.
????--在數據位時間上,Phase_Seg2應大于等于最大信息處理時間。
????--在標稱位時間內,Phase_Seg2應大于或等于這兩項的最大值:(SJW和信息處理時間)
????--在標稱位時間和數據位時間中,SJW應小于或等于Phase_Seg1和Phase_Seg2這兩項的最小值
??同步(Synchronization)
??在每一個時間量上都要分析電平是顯性還是隱性,在兩個不同的bus在時間量上被稱之為邊緣,接收方只在Sync_Seg為受干擾的邊沿進行同步, 在Sync_Seg外部檢測到的邊緣可能會導致CAN節點將其操作同步到該邊緣。
??所有的硬同步和再同步都要遵循以下規范
??--a)只允許在一個比特時間內(兩個采樣點之間)進行一次同步。在檢測到某條邊后,在下一次采樣點檢測到的總線狀態為隱性時,停止同步。
??--b)只有在前一個采樣點檢測到總線狀態時,是隱性的邊緣才會引起同步(以前的讀總線狀態)。CRC定界器的采樣點之后,從隱性到顯性的第一個檢測到的邊緣將引起同步。CAN實現可以選擇性地選擇在CRC定界器的采樣點之后,至少由發射機延遲的量加上一個時間量子看到的從隱性到顯性的第一個檢測邊緣上同步。
??--c)當節點處于總線集成狀態時,在幀間空間(除第一個中斷位外)、在FD幀內邊緣FDF位與隨后的顯性res位之間進行硬同步
??--d)所有其他的從顯性到隱性的邊滿足規則a)和b)應使用,用于重新同步,只有一個例外:傳輸FD幀的節點在傳輸該幀的數據階段時不應該同步。
????相位誤差(Phase error of an edge)
????-- e = 0 沒有誤差
????-- e > 0 如果該邊位于Sync_Seg和當前位的采樣點之間
??????-- e < 0 如果邊緣位于當前位的采樣點和下位的Sync_Seg之間
????硬同步
????硬同步只發生在SOF位,所有接收節點調整各自當前位的同步段,調整寬度不限。
?
????發送節點NodeA在發送SOF位時,SOF位的下降沿在SS段,這時接收節點NodeB發現自己當前位的SS段和發送節點SOF位的SS段不同步,故NodeB強行將自己當前的SS段拉到與SOF位的SS段同步。
????再同步
????重新同步,硬同步只能保證SOF位的同步,無法保證后續位的同步,故這就需要重新同步。重新同步發生在PBS1或PBS2中,分為兩種情況。
????--PBS1延長:發送節點NodeA比接收節點NodeB的時間慢,顯然接收節點要進行不同,故要將PBS1延長N個Tq的時間,此時,發送節點NodeA和接收節點NodeB的采樣點就同步了。
?
????--PBS2縮短:發送節點NodeA要比接收節點NodeB的時間快,故NodeB的采樣點就要滯后,但是因為有PBS2的存在,采樣點不會相差太大,當前本次位的采樣點沒法完全同步,但是為了下一位完全同步,接收節點NodeB會縮短PBS2。
總結
以上是生活随笔為你收集整理的CAN总线规范 11898-1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于芯片CS1180做数显压力表方案
- 下一篇: php中redis设置队列过期时间,如何