0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于STM32H750和RT-Thread的CANFD通信實(shí)現(xiàn)的記錄

RT-Thread官方賬號(hào) ? 2024-12-10 01:01 ? 次閱讀

1 背景


本人汽車電子行業(yè)從業(yè)多年,最近兩年主要從事CAN,LIN,ETH的功能開發(fā)。前幾日與測(cè)試小伙伴溝通的時(shí)候談到,雖然目前在前期功能驗(yàn)證的時(shí)候,Vector公司提供的基于CANOE軟件和CAPL腳本的測(cè)試環(huán)境可以完全模擬各類汽車通信網(wǎng)絡(luò)的上的任意節(jié)點(diǎn)的任意功能,但是由于價(jià)格極其昂貴,所以在項(xiàng)目預(yù)算吃緊的情況下,無法做到license完全人手一份。那么在這樣的前提下,是否能夠做一些替代的方案。因此我想到了一些可以做的嘗試:

購(gòu)入市面上較為便宜的CAN盒,LIN盒,ETH轉(zhuǎn)T1的盒子等,然后通過python等腳本語(yǔ)言來完成節(jié)點(diǎn)的行為模擬

使用STM32,GD32等價(jià)格親民的片子來自己做一個(gè)模擬的物理節(jié)點(diǎn),應(yīng)用ETH,CAN,LIN等協(xié)議棧,通過開源的項(xiàng)目來完成節(jié)點(diǎn)的行為模擬

通過一段時(shí)間的研究,我發(fā)現(xiàn)方案2會(huì)更加具有挑戰(zhàn)且對(duì)軟硬件的掌控更加自如,因此我打算基于網(wǎng)絡(luò)上全開源的項(xiàng)目來完成我的這個(gè)設(shè)想。

2 目的


如圖所示,我的初期目標(biāo)還是相對(duì)比較簡(jiǎn)單的,由于CAN網(wǎng)絡(luò)是汽車通訊網(wǎng)絡(luò)中最常見也最常用的,并且考慮到單片機(jī)的外設(shè)io資源,性能等,我打算采用兩路CANFD和一路ETH來做幾個(gè)以下比較常規(guī)的功能。

節(jié)點(diǎn)作為支持CANFD的Node,可以完成對(duì)CANFD的報(bào)文收發(fā),報(bào)文過濾,報(bào)文重發(fā)等功能

節(jié)點(diǎn)作為支持Router的Node,對(duì)DoCAN->DoCAN, Doip->DoCAN的診斷路由以及CANFD->CANFD的直接路由

節(jié)點(diǎn)作為支持UDS的Node,可以完成對(duì)診斷服務(wù)的響應(yīng)。

節(jié)點(diǎn)需要支持CAN

通信框架

4187d074-b64f-11ef-8084-92fbcf53809c.png

3 環(huán)境


3.1 硬件

初步選型了STM32H750VBT6,網(wǎng)絡(luò)上的板子價(jià)格相對(duì)都比較便宜,并且性能不弱,必要時(shí)甚至可以擴(kuò)充ROM,此外自帶兩路FDCAN,再加上ETH的支持,所以性價(jià)比很高。

硬件拓?fù)淙缦?/p>

419bab9e-b64f-11ef-8084-92fbcf53809c.png

3.2 軟件

軟件么,就毋庸置疑了,哈哈,之前就接觸過rt-thread,沒有真正的使用過,正好接這個(gè)機(jī)會(huì)來更加深入的了解下rt-thread。

4 當(dāng)前實(shí)現(xiàn)的工作


由于我在標(biāo)題標(biāo)記了(1),說明STM32H750在CANFD部分的工作需要多個(gè)part來描述,因此本文內(nèi)容僅描述了如何在沒有使能硬件過濾功能的前提下實(shí)現(xiàn)基于HAL-FDCAN和TJA1042收發(fā)器對(duì)CAN FD Frame,CAN Frame的收發(fā)實(shí)現(xiàn)。硬件過濾的部分需要其他的工作來做更進(jìn)一步的描述。

4.1 創(chuàng)建工程以及配置

由于我更習(xí)慣CLI的工作方式,因此完成下述步驟之后就算基本完成了工程的配置

