那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

CANOpen系列教程04 _CAN總線波特率、位時序、幀類型及格式說明

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-03-06 16:18 ? 次閱讀

1寫在前面

上一篇文章講述了CAN收發器的重要作用,也提及了一下CAN總線的優勢主要在于CAN控制器。CAN控制器在CAN網絡中所處的位置如下圖:

本文講述的CAN控制器實現的幾個重要功能:CAN總線波特率、位時序、幀類型。

2

CAN總線波特率

CAN總線屬于異步通信,因此就有通信波特率,而這個波特率發生器就位于CAN控制器內部。我們不需要了解它是如何產生的,但需要了解它的含義。這章節針對初學者講述以下兩點內容。

2.1 異步通信

在串行通信中,主要分異步通信和同步通信。

同步通信:通信設備之間通過同步信號(CLK時鐘)來實現數據傳輸的通信叫同步通信。如I2C、SPI這類通信中都具有一個時鐘信號,其實在STM32中USART也具有同步功能,只是我們大多數人都只用了它的異步功能。

異步通信:簡單來說,就是通信設備之間通過約定一樣的時間來收發數據。而這個時間就會決定本節說的波特率。

2.2 波特率

很多工程師一直都沒徹底搞明白什么是波特率,我這里還是結合UART波特率來簡述一下其含義。

電子通信領域,波特(Baud)即調制速率,指的是有效數據信號調制載波的速率,即單位時間內載波調制狀態變化的次數。它是對符號傳輸速率的一種度量,1波特即指每秒傳輸1個符號。

UART每秒鐘傳送240個字符,而每個字符格式包含10位(1個起始位,1個停止位,8個數據位),這時的波特率為240Bd,比特率為10位*240個/秒=2400bps。

從上面的描述可以總結:

比特率:即單位時間內傳送的二進制位數;

波特率:即單位時間內傳輸的符號個數;

只有在每個符號只代表一個比特信息的情況下,波特率與比特率才在數值上相等,但是它們的意義并不相同。

3

位時序

上一章節講述了波特率,而決定波特率大小的就是本節說的位時序。在CAN標準中一個位可分為4段:

同步段(SS)

傳播時間段(PTS)

相位緩沖段1(PBS1)

相位緩沖段2(PBS2)

這些段又由可稱為 Time Quantum(簡稱Tq)的最小時間單位構成。

1位分為4個段,每個段又由若干個Tq構成,這稱為位時序。

而在STM32參考手冊中,將位時序分為三段,但它將它傳播段和位段1合并在一起了,如下圖:

1位由多少個Tq構成、每個段又由多少個Tq構成等,可任意設定位時序。通過設定位時序,決定傳輸的波特率:

這幾個參數會在以后編程中進行配置,從而決定通信的波特率。

關于同步,還有硬件同步、再同步等操作。但初學者可以不必過多理解,掌握上面基礎內容就行了。更多關于位時序的內容可以參看 ISO 11898 標準。

4

幀類型及格式說明

CAN總線是通過以下5種類型的幀進行通信:

數據幀:用于發送單元向接收單元傳送數據的幀。

遙控幀:用于接收單元向具有相同 ID 的發送單元請求數據的幀。

錯誤幀:用于當檢測出錯誤時向其它單元通知錯誤的幀。

過載幀:用于接收單元通知其尚未做好接收準備的幀。

幀間隔:用于將數據幀及遙控幀與前面的幀分離開來的幀。

數據幀和遙控幀有標準格式和擴展格式兩種格式。標準格式有11個位的標識符ID,擴展格式有29個位的ID。

4.1 數據幀

如上圖,數據幀由7個段構成:

(1) 幀起始

表示數據幀開始的段。

(2) 仲裁段

表示該幀優先級的段。

(3) 控制段

表示數據的字節數及保留位的段。

(4) 數據段

數據的內容,可發送 0~8 個字節的數據。

(5) CRC 段

檢查幀的傳輸錯誤的段。

(6) ACK 段

表示確認正常接收的段。

(7) 幀結束

表示數據幀結束的段。

理解數據幀的含義,請從認真理解它的定義:用于發送單元向接收單元傳送數據的幀。

