CAN Legacy 和增強型 RX FIFO 介紹

關鍵字 :CANFDFIFOCANNXP

一、概述

Legacy RX FIFO 是 CAN 總線通信中常見的數據存儲和處理機制,Legacy RX FIFO 模式與 CANFD MB 結構使用相同的 RAM 空間,因此無法同時啟用。因此,在 Legacy RX FIFO 的基礎上,進行功能擴展和優化的接收緩衝區結構,推出了 Enhanced RX FIFO,其具有更大的 FIFO 緩衝區,可存儲更多的 CANFD 訊息。

二、MB 結構

在 CAN 和 CANFD 通訊中,MB(Message Buffer,消息緩衝區)是 CAN 控制器中用於存儲和處理 CAN 消息的一塊獨立 RAM 存儲區域,負責暫時存放接收到的 CAN 消息或者準備發送的 CAN 消息。每個 MB 都有其獨特的識別碼和相關的控制資訊,用於區分不同的消息並管理消息的處理流程,MB 結構會根據相關配置而有所變化。

2.1 標準 CAN 模式

2.1.1 結構

以 NXP S32K358 晶片為例,在標準 CAN 配置下,FlexCAN_0、FlexCAN_1 和 FlexCAN_2 最大支援 96MBs(FlexCAN_3 - FlexCAN_7 最大支援 64MBs,也就是說 FlexCAN_0/1/2 相較於其他 FlexCAN MB 的 RAM 空間大小不一樣,其功能更為強大),標準 CAN 模式下 MB 結構如下:

2.1.2 記憶體分佈

FlexCAN_0/1/2 的記憶體區域從 0x80 到 0x67F(FlexCAN_3-7 的郵箱使用從 0x80 到 0x47F 的記憶體區域),每個 8-byte payload 的 MB 會佔用 16 字節(0x10)大小的 RAM 空間,依據 FlexCAN_0/1/2 的 MB 記憶體空間可以劃分出 96 個 MBs。

2.2 開啟 CANFD 模式

2.2.1 結構

啟用 CANFD 後,MB 結構也發生了改變,與標準 CAN MB 結構基本相同,但在 Data 段的結構會有所不同,例如 64-byte payload 的 MB 結構如下:

2.2.2 記憶體分佈

啟用 CANFD 後,會將 FlexCAN RAM 分區為每個區塊 512 字節,每個區塊都可以透過 MBDSRx 單獨配置為不同長度的 payload。由於 MB RAM 空間大小是固定的,劃分出的 MB 數量也會根據 payload 的大小而變化。

每個 Block 是根據不同長度的 payload 後劃分的 MBs 數量(MBs 之間的記憶體空間是連續的)

例如,Block0 配置 8 位元組的有效負載、Block1 配置 16 位元組的有效負載、Block2 配置 32 位元組的有效負載。

2.3 開啟 Legacy RX FIFO 模式

Legacy Rx FIFO 有 6 條訊息深度,CPU 透過重複讀取 Legacy FIFO 來按順序讀取接收到的訊息,此模式無法與 CANFD 同時啟用。

2.3.1 結構

當寄存器 CAN_MCR [RFEN]=1 時啟用 Legacy RX FIFO,MB 的結構就會改變,FlexCAN RAM 0x80-0xDF(通常由 MBs0-5 使用)將會被 Legacy RX FIFO 引擎佔用。

 

2.3.2 記憶體分佈

1、FIFO 使用情況

FlexCAN RAM 0x80-0xDF 被用作 Legacy RX FIFO,再往後 0xE0-0x2DF 就變成了 Filter table element 的記憶體空間,Filter table element 的數量通過寄存器 CAN_CTRL2.RFFN[3:0] 配置(最大可配置 128 個,最小 8 個)。

2、Filter 使用情況

每個 Filter table 元素占用 0x4 的大小空間,每 4 個就相當於一個標準 CAN MB 的大小。如果啟用 128 個,就會占用相當於 32MB 的 RAM 空間,剩下的可用空間相當於 58(96-32-6)個 MB 的大小空間。

