【玩轉多核異構】雙核高速率CAN-FD評測

原創 2023-02-22 13:52:00 多核異構 A核和M核 iMX8MP CAN FD

為了能夠讓更多的工程師朋友了解多核異構處理器,飛凌嵌入式特別推出了【玩轉多核異構】專題,幫助大家解決在多核異構處理器的開發過程中遇到的問題。點擊進入文章下方的“擴展”即可閱讀往期全部內容,【玩轉多核異構】專題持續更新中,您也可微信搜索“飛凌嵌入式”訂閱關注。

引言

憑借實時性、抗干擾性和安全性等優點,CAN2.0在工業及汽車行業得到了廣泛應用,但其最高速率僅為1Mbit/s,每幀最多只能傳輸8字節的有效數據,報文中只有約50%的帶寬用于有效數據傳輸。然而隨著產業的發展,各種傳感器和控制器數量的增多,總線上的數據量也激增,這使得CAN2.0總線在傳輸速率和帶寬方面的缺點暴露的更加明顯,于是就誕生了CAN-FD。

CAN-FD在傳輸速率和帶寬方面有了明顯的提升,波特率可高達8Mbit/s,每幀可多達64字節有效數據,傳輸效率可提高至約80%,能夠進一步提高總線的實時性,拓寬總線的數據帶寬,提升總線的傳輸效率。

在飛凌嵌入式OKMX8MP-C開發板上有兩路CAN-FD,小編今天就基于這款開發板以處理器的M核與A核各控制一路CAN-FD互相通信為例,從應用角度講述M核和A核如何控制CAN-FD高速通信。

飛凌嵌入式OKMX8MP-C開發板所搭載的NXP i.MX8M Plus處理器具備強悍的性能,集成4個主頻最高可達1.8GHz (工業級主頻為1.6GHz)的Arm Cortex-A53多任務核和1個Cortex-M7實時核,不管是對數據的高速吞吐、處理,還是復雜的人機交互界面處理,都能從容應對。

一、 M核CAN-FD 

1. CAN-FD初始化

CAN-FD初始化主要包括總線時鐘,管腳和相應寄存器的初始化。具體如下:

(1)CAN總線時鐘:

現將CAN總線倍頻到800MHz,再10分頻到80MHz。

CLOCK_SetRootMux(kCLOCK_RootFlexCan1, kCLOCK_FlexCanRootmuxSysPll1); // 設置CAN1總線時鐘為800MHz
CLOCK_SetRootDivider(kCLOCK_RootFlexCan1, 2U, 5U); // 分頻因子為2*5=10,設置CAN1總線時鐘為80MHz

(2)管腳配置:

選擇CAN1的發送管腳為32腳,接收管腳為34腳。

IOMUXC_SetPinMux(IOMUXC_SAI2_TXC_CAN1_RX, 0U); // CAN1 RX
IOMUXC_SetPinMux(IOMUXC_SAI2_RXC_CAN1_TX, 0U); // CAN1 TX

(3)CAN波特率:

CAN-FD支持可變速率,即控制區和數據區的波特率可以不一致,控制區最大為1Mbit/s;數據區最大為8Mbit/s。后續程序根據總線時鐘和設置的波特率,分配時段設置的seg1,seg2等數值。

pConfig->bitRate = 1000000U; // CAN-FD控制區波特率為1Mbit/s
pConfig->bitRateFD = 8000000U; // CAN-FD數據區波特率為8Mbit/s

(4)CAN-FD使能:

除了使能CAN-FD,可變波特率也需要使能,否則數據區的最大速率和控制區的速率一樣,最大為1Mbit/s。

base->MCR |= CAN_MCR_FDEN_MASK; // CAN-FD使能
fdctrl |= CAN_FDCTRL_FDRATE_MASK; // 可變波特率使能

(5)關閉自回環:

如果開啟了自回環,那么CAN1數據會在芯片內回環,不會到外部管腳,在程序調試時可以排除外部端子的干擾,但真實應用時,需要關閉自回環,從外部管腳收發數據。

pConfig->enableLoopBack = false; // 不回環,使用外部管腳

(6)幀格式:

本次我們使用11位標準數據幀,小伙伴也在后續試試擴展幀。需要設置自己的ID,便于總線上其他設備識別。

mbConfig.format = kFLEXCAN_FrameFormatStandard; // 11位標準幀,非擴展幀
mbConfig.type = kFLEXCAN_FrameTypeData; // 數據幀 非遠程幀
mbConfig.id = FLEXCAN_ID_STD(rxIdentifier); // 幀ID 用于區別總線中不同的設備

(7)接收過濾:

用戶可設置接收過濾規則,這樣就可以只接收特定幀ID的數據,減少應用處理的數據量。

rxIdentifier = 0; FLEXCAN_SetRxMbGlobalMask(EXAMPLE_CAN, FLEXCAN_RX_MB_STD_MASK(rxIdentifier, 0, 0));//接收所有ID數據

2、CAN-FD收發流程

本次測試M核做主站,CAN1先發送一幀包含64字節數據,A核CAN2收到,將64字節數據再次發送,M核CAN1接收。對比發送和接收的64字節數據是否一致。重復100次。

(1)CAN-FD發送數據:

EXAMPLE_CAN表示為CAN1,flexcanHandle為CAN實例,包含了發送接收回調函數,txXfer為要發送的64字節數據。

