天天看點

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

CAN FD(CAN with flexible data-rate)是CAN2.0協定的擴充,CAN-FD由博世開發,并由 ISO 11898-1:2015标準化。

本帖是對如下的30多頁英文文檔進行了翻譯:

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

CAN FD應用筆記.pdf (365.06KB)

一、CAN FD協定介紹

1、CAN-FD特性

(1)相容經典CAN,可以遵循ISO 11898-1做資料收發。

(2)提升錯誤檢測,支援高達CRC 21位的校驗和。

(3)消息優先級。

(4)保證延遲時間。

(5)配置靈活性。

(6)具有時間同步的多點傳播接收。

(7)系統範圍内的資料一緻性,每條消息最多64個位元組。

(8)多主機。

(9)錯誤檢測和信号。

(10)區分節點的臨時錯誤和永久性故障以及自動關閉缺陷節點。

2、CAN-FD格式:

第一個仲裁階段(The first arbitration phase)是一條消息,其中包含:

(1)幀開始(SOF)。

(2)ID号和其他位,訓示消息的目的(提供或請求資料),以及速度和格式配置(CAN或CAN-FD)。

資料傳輸階段(The data transmission phase)包括:

(1)資料長度代碼(DLC),訓示消息包含多少資料位元組。

(2)使用者希望發送的資料。

(3)檢查循環備援序列(CRC)。

(4)顯性位。

第二個仲裁階段(The second arbitration phase)包含:

(1)總線上其他節點發送的确認(ACK)的接收器(如果至少有一個接收器成功收到消息)

(2)幀尾(EOF),在IFS期間不傳輸任何消息:目标是将目前幀與下一幀分開。

注意:對于29bit辨別符幀,當添加18bit辨別到第1個仲裁階段的IDE bit之後與标準CAN FD是類似的。

二、CAN-FD相比CAN2.0的提升

CAN-FD的開發可以滿足需要更高帶寬的通信網絡需求。每幀最多具有64個位元組的CAN-FD以及将比特率提高到最大的可能性,使資料階段要快8倍,在第二個仲裁階段要恢複到正常的比特率。通過以下方式確定資料傳輸的完整性:

(1)17級多項式對最大16位元組的有效載荷進行CRC。

(2)21級多項式對16到64位元組之間的有效載荷進行校驗。

标準幀和CAN FD的差別:

辨別符後,CAN 2.0和CAN-FD具有不同的作用:

(1)CAN 2.0發送RTR位以精确确定幀類型:資料幀(RTR為主要)或遠端幀(RTR)是隐性的)。

(2)由于CAN-FD僅支援資料幀,是以始終發送占優勢的RRS(保留)。

IDE位保持在相同位置,并以相同的動作來區分基本格式(11位辨別符)。請注意,在擴充格式的情況下,IDE位以顯性或隐性方式傳輸(29位辨別符)。

與CAN 2.0相比,在CAN-FD幀中,在控制字段中添加了三個新位:

(1)擴充資料長度(EDL)位:隐性表示幀為CAN-FD,否則該位為顯性(稱為R0)在CAN 2.0幀中。

(2)比特率切換(BRS):訓示是否啟用兩個比特率(例如,當資料階段位以不同的比特率傳輸到仲裁階段)。

(3)錯誤狀态訓示器(ESI):訓示節點處于錯誤活動模式還是錯誤被動模式。

控制字段的最後一部分是資料長度代碼(DLC),它具有相同的位置和相同的長度(4位),用于CAN 2.0和CAN-FD。

DLC功能在CAN-FD和CAN 2.0中相同,但CAN-FD有很小變化(下表中的詳細資訊)。

CAN-FD擴充幀允許單個消息中發送64個資料位元組,而CAN 2.0有效負載資料最多可以發送8個位元組。

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

通過增加有效載荷資料的資料字段來改善網絡帶寬,因為需要更少的包處理。 同時,通過為CRC添加更多位來增強消息完整性:

(1)如果有效載荷資料最多為16個位元組,則CRC以17位編碼。

(2)如果有效載荷資料大于20(16)個位元組,則CRC以21位編碼。

另外,為了確定CAN-FD幀的魯棒性,填充位機制支援CRC字段。下表總結了CAN-FD和CAN 2.0之間的主要差別。 提供的主要功能與CAN

2.0相比,CAN‑FD的改進之處在于資料有效負載的增加和速度的提高由CAN-FD中可用的BRS,EDL和ESI位來確定。

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

三、CAN FD協定介紹

STM32H7的CAN FD符合ISO 11898-12015标準。

STM32器件上的FDCAN的功能如下所示:

(1)符合CAN協定2.0版A,B和ISO 11898-1:2015,-4。

(2)可通路的10 KB RAM記憶體,最多可配置設定2560個字。

(3)改進了接收過濾。

(4)兩個可配置的接收FIFO。

(5)多達64個專用接收緩沖區。

(6)接收高優先級消息時的單獨信令。

(7)多達32個專用發送緩沖區。

(8)可配置的發送FIFO和發送隊列。