直接使用studio創(chuàng)建如下工程,創(chuàng)建完成之后不再使用,后續(xù)編譯使用cmake + gcc, 調(diào)試使用pyocd + daplink

后續(xù)使用ENV環(huán)境來配置

41aa03ba-b64f-11ef-8084-92fbcf53809c.png

編譯完成后可以直接燒錄并且在串口輸出

41c8ec80-b64f-11ef-8084-92fbcf53809c.png

4.2 時(shí)鐘配置

Note:計(jì)算CANFD的沖裁域以及數(shù)據(jù)域的波特率和采樣率的源頭來自于與FDCAN的時(shí)鐘頻率,其實(shí)根據(jù)實(shí)際板子配置之后,可以將FDCAN的時(shí)鐘配置為常見的20MHZ,40MHZ,80MHZ中的一個(gè),我當(dāng)前選擇了40 MHz

41da06a0-b64f-11ef-8084-92fbcf53809c.png

4.3 使能CAN的配置

4.3.1

ENV

RT-Thread Components -> Device Drivers ->

[* ] **Using CAN device drivers***

[ ] Enable CAN hardware filter

[*] **Enable CANFD support**

保存配置之后

41f7080e-b64f-11ef-8084-92fbcf53809c.png

4.3.2 CubeMx

4.3.2.1 使能FDCAN1和FDCAN2

420020f6-b64f-11ef-8084-92fbcf53809c.png

4.3.2.2 生成代碼的使用

根據(jù)選擇方式的不同,代碼生成位置也會(huì)不同,只需要保證drv在調(diào)用HAL驅(qū)動(dòng)的時(shí)候可以被正確call到即可,具體細(xì)節(jié)不再贅述,論壇文章頗多。

4.4 完善CANFD的設(shè)備驅(qū)動(dòng)

4.4.1 添加宏

在 board.h中添加宏

/*#define BSP_USING_ON_CHIP_FLASH*/

#define BSP_USING_FDCAN

#define BSP_USING_FDCAN1

#define BSP_USING_FDCAN2

4.4.2 添加drv_fdcan.c

根據(jù)rtthread的驅(qū)動(dòng)模型,kernel在can.c中提供了can設(shè)備各類操作的抽象,但是對(duì)CAN控制器的具體操作需要一個(gè)設(shè)備驅(qū)動(dòng)來完成,而在5.1.0的軟件中只有drv_can.c且里面只支持CAN_HAL。在一番搜索之后發(fā)現(xiàn)ARTPI官方例子中有drv_fdcan.c的文件,可以支持FDCAN_HAL。然而這個(gè)驅(qū)動(dòng)存在以下幾個(gè)小問題,導(dǎo)致其只能發(fā)送can幀,而不能發(fā)送canfd幀

只支持仲裁域配置,無數(shù)據(jù)域配置

只支持配置成classic模式,沒有配置成FD模式的接口

沒有提供一個(gè)類似于drv_can.c里面提供的在不同時(shí)鐘頻率下的不同波特率和采樣率的數(shù)據(jù)設(shè)置集合

沒有提供對(duì)Txfifo, txbuffer等方式的靈活設(shè)置的接口

不支持?jǐn)?shù)據(jù)長(zhǎng)度大于8的發(fā)送和接收,且沒有提供Length與DLC之間的轉(zhuǎn)換接口。

等等其他

4.4.3 完成對(duì)drv_fdcan.c的一些改進(jìn)之后,一些重要的配置項(xiàng)如下

時(shí)間參數(shù)設(shè)置的規(guī)則

1波特率 = (1 / (n + tseg1 + tseg2)) * fclk

如果配置為40Mhz, 仲裁段500K -80%采樣率,數(shù)據(jù)段2000K-70%采樣率