一般的CAN總線通信,總線上通信絕大部分時候都是數據幀。像在CANOpen協議中,用的最多的PDO過程數據對象就是通過數據幀進行的通信。

初學者可以先理解數據幀,然后其他就容易理解了。下面再來講述一下數據幀7段的詳情。

4.1.1 幀起始

標準和擴展格式相同。表示幀開始的段,1個位的顯性位(如下圖):

關于顯性和隱性電平,請參看我上一篇文章差分信號章節。

總線上的電平有顯性電平和隱性電平兩種。

總線上執行邏輯上的線“與”時,顯性電平的邏輯值為“0”,隱性電平為“1”。

“顯性”具有“優先”的意味,只要有一個單元輸出顯性電平,總線上即為顯性電平。并且,“隱性”具有“包容”的意味,只有所有的單元都輸出隱性電平,總線上才為隱性電平。(顯性電平比隱性電平更強)

4.1.2 仲裁段

標準格式和擴展格式在此的構成有所不同。仲裁段表示該幀優先級的段,擴展格式多了18位ID(如下圖):

RTR = 0代表數據幀,RTR = 1代表遠程幀。

為什么叫仲裁段,就是通過ID來判斷總線上哪一個節點具有優先發送的權利。ID越小(0代表顯性),優先級越高。

4.1.3 控制段

標準和擴展格式的構成有所不同。控制段由 6 個位構成(如下圖):

它們除了都有4位表示數據段長度代碼(DLC)外,標準幀有IDE(數值為0)位和r0保留位,擴展幀有r0和r1保留位。

保留位必須全部以顯性電平發送。但接收方可以接收顯性、隱性及其任意組合的電平。

4.1.4 數據段

標準和擴展格式相同。數據段表示傳輸數據的內容,從 MSB(最高位)開始輸出,可發送 0~8 個字節的數據,長度由前面控制段決定。

4.1.5 CRC段

標準和擴展格式相同。CRC段是檢查幀傳輸錯誤的幀,由 15 個位的 CRC 順序和 1 個位的 CRC 界定符(用于分隔的位)構成。

相比485這類通信,CAN控制器就已經把CRC校驗做了,不需要你的程序再次去計算,從而節約了處理器資源。

4.1.6 ACK段

標準和擴展格式相同。ACK段用來確認是否正常接收。由 ACK 槽(ACK Slot)和 ACK 界定符 2 個位構成。

A.發送單元在 ACK 段發送 2 個位的隱性位。

B.接收到正確消息的單元在 ACK 槽(ACK Slot)發送顯性位, 通知發送單元正常接收結束。這稱作“發送 ACK”或者“返回 ACK”。

4.1.7 幀結束

標準和擴展格式相同。幀結束是表示該該幀的結束的段。由 7 個位的隱性位構成。

4.2 遙控幀

和數據幀相比,遙控幀是接收單元向發送單元請求發送數據所用的幀。所以,遙控幀沒有數據段。因此,遙控幀由如下 6 個段組成:

(1) 幀起始(SOF)

表示幀開始的段。

(2) 仲裁段

表示該幀優先級的段。可請求具有相同 ID 的數據幀。

(3) 控制段

表示數據的字節數及保留位的段。

(4) CRC 段

檢查幀的傳輸錯誤的段。

(5) ACK 段

表示確認正常接收的段。

(6) 幀結束

表示遙控幀結束的段。

這6個段和上面數據幀的內容基本一樣,這里就不一一講述了。講一下遙控幀和數據幀的區別:

遙控幀的 RTR 位為隱性位,沒有數據段。

沒有數據段的數據幀和遙控幀可通過 RTR 位區別開來。

問題一:遙控幀沒有數據段,數據長度碼該如何表示?

遙控幀的數據長度碼以所請求數據幀的數據長度碼表示。

問題二:沒有數據段的數據幀有何用途?

例如,可用于各單元的定期連接確認/應答、或仲裁段本身帶有實質性信息的情況下。

4.3 錯誤幀

用于在接收和發送消息時檢測出錯誤通知錯誤的幀。錯誤幀由錯誤標志和錯誤界定符構成。

(1) 錯誤標志

錯誤標志包括主動錯誤標志和被動錯誤標志兩種。

