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

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

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

【RA6M3 HMI Board評(píng)測(cè)挑戰(zhàn)】-瑞薩RA6M3上的CAN實(shí)踐

冬至子 ? 來(lái)源:qinyunti ? 作者:qinyunti ? 2023-10-17 14:55 ? 次閱讀

一.準(zhǔn)備
基于RT-Thread Studio

1.1安裝BSP包
1.jpg

注意GNU工具鏈版本
1.jpg

1.2 芯片資料
1.3FSP
1.4代碼倉(cāng)庫(kù)

1.5創(chuàng)建工程
菜單欄
文件->新建->RT-Thread項(xiàng)目
設(shè)置如下
1.jpg

2.jpg

接上串口P205 P206
115200-8-N-1
1.jpg

二.CAN模塊硬件部分介紹
1.jpg

TP5設(shè)置了一個(gè)測(cè)試點(diǎn),可以測(cè)試Vref的VDD/2的電壓,輔助確認(rèn)芯片是否正常。

R76 R77構(gòu)成了120歐終端電阻,C67起到濾波作用,這個(gè)電容不能大,否則影響高速時(shí)信號(hào)邊沿,導(dǎo)致邊沿變遲緩可能導(dǎo)致采樣錯(cuò)誤。

RS用于Slope-Control控制輸入,默認(rèn)接GND即High-Speed模式。

1.jpg

三.CAN模塊介紹
參考《Renesas RA6M3 Group User’s Manual: Hardware》的《37. Controller Area Network (CAN) Module》

3.1特征
支持ISO11898-1 標(biāo)準(zhǔn)和擴(kuò)展幀
支持最高1 Mbps
32個(gè)消息郵箱:每一個(gè)都可以獨(dú)立配置為接收或發(fā)送;或者24個(gè)配置為接受或發(fā)送,剩余的8個(gè)配置為4級(jí)收發(fā)FIFO。
支持?jǐn)?shù)據(jù)幀和遠(yuǎn)程幀接收,可配置只接收標(biāo)準(zhǔn)幀或者擴(kuò)展幀或者混合幀,可配置單次接收模式,可配置溢出時(shí)數(shù)據(jù)是保存還是丟棄,每個(gè)郵箱可單獨(dú)配置接收完成中斷使能。
4個(gè)郵箱共用一個(gè),一共8個(gè)接收過(guò)濾器,每個(gè)郵箱可單獨(dú)使能過(guò)濾。
支持?jǐn)?shù)據(jù)幀和遠(yuǎn)程幀發(fā)送,可配置只發(fā)送標(biāo)準(zhǔn)幀或者擴(kuò)展幀或者混合幀,可配置單次發(fā)送模式,廣播功能,優(yōu)先級(jí)可由ID或者郵箱序號(hào)決定,支持發(fā)送中止且有中止完成標(biāo)志,每個(gè)郵箱可單獨(dú)配置接發(fā)送成中斷使能。
從總線斷開(kāi)狀態(tài)恢復(fù)的模式轉(zhuǎn)換可選擇為:1.符合ISO11898-1規(guī)范2.總線斷開(kāi)進(jìn)入時(shí)自動(dòng)進(jìn)入CAN停止模式3.總線斷開(kāi)完成時(shí)自動(dòng)進(jìn)入CAN停止模式4.通過(guò)軟件進(jìn)入CAN停止模式5.通過(guò)軟件轉(zhuǎn)換到錯(cuò)誤活動(dòng)狀態(tài)。
?監(jiān)控CAN總線錯(cuò)誤,包括填充錯(cuò)誤、格式錯(cuò)誤、ACK錯(cuò)誤、15位CRC錯(cuò)誤、位錯(cuò)誤和ACK分隔符錯(cuò)誤。檢測(cè)到錯(cuò)誤狀態(tài)的轉(zhuǎn)換,包括錯(cuò)誤警告、被動(dòng)錯(cuò)誤、總線關(guān)閉進(jìn)入和總線關(guān)閉恢復(fù)。支持讀取錯(cuò)誤計(jì)數(shù)器。
使用16位計(jì)數(shù)器的時(shí)間戳功能,可選擇1位、2位、4位和8位時(shí)間周期的參考時(shí)鐘
支持五種中斷源:接收完成、發(fā)送完成、接收FIFO、發(fā)送FIFO和錯(cuò)誤中斷。
停止CAN時(shí)鐘以降低功耗。
三個(gè)軟件支持單元:接收過(guò)濾器;郵箱搜索支持,包括接收郵箱搜索、發(fā)送郵箱搜索和郵件丟失搜索;通道搜索支持。
時(shí)鐘源來(lái)自PCLKB 或 CANMCLK
可用于評(píng)估的三種測(cè)試模式:僅聽(tīng)模式;自檢模式0(外部環(huán)回);自檢模式1(內(nèi)部環(huán)回)。
可以設(shè)置模塊停止?fàn)顟B(tài)以降低功耗.