FLEXCAN_TransferFDSendNonBlocking(EXAMPLE_CAN, &flexcanHandle, &txXfer); // CAN-FD發送數據

(2)CAN-FD接收數據:

EXAMPLE_CAN表示為CAN1,flexcanHandle為CAN實例,包含了發送接收回調函數,rxXfer為接收的64字節數據。

FLEXCAN_TransferFDReceiveNonBlocking(EXAMPLE_CAN, &flexcanHandle, &rxXfer); // CAN-FD接收函數

(3)接收和發送數據對比:

for (j = 0U; j <= DLC; j++) // 對比收發數據,不一致打印
{
if(txXfer.framefd->dataWord[j] != rxXfer.framefd->dataWord[j])
{
LOG_INFO("Data mismatch !!! j=%d \r\n",j);
}
}

二、A核CAN-FD 

A核設備樹中保留CAN2,內核解析設備樹在 /dev下生成can0。設置波特率后使能can0節點,應用程序中open函數打開接口,write函數發送數據,read函數接收數據。我們把CAN接口的示例已經作為一個跨平臺的綜合演示程序,小伙伴們可以直接加參數調用即可。

1、分配節點

(1)M核獨享CAN1,A核獨享CAN2,修改設備樹,在設備樹OK8MP-C.dts中,刪除CAN1設備節點,保留CAN2設備節點。編譯新的設備樹;

(2)將生成的OK8MP-C.dtb和Image拷貝至開發板的 /run/media/mmcblk2p1/ 目錄下,輸入sync命令同步后重啟開發板;

(3)通過A核串口輸入命令uname -r ,顯示內核版本,將 /lib/modbule目錄下文件夾名稱改為內核版本,這樣才能自動加載模塊生成can0節點,重啟開發板。

1、演示Demo

進程名:can_demo

使用方法:./can_demo設備名 [參數選項]… …

本次測試接口為can0(對應開發板CAN2),控制區波特率為1Mbit/s,數據區最大為8Mbit/s,11位標準幀,不過濾幀ID,不主動發數據,不回環。因此命令為:

./can_demo can0-b 1000 -fd 8000。

三、程序驗證 

1、硬件連接

使用杜邦線將CAN1和CAN2的can-H短接,同時將can-L短接,注意不要接反。

2、M核程序

修改uboot環境變量設置M核自啟動,同時將M核程序forlinx_m7_tcm_firmware.bin;放到/run/media/mmcblk2p1/目錄下。詳細操作可看上篇文章《【玩轉多核異構】M核程序的啟動、編寫和仿真》

3、A核程序

(1)使用串口Xmodem,網絡FTP,SCP,U盤,TF卡等多種方式,將can_demo從電腦拷貝至核心板默認目錄下,輸入以下命令修改權限;

chmod 777 can_demo

(2)輸入以下命令,A核應用程序can_demo將設置波特率后打開can0節點,等待M核發送的數據,再將接收的數據通過CAN2發送給M核。

./can_demo can0 -b 1000 -fd 8000

四、實際測試

1、OKMX8MP-C開發板重新上電后,M核程序啟動,完成CAN1初始化后,在M核調試串口輸出信息,等待按鍵;

2、在A核調試串口輸入以下命令,CAN2將處于接收的狀態:

./can_demo can0 -b 1000 -fd 8000

3、在M核串口按下鍵A或a,M核CAN1發送64字節數據,A核CAN2接收數據,并將接收的數據再次發送,M核CAN1接收后和發送數據對比,輸出結果。循環100次;

4、通過測試可以看到,依托i.MX8M Plus強大的性能,雙核都以8Mbit/s的高速率發送大量數據,均沒有出現異常。

以上就是小編為小伙伴帶來的基于飛凌嵌入式OKMX8MP-C開發板雙核控制CAN-FD的使用方法了,是不是感覺性能很強大呢?點擊文章頂部“合集”即可獲得有關“多核異構”的更多干貨。


點擊索取產品資料

擴展閱讀:

《MPU進化,多核異構處理器有多強?A核與M核通信過程解析》

《【玩轉多核異構】處理器對共享外設和資源的調配方法》

【玩轉多核異構】M核程序的啟動、編寫和仿真




相關產品 >

  • OKMX8MP-C開發板

    內置NPU、ISP,AI計算能力高達2.3TOPS|飛凌嵌入式i.MX8MP 系列-NXP iMX8M Plus 開發板 基于高性能低功耗工業級iMX8MP核心板設計,支持多種多種高速通信接口。iMX8MP開發板內置NPU,AI計算能力2.3TOPS,支持4K,支持雙圖像信號處理器(ISP),是一款支持LinuxQT/android操作系統的iMX8MP開發板。

    了解詳情
    OKMX8MP-C開發板
  • FETMX8MP-C核心板

    iMX8MP核心板基于 NXP  i.MX 8M Plus 處理器設計,  采用4核Cortex-A53 和 Cortex-M7架構。支持雙千兆網口,iMX8MP性能強勁最高運行速率可達2.3TOPS,并且i.MX8MP功耗更低≤2W 。iMX 8M Plus系列專注于機器學習和視覺、高級多媒體以及具有高可靠性的工業自動化。它旨在滿足智慧家庭、樓宇、城市和工業4.0應用的需求。飛凌iMX8MP核心板提供用戶手冊,iMX8MP原理圖,引腳定義等。
    了解詳情
    FETMX8MP-C核心板

推薦閱讀 換一批 換一批