本例程主要講解 CANFD 總線(xiàn)異構(gòu)通訊簡(jiǎn)單實(shí)例。把 CANFD 分配給 M4 核,然后另外一 塊開(kāi)發(fā)板發(fā)送,M4 接收 CANFD 數(shù)據(jù)并通過(guò)異構(gòu)通訊方式發(fā)送給 A7 在終端回顯。
2. 硬件資源
USB-TTL Debug 線(xiàn)兩根
兩塊開(kāi)發(fā)板?
開(kāi)發(fā)板配件
3. 軟件資源?
Linux 5.4.31?
STM32CubeIDE 1.3.0
STM32CubeMX5.6.0
4. 環(huán)境準(zhǔn)備?
預(yù)先安裝好 CubeIDE,CubeMX 等開(kāi)發(fā)軟件。
5. 操作步驟
5.1.A7 核操作?
由于 CAN 可以被 A7 和 m4 同時(shí)使用,現(xiàn)在是要分配給 m4,所以在 A7 端通過(guò)設(shè)備樹(shù) 把 CAN 分配給 m4。操作步驟如下:
1) 配置設(shè)備樹(shù)?
進(jìn)入內(nèi)核源碼目錄 stm32mp15xc-kernel5.4/arch/arm/boot/dts,vim 打開(kāi) stm32mp15xx-ya157c.dtsi 設(shè)備樹(shù)文件,把 can1 分配給 m4,并屏蔽掉 A7 端的 can1。
接著配置資源管理器,分配異構(gòu)通訊的 SRAM。
2) 編譯并更新設(shè)備樹(shù)?
配置完成之后編譯并拷貝對(duì)應(yīng)設(shè)備樹(shù)到 bootfs 分區(qū)。
另官方已經(jīng)默認(rèn)配置了 RPMSG_TTY 驅(qū)動(dòng)。
5.2.M4 核操作
創(chuàng)建一個(gè) STM32 工程,在 STM32CubeMX 里,依次配置 CANFD 用于發(fā)送報(bào)文、以 及配置 IPCC 和 OPENAMP 用于通信。
圖 5-1. 配置 IPCC
圖 5-2. 配置 openamp
圖 5-3.CANFD 配置
注意配置 IPCC 時(shí),需要在 NVIC Settings 選項(xiàng)卡里,將 IPCC RX1 occupied interrupt 和 IPCC TX1 free interrupt 的使能勾選上,不然后面的 OPENAMP 的 Activated 始終為灰色,無(wú)法激活。這里計(jì)劃創(chuàng)建兩個(gè) RPMsg tty 通道,一個(gè)用來(lái)傳輸 canfd 報(bào)文,一個(gè)用來(lái)統(tǒng)計(jì) canfd 報(bào)文的數(shù)量。
初始化兩個(gè) RPMsg tty 虛擬串口 。
注冊(cè)回調(diào)函數(shù)以按通道接收消息 。
設(shè)置 canfd 接收濾波器和發(fā)送數(shù)據(jù) buf,并注冊(cè)回調(diào)函數(shù)和 canfd 接收中 斷。
主函數(shù)輪詢(xún) RPMsg 消息 OPENAMP_check_for_message() 查詢(xún) MailBox 狀態(tài) ,主 函數(shù)并根據(jù)運(yùn)行時(shí)間向外發(fā)送報(bào)文同時(shí)不停的查詢(xún)接收?qǐng)?bào)文。
當(dāng) M4 核接收到 canfd 報(bào)文的時(shí)候,存入 buf,主函數(shù)檢測(cè)到有 buf 數(shù)據(jù), 就會(huì)調(diào)用虛擬串口發(fā)送給 A7 端。
5.3. 測(cè)試步驟?
J12 的 CANH、CANL 引腳和同類(lèi)型的板子 CANH、CANL 相連,把編譯 生成的 M4 固件拷貝到 A7,并啟動(dòng)固件 .....
獲取完整 MYD-YA157-V2 開(kāi)發(fā)板 CAN BUS 總線(xiàn)通信實(shí)例應(yīng)用開(kāi)發(fā)筆記
下載地址:http://www.myir-tech.com/soft.asp?id=1197