2.4 開啟 Enhanced RX FIFO 模式

為了解決 Legacy RX FIFO 模式與 CANFD 無法同時啟用的問題,推出了增強型功能 Enhanced RX FIFO,作為 6-message RxFIFO 的替代方案,K3 FlexCAN 支援 Enhanced RxFIFO(最多可儲存 20 條 CANFD 訊息)。

2.4.1 結構

以下是增強型 RX FIFO 結構:

2.4.2 記憶體分佈

1、相較於 Legacy 模式,Enhanced RX FIFO 使用的記憶體空間和 MB 使用的 RAM 是兩段不同的空間,使用的記憶體空間地址偏移為 2000h-0x263Fh,其中 FlexCAN 記憶體的 0x2000h-204Fh 被用作第一個 Enhanced RX FIFO。

2、增強型 RX FIFO 過濾器空間範圍為 0x3000-0x31FC,根據過濾器被配置為擴展 ID 類型或標準 ID 類型來計算有多少個過濾器。

三、過濾機制

CAN 通訊過濾機制的作用包括減少資料冗餘、提高資料處理效率、優化通訊品質、增強系統安全性等。透過合理配置過濾機制,可使 CAN 網路中的節點更高效地處理和傳輸資料,確保關鍵資料的可靠傳輸,降低網路壅塞和錯誤發生的機率。

NXP S32K3xx 系列支援:

IDHIT:識別碼接收框架的接收過濾命中指示器暫存器

Legacy RX FIFO ID 過濾器:能夠匹配傳入的 ID(128 個擴展 ID、256 個標準 ID 或 512 個部分(8-bit)ID),具有 32 個獨立遮罩能力。

增強型 RX FIFO ID 過濾器:能夠匹配傳入的 ID(64 個擴展 ID、128 個標準 ID 過濾元素),具有三種過濾模式(掩碼過濾器、範圍過濾器以及兩個無掩碼過濾器)。

3.1 標準信箱的過濾器

接收程序在 MB 被啟動後,他就可以接收與過濾器匹配的幀消息。

3.1.1 配對過程:

1、當接收到消息幀時,它會被存儲到一個隱藏的輔助 MB 中,稱為串行消息緩衝區 RX SMB(Receive Serial Message Buffer),RX SMB 與 MB 具有相同的結構。

2、如果該訊息在 FIFO 表或者已啟動的 MB 中找到匹配的 ID,則 move-in 流程會將 RX SMB 中的內容傳輸至匹配的 FIFO 或 MB 中。

3、匹配過程會掃描 RX FIFO 中的所有元素和已啟用的 MB,此過程會搜尋與正在 CAN 總線上接收的 RX SMB 帧相匹配的元素是否成功比對。

4、匹配情況由 IDE(1bit)、RTR(1bit)、ID(29bit)通過這三個特徵和 MASK 仲裁。

a. 對於 MB 結構:如果系統管理區塊(SMB)中的 [IDE(識別碼擴展位)] 為 1,則識別碼(ID)為 29 位(標準識別碼加上擴展識別碼)。如果 SMB 中的 [IDE] 為 0,則識別碼(ID)為 11 位(標準識別碼)。對於傳統的接收先入先出(RX FIFO)結構,識別碼取決於識別碼屏蔽寄存器(IDAM)。

b. cmp:比較操作,將接收到的系統管理塊(RX SMB)的內容與消息緩衝區(MB)的內容進行比較,而不考慮屏蔽碼。

c. no_cmp:不進行比較,接收的系統管理塊(RX SMB)的內容不與消息緩衝區(MB)的內容進行比較。

d. (cmp_msk):帶遮罩比較,將接收的系統管理塊(RX SMB)的內容與消息緩衝區(MB)的內容進行比較,同時考慮遮罩碼。

e. 當標識符屏蔽寄存器(IDAM)為 C 類型時:不考慮系統管理塊(SMB)中的 [IDE(標識符擴展位)] 和 [RTR(遠端請求傳送位)]。