3.2框圖
1.jpg

3.3操作模式
CAN模塊的操作模式包括:CAN復(fù)位模式,CAN停止模式,CAN操作模式,CAN睡眠模式。狀態(tài)切換如下圖:
1.jpg

3.4時(shí)序設(shè)置
時(shí)序設(shè)置很重要
時(shí)鐘源
CAN模塊有一個(gè)CAN時(shí)鐘發(fā)生器,可通過(guò)BCR寄存器中的CCLKS和BRP[9:0]位進(jìn)行設(shè)置。圖顯示了CAN時(shí)鐘發(fā)生器的框圖
CCLKS選擇時(shí)鐘源來(lái)自與PCLKB還是EXTAL
BPR設(shè)置時(shí)鐘分頻最后得到fCANCLK
1.jpg

3.5時(shí)序設(shè)置
1.jpg

2.jpg

3.6中斷
1.jpg

四.CAN驅(qū)動(dòng)介紹
4.1添加CAN驅(qū)動(dòng)
按如下設(shè)置并保存,也可以使用env設(shè)置
1.jpg

添加的代碼位置如下
1.jpg

4.2使能硬件CAN
右鍵點(diǎn)擊工程,打開(kāi)env環(huán)境
1.jpg

2.jpg

3.jpg

1.jpg

2.jpg

4.3測(cè)試代碼
CANboardSConscript下添加

if GetDepend(['RT_USING_CAN']):
src += Glob('ports/can_test.c')
刷新scons配置
1.jpg

添加的測(cè)試代碼如下
1.jpg

該代碼使用can0,創(chuàng)建接收線程接收can數(shù)據(jù),接收到后打印信息,同時(shí)導(dǎo)出命令can_sample,執(zhí)行一次命令發(fā)送一幀CAN數(shù)據(jù)。

五.回環(huán)測(cè)試
rt_device_open后添加一行,設(shè)置為回環(huán)模式
rt_device_control(can_dev,RT_CAN_CMD_SET_MODE,RT_CAN_MODE_LOOPBACK);

編譯運(yùn)行,help可以看到對(duì)應(yīng)的命令can_sample
1.jpg

六.問(wèn)題
can_sample can0
只能執(zhí)行一次
1.jpg

static rt_device_t can_dev = NULL;

設(shè)置只有未初始化才初始化

if(can_dev == NULL)
{
    if (argc == 2)
    {
        rt_strncpy(can_name, argv[1], RT_NAME_MAX);
    }
    else
    {
        rt_strncpy(can_name, CAN_DEV_NAME, RT_NAME_MAX);
    }
    can_dev = rt_device_find(can_name);
    if (!can_dev)
    {
        rt_kprintf("find %s failed!n", can_name);
        return RT_ERROR;
    }
    rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO);
    res = rt_device_open(can_dev, RT_DEVICE_FLAG_INT_TX | RT_DEVICE_FLAG_INT_RX);
    RT_ASSERT(res == RT_EOK);
    rt_device_control(can_dev,RT_CAN_CMD_SET_MODE,RT_CAN_MODE_LOOPBACK);
    thread = rt_thread_create("can_rx", can_rx_thread, RT_NULL, 1024, 25, 10);
    if (thread != RT_NULL)
    {
        rt_thread_startup(thread);
    }
    else
    {
        rt_kprintf("create can_rx thread failed!n");
    }

}
這樣就可以反復(fù)進(jìn)行can_sample測(cè)試

1.jpg
七.CAN驅(qū)動(dòng)分析
7.1測(cè)試代碼
boardportscan_test.c
見(jiàn)前面的測(cè)試

7.2硬件抽象層
librariesHAL_Driversdrv_can.c drv_can.h
導(dǎo)出了初始化函數(shù),啟動(dòng)時(shí)自動(dòng)根據(jù)鏈接腳本放置的位置調(diào)用該函數(shù)
INIT_BOARD_EXPORT(rt_hw_can_init);