(9)可配置的發送事件FIFO。

(10)時鐘校準單元。

(11)收發器延遲補償。

下圖說明了FDCAN框圖。

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

通過這個框圖要了解到以下資訊:

(1)CANFD1和CANFD2共用一個RAM空間

(2)每個CANFD都有自己的核心

(3)CAN核心實作協定控制和收發移位寄存器

(4)Tx handler控制消息從CAN消息RAM到CAN核心

(5)Rx handler控制CAN核心到CAN消息RAM

四、RAM管理

必須配置每條消息的位元組數,以确定每條消息所需的記憶體大小。 CAN-FD上有效負載的增加可以更有效的将記憶體都利用起來,并允許更多消息要存儲在配置設定的存儲空間中。

總的專用RAM大小是2560個32bit資料。

(1)過濾區(11bit過濾和29bit過濾)

(2)接收區(Rx FIFO 0,Rx FIFO 1和Rx Buffer)

(3)發送區(Tx event FIFO,Tx Buffers)

(4)觸發空間(Trigger memory)

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

FDCAN外設的所有部分都可以由使用者配置。 所有部分的所有元素之和必須不能超過CAN消息RAM的總大小。

該RAM通過以下方式提高了靈活性和性能:進而有可能消除未使用的部分,并為其他部分擴充足夠的記憶體。在CAN消息中以動态且連續的方式配置設定每個部分(按照上圖順序);

但是為了避免超出RAM的風險并且出于可靠性的原因,沒有将特定的開始和結束位址配置設定給每個部分。

FDCAN外設可以配置三種傳輸機制:Tx buffer ,Tx queue 和 Tx FIFO并可以通過Rx buffer 和 Rx FIFO 接收。 它們配置有起始位址偏移量和要存儲的存儲元素。 起始位址是在配置中預定義的(0到2560),使用者必須確定每個記憶體空間中的元素數量不會導緻它們重疊。

注:消息的接收和發送意味着在RAM級别存儲“元素”。 這個“元素”僅包含辨別符,DLC,控制位(ESI,XTD,RTR,BRS,FDF),資料字段和特定的發送/接收位字段進行控制。 CAN消息的其餘位會自動由硬體處理而不儲存在RAM中 。

用于控制接收的特定位字段是濾波器索引,可接受的不比對幀和Rx時間戳。用于傳輸的特定位字段是消息标記(message marker)和event

FIFO控制位。無論Tx buffer, Tx FIFO, Tx queue 或 Rx buffer

中的每個元素配置設定的32bit的數量是多少,要計算保留:

(1)标頭資訊(兩個保留的32bit),用于配置設定辨別符,DLC字段,控制位和特定的發送/接收位字段。

(2)資料(足夠的32bit資料個數)以包含每個資料字段的位元組數。

下面的公式确定為每個元素配置設定的32bit的數量:

元素大小(以字為機關)=标頭資訊(2個字)+資料(資料字段/ 4)

其中資料字段是每條消息的資料位元組數

如果資料字段的範圍是0到8,則每個元素為資料配置設定2個字。下表詳細介紹了必要的“元素”大小,具體取決于資料字段範圍

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

有效使用CAN消息RAM的示例。 這個例子假設配置了FDCAN外設的應用程式:

(1)發送帶有專用Tx buffer的32條消息(每個消息在資料字段中包含8個位元組)。

(2)具有128個11位過濾器,用于接收消息。

(3)接收64條消息,其中每個消息在專用Rx buffers的資料字段中包含64個位元組。

(4)接收64條消息,其中每個消息在Rx FIFO 0的資料字段中包含64個位元組。

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

在此示例中,RAM中的配置設定按以下順序進行:

(1)在ID-11位部分配置設定128個字。

(2)保留1152個字用于接收Rx FIFO 0部分中的元素。

(3)保留1152個字,用于接收Rx緩沖區中的元素。

(4)為發送緩沖區中發送的元素保留128個字。

由于采用了動态配置設定,并且不對未使用的段進行任何配置設定,是以整個記憶體大小有效利用了RAM:在此應用程式中配置設定了所有2560個字。

注意:配置後,配置設定的位址範圍初始化為零

大多數STM32裝置支援一個以上的FDCAN外設來滿足所有應用程式要求。在這種情況下,重要的是要說RAM是在不同外設之間共享的。

使用者可以劃分各種外設上的RAM(每個外設的大小通過訓示其起始偏移位址來選擇)。下圖顯示了使用多個FDCAN執行個體的CAN消息RAM的示例。

這該示例假定使用者将CAN消息RAM分為兩個外設:第一個外設的大小為第二個外設的兩倍。

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

五、RAM過濾區

FDCAN外設可以配置兩套驗收濾波器:一套用于标準辨別符,一種是擴充辨別符,用于存儲或拒絕接收到的消息。128個過濾元素可以配置用來配置128個11bit标準ID和64個過濾元素可以用來配置64個29bit擴充ID。11位過濾器部分的起始位址通過FDCAN_SIDFC寄存器中的FLSSA

[13:0]位進行配置,并且通過FDCAN_XIDFC寄存器中的FLESA

