電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 41|回復(fù): 0
收起左側(cè)

CAN、CANopen協(xié)議棧詳解【硬核,慎點】

[復(fù)制鏈接]

260

主題

260

帖子

1844

積分

三級會員

Rank: 3Rank: 3

積分
1844
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 昨天 11:00 | 只看該作者 |只看大圖 回帖獎勵 |正序瀏覽 |閱讀模式
第一章 CAN協(xié)議棧詳解本章目錄
  • 前言
  • 一、CAN簡介
  • 二、CAN的發(fā)展歷史
  • 三、CAN的電氣特性
  • 四、CAN協(xié)議棧
  •     4.1、CAN協(xié)議棧解析
  •     4.2、CAN收發(fā)過程
  •     4.3、CAN錯誤處理
  •     4.4、CAN波特率
  •     4.5、CAN過濾
  • 總結(jié)
    本章介紹了CAN協(xié)議棧的發(fā)展歷史、電氣特性、基礎(chǔ)理論、標(biāo)準(zhǔn)協(xié)議棧解析等干貨知識點。
    一、CAN簡介CAN包含兩個部分,分別是CAN總線和CAN總線協(xié)議。
    CAN總線:
    控制器局域網(wǎng)總線(CAN,Controller Area Network)是一種用于實時應(yīng)用的串行通訊協(xié)議總線,它是使用兩根信號總線(雙絞線的形式)來傳輸信號,是世界上應(yīng)用最廣泛的現(xiàn)場總線之一。最初,CAN被設(shè)計作為汽車環(huán)境中的微控制器通訊,在車載各電子控制裝置ECU之間交換信息,形成汽車電子控制網(wǎng)絡(luò)。比如:發(fā)動機(jī)管理系統(tǒng)、變速箱控制器、儀表裝備、電子主干系統(tǒng)中,均嵌入CAN控制裝置。一個由CAN 總線構(gòu)成的單一網(wǎng)絡(luò)中,理論上可以掛接無數(shù)個節(jié)點。實際應(yīng)用中,節(jié)點數(shù)目受網(wǎng)絡(luò)硬件的電氣特性所限制。CAN 可提供高達(dá)1Mbit/s的數(shù)據(jù)傳輸速率,這使實時控制變得非常容易。另外,硬件的錯誤檢定特性也增強了CAN的抗電磁干擾能力。CAN總線協(xié)議:
    CAN總線協(xié)議是 ISO國際標(biāo)準(zhǔn)化的串行通信協(xié)議:CAN協(xié)議用于汽車中各種不同元件之間的通信,以此取代昂貴而笨重的配電線束。該協(xié)議的健壯性使其用途延伸到其他自動化和工業(yè)應(yīng)用。CAN協(xié)議的特性包括完整性的串行數(shù)據(jù)通訊、提供實時支持、傳輸速率高達(dá)1Mb/s、同時具有11位的尋址以及檢錯能力。CAN總線協(xié)議是一個載波偵聽(CSMA)、基于報文優(yōu)先級碰撞檢測和仲裁(CD+AMP)的多路訪問協(xié)議:
  • CSMA:意思是總線上的每一個節(jié)點在企圖發(fā)送報文前,必須要監(jiān)聽總線,當(dāng)總線處于空閑時,才可發(fā)送。
  • CD+AMP:意思是通過預(yù)定編程好的報文優(yōu)先級逐位仲裁來解決碰撞,報文優(yōu)先級位于每個報文的標(biāo)識域。更高級別優(yōu)先級標(biāo)識的報文總是能獲得總線訪問權(quán),即:標(biāo)識符中最后保持邏輯高電平的會繼續(xù)傳輸,因為它具有更高優(yōu)先級。二、CAN的發(fā)展歷史
  • 1980年代初期,由于沒有可滿足汽車工程師的總線協(xié)議,人們開始開發(fā)新的串行總線。
  • 1986年2月,在底特律舉行SAE會議上CAN總線誕生,稱之為Automotive Serial Controller Area Network。
  • 1991年,博世發(fā)布CAN2.0規(guī)范,分CAN 2.0A(具有11位標(biāo)識符)和CAN 2.0B(具有29位標(biāo)識符)。
  • 1993年,ISO組織發(fā)布CAN標(biāo)準(zhǔn)IS0 11898: IS0 11898-1涵蓋數(shù)據(jù)鏈路層,IS0 11898-2涵蓋高速CAN的CAN物理層(經(jīng)典CAN速度1Mbps,CAN FD 5Mbps) ,IS0 11898-3 涵蓋低速,容錯CAN的物理層 (速度125Kbps),后續(xù)還推出了ISO 11898 -4 -5和-6標(biāo)準(zhǔn)。
  • 2012年,博世發(fā)布CAN FD 1.0,速度2Mbps,使用CAN FD-SiC (加強版CAN PHY)可以做到5-8Msps。以STM32H7為例,帶的CANFD是支持經(jīng)典CAN的CAN2.0A和CAN2.0B,以及CANFD V1.0規(guī)范,兼容ISO 11898-1 : 2015和ISO11898 -4。
  • 2018年12月,開始推出第三代CAN數(shù)據(jù)鏈路層協(xié)議CAN XL,速度提升至10Mbsp。
  • 2022年11月、博世推出下一代CAN IP核CAN XL,速度高達(dá)20Mbps。


    三、CAN的電氣特性
  • CAN總線測試階段,至少一端的終端120Q終端電阻不可以省略。
  • CAN是差分通信,總線電平分為顯性電平和隱性電平兩種。總線上執(zhí)行邏輯上的線“與”:顯性電平為0,隱性電平為1。顯性電平具有主導(dǎo)性,只有所有節(jié)點都輸出隱性電平時總線上才是隱性。
  • 測量發(fā)現(xiàn)CAN僅接一端的終端電阻,結(jié)束的時候波形會有個抬高。
  • 通信速度和最大長度理論值,主要是經(jīng)典CAN,所有節(jié)點操作必須在同一個CAN波特率下。
  • 在測試階段,測試軟件應(yīng)用層時,由于STM32芯片大部分都是雙CAN,所以可以通過特別操作,不使用CAN PHY芯片也可以實現(xiàn)CAN通訊,不過這個不是差分電平。



    [/ol]四、CAN協(xié)議棧CAN協(xié)議棧的幀類型包括數(shù)據(jù)幀、遠(yuǎn)程幀、錯誤幀、過載幀和幀間隔。
    4.1、CAN協(xié)議棧解析
  • 數(shù)據(jù)幀發(fā)送單元向接收單元傳送數(shù)據(jù)的幀。



    ① 起始段:表示數(shù)據(jù)幀開始的段。
    SOF:幀起始(1位),顯性(0)表示報文的開始,并用于同步總線上的節(jié)點。
    ② 仲裁段:表示該幀優(yōu)先級的段。標(biāo)識符:標(biāo)識符(11位),標(biāo)準(zhǔn)格式具有11位標(biāo)識符,用來確定報文的優(yōu)先級。此域的數(shù)值越小,優(yōu)先級越高。
    RTR:遠(yuǎn)程發(fā)送請求位(1位),當(dāng)需要從另一個節(jié)點請求信息(遙控幀)時,此位為顯性(0)。
    所有節(jié)點都能接收這個請求,但是幀標(biāo)識符確定被指定的節(jié)點。響應(yīng)數(shù)據(jù)幀同樣被所有節(jié)點接收,可以被有興趣的節(jié)點使用。
    ③ 控制段:表示數(shù)據(jù)的字節(jié)數(shù)及保留位的段。IDE:標(biāo)志符擴(kuò)展位(1位),為顯性(0)時使用標(biāo)準(zhǔn)格式,為隱性(1)時表示這是擴(kuò)展格式。
    r0:保留位(1位),必須全部以顯性電平發(fā)送,但接收方可以接收任意電平。
    DLC:數(shù)據(jù)長度代碼(4位),表示傳輸數(shù)據(jù)的字節(jié)數(shù)目,一幀最多傳輸8字節(jié)用戶數(shù)據(jù)。
    ④ 數(shù)據(jù)段:數(shù)據(jù)的內(nèi)容,經(jīng)典CAN支持0-8字節(jié),CANFD支持0-64字節(jié)。⑤ 校驗段:檢查幀的傳輸錯誤的段。
    CRC:經(jīng)典CAN是15bit+1個bit的CRC界定符 (用于位分隔),CANFD是17或者21bit+1個界定符。
    CRC Delimiter:置“1”。
    CRC的計算范圍包括起始段,仲裁段,控制段,數(shù)據(jù)段,接收方以同樣的算法計算CRC值并進(jìn)行比較,不一致會通報錯誤。
    ⑥ 應(yīng)答段:表示確認(rèn)正常接收的段。ACK:包含應(yīng)答位和應(yīng)答界定符(2位)。
    發(fā)送節(jié)點的報文幀中,ACK兩位是隱性位,當(dāng)接收器正確地接收到有效的報文,接收器會在應(yīng)答位期間向發(fā)送節(jié)點發(fā)送一個顯性位,表示應(yīng)答。
    如果接收器發(fā)現(xiàn)這幀數(shù)據(jù)有錯誤,則不向發(fā)送節(jié)點發(fā)送ACK應(yīng)答,發(fā)送節(jié)點會稍后重傳這幀數(shù)據(jù)。
    ⑦ 結(jié)束段:表示數(shù)據(jù)幀結(jié)束的段。EOF:幀結(jié)束標(biāo)志位(7位),全部為隱性位。如果這7位出現(xiàn)顯性位,則會引起填充錯誤。
    IFS:幀間隔標(biāo)志位(7位),CAN控制器將接收到的幀正確的放入消息緩沖區(qū)是需要一定時間的,幀間隔可以提供這個時間。
  • 遠(yuǎn)程幀:接收單元向具有相同ID的發(fā)送單元請求數(shù)據(jù)的幀。
    遙控用于接收單元向具有相同 ID 的發(fā)送單元請求數(shù)據(jù)的幀,CANFD沒有遙控幀,只有經(jīng)典CAN有遠(yuǎn)程幀。遠(yuǎn)程幀相比數(shù)據(jù)幀沒有數(shù)據(jù)段。需要注意的是,目前CAN官方建議不再使用遠(yuǎn)程幀。
    擴(kuò)展格式相對于標(biāo)準(zhǔn)格式改動的內(nèi)容如下:
    ①SRR:代替遠(yuǎn)程請求位,為隱性。所以當(dāng)標(biāo)準(zhǔn)幀與擴(kuò)展幀發(fā)送相互沖突并且擴(kuò)展幀的基本標(biāo)識符與標(biāo)準(zhǔn)幀的標(biāo)識符相同時,標(biāo)準(zhǔn)幀優(yōu)先級高于擴(kuò)展幀。②IDE :為隱性位表示標(biāo)志位擴(kuò)展幀,18位擴(kuò)展標(biāo)識符緊跟著IDE位。③18位標(biāo)識符:增加18位標(biāo)識符。④r1:保留位。
  • 錯誤幀:當(dāng)檢測出錯誤時向其他單元通知錯誤的幀。
    接收節(jié)點或者發(fā)送節(jié)點檢測出錯誤時,通知錯誤的幀。
    主動錯誤標(biāo)志:6個bit的顯性位;被動錯誤標(biāo)志:6個bit的隱性位;錯誤界定符:8個bit隱性位。
  • 過載幀:接收單元表明其自身尚未做好準(zhǔn)備的幀。
  • 幀間隔:將數(shù)據(jù)幀及遙控幀與前面的幀分離開來的幀。
    [/ol]4.2、CAN收發(fā)過程
  • 發(fā)送過程
    ① 設(shè)置發(fā)送節(jié)點的ID,DLC,數(shù)據(jù)等。
    ② 設(shè)置CAN控制器,啟動發(fā)送幀。
    ③ 任何節(jié)點,在總線空閑時,都可以啟動發(fā)送幀。
    ④ 除了啟動數(shù)據(jù)發(fā)送的節(jié)點,其余所有節(jié)點都在等待接收數(shù)據(jù)。
    ⑤ 如果多個節(jié)點同時啟動數(shù)據(jù)發(fā)送,將進(jìn)行仲裁,ID值小的優(yōu)先處理,ID值大的停止發(fā)送,進(jìn)入接收狀態(tài)。
    ⑥ 此時,僅有一個節(jié)點發(fā)送數(shù)據(jù),否則還有其它節(jié)點發(fā)送數(shù)據(jù)將造成異常。
    ⑦ 當(dāng)發(fā)送節(jié)點完成消息發(fā)送,將等待應(yīng)答bit被拉低為0,表示接收節(jié)點正常收到數(shù)據(jù)了。
    ⑧ 發(fā)送節(jié)點的數(shù)據(jù)已經(jīng)送達(dá)接收節(jié)點,繼續(xù)發(fā)送頓數(shù)據(jù)中的結(jié)束段,之后發(fā)送節(jié)點將進(jìn)入接收狀態(tài)或者繼續(xù)發(fā)送下一幀數(shù)據(jù)。接收節(jié)點將處理收到的數(shù)據(jù)。
    ⑨ 此時,任何數(shù)據(jù)都可以發(fā)送數(shù)據(jù),如果沒有節(jié)點發(fā)送數(shù)據(jù),總線將進(jìn)入空閑狀態(tài)。
    ⑩ 如果沒有收到應(yīng)答,將按照CAN錯誤方式處理 。
  • 接收過程
    ① 所有節(jié)點,除了發(fā)送數(shù)據(jù)的節(jié)點和處于總線關(guān)閉狀態(tài)的節(jié)點,都處于監(jiān)聽狀態(tài)。
    ② CAN數(shù)據(jù)將按照前面說的CAN發(fā)送過程進(jìn)行數(shù)據(jù)發(fā)送。
    ③ 所有處于監(jiān)聽狀態(tài)的節(jié)點都將收到數(shù)據(jù),如果被認(rèn)為是沒有錯誤的有效 CAN 消息,監(jiān)聽節(jié)點將應(yīng)答。
    ④ 如果接收節(jié)點設(shè)置了CAN過濾器,將根據(jù)過濾設(shè)置濾掉不需要的消息。
    [/ol]4.3、CAN錯誤處理
    檢測到幀錯誤處理:
  • 接收錯誤的節(jié)點將拉低 (顯性電平0) 總線至少6個bit。
  • 超過5個bit相同極性,將觸發(fā)位填充,這個是硬件完成的,不需要用戶操作。
  • 錯誤幀以通知發(fā)送給所有節(jié)點,這個是硬件完成的。
  • 發(fā)送總線放棄當(dāng)前幀,8 bit的 TEC 發(fā)送錯誤計數(shù)器寄存器的值加X。
  • 如果此TEC 等于0xFF,則發(fā)送節(jié)點將 BUSOFF (總線關(guān)閉) 并使自己脫離總線。
  • 如果不是,則嘗試重傳消息,該消息必須與其他消息一起再次經(jīng)過優(yōu)先級處理。
  • 所有其他節(jié)點放棄讀取當(dāng)前幀,REC接收錯誤計數(shù)器寄存器的值加X。
  • 任何有消息排隊的節(jié)點現(xiàn)在都將啟動發(fā)送,其它的節(jié)點進(jìn)去監(jiān)聽。
  • 如果每次傳輸一個幀或接收一幀成功,相應(yīng)的 TEC 和 REC 寄存器遞減 (通常只遞減 1)。
    [/ol]4.4、CAN波特率
    CANFD波特率計算,含仲裁階段可變波特率和數(shù)據(jù)階段可變波特率,而經(jīng)典CAN只有一種波特率。
    4.5、CAN過濾
    標(biāo)識符過濾器是用于接收的,發(fā)送的時候無需設(shè)置過濾器,根據(jù)發(fā)送端發(fā)送來的幀數(shù)據(jù),通過標(biāo)識符過濾器就可以設(shè)置僅接收需要接收的幀數(shù)據(jù)有效降低CPU多余的處理時間。
  • 經(jīng)典CAN支持標(biāo)識符列表模式和屏蔽位模式。
  • CANFD支持范圍過濾器 (Range filter) 、專用ID的過濾器 (Filter for dedicated IDs)和經(jīng)典位屏蔽過濾器 (Classic bit mask filter)。

    [/ol]總結(jié)本章介紹了CAN協(xié)議棧的發(fā)展歷史、電氣特性、基礎(chǔ)理論、標(biāo)準(zhǔn)協(xié)議棧解析等干貨知識點。
    第二章 CANopen協(xié)議棧詳解本章目錄前言
    一、CANopen簡介二、CANopen的發(fā)展歷史三、CANopen ID四、CANopen協(xié)議棧框架五、PDO六、SDO    6.1、快速SDO報文格式:    6.2、普通SDO報文格式:        6.2.1 普通SDO的讀操作報文格式        6.2.2 普通SDO的寫操作報文格式七、NMT八、時間戳協(xié)議九、同步協(xié)議十、緊急報文協(xié)議總結(jié)
    CANopen是基于CAN(控制器局域網(wǎng))總線的一種高級通信協(xié)議,被廣泛應(yīng)用于自動化和嵌入式系統(tǒng)中。本章旨在提供詳細(xì)的CANopen相關(guān)知識、最佳實踐和實際應(yīng)用案例。包括但不限于CANopen標(biāo)準(zhǔn): 對CANopen規(guī)范進(jìn)行深入講解,包括但不限于通信對象(COB-ID)的管理,進(jìn)程數(shù)據(jù)對象(PDO)、服務(wù)數(shù)據(jù)對象(SDO)和網(wǎng)絡(luò)管理(NMT)等核心概念。一、CANopen簡介CANopen是基于Can的應(yīng)用層協(xié)議,其報文分為過程數(shù)據(jù)對象 (PDO) 和服務(wù)數(shù)據(jù)對象(SDO)CANopen本身的設(shè)計目的就是實現(xiàn)小網(wǎng)絡(luò)、控制信號的實時通訊,所以為了節(jié)約時間開銷,最大限度保證實時性,CANopen作了一些定義:報文傳輸采用CAN標(biāo)準(zhǔn)幀格式,即11bit的ID域,以盡量減小傳輸時間;網(wǎng)絡(luò)控制報文均采用數(shù)據(jù)最小字節(jié)數(shù)。比如心跳報文,只有1個字節(jié)數(shù)據(jù);實時更新的過程數(shù)據(jù)無需接收方報文應(yīng)答,即采用生產(chǎn)消費模型,降低總線負(fù)載;需要接收方確認(rèn)的配置參數(shù)一般都是采用快速單字傳輸,即1個報文最大傳送1個32位的參數(shù)變量,避免分幀引起的實時性降低。[/ol]
    從 OSI 的 7 層網(wǎng)絡(luò)模型的角度來看同,CAN(Controller Area Network)現(xiàn)場總線僅僅定義了第 1 層(物理層,見 ISO11898-2 標(biāo)準(zhǔn))、第 2 層(數(shù)據(jù)鏈路層,見 ISO11898-1 標(biāo)準(zhǔn));而在實際設(shè)計中,這兩層完全由硬件實現(xiàn),設(shè)計人員無需再為此開發(fā)相關(guān)軟件(Software)或固件(Firmware),只要了解如何調(diào)用相關(guān)的接口和寄存器,即可完成對 CAN 的控制。

    CAN 總線的工業(yè)自動化應(yīng)用中,由于設(shè)備的互通互聯(lián)的需求越來越多,所以需要一個開放的、標(biāo)準(zhǔn)化的高層協(xié)議:這個協(xié)議支持各種 CAN 廠商設(shè)備的互用性、互換性,能夠?qū)崿F(xiàn)在 CAN 網(wǎng)絡(luò)中提供標(biāo)準(zhǔn)的、統(tǒng)一的系統(tǒng)通訊模式,提供設(shè)備功能描述方式,執(zhí)行網(wǎng)絡(luò)管理功能。其中包括:應(yīng)用層(Application layer):為網(wǎng)絡(luò)中每一個有效設(shè)備都能夠提供一組有用的服務(wù)與協(xié)議。通訊描述(Communication profile):提供配置設(shè)備、通訊數(shù)據(jù)的含義,定義數(shù)據(jù)通訊方式。設(shè)備描述(Device proflile):為設(shè)備(類)增加符合規(guī)范的行為。[/ol]
    二、CANopen的發(fā)展歷史

    1994年CiA聯(lián)盟(CAN in Automation ) 發(fā)布CANopen首版CiA301,CANopen的成功不是一個大供應(yīng)商推動的,而是眾多中小企業(yè)推動的。早期的CANopen,CAN遠(yuǎn)程還受到青睞,并且節(jié)點保護(hù)也是基于遠(yuǎn)程幀設(shè)計,后來被心跳報文取代,現(xiàn)在的CiA規(guī)范已經(jīng)不建議使用遠(yuǎn)程幀。CiA301是CANopen最重要的最重要的基礎(chǔ)協(xié)議,第一個版本已經(jīng)定義了PDO (過程數(shù)據(jù)對象)和SDO(服務(wù)數(shù)據(jù)對象)引入了PDO的同步傳輸以及網(wǎng)絡(luò)管理(NMT) 和緊急消息。后來在CiA301基礎(chǔ)之上,針對各個行業(yè)推出一大批子協(xié)議,[/ol]
    三、CANopen ID這里的CAN-ID也叫COB-ID(Communication Objectldentifier, 通信對象編號)。Node-ID節(jié)點ID,最大128個,范圍0-127。[/ol]

    根據(jù)不同的功能碼,預(yù)定的CAN-ID如下:


    四、CANopen協(xié)議?蚣


    五、PDOPDO簡介:過程數(shù)據(jù),即單向傳輸,無需接收節(jié)點回應(yīng) CAN 報文來確認(rèn),從通訊術(shù)語上來說是于“生產(chǎn)消費”模型,數(shù)據(jù)長度被限制為 1~8 字節(jié)。最多只要 1 就可以把一條信息或者一個變量傳遞結(jié)束。

    PDO協(xié)議:節(jié)點的PDO共定義8個數(shù)據(jù)對象,TPDO 和 RPDO 分別有4個,如下圖所示:

    PDO數(shù)據(jù)對象有三個重要參數(shù),分別為通訊參數(shù),映射參數(shù),數(shù)據(jù)存放。RPDO 通訊參數(shù) 1400h to15FFh,映射參數(shù) 1600h to 17FFh,數(shù)據(jù)存放為 2000h 之后廠商 自定義區(qū)域: TPDO 通訊參數(shù) 1800h to19FFh,映射參數(shù) 1A00h to 1BFFh,數(shù)據(jù)存放為 2000h 之后廠商自定義區(qū)域。所有的 PDO 傳送數(shù)據(jù)必須透過對象宇典映像到對應(yīng)的索引區(qū)上。
    PDO通訊參數(shù):

    ①Number of entries 參數(shù)條目數(shù)量: 即本索引中有幾條參數(shù);②COB-ID: 即這個 PDO 發(fā)出或者接收的對應(yīng) CAN ID;③發(fā)送類型:即這個 PDO 發(fā)送或者接收的傳輸形式,通常使用循環(huán)同步和異步制造商特定事件較多;④Inhibit time 生產(chǎn)禁止約束時間(1/10ms): 約束 PDO 發(fā)送的最小間隔,避免導(dǎo)致總線負(fù)載劇烈增加,比如數(shù)字量輸入過快,導(dǎo)致狀態(tài)改變發(fā)送的 TPDO 頻繁發(fā)送總線負(fù)載加大,所以需要一個約束時間來進(jìn)行“濾波”,這個時間單位為 0.lms;⑤Event timer 事件定時器觸發(fā)的時間(單位 ms):定時發(fā)送的 PDO,它的定時時間如果這個時間為 0,則這個 PDO 為事件改變發(fā)送;⑥SYNC start value 同步起始值:同步傳輸?shù)?PDO,收到諾干個同步包后,才進(jìn)行發(fā)送,這個同步起始值就是同步包數(shù)量。比如設(shè)置為 2,即收到 2 個同步包后才進(jìn)行發(fā)送。
    PDO映射:[/ol]為了更加直觀地表現(xiàn)映射,將參數(shù)、應(yīng)用數(shù)據(jù)、CAN 報文數(shù)據(jù)聯(lián) 合起來展示,不同的映射采用不同的顏如下圖所示:


    六、SDOSDO簡介:服務(wù)數(shù)據(jù),主要用于 CANopen 主站對從節(jié)點的參數(shù)配置。為每個消息都生成一個應(yīng)答,確保數(shù)據(jù)傳輸?shù)臏?zhǔn)確性,在一個CANopen 系統(tǒng)中,通常 CANopen 從節(jié)點作為 SDO 服務(wù)器,CANopen 主節(jié)點作為客戶端。

    SDO協(xié)議:SDO 分為快速 SDO 協(xié)議和普通SDO協(xié)議,快速SDO數(shù)據(jù)長度最大4個字節(jié),普通SDO沒有最大限制。其報文格式如下圖所示,由命令碼、索引、子索引和數(shù)據(jù)組成。

    節(jié)點的SDO定義如下圖所示:

    SDO 客戶端通過索引和子索引,能夠訪問 SDO 服務(wù)器上的對 象字典。這樣 CANopen 主節(jié)點可以訪問從節(jié)點的任意對象字典項的參數(shù),并且 SDO 也可以 傳輸任何長度的數(shù)據(jù)。發(fā)送方 (客戶端)發(fā)送 CAN-ID 為600h+Node-ID 的報文,Node-D 為接收方(服務(wù)器) 的節(jié)點地址,數(shù)據(jù)長度均為 8 字節(jié),實際數(shù)據(jù)小于8字節(jié)時,用0補齊到8字節(jié)。
    [/ol]
    快速SDO報文格式:快速SDO的讀報文格式如下圖所示:

    快速SDO的寫報文格式如下圖所示:

    說明:圖中的符號”-“表示數(shù)據(jù)不予考慮,使用0進(jìn)行填充。
    普通SDO報文格式:普通SDO傳輸?shù)挠行?shù)據(jù)長度大于4個字節(jié),采用分段式傳輸方式,讀和寫均分成了三個階段:初始報文(在傳輸數(shù)據(jù)之前確認(rèn)要傳輸?shù)臄?shù)據(jù)長度),傳輸過程報文(按照傳輸規(guī)格把數(shù)據(jù)進(jìn)行分段傳輸);結(jié)束報文(數(shù)據(jù)分段的最后一段數(shù)據(jù))。
    ①普通SDO的讀操作報文格式分段讀初始報文:獲取從站(服務(wù)器)指定索引對象的讀取數(shù)據(jù)長度,與快速傳輸?shù)淖x指令一致使用0x40指令(這里同時也就說明分段讀取是由從設(shè)備的返回數(shù)據(jù)所決定的,這里返回的是0x41指今而不是快速傳輸中的0x43、47等指令) 。

    分段讀傳輸過程報文:在傳輸過程中,主站(客戶端先發(fā)送指今0x60的報文開始讀傳輸,同時從站(服務(wù)器)響應(yīng)0x00指令的報文上傳一段數(shù)據(jù),下一主站發(fā)送0x70指令的報文,這時從站響應(yīng)0x10指令的報文繼續(xù)上傳下一段數(shù)據(jù),然后又會再次按照0x60-00、0x70-10的順序接著下傳輸后續(xù)的數(shù)據(jù),每次7個字節(jié),最后的一段數(shù)據(jù)將會進(jìn)入結(jié)束報文階段。只要總數(shù)據(jù)大小不超過7也會一開始直接進(jìn)入結(jié)束階段。

    分段讀結(jié)束報文:在上一個階段中,數(shù)據(jù)是按照0x60-00、0x70-10的順序進(jìn)行交替?zhèn)鬏,?dāng)發(fā)送到最后一段數(shù)據(jù)時,主站并不知道是到達(dá)最后一段了,所以主站發(fā)送的“0x60或70“指令保持不變,而其對應(yīng)從站的響應(yīng)指令”0x00或10“替換成對應(yīng)的結(jié)束指令。

    ②普通SDO的寫操作報文格式分段寫初始報文:通知從站(服務(wù)器)指定索引對象的寫入數(shù)據(jù)長度,使用0x21指令發(fā)送這個長度值。

    分段寫傳輸過程報文:在傳輸過程中,主站(客戶端先發(fā)送指今0x00的報文開始讀傳輸,同時從站(服務(wù)器)響應(yīng)0x20指令的報文上傳一段數(shù)據(jù),下一主站發(fā)送0x10指令的報文,這時從站響應(yīng)0x30指令的報文繼續(xù)上傳下一段數(shù)據(jù):然后又會再次按照0x00-20、0x10-30的順序接著往下傳輸后續(xù)的數(shù)據(jù),每次7個字節(jié)。最后的一段數(shù)據(jù)將會進(jìn)入結(jié)束報文階段。只要總數(shù)據(jù)大小不超過7也會一開始直接進(jìn)入結(jié)束階段。

    分段寫結(jié)束報文:在上一個階段中,數(shù)據(jù)是按照0x00-20、0x10-30的順序進(jìn)行交替?zhèn)鬏,?dāng)發(fā)送到最后一段數(shù)據(jù)時,主站會把“0x00或10“指令替換成對應(yīng)的結(jié)束指令,而其對應(yīng)的從站響應(yīng)指令”0x20或30“保持不變。

    [/ol]
    七、NMT網(wǎng)絡(luò)管理NMT(NetworkManagement)采用的主從方式,主機(jī)節(jié)點可以向從節(jié)點發(fā)送和請求數(shù)據(jù)。同一個網(wǎng)絡(luò)中只能有一個主節(jié)點,一個或者多個從節(jié)點。

    NMT節(jié)點狀態(tài)切換:

    各種狀態(tài)下支持的報文操作:

    上線報文:

    心跳報文:

    NMT報文:[/ol]


    八、時間戳協(xié)議NMT主機(jī)發(fā)送自身的時鐘,為網(wǎng)絡(luò)各個節(jié)點提供公共的時間參考。


    九、同步協(xié)議該報文對象主要實現(xiàn)整個網(wǎng)絡(luò)的同步傳輸,一般同步報文由 NMT 主機(jī)發(fā)出。

    同步窗口時間:索引1007h 約束了同步發(fā)送后,從節(jié)點發(fā)送PDO 的時效,即在這個時間內(nèi)發(fā)送的 PDO 才有效超過時間的 PDO將被丟棄。通訊循環(huán)周期:索引1006h 規(guī)定了同步頓的循環(huán)周期。
    十、緊急報文協(xié)議當(dāng)設(shè)備內(nèi)部發(fā)生錯誤,觸發(fā)該對象,發(fā)送設(shè)備內(nèi)部錯誤代碼,提示 NMT 主站。緊急報文屬于診斷性報文,一般不會影響 CANopen 通訊。


    總結(jié)CANopen是基于CAN(控制器局域網(wǎng))總線的一種高級通信協(xié)議,被廣泛應(yīng)用于自動化和嵌入式系統(tǒng)中。本章旨在提供詳細(xì)的CANopen相關(guān)知識、最佳實踐和實際應(yīng)用案例。包括但不限于CANopen標(biāo)準(zhǔn): 對CANopen規(guī)范進(jìn)行深入講解,包括但不限于通信對象(COB-ID)的管理,進(jìn)程數(shù)據(jù)對象(PDO)、服務(wù)數(shù)據(jù)對象(SDO)和網(wǎng)絡(luò)管理(NMT)等核心概念。
    end

    一口Linux

    關(guān)注,回復(fù)【1024】海量Linux資料贈送
    精彩文章合集
    文章推薦
    ?【專輯】ARM?【專輯】粉絲問答?【專輯】所有原創(chuàng)?【專輯】linux入門?【專輯】計算機(jī)網(wǎng)絡(luò)?【專輯】Linux驅(qū)動?【干貨】嵌入式驅(qū)動工程師學(xué)習(xí)路線?【干貨】Linux嵌入式所有知識點-思維導(dǎo)圖
  • 回復(fù)

    使用道具 舉報

    發(fā)表回復(fù)

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規(guī)則

    關(guān)閉

    站長推薦上一條 /1 下一條


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表