在工業自動化、智能交通、機器人等領域,CANFD(CAN with Flexible Data-Rate)技術正逐步取代傳統CAN,以適應更高的數據速率和更復雜的通信需求。本文將深入解析RZ/N2L CANFD模塊的緩沖區機制,幫助工程師更高效地管理CAN消息,提高系統性能。(下面的內容主要涉及RZN2L CANFD外設手冊的解讀,篇幅較長,感興趣的讀者可以收藏,以備日后不時之需)
RZN2L CAN-FD模塊提供高達8 Mbps的數據速率,支持豐富的緩沖管理機制(獨立緩沖、FIFO緩沖、共享緩沖),提供完整的消息過濾、錯誤檢測、消息路由及傳輸管理,同時具備低功耗模式和測試功能,適用于工業控制、汽車電子、自動化系統等需要高可靠性和高性能通信的應用。
接著前面的章節,下面了解一下在FIFO模式下的共享FIFO緩沖區的配置:
1共享FIFO緩沖區的模式配置
配置寄存器:通過CFDCFCCn.CFM[1:0]位設置共享FIFO緩沖區的模式。
00b(RX模式):默認模式,僅允許從RX FIFO或配置為RX的共享FIFO讀取消息(消息存儲基于AFL條目)。
01b(TX模式):消息可以讀寫到以TX模式配置的共享FIFO緩沖區中,寫入的消息會被發送到對應CAN通道。
10b(GW模式):僅允許讀取消息,但CPU讀取操作不改變讀寫指針(指針由CANFD模塊自動管理)。
11b(保留模式):禁止寫入,否則可能導致未定義行為。
2GW模式下的緩沖區滿處理策略
行為控制位:由CFDCFCCEn.CFMOWM位決定緩沖區滿時的操作:
CFMOWM=0:丟棄新消息,并置位CFDCFSTSn.CFMLT標志。
CFMOWM=1:覆蓋最舊數據,讀指針自動指向下一個舊消息,并置位CFDCFSTSn.CFMOW標志。
錯誤處理:
在發送緩沖區滿且發生總線錯誤或仲裁丟失時,消息丟失且不重傳,讀指針自動后移。
3關鍵注意事項
硬件復位后狀態:所有共享FIFO緩沖區默認處于RX模式,需配置完成后再啟用。
指針管理:
GW模式:指針僅由CANFD模塊控制(如新消息存儲或發送完成時)。
TX/RX模式:指針由CPU讀寫操作直接管理。
保留值風險:不可配置為11b,否則可能引發系統異常。
配置建議
1模式選擇:
RX模式:適用于純接收場景(如傳感器數據采集)。
TX模式:適用于需主動發送消息的場景(如控制指令下發)。
GW模式:適用于網關或數據轉發場景(需自動管理緩沖區)。
2溢出策略:
若需保留歷史數據,選擇CFMOWM=0(丟棄新消息)。
若需保證最新數據,選擇CFMOWM=1(覆蓋舊數據)。
3錯誤處理:
在GW模式下,需結合總線監控機制,避免因仲裁丟失或錯誤導致關鍵消息丟失。
潛在問題
指針不一致:在GW模式下,若手動操作指針可能導致數據錯亂,需嚴格依賴模塊自動管理。
配置順序錯誤:未完成模式配置前啟用FIFO緩沖區,可能導致消息路由異常。
關于FIFOTX消息緩沖區的鏈接配置的解讀:
1FIFO TX消息緩沖區鏈接的必要性
應用場景:當共享FIFO配置為TX模式或GW模式時,必須將其鏈接至一個Normal TX消息緩沖區,以參與CAN通道的傳輸掃描。
核心作用:通過鏈接實現FIFO緩沖區與CAN通道的通信調度,確保數據傳輸的協調性。
2關鍵配置規則
唯一性約束:
每個共享FIFO必須鏈接到唯一的TX消息緩沖區,禁止多個FIFO共享同一緩沖區(避免數據沖突)
操作限制:
禁止向已鏈接的TX消息緩沖區直接寫入數據。
鏈接的TX消息緩沖區不可加入TX隊列(避免干擾FIFO傳輸邏輯)。
3配置方法
寄存器設置:通過CFDCFCCn.CFTML[4:0]位(5位字段)配置鏈接的TX消息緩沖區編號。
可選范圍:
0x00→TX Message Buffer 32
0x01→TX Message Buffer 33
...
0x1F→TX Message Buffer 63
緩沖區總數:共32個專用TX消息緩沖區(編號3263)。
4注意事項
配置沖突風險:若兩個FIFO鏈接到同一緩沖區,可能導致數據覆蓋或傳輸錯誤。
范圍限制:必須確保CFDCFCCn.CFTML[4:0]的值在0x000x1F范圍內(超出會導致未定義行為)。
配置流程建議
1分配緩沖區:
根據系統需求,為每個TX/GW模式的共享FIFO分配唯一的TX消息緩沖區(從32到63中選擇)。
2寄存器寫入:
通過CFDCFCCn.CFTML[4:0]位設置對應的緩沖區編號。
3驗證隔離性:
確保鏈接的緩沖區未加入TX隊列,且未被其他FIFO占用。
潛在問題與解決
傳輸失敗:若未正確鏈接緩沖區,可能導致FIFO無法參與傳輸掃描,需檢查CFDCFCCn.CFTML配置。
數據丟失:若多個FIFO共享同一緩沖區,需重新分配緩沖區編號并更新寄存器設置。
示例配置
FIFO1:配置為TX模式,鏈接至TXMessageBuffer32(CFTML[4:0]=0x00)。
FIFO2:配置為GW模式,鏈接至TXMessageBuffer33(CFTML[4:0]=0x01)。
其他FIFO:依此類推,確保編號唯一。
下面是關于FIFO深度配置的解讀:
1FIFO深度配置
(FIFO Depth Configuration)
配置寄存器:
RX FIFO:通過CFDRFCCn.RFDC[2:0]位設置深度。
共享FIFO:通過CFDCFCCn.CFDC[2:0]位設置深度。
關鍵限制:
RAM分配上限:總消息數(RX消息緩沖區+FIFO緩沖區)不得超過((n+1)*256),n為CAN通道數或其他參數)。
用戶需自行確保配置不超限,否則可能導致內存溢出或數據丟失。
鏈接有效性條件:
當共享FIFO深度≥4消息時,其TX消息緩沖區鏈接始終有效(無論FIFO是否啟用)。
若深度為0,鏈接無效。
2FIFO有效載荷大小配置
(FIFO Payload Size Configuration)
配置寄存器:
RX FIFO:通過CFDRFCCn.RFDC[2:0]位設置深度。
共享FIFO:通過CFDCFCCn.CFDC[2:0]位設置深度。
默認值:8字節(寄存器值000b)。
配置注意事項
1深度與鏈接關系:
若需使用共享FIFO的TX消息緩沖區鏈接,必須確保其深度≥4消息。
深度為0時,FIFO無法啟用且鏈接無效。
2性能與容量權衡:
增加FIFO深度可緩存更多消息,但會占用更多RAM。
增大有效載荷支持更大數據幀,但可能降低實時性(需匹配總線速率)。
潛在問題與解決方案
配置超限風險:若總消息數超過RAM上限,需減少FIFO深度或調整RX消息緩沖區數量。
無效鏈接操作:若深度<4時嘗試啟用鏈接,需檢查CFDCFCCn.CFDC[2:0]值并重新配置。
數據截斷:若接收幀超過配置的有效載荷大小,需結合CFDGCFG.CMPOC位設置處理策略(見前文解析)。
示例配置
1共享FIFO配置:
模式:TX模式(CFDCFCCn.CFM[1:0]=01b)。
深度:16消息(CFDCFCCn.CFDC[2:0]=011b)。
有效載荷:64字節(CFDCFCCn.CFPLS[2:0]=111b)。
TX緩沖區鏈接:TXMessageBuffer32(CFDCFCCn.CFTML[4:0]=0x00)。
2RXFIFO配置:
深度:32消息(CFDRFCCn.RFDC[2:0]=100b)。
有效載荷:32字節(CFDRFCCn.RFPLS[2:0]=101b)。
-
緩沖區
+關注
關注
0文章
36瀏覽量
9363 -
寄存器
+關注
關注
31文章
5433瀏覽量
124305 -
fifo
+關注
關注
3文章
400瀏覽量
44783 -
CANFD
+關注
關注
0文章
84瀏覽量
5327
原文標題:帶你解析RZN2L CANFD數據收發緩沖區及例程調試筆記(2)
文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
解析RZ/N2L CANFD模塊的緩沖區機制(1)

RZ/T2M, RZ/T2L, RZ/N2L電機解決方案套件數據手冊

瑞薩電子RZ MPU家族精品RZ/N2L產品介紹

評論