通過(guò)接口
result = rt_hw_can_register(&can_obj[i].can_dev, can_obj[i].config->name, can_obj[i].can_dev.ops, RT_NULL);
注冊(cè)幾個(gè)關(guān)鍵的數(shù)據(jù)結(jié)構(gòu)
重點(diǎn)是如下結(jié)構(gòu)體,即操作底層硬件的接口,驅(qū)動(dòng)層即通過(guò)注冊(cè)的該opt結(jié)構(gòu)進(jìn)行底層硬件操作

const struct rt_can_ops ra_can_ops =
{
.configure = ra_can_configure,
.control = ra_can_control,
.sendmsg = ra_can_sendmsg,
.recvmsg = ra_can_recvmsg
};
librariesHAL_Driversconfigra2l1can_config.h中的

#if defined(BSP_USING_CAN0)
#ifndef CAN0_CONFIG
#define CAN0_CONFIG
{
.name = "can0",
.num_of_mailboxs = CAN_NO_OF_MAILBOXES_g_can0,
.p_api_ctrl = &g_can0_ctrl,
.p_cfg = &g_can0_cfg,
}
#endif /* CAN0_CONFIG /
#endif /
BSP_USING_CAN0 */
則定義的芯片相關(guān)的操作數(shù)據(jù)結(jié)構(gòu)和設(shè)備名字。

7.3組件層
rt-threadcomponentsdriverscancan.c

導(dǎo)出了命令
MSH_CMD_EXPORT_ALIAS(cmd_canstat, canstat, stat can device status);

rt_hw_can_register注冊(cè)以下接口,即組件設(shè)備的驅(qū)動(dòng)API

device- >init        = rt_can_init;
device- >open        = rt_can_open;
device- >close       = rt_can_close;
device- >read        = rt_can_read;
device- >write       = rt_can_write;

device->control = rt_can_control;
7.4設(shè)備層
更通用的設(shè)備層通過(guò)設(shè)備名找到設(shè)備句柄
rt_device_find

設(shè)備打開(kāi)等操作時(shí)rt_device_open通過(guò)設(shè)備句柄調(diào)用組件層的API,

rt_can_open等,而組件層調(diào)用硬件抽象層的接口,硬件抽象層再調(diào)用IC的固件庫(kù)實(shí)現(xiàn)硬件操作。