主動錯誤標志: 6 個位的顯性位。

被動錯誤標志: 6 個位的隱性位。

(2) 錯誤界定符

錯誤界定符由 8 個位的隱性位構成。

4.4 過載幀

過載幀是用于接收單元通知其尚未完成接收準備的幀。過載幀由過載標志和過載界定符構成。

(1) 過載標志

6 個位的顯性位。

過載標志的構成與主動錯誤標志的構成相同。

(2) 過載界定符

8 個位的隱性位。

過載界定符的構成與錯誤界定符的構成相同。

4.5 幀間隔

幀間隔是用于分隔數據幀和遙控幀的幀。數據幀和遙控幀可通過插入幀間隔將本幀與前面的任何幀(數據幀、遙控幀、錯誤幀、過載幀)分開。

過載幀和錯誤幀前不能插入幀間隔。

(1) 間隔

3 個位的隱性位。

(2) 總線空閑

隱性電平,無長度限制(0 亦可)。

本狀態下,可視為總線空閑,要發送的單元可開始訪問總線。

(3) 延遲傳送(發送暫時停止)

8 個位的隱性位。

只在處于被動錯誤狀態的單元剛發送一個消息后的幀間隔中包含的段。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • CAN總線
    +關注

    關注

    145

    文章

    1955

    瀏覽量

    131099
  • CANopen
    +關注

    關注

    8

    文章

    270

    瀏覽量

    43759
  • 波特率
    +關注

    關注

    2

    文章

    308

    瀏覽量

    34280