[13:0]配置29位濾波器部分。下圖顯示了CAN消息RAM的一部分,其中包含過濾器元件的數量及其開始位置位址。

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

可以将這些過濾器配置設定給Rx FIFO 0/1或專用的Rx buffers。

FDCAN執行接受過濾,它總是從過濾器元素#0開始,然後周遊過濾器清單以找到比對項元素。驗收過濾在第一個比對元素處停止,而随後的過濾元素不在針對此消息進行了檢索。是以,配置過濾器元素的順序對過濾性能有很重要的影響。使用者選擇啟用或禁用每個過濾器元素,并可以配置每個元素以接受或拒絕過濾。每個過濾器元素可以配置為:

(1)範圍過濾器(Range filter):該過濾器比對辨別符在兩個ID定義的範圍内的所有消息。

(2)專用ID的過濾器(Filter for dedicated IDs):可以将過濾器配置為比對一個或兩個特定的辨別符。

(3)經典位屏蔽過濾器(Classic bit mask filter):通過對接收到的辨別符的位進行屏蔽來比對辨別符組。第一個ID配置為消息ID過濾器,第二個ID為過濾器屏蔽。過濾器屏蔽的每個零位屏蔽已配置的ID過濾器的相應位位置。

注:如果所有位均等于1,則僅當接收到的消息ID和消息ID過濾器相同時,才會發生比對。 如果所有掩碼位均等于0,所有消息ID均比對。

高優先級消息

當收到高優先級消息時,FDCAN可以通知使用者。 此通知可用于監視傳入的高優先級消息的狀态并啟用對這些元素的快速通路。FDCAN在消息過濾器的幫助下檢測到高優先級消息。 過濾器元素提供以下内容與高優先級郵件相關的設定:

(1)設定優先級并在過濾器比對的情況下存儲在FIFO 0/1中:如果此消息過濾器比對,則FDCAN通知高優先級消息到達的資訊,并将元素存儲在Rx FIFO 0/1中。

(2)如果過濾器比對,則設定優先級:如果此消息過濾器比對,則FDCAN會通知有關高優先級的資訊消息到達,但不存儲元素。

接收過濾流程圖:

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

舉例說明:

為了說明可以使用的不同類型的過濾器以及每種類型的結果,我們假設使用者想要配置FDCAN:

(1)拒絕所有辨別符在[0x16到0x20]範圍内的消息

(2)接受所有辨別符等于0x15或0x120的消息,并将它們存儲在FIFO 1中

(3)接受辨別符等于0x130的消息并将其存儲在Rx緩沖區索引4中

(4)接受具有與以下内容相對應的辨別符的消息:

–bit[10..6] = 0b111 00

–bit[5..4] = 不管,任意值

–bit[3..0] = 0b00000

在這種情況下,必須将過濾器配置為經典位屏蔽過濾器,因為可接受的辨別符對應于0b11100XX0000(其中x可以是0或1中的任何值)。 可接受的辨別符是:

– 0b111 0000 0000(0x700)

– 0b111 0001 0000(0x710)

– 0b111 0010 0000(0x720)

– 0b111 0011 0000(0x730)

基本過濾器ID可以是0x700、0x710、0x720、0x730中的任何值。 屏蔽過濾器ID等于0b111 1100 1111(0x7CF)。下表介紹了标準11位消息ID過濾器的不同配置,如上面的例子。 每個标準過濾器元素包含:

(1)SFT位(标準過濾器類型)

(2)SFEC位(标準過濾器元素配置)。

(3)SFID1位(标準過濾器ID1)

(4)SFID2位(标準過濾器ID2)

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

第一個過濾器配置為拒絕ID為[0x16 ... 0x20]範圍内的消息。

第二個過濾器配置為将ID等于雙ID 0x15或0x120的消息存儲在Rx FIFO 1中。

第三過濾器被配置為将ID等于0x130的消息存儲在Rx緩沖區索引4中。

注意:如果将SFEC配置為“存儲到"Rx buffer”,則将忽略SFT的配置。 驗收過濾器停在第一次比對。

是以,篩選器的順序很重要。本示例以與使用者配置擴充過濾器相同的方式配置标準過濾器(請參閱産品資料表以了解更多詳細資訊)。FDCAN的衆多過濾器可能性允許在硬體中進行複雜的消息過濾,這使得軟體過濾備援并節省CPU資源。

六、接收區

Rx FIFO 0和Rx FIFO 1

可以在CAN消息RAM中配置兩個Rx FIFO。 每個Rx FIFO部分最多可存儲64個元素。每個元素存儲在一個Rx FIFO元素中。可以通過FDCAN_RXESC寄存器分别為每個Rx FIFO配置Rx FIFO元素的大小。

Rx FIFO元素大小定義了可以存儲一個接收元素的資料字段位元組數。 一個大小Rx FIFO元素由前面RAM管理中指定的公式定義。

标頭資訊包含辨別符,DLC字段,控制位和位字段(過濾器索引,可接受的不比對幀,Rx時間戳)。通過FDCAN_RXESC寄存器中的F1DS