八.總結(jié)
得益于RT_Thread比較好的設(shè)備驅(qū)動(dòng)框架,設(shè)備驅(qū)動(dòng)的擴(kuò)展非常方便,直接配置IC固件庫(kù),實(shí)現(xiàn)硬件抽象層即可,組件層和設(shè)備層驅(qū)動(dòng)都是通用的。

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

    關(guān)注

    10

    文章

    3370

    瀏覽量

    105789
  • PCB板
    +關(guān)注

    關(guān)注

    27

    文章

    1441

    瀏覽量

    51455
  • CAN模塊
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    8735
  • GNU
    GNU
    +關(guān)注

    關(guān)注

    0

    文章

    143

    瀏覽量

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

    關(guān)注

    31

    文章

    1261

    瀏覽量

    39836
  • RA6M3
    +關(guān)注

    關(guān)注

    0

    文章

    52

    瀏覽量

    91
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RA6M3數(shù)據(jù)手冊(cè)(英)

    RA6M3數(shù)據(jù)手冊(cè)(英)
    發(fā)表于 11-07 19:49 ?0次下載
    <b class='flag-5'>RA6M3</b>數(shù)據(jù)手冊(cè)(英)

    RA6M3硬件用戶手冊(cè)(英)

    RA6M3硬件用戶手冊(cè)(英)
    發(fā)表于 11-07 19:49 ?0次下載
    <b class='flag-5'>RA6M3</b>硬件用戶手冊(cè)(英)

    RA6M3數(shù)據(jù)手冊(cè)(中英)

    RA6M3數(shù)據(jù)手冊(cè)(中英)
    發(fā)表于 11-07 19:49 ?0次下載
    <b class='flag-5'>RA6M3</b>數(shù)據(jù)手冊(cè)(中英)

    RA6M3硬件用戶手冊(cè)(中英)

    RA6M3硬件用戶手冊(cè)(中英)
    發(fā)表于 11-07 19:49 ?2次下載
    <b class='flag-5'>RA6M3</b>硬件用戶手冊(cè)(中英)

    RA6M3 組用戶手冊(cè):硬件

    RA6M3 組用戶手冊(cè):硬件
    發(fā)表于 05-12 19:25 ?0次下載
    <b class='flag-5'>RA6M3</b> 組用戶手冊(cè):硬件

    RA6M3 組數(shù)據(jù)表

    RA6M3 組數(shù)據(jù)表
    發(fā)表于 05-12 19:25 ?0次下載
    <b class='flag-5'>RA6M3</b> 組數(shù)據(jù)表

    vscode+pyocd+daplink調(diào)試ra6m3

    拿到了ra6m3的板子,發(fā)現(xiàn)使用RT-Thread Stduio下載速度很慢,就想著搭建一個(gè)vscode的環(huán)境試試。
    的頭像 發(fā)表于 06-07 11:51 ?1387次閱讀

    RA6M3 HMI Board 之RTC實(shí)踐

    開(kāi)發(fā)環(huán)境: RT-Thread Studio:v2.2.6 開(kāi)發(fā)板:RA6M3 HMI Board開(kāi)發(fā)板 MCU:R7FA6M3AH3CFB 1 R
    的頭像 發(fā)表于 06-21 21:31 ?2860次閱讀
    <b class='flag-5'>RA6M3</b> <b class='flag-5'>HMI</b> <b class='flag-5'>Board</b> 之RTC<b class='flag-5'>實(shí)踐</b>

    RA6M3 組用戶手冊(cè):硬件

    RA6M3 組用戶手冊(cè):硬件
    發(fā)表于 06-29 19:17 ?0次下載
    <b class='flag-5'>RA6M3</b> 組用戶手冊(cè):硬件

    RA6M3 組數(shù)據(jù)表

    RA6M3 組數(shù)據(jù)表
    發(fā)表于 06-29 19:17 ?0次下載
    <b class='flag-5'>RA6M3</b> 組數(shù)據(jù)表

    【線下培訓(xùn)】上海臨港: RT-Thread × 工業(yè)監(jiān)視器 RA6M3 HMI Board解決方案

    RT-Thread 與將于10月14日在上海臨港舉行一場(chǎng)線下培訓(xùn)。 本次培訓(xùn)將為開(kāi)發(fā)者們帶來(lái)期待已久的熱門(mén)技術(shù)主題, RT-Thread × 工業(yè)監(jiān)視器
    的頭像 發(fā)表于 09-07 17:40 ?742次閱讀
    【線下培訓(xùn)】上海臨港: RT-Thread × <b class='flag-5'>瑞</b><b class='flag-5'>薩</b> 工業(yè)監(jiān)視器 <b class='flag-5'>RA6M3</b> <b class='flag-5'>HMI</b> <b class='flag-5'>Board</b>解決方案

    vscode+pyocd+daplink調(diào)試ra6m3步驟

    拿到了ra6m3的板子,發(fā)現(xiàn)使用RT-Thread Stduio下載速度很慢,就想著搭建一個(gè)vscode的環(huán)境試試。
    的頭像 發(fā)表于 09-14 14:47 ?1555次閱讀

    RA6M3 HMI-Board Video Demo 上手指南

    高性能芯片 RA6M3 及 RT-Thread 和 LVGL 軟件生態(tài),HMI Board 不僅硬件性能強(qiáng)勁,同時(shí)軟件生態(tài)豐富,助力開(kāi)發(fā)者快速開(kāi)發(fā)出 GUI 智能硬件產(chǎn)品。 本示例開(kāi)源鏈接: https
    的頭像 發(fā)表于 09-15 18:25 ?1601次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>RA6M3</b> <b class='flag-5'>HMI-Board</b> Video Demo 上手指南

    RA6M3 開(kāi)發(fā)實(shí)踐指南-UART實(shí)踐

    RT-Thread即將發(fā)布一系列RA6M3外設(shè)驅(qū)動(dòng)的實(shí)踐指南,我們將使用RA6M3 HMI-Boar
    的頭像 發(fā)表于 09-23 12:15 ?1254次閱讀

    RA6M3 RT-Thread* LVGL HMI Board開(kāi)發(fā)實(shí)踐指南-GPIO實(shí)踐

    RT-Thread即將發(fā)布一系列RA6M3外設(shè)驅(qū)動(dòng)的實(shí)踐指南,我們將使用RA6M3 HMI-Boar
    的頭像 發(fā)表于 11-30 19:05 ?1116次閱讀
    <b class='flag-5'>RA6M3</b> RT-Thread* LVGL <b class='flag-5'>HMI</b> <b class='flag-5'>Board</b>開(kāi)發(fā)<b class='flag-5'>實(shí)踐</b>指南-GPIO<b class='flag-5'>實(shí)踐</b>