收藏 人收藏

    評論

    相關推薦

    RS232通信的波特率設置說明

    RS232通信的波特率設置是確保數據正確傳輸的關鍵參數之一。以下是對RS232通信波特率設置的說明: 一、波特率的概念 波特率是指每秒傳輸的
    的頭像 發表于 12-10 16:26 ?1450次閱讀

    波特率設置中的常見問題解析

    速率(Data Rate)混淆。數據速率是指單位時間內傳輸的有效數據量,而波特率是指單位時間內傳輸的符號數量。 解決方案: 要區分兩者,需要理解波特率是數據速率的基礎。例如,如果一個通信系統使用8位數據格式,那么數據速率將是波
    的頭像 發表于 11-22 10:06 ?567次閱讀

    波特率與串行通信的關系 各種設備波特率轉換的方法

    波特率(Baud Rate)是串行通信中的一個重要參數,它指的是信號傳輸的速率,即單位時間內傳輸的符號(或信號狀態)的數量。在串行通信中,波特率決定了數據傳輸的速度,因此對于通信效率和設備兼容性
    的頭像 發表于 11-22 10:01 ?726次閱讀

    常見的波特率標準和協議

    波特率是指在數據通信中,每秒鐘傳輸的符號數(或比特數),是衡量數據通信速度的重要指標。在不同的通信協議和場景中,常見的波特率標準和協議有所不同。以下是一些常見的波特率標準和協議: 一、串口通信
    的頭像 發表于 11-22 09:56 ?2474次閱讀

    波特率的定義和計算方法 波特率與數據傳輸速度的關系

    波特率的定義 波特率(Baud Rate),又稱調制速率或傳符號,是指每秒傳輸的符號數目,單位為波特(Bd)。它是一個數字信號通信中重要的參數,在串行通信協議中經常被用作衡量串行數據
    的頭像 發表于 11-22 09:49 ?3553次閱讀

    波特率9600和115200的區別

    在現代通信技術中,數據傳輸速率是一個關鍵的性能指標。對于串行通信,波特率是衡量數據傳輸速度的基本單位。波特率9600和115200是兩種常見的設置,它們在不同的應用場景中有著各自的優勢和局
    的頭像 發表于 10-18 14:56 ?2472次閱讀

    波特率與比特有何關系 波特率與數據傳輸速率的關系

    波特率(Baud Rate)和比特(Bit Rate)是衡量數據通信系統性能的兩個重要參數,它們之間有著密切的關系,但并不完全相同。 波特率(Baud Rate): 波特率是指在數據
    的頭像 發表于 10-18 14:55 ?1246次閱讀

    uart波特率和傳輸頻率的關系 UART串口的常用波特率為多少

    頻率是兩個關鍵參數,它們之間存在一定的關系,并且UART串口有一系列常用的波特率。以下是對這兩個概念的介紹。 一、UART波特率和傳輸頻率的關系 1. 定義與區別 波特率(Baud R
    的頭像 發表于 10-06 16:12 ?3628次閱讀
    uart<b class='flag-5'>波特率</b>和傳輸頻率的關系 UART串口的常用<b class='flag-5'>波特率</b>為多少

    CAN總線應用常見問題(2)

    CAN總線作為一種常用的通信協議,在汽車、工業自動化等領域得到廣泛應用。然而,由于各種原因,CAN總線在使用過程中可能會出現各種故障,本文將繼續講解
    的頭像 發表于 07-26 14:56 ?805次閱讀
    <b class='flag-5'>CAN</b><b class='flag-5'>總線</b>應用常見問題(2)

    如何使用CAN盒測出目標CAN設備的波特率

    要使用CAN盒測出目標CAN設備的波特率,可以按照以下步驟進行: (1)硬件準備: 準備一個與目標CAN設備兼容的CAN盒。 確保
    的頭像 發表于 06-26 16:41 ?858次閱讀

    求助,關于STM32F103C8T6的CAN波特率偵測問題求解

    用示波器測試CAN總線上的H與L是可以得到CAN波特率的,現在想通過單片機的捕獲CAN接口上的RX引腳與TX引腳信號,然后計算得到
    發表于 05-09 08:29

    波特率有什么危害尼?又該如何避免?

    深入探討了波特率過高可能帶來的危害,并提供了一些實用建議來保護設備不受影響。在通信領域,波特率是決定數據傳輸速度的重要參數。然而,波特率設置不當可能會對設備造成嚴重的影響。本文旨在揭示波特率
    的頭像 發表于 04-03 16:45 ?1495次閱讀

    使用cubemx設置CAN波特率與實際測得的波特率不一致的原因?

    使用cubemx設置CAN波特率與實際測得的波特率不一致。
    發表于 03-26 07:06

    在STM32F103的CAN通訊過程中,一條總線上有幾個不同波特率的設備,可以在CAN通訊前修改波特率嗎?

    在STM32F103的CAN通訊過程中,一條總線上有幾個不同波特率的設備,可以在CAN通訊前修改波特率嗎?這樣一條
    發表于 03-26 06:35

    為啥要轉換波特率 波特率和傳輸速率的關系

    對于串行多主 CAN 總線,如果波特率被稱為“500000波特”,則 CAN 上的該端口每秒最多可傳輸500000
    的頭像 發表于 03-06 17:38 ?5440次閱讀
    為啥要轉換<b class='flag-5'>波特率</b> <b class='flag-5'>波特率</b>和傳輸速率的關系
    百家乐官网试玩账户| 威尼斯人娱乐城海立方| 金龍百家乐官网的玩法技巧和规则 | 百家乐官网荷| 百家乐官网大娱乐场开户注册 | 大发888好吗| 百家乐麻将筹码币| ez百家乐技巧| 网上百家乐真实度| 做生意讲究风水吗| A8百家乐游戏| 属猪与属蛇做生意怎么样| 真人百家乐官网蓝盾娱乐网| 百家乐官网玩法与规则| 百家乐官网怎么注册| 百家乐官网会骗人吗| 博士百家乐官网现金网| 鄂伦春自治旗| 百家乐官网赢的秘诀| 现金百家乐官网| 百家乐官网视频聊天软件| 百家乐官网桌子10人| 澳门百家乐官网娱乐城注册 | 娱乐城百家乐官网的玩法技巧和规则 | LV百家乐娱乐城| 大发888 casino| 娱乐城注册送钱| 188金宝博娱乐城| 桂阳县| 百家乐官网庄家赢钱方法| 百家乐官网真人游戏投注网| 闲和庄百家乐官网娱乐场| 百家乐官网77scs官| 百家乐的必胜方法| 摩纳哥百家乐的玩法技巧和规则 | 百家乐娱乐平台开户| 大发888官方网| 赌场少女| 百家乐官网赌机凤凰软件| 连环百家乐官网的玩法技巧和规则| 百家乐压分规律|