5. 在掃描結束時,從這些結構中選擇匹配成功的對象。

3.2 傳統 Rx FIFO 過濾器

當 Legacy RX FIFO 開啟時,由 CTRL2[RFFN] 配置 Filter table 元素為 A/B/C 三種形式,這三種形式無法共存。

1、每個 Filter table 元素占 4 個位元組,會根據:

A 模式:每個 FilterElement 支援過濾 1 幀(標準幀/擴展幀)報文

B 模式:每個 FilterElement 支援過濾 2 幀(標準幀/擴展幀)報文的高 13 位元(29`16)。

C 模式:每個 FilterElement 支援過濾 4 幀(標準幀/擴展幀)報文的高 8 位元。

2、每個 FilterElement 的 MASK 是會變化的,舉個例子,如果我們設定了 128 個 Filter 表元素,那麼前 32 個 FilterElement 會有自己的 Individual MASK,其餘的 FilterElement 則共用一個 Global MASK。

3、FilterElement 結合 MASK 實現對 Legacy FIFO 的過濾規則。

3.3 增強型接收 FIFO 過濾器

1、Enhanced RX FIFO 的過濾器是通過 ERFFELn 寄存器來實現的,然後根據 ERFFELn.NEXIF 位,過濾器存儲空間可分為兩個區域(一個用於存儲擴展識別符過濾器元素,Extended ID 類型)。,另一個用於存儲標準識別符過濾器元素(Standard ID 類型):

  • NEXIF:擴展 ID 過濾元素的數量
  • NFE:增強型 RX FIFO 過濾器元素數量
  • 標準 ID 過濾元素的數量:2 × (NFE - NEXIF + 1)

2、例如

  • ERX_FIFO_FLT_ELEM = 128(CAN_ERFFEL 128 個)
  • CAN ERFCR.NEXIF = 3(3 個 Extended ID 類型的過濾元素數量,每個佔用的記憶體相當於兩個 Standard ID 類型)
  • CAN_ERFCR.NFE = 63(122 個 Standard ID 類型的過濾器元素數量(2 × (NFE - NEXIF + 1),每個佔用 0x4 大小的記憶體空間)

3、Extended ID 類型和 Standard ID 類型這兩種類型可以同時存在,兩種類型又都可以通過 ERFFELn.FSCH 配置成三種模式,Standard ID 類型:

Ⅰ. 基於遮罩和濾波器:(當滿足以下條件時,CAN 訊息才能匹配過濾規則)

① CAN 訊息是基本幀格式(IDE = 0)。

② 對於每個位元 n(從 0 到 10),(ID[n] = 標準 ID 過濾器 [n]) 或 (標準 ID 遮罩 [n] = 0)。

③ (RTR = RTR 過濾器) 或 (RTR MASK = 0)。

Ⅱ. 基於 ID 篩選範圍:

CAN 訊息是基本幀格式(IDE = 0)。

② ID ≥ STD ID 篩選器1。

③ ID ≤ STD ID 篩選器2。

④ (RTR = RTR 過濾器) 或 (RTR MASK = 0)。

Ⅲ. 基於兩個固定的 ID 過濾器沒有遮罩:

① CAN 訊息是基本幀格式(IDE = 0)。

② 對於每個位元 n(從 0 到 10),(ID[n] = STD ID Filter1[n]) 或 (ID[n] = STD ID Filter2[n])。

③ (RTR = RTR 篩選器1) 或 (RTR = RTR 篩選器2)。

Ⅳ. Extended ID 類型模式和 Standard ID 類型模式的使用方式相同,只是結構上有所不同:

四、參考資料

《S32K3xx 參考手冊》

https://www.nxp.com/webapp/Download?colCode=S32K3XXRM&location=null

《小貓爪:S32K3學習筆記02-S32K3之FlexCAN》

https://blog.csdn.net/Oushuwen/article/details/120311785

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

參考來源

:

評論