[2:0]字段配置元素大小後,Rx FIFO 1的元素個數和起始位址必須分别通過FDCAN_RXF1C寄存器中的F1S [6:0]和F1SA

[13:0]進行配置。下圖顯示了CAN消息RAM上的Rx FIFO部分,其中包含可以支援和每個部分的開始位址。

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

Rx FIFO的起始位址是第一個Rx FIFO元素的第一個字的位址。收到的元素通過比對過濾的資料将根據比對的過濾器元素存儲在适當的Rx FIFO中。如果Rx FIFO已滿,則可以根據兩種不同模式來處理新到達的元素:

(1)阻塞模式:這是Rx FIFO的預設操作模式,沒有其他元素寫入RxFIFO,直到至少一個元素已被讀出。

(2)覆寫模式:Rx FIFO中接受的新元素将覆寫Rx FIFO中最舊(最先接收的資料)的元素并且FIFO的put和get索引加1。

要從Rx FIFO讀取元素,CPU必須執行以下步驟:

(1)讀取寄存器FDCAN_RXF1S以了解Rx FIFO的狀态。

(2)按照以下公式計算RAM中最舊的元素的位址:

Oldest element address = CAN_message_RAM_base_address + FDCAN_RXF1C.F1SA

(start address) + FDCAN_RXF1S.F1GI (get Index) x Rx FIFO_element_size.

(3)從計算出的位址中讀取元素。

CPU從Rx FIFO讀取一個元素或一系列元素後,它必須确認讀取。确認後,FDCAN可以将相應的Rx

FIFO緩沖區重新用于新元素。為了确認一個或多個元素,則CPU必須将從Rx

FIFO讀取的最後一個元素的緩沖區索引寫入FDCAN_RXF1A寄存器。結果,FDCAN更新了FIFO填充級别和get索引。

RX FIFO流程:

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

Rx FIFO 0和Rx FIFO 1具有相同的寄存器,它們的名稱有意義,方法是更改每次的FIFO數量。

專用的Rx buffer

FDCAN支援多達64個專用Rx buffers。 每個專用的Rx buffers可以存儲一個元素。專用Rx

buffers的大小可以通過FDCAN_RXESC寄存器進行配置。 Rx buffers大小定義可以存儲多少個接收元素的資料字段位元組。 專用Rx

buffers的大小由前面RAM組織中描述的公式定義。

通過FDCAN_RXESC寄存器中的RBDS [2:0]字段配置元素大小後,啟動必須通過FDCAN_RXBC寄存器中的RBSA

[13:0]字段配置位址。下圖顯示了CAN消息RAM上的Rx buffers部分,其中有可以支援的最大數量的Rx buffers元素和起始位址。

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

當将元素存儲在專用Rx緩沖區中時,FDCAN通過FDCAN_IR寄存器的DRX位設定中斷标志以及新資料标志FDCAN_NDAT1或FDCAN_NDAT2寄存器中的相應位。當FDCAN_NDAT1

/ 2中的位置1時,相應的Rx緩沖區将被鎖定(不會被新元素覆寫),并且相應的過濾器不比對。

讀取元素後,CPU必須将相應的位複位FDCAN_NDAT1 / 2,以解鎖相應的Rx緩沖區。

要從專用Rx緩沖區讀取元素,CPU必須執行以下步驟:

(1)檢查FDCAN_NDAT1 / 2中的位,以了解是否有新元素到達專用Rx緩沖區。

(2)計算CAN消息RAM中元素的位址,如以下公式所示:

Reference Rx buffer address = CAN_message_RAM_base_address +

FDCAN_RXBC.RBSA (startaddress) + dedicated Rx buffer index x

Rx_Buffer_element_size.

(3)從計算出的位址中讀取消息。

過濾器元素可以引用Rx緩沖區索引(0到63)作為接收元素的目的地。如果相應的過濾器比對,則FDCAN僅執行對引用的Rx緩沖區位置的寫操作。 換一種說法,FDCAN不會寫入未引用的Rx緩沖區位置。

舉例 :Rx緩沖區編号與Rx緩沖區索引的相關配置示例

為了配置過濾器元素以引用Rx緩沖區索引60,必須至少配置61個Rx緩沖區。注意:使用者必須選擇最佳配置,以避免浪費RAM。下圖顯示了簡化Rx緩沖區操作的流程圖

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

Rx FIFO和專用Rx buffer的不同

如前面所述,FDCAN具有兩種機制:專用Rx buffer或Rx FIFO 0/1可以将配置為存儲接收到的元素。下表描述了專用Rx緩沖區和Rx FIFO之間的差異。

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

七、發送區

Tx event FIFO section

通過使用Tx event  FIFO,CPU獲得有關已發送元素的以下資訊:

(1)元素傳輸的順序.

(2)每個元素傳輸幀的本地時間。

FDCAN提供發送event FIFO。 該Tx event FIFO的使用是可選的。

FDCAN在CAN總線上傳輸了一個元素成功後,它可以将消息ID和時間戳存儲在Tx event FIFO中元素。 Tx