/* 位時(shí)序配置:

************************

位時(shí)序參數(shù) | Normal | Data

--------------------------|--------------|----------------

CAN子系統(tǒng)內(nèi)核時(shí)鐘輸入 | 40 MHz | 40 MHz

時(shí)間常量 | 25 ns | 25 ns

相位段1 | 63 tq | 13 tq

相位段2 | 16 tq | 6 tq

同步跳轉(zhuǎn)寬度 | 16 tq | 6 tq

位長(zhǎng)度 | 40 tq = 1 us | 40 tq = 1 us

位速率 | 500k | 2 MBit/s

4.4.4 總線初始化

當(dāng)完成配置,編譯燒錄之后,啟動(dòng)系統(tǒng)會(huì)自動(dòng)初始化fdcan1和fdcan2

4.5 測(cè)試

4.5.1 測(cè)試結(jié)果

完成驅(qū)動(dòng)之后,使用FINISH接口編寫了一個(gè)FDCAN的測(cè)試接口,測(cè)試代碼如下

421b1096-b64f-11ef-8084-92fbcf53809c.png

測(cè)試結(jié)果 ->如圖所示,分別發(fā)送了如下命令

422c06a8-b64f-11ef-8084-92fbcf53809c.png

4.5.2 測(cè)試結(jié)論

可以通過APP層的參數(shù)控制,并且由于CANFD對(duì)CAN是完全兼容的特性,可以實(shí)現(xiàn)在STM32H750+TJA1042的組合上發(fā)送

長(zhǎng)度為1-8的CAN Frame

長(zhǎng)度為1-64的CAN FD Frame

5 未完成的工作


對(duì)HDR過濾器的配置,目前FDCAN的過濾配置有多種模式,需要從can. -> drv.fdcan.c 的鏈路上優(yōu)化配置HDR的方式

對(duì)canfd的高數(shù)據(jù)下的鏈路性能以及壓力測(cè)試

文檔中的一些設(shè)置描述比較粗略,會(huì)再補(bǔ)充細(xì)節(jié)的。

版權(quán)聲明:本文為RT-Thread論壇用戶「Woshizhapuren」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。

原文鏈接:https://club.rt-thread.org/ask/article/221a0238569f6f40.html

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • CAN
    CAN
    +關(guān)注

    關(guān)注

    57

    文章

    2747

    瀏覽量

    463674
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    6032

    瀏覽量

    135985
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10900

    瀏覽量

    355924
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1288

    瀏覽量

    40116
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RT-Thread記錄(一、版本開發(fā)環(huán)境及配合CubeMX)

    RT-Thread 學(xué)習(xí)記錄的第一篇文章,RT-Thread記錄(一、RT-Thread 版本、RT-T
    的頭像 發(fā)表于 06-20 00:28 ?5238次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>記錄</b>(一、版本開發(fā)環(huán)境及配合CubeMX)

    RT-Thread Studio上配置rtthread CANFD驅(qū)動(dòng)來控制M3508電機(jī)

    本文旨在RT-Thread Studio上配置rtthread CANFD驅(qū)動(dòng)來控制M3508電機(jī),不涉及任何原理 開發(fā)環(huán)境:RT-Thread Studio v2.2.6
    發(fā)表于 10-08 11:44 ?1321次閱讀
    在<b class='flag-5'>RT-Thread</b> Studio上配置rtthread <b class='flag-5'>CANFD</b>驅(qū)動(dòng)來控制M3508電機(jī)

    請(qǐng)問STM32H750(ART-Pi) + LAN8720速率為什么達(dá)不到100Mbps?

    **我最近使用ART-Pi(STM32H750)開發(fā)板+LAN8720A與PC通信通信協(xié)議是TCP。STM32H750是client,PC是server。
    發(fā)表于 04-18 09:25

    基于RT-Thread+STM32H750的運(yùn)動(dòng)手表設(shè)計(jì)資料推薦

    1、基于RT-Thread+STM32H750的運(yùn)動(dòng)手表設(shè)計(jì)  該運(yùn)動(dòng)手表實(shí)現(xiàn)功能如下:  時(shí)間日期星期顯示;  網(wǎng)絡(luò)時(shí)間獲??;  天氣獲取并顯示;  溫度(HTS221),濕度(HTS221
    發(fā)表于 08-31 16:10

    RT-Thread studio stm32h750程序大于128KB無法下載怎么辦?

    rt thread studio stm32h750程序大于128KB無法下載
    發(fā)表于 02-16 10:55

    STM32H750資料手冊(cè)

    STM32H750資料手冊(cè)免費(fèi)下載。
    發(fā)表于 05-18 10:38 ?91次下載

    記錄——基于 RT-Thread 實(shí)現(xiàn) USB 虛擬串口

    記錄——基于 RT-Thread 實(shí)現(xiàn) USB 虛擬串口記錄一下我在正點(diǎn)原子 F429 阿波羅開發(fā)板上實(shí)現(xiàn) USB 虛擬串口的過程,希望可以
    發(fā)表于 12-02 17:21 ?6次下載
    <b class='flag-5'>記錄</b>——基于 <b class='flag-5'>RT-Thread</b> <b class='flag-5'>實(shí)現(xiàn)</b> USB 虛擬串口

    RT-Thread STM32 配置系統(tǒng)時(shí)鐘(使用外部晶振)

    RT-Thread STM32 配置系統(tǒng)時(shí)鐘開發(fā)環(huán)境芯片:STM32F103RCT6RT-Thread Studio: V1.0.6(現(xiàn)在已經(jīng)更新到1.1.3,由于本人使用RTT開發(fā)已經(jīng)有一段時(shí)間了
    發(fā)表于 12-14 18:45 ?14次下載
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>STM32</b> 配置系統(tǒng)時(shí)鐘(使用外部晶振)

    Rt-ThreadSTM32輸出PWM

    主要記錄Rt-ThreadSTM32 輸出PWM配置過程,通過設(shè)置不同頻率PWM使蜂鳴器發(fā)出不同音調(diào)
    發(fā)表于 12-16 16:57 ?17次下載
    【<b class='flag-5'>Rt-Thread</b>】<b class='flag-5'>STM32</b>輸出PWM

    STM32H750 iap固件升級(jí)

    之前寫STM32F4的IAP升級(jí)的時(shí)候就想寫篇博客記錄一下,但因?yàn)閼芯鸵恢睕]有實(shí)施,這次項(xiàng)目用到了STM32H750的IAP升級(jí),所以就趁這次機(jī)會(huì)記錄一下
    發(fā)表于 12-24 19:33 ?15次下載
    <b class='flag-5'>STM32H750</b> iap固件升級(jí)

    RT-Thread Studio驅(qū)動(dòng)SD卡

    總結(jié)前言硬件平臺(tái):RT-Thread ART-Pi STM32H750XBH6開發(fā)板 H750開發(fā)板開發(fā)軟件:RT-Thread Studio參考博客:
    發(fā)表于 12-27 19:13 ?20次下載
    <b class='flag-5'>RT-Thread</b> Studio驅(qū)動(dòng)SD卡

    STM32H750】玩轉(zhuǎn)ART-Pi(一)——使用STM32CUBMX生成TouchGFX工程

    QSPI-FLASH燒錄算法在ART-Pi H750上移植TouchGFX(三)——移植TouchGFX到RT-Thread系統(tǒng)在ART-Pi H750上移植TouchGFX(四)——使用RT
    發(fā)表于 12-28 19:20 ?10次下載
    【<b class='flag-5'>STM32H750</b>】玩轉(zhuǎn)ART-Pi(一)——使用<b class='flag-5'>STM32</b>CUBMX生成TouchGFX工程

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南
    發(fā)表于 02-22 18:23 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 潘多拉 <b class='flag-5'>STM32</b>L475 上手指南

    采用 STM32H750 實(shí)現(xiàn)電機(jī)控制節(jié)點(diǎn)維護(hù)設(shè)備設(shè)計(jì)

    采用 STM32H750 實(shí)現(xiàn)電機(jī)控制節(jié)點(diǎn)維護(hù)設(shè)備設(shè)計(jì)
    的頭像 發(fā)表于 10-24 15:33 ?966次閱讀
    采用 <b class='flag-5'>STM32H750</b> <b class='flag-5'>實(shí)現(xiàn)</b>電機(jī)控制節(jié)點(diǎn)維護(hù)設(shè)備設(shè)計(jì)

    基于rt-thread的socket通信設(shè)計(jì)

    最近再研究 rt-thread通信 ,想設(shè)計(jì)出 eps8266(多個(gè)) rt-thread(作為中控) 服務(wù)器的通信框架,使用的開發(fā)板是 潘多拉
    的頭像 發(fā)表于 10-13 15:02 ?1366次閱讀
    基于<b class='flag-5'>rt-thread</b>的socket<b class='flag-5'>通信</b>設(shè)計(jì)