event  FIFO元素是一種資料結構,用于存儲已傳輸消息。

Tx可以通過FDCAN_TXEFC寄存器配置事件FIFO(Tx事件FIFO配置)。

FIFO可以存儲最多32個元素。下圖顯示了存儲Tx事件FIFO元素的CAN消息RAM的示例EFSA [13:0]字段包含起始位址。

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

CAN消息RAM中的Tx事件FIFO元素的位址由以下公式确定:

Tx event FIFO element address = CAN_message_RAM_base_address +

FDCAN_TXEFC.EFSA (startaddress) + FDCAN_TXEFS.EFGI (get index) x

Tx_event_FIFO_element_size

為了将 Tx event連結到Tx event FIFO元素,将來自已發送Tx buffer的消息标記複制到Tx event FIFO 元素。

僅當Tx buffer元素中的EFC位(存儲Tx事件)等于1時,事件才存儲在Tx event FIFO中。當Tx event

FIFO已滿時,不會再有其他元素寫入Tx event FIFO,直到至少有一個元素被寫入為止。讀出後,Tx event

FIFO擷取索引增加。如果在Tx event FIFO已滿時發生Tx event,則這事件被丢棄。為避免Tx event

FIFO溢出,可以使用Tx event FIFO水印。CPU從Tx event

FIFO讀取一個元素或元素序列後,CPU必須确認閱讀。是以,它會通過FDCAN_TXEFA寄存器EFAI [4:0]字段寫入從Tx event

FIFO讀取的最後一個元素的索引。

Tx buffer section

為了使外設傳輸元素,該元素在定義的存儲空間内,并且傳輸開始。 傳輸的元素存儲在Tx buffer中,使用者可以選擇使用的機制:專用的Tx

buffer或Tx queue或Tx FIFO。FDCAN最多支援32個元素。

每個元素存儲辨別符,DLC,控制位(ESI,XTD,RTR,BRS,FDF),資料字段,位字段消息标記和事件FIFO控制位,僅一條消息。

在RAM上的配置設定按以下順序進行:如果應用程式使用了專用的Tx buffer,則它們在Tx FIFO和Tx queue.之前配置設定。 使用者隻能在同一隊列中選擇Tx queue或Tx FIFO應用程式:FDCAN不支援它們的組合。

如下圖所示,Tx buffer的起始位址是通過FDCAN_TXBC寄存器的TBSA [13:0]字段配置

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

如前一節所述,RAM中的配置設定是以動态且連續的方式進行的,是以,如果使用者未配置Dedicated Tx buffer。 Tx buffer部分僅包含配置的Tx queue 或 Tx FIFO,并将其存儲在起始段位址中。

Dedicated Tx buffers

專用Tx buffer的數量是通過FDCAN_TXBC寄存器中的NTDB [5:0]字段配置的。每個專用Tx

buffer配置有特定的辨別符,以僅存儲一個元素。 傳輸是通過FDCAN_TXBAR寄存器的添加請求。

所請求的消息在外部進行仲裁的CAN總線上,并根據最低辨別符(最高優先級)發送出去。專用Tx buffer的記憶體要求取決于Tx

buffer元素的大小。Tx buffer元素大小定義了屬于Tx

buffer的資料位元組數。使用以下公式計算CAN消息RAM中專用Tx緩沖區的位址:

Dedicated Tx buffer address = CAN_message_RAM_base_address +

FDCAN_TXBC[TBSA] (start address)+ Tx_buffer_index x

Tx_buffer_element_size

Tx buffer操作機制

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

如果多個專用Tx buffer配置了相同的ID,則具有第一個傳輸請求的Tx buffer首先發送。

Tx FIFO

通過将0寫入FDCAN_TXBC中的TFQM位來配置Tx FIFO操作。元素存儲在通過get索引中FDCAN_TXFQS的TFG1

[4:0]字段,從get索引引用的元素開始發送Tx FIFO。每次發送後,get索引都會循環遞增,直到Tx FIFO緩沖區為空。Tx

FIFO可以按照已将元素寫入Tx FIFO的順序傳輸元素。傳輸與各個辨別符的優先級無關,因為FIFO首先發送出去。

FDCAN通過FDCAN_TXFQS中的TFFL [5:0]字段計算Tx

FIFO緩沖區的空閑級别,作為get和put索引之間的內插補點(get和set索引之間有兩種機制遞增每個事務以訓示下一個事務RAM上要讀取或寫入元素的緩沖區位置)。該值訓示可用(空閑)Tx

FIFO的數量元素。

必須從放置索引引用的Tx緩沖區開始,将新的發送元素通過FDCAN_TXFQS中的TFAQPI [4:0]字段訓示寫入Tx FIFO。CAN消息RAM中的下一個空閑Tx FIFO緩沖區的位址是使用以下公式計算的:

Next free Tx FIFO buffer address = CAN_message_RAM_base_address +

FDCAN_TXBC.TBSA (startaddress) + FDCAN_TXFQS.TFQPI (put Index) x

Tx_FIFO_element_size

Tx FIFO機制

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

Tx queue

通過将1寫入FDCAN_TXBC中的TFQM位來配置Tx隊列操作。 Tx中存儲的元素從具有最低辨別符(最高優先級)的Tx隊列緩沖區開始傳輸隊列。與專用Tx緩沖區相比,RAM上的位置是自動動态管理的,是以消息辨別符不固定為預定義的Tx緩沖區索引。

新消息必須寫入到放置索引引用的Tx隊列緩沖區中。周期性添加請求将put索引遞增到下一個空閑Tx隊列緩沖區。FDCAN_TXFQS中的TFQF位設定為1表示Tx隊列已滿。在至少一個以下元素之前,不得将其他元素寫入Tx隊列中。發送請求的元素或取消挂起的傳輸請求。Tx隊列緩沖區的記憶體要求取決于屬于Tx隊列的資料位元組數元素。CAN消息RAM中下一個可用的空閑Tx隊列緩沖區的位址可以通過以下方式計算:

Next free Tx queue buffer address = CAN_message_RAM_base_address +

FDCAN_TXBC.TBSA (startaddress) + FDCAN_TXFQS.TFQPI (put index) x

Tx_Buffer_element_size

Tx queue機制

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

dedicated Tx buffer, Tx FIFO and Tx queue的差別

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

靈活的傳輸配置

高效的FDCAN支援混合配置,以實作更大的傳輸靈活性并采取最佳措施,每種機制都有好處。 支援的混合配置是專用的Tx緩沖區+ Tx FIFO以及專用的Tx緩沖區+ Tx隊列。

dedicated Tx buffers and Tx FIFO混合配置

可以使用混合配置來配置CAN消息RAM的Tx緩沖區部分,其中CAN消息RAM中的Tx緩沖區部分可細分為一組專用Tx緩沖區和一個Tx

FIFO。專用Tx緩沖區的數量是通過FDCAN_TXBC中的NDTB [5:0]配置的。 Tx緩沖區的數量通過FDCAN_TXBC中的TFQS

[5:0]配置配置設定給Tx FIFO的位址。

Tx處理程式使用activated transmission request 和the oldest

pending掃描所有專用Tx緩沖區get索引引用的Tx FIFO緩沖區。

具有最低辨別符的緩沖區将獲得最高優先級,并且是接下來傳送。下圖說明了使用混合專用Tx緩沖區和Tx FIFO的用例

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

在此示例中,元素按以下順序發送(假設所有專用Tx緩沖區請求已啟用):

1. Tx buffer 3 (identifier = 1: it is the highest priority between all

other dedicated Tx buffers and it has a higher priority than the oldest

pending Tx FIFO: Tx buffer 7)

2. Tx buffer 0 (identifier = 3: it is the highest priority between all

other dedicated Tx buffers and it has higher priority than the oldest

3. Tx buffer 7 (because it is the oldest pending Tx FIFO with identifier

=4 and has higher priority between all dedicated Tx buffers)

4. Tx buffer 8 (because it is the oldest pending Tx FIFO with identifier

=2 and has the highest priority between all dedicated Tx buffers)

5. Tx buffer 4 (identifier = 8: it has the highest priority between all other dedicated Tx buffers and the Tx FIFO is empty)

6. Tx buffer 2 (identifier = 12: it has the highest priority between all other dedicated Tx buffers and the Tx FIFO is empty)

7. Tx buffer 1 (identifier = 15: it has the highest priority between all other dedicated Tx buffers and the Tx FIFO is empty)

8. Tx buffer 5 (because it is the only pending dedicated Tx buffer)

dedicated Tx buffers and Tx queue混合配置

可以使用混合配置來配置CAN消息RAM的Tx buffer,其中CAN消息RAM中的“ Tx緩沖區”部分可細分為一組專用Tx

buffer和一個Tx queue。通過FDCAN_TXBC中的NDTB [5:0]配置專用Tx buffer的數量和Tx

queue的數量緩沖區是通過FDCAN_TXBC中的TFQS

[5:0]配置的。Tx處理程式掃描具有激活的傳輸請求的所有專用Tx緩沖區和Tx隊列緩沖區。辨別符最低的緩沖區獲得最高優先級,然後發送。下圖說明了使用混合專用Tx緩沖區和Tx隊列的用例。

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

不支援帶有Tx FIFO和Tx隊列的混合配置。

dedicated buffer + Tx FIFO 和 Tx buffer + Tx queue的差別如下:

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

在Tx FIFO + Tx隊列中,元素在“添加到RAM”操作之後立即變為挂起狀态。

八、測試模式

在FDCAN的操作模式下,除了正常操作外,還有幾種測試模式可用。

那裡測試模式隻能用于生産測試或自測以及校準單元。必須将FDCAN_CCCR中的TEST位設定為1,以允許對FDCAN測試寄存器和存儲器的寫通路。測試模式和功能的配置。FDCAN以下列模式之一工作:

(1)限制操作模式Restricted-operation mode

(2)總線監控模式Bus-monitoring mode

(3)外部環回模式External loop-back mode

(4)内部環回模式Internal loop-back mode

在受限操作模式下,FDCAN能夠:

--接收資料幀

--接收遠端幀

--确認有效幀

該模式不支援:

--資料幀發送

--遠端幀發送

--活動錯誤幀或過載幀發送

通過FDCAN_CCCR中的ASM位将FDCAN設定為受限操作模式。當Tx handler

無法從CAN讀取消息RAM準時或時鐘校準激活時,将自動進入受限操作模式。在這種模式下,應用程式測試不同的比特率,并在應用程式收到有效的幀之後退出受限操作模式。下圖說明了在受限操作模式下FDCAN_TX和FDCAN_RX引腳的連接配接

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

注:隻要FDCAN處于受限操作模式,FDCAN_TX引腳就處于隐性狀态。 顯性位被傳輸,以此确認接收到有效幀。

為了分析總線上的通信量而又不受主要位傳輸的影響,使用者可以設定FDCAN_CCCR中的MON位,可以在總線監視模式下使用FDCAN。在總線監視模式下,FDCAN能夠:

--接收有效的資料幀

--接收有效的遠端幀

--傳輸開始

--确認有效幀(與受限操作模式不同)

在總線監視模式下,FDCAN僅在總線上發送隐性位。 下圖顯示了總線監視模式下FDCAN_TX和FDCAN_RX引腳的連接配接。

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

提供此模式用于硬體自檢。

使用者可以通過以下方式将FDCAN設定為外部環回模式:将1寫入FDCAN_TEST中的LBCK位,并将0寫入FDCAN_CCCR中的MON位。

FDCAN對待自己的發送的消息作為已接收的消息,如果它們通過Rx

FIFO中的接受過濾,則将其存儲。為了獨立于外部信号,FDCAN忽略确認錯誤(隐性位在确認插槽中采樣)。 FDCAN實作内部TX和RX連接配接。

下圖顯示了外部環回模式下的FDCAN_TX和FDCAN_RX引腳的連接配接。

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

使用者可以通過以下方式将FDCAN設定為内部環回模式:向FDCAN_TEST中的LBCK位寫入1,并向FDCAN_CCCR中的MON位寫入1。可以測試FDCAN,而不會影響連接配接到FDCAN_TX和FDCAN_RX的正在運作的CAN系統針腳。

FDCAN_RX引腳與FDCAN斷開連接配接,并且FDCAN_TX引腳保持隐性。

下圖顯示了内部環回模式下FDCAN_TX和FDCAN_RX引腳的連接配接

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

收發器延遲補償

在采樣點,所有發送器都檢查先前發送的位是否被正确采樣。 這需要一種機制來檢查問題并檢測其他節點錯誤幀。

由于發射器看到了自己的發送位由收發器環路延遲而延遲,此延遲為TSEG1設定了下限,如圖所示。下圖(采樣點之前的時間段),這也是資料比特率的上限。

這是引入收發器延遲補償機制(TDC)的原因。

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

為了在檢查誤碼時補償此環路延遲,定義了一個輔助采樣點(SSP)。而不是在采樣點完成,而是在SSP中檢查傳輸的位。 該檢查的結果是直到達下一個采樣點為止。

為資料階段中發送的每個位生成一個SSP。 收發器不對稱和總線振鈴必須考慮SSP位置,但是沒有時鐘容限,因為收發器會監視自己的位置位流。

通過将1寫入FDCAN_DBTP中的TDC位來啟用收發器延遲補償。

測量在資料階段開始之前(在信号的下降沿之前)在每個發送的FDCAN幀内開始FDF逐位解析。

當在示波器的“接收”輸入引腳FDCAN_RX看到該邊沿時,測量将停止。 此測量的分辨率為1 mtq(最小時間量)

下圖顯示了環路延遲的測量

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

注1:在仲裁階段,始終禁用延遲補償。SSP位置定義為從FDCAN_TX引腳到FDCAN_RX引腳測得的延遲之和,加上通過FDCAN_TDCR中的TDCO [6:0]字段配置的發送器延遲補償偏移。

注2:發送器延遲補償偏移量用于調整SSP在接收位内部的位置。存儲已發送位的值,直到達到其SSP,然後将其與實際接收到的位進行比較,如下圖所示,該值表示發送的比特序列A到K和接收的比特序列AR到KR,以及從SSPA到SSPK的一系列SSP。

通過比較SSBR來檢查接收到的比特BR與延遲位B1。

SSPB的位置在發送的比特B開始之後的特定時間。特定時間是測得的收發器延遲與配置的SSP偏移之和。

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

根據博世(Bosch)文檔确定,必須考慮以下邊界條件FDCAN中實作的發射機延遲補償:

----從FDCAN_Tx到FDCAN_Rx測得的延遲與已組态的發送器延遲之和在資料階段,補償偏移量必須小于六位時間。

----從FDCAN_Tx到FDCAN_Rx測得的延遲與已組态的發送器延遲之和補償偏移不得超過127 mtq。

注3:如果總和超過127 mtq,則最大值(127 mtq)用于發射機延遲補償。資料階段在CRC分隔符的采樣點結束,該采樣點停止檢查SSP處的接收位。本文檔的下一部分将說明時鐘校準單元,并對其功能和操作進行說明。

九、FDCAN時鐘校準

FDCAN支援時鐘校準單元(CCU)功能。 該功能允許使用者校準FDCAN,FDCAN發送器(主機)接收器(裝置)。

例如,當FDCAN裝置與主機的最新比特率。此功能允許使用者在總線中添加新執行個體,并且比特率的存在是未知的。

也是在FDCAN接收器沒有精确石英的情況下很有用(可能導緻準時錯誤)

CCU介紹:

時鐘校準單元是通過FDCAN_CCU_CCFG寄存器初始化的,隻有當兩個FDCAN_CCCR中的CCE和INIT位設定為1。僅當FDCAN在CAN

2.0模式下運作時,才可以使用CCU。當FDCAN_CCU_CCFG中的BCC = 1時,時鐘校準被繞過。 下圖顯示了旁路操作。

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

CCU操作條件:僅當FDCAN比特率在125 Kbit / s和1 Mbit / s之間時,CCU才能運作

CCU功能說明:通過适配時鐘分頻器,可以通過CAN消息對fdcan_tq_ck(時間量子時鐘)進行校準,它從fdcan_ker_ck時鐘生成CAN協定時間量tq。

校準狀态機:功能狀态機的校準如下圖所示。

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

基礎校準:

測量了從隐性到顯性的兩個連續下降沿之間的最小距離。 這該措施假設兩個CAN位時間以PLL時鐘周期計。

每當新的時鐘分頻器通過FDCAN_CCU_CCFG中的CDIV [3:0]字段找到邊緣之間的較小距離來更新一次測量。

當CAN協定控制器檢測到有效的CAN消息時,便完成了校準

精确校準:

校準狀态機通過計算以下内容來測量CAN幀内較長位序列的長度:fdcan_ker_ck周期數。該位序列的長度可以通過在FDCAN_CCU_CCFG中CFL位配置為32位或64位。精度校準基于新的時鐘分頻器值,該值由較長位序列的測量。校準框通過FDCAN驗收過濾檢測。過濾器元素和Rx緩沖區必須為在FDCAN中配置以識别和存儲校準消息。如果fdcan_ker_clk校準是通過軟體完成的(請從CALS

[1:0]字段中評估校準狀态FDCAN_CCU_CSTAT),必須将FDCAN設定為受限操作模式,直到校準完成Precision_Calibrated狀态(無幀,無錯誤或過載标志傳輸,無錯誤計數)。

注意:收到校準消息後,必須重新設定Rx緩沖區新資料标志以啟用發信号通知。校準消息的資料字段必須至少為1010二進制序列,以確定裝置節點可以進入Basic_Calibrated狀态,并且主機節點消息得到确認。隻能在由穩定的石英時鐘控制的主機節點發送的有效CAN幀上執行精确校準。精密校準必須在預定義的最大間隔内重複進行,并由校準看門狗監督。

校準看門狗:

校準看門狗是一個遞減計數器,它以Not_Calibrated狀态開始,并監視接收到的信号消息。當處于Basic_Calibrated狀态時,校準監視程式随每個收到的消息重新啟動。

注意:如果在校準看門狗遞減計數到零之前未收到任何消息,則FSM校準保持不變處于Not_Calibrated狀态。

計數器被重新加載,并且基本校準重新開始。進入Precision_Calibrated狀态時,将重新啟動校準看門狗。

在這種狀态下,校準看門狗監視收到的石英消息。

注意:如果FDCAN直到校準看門狗都沒有收到來自石英控制節點的消息,當計數降至零時,FSM校準将轉換回“ Basic_Calibrated”狀态。

校準例子:

本示例介紹了一個用例,用于通過FDCAN主機(發送器)校準FDCAN裝置(接收器)。 這以下流程圖說明了校準前通過FDCAN裝置的步驟

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

校準成功通過後,FDCAN裝置準備好進行接收和發送帶有新FDCAN主機比特率的消息。

十、FDCAN相比标準bxCAN的提升

下表可幫助使用者簡化将STM32裝置中的CAN

2.0協定更新到CAN-FD協定的過程。該表還指定了FDCAN的改進。與傳統的BxCAN(基本擴充CAN)相比,FDCAN具有許多優勢,包括更快的資料傳輸速度。速率和資料位元組數的擴充,減少了幀開銷。

總線負載也可以減少。 傳輸和接收中消息數量的增加要求RAM存儲器的改進

STM32H7的CAN FD學習筆記整理貼(2021-03-15)

鑒于BxCAN的相容性,BxCAN開發人員可以輕松地遷移到FDCAN,因為FDCAN可以無需對整個系統設計進行修訂即可實施。 FDCAN包含所有BxCAN功能,并滿足新應用程式的要求。

微信公衆号:armfly_com

安富萊論壇:www.armbbs.cn

安富萊淘寶:https://armfly.taobao.com