RAMCUCANFD应用实例(下)

瑞萨MCU小百科 2023-10-25 12:03


前篇您可点击上方的文章合集或文末的“上一篇 · RA MCU CANFD应用实例(上)”查看相关文章。


3.14 设置Stack

点击New Stack,选择CAN FD Lite。 


3.15 它会变为红色,表示FSP配置器发现模块有错误

将鼠标指针悬停在 CAN FD lite框上并检查错误:


3.16 CANFD时钟默认为禁用状态。

切换到Clocks选项卡,将CANFDCLK设置为40MHz:

● 将PLL(锁相环)分频器改为 Div / 2

● 将PLL乘法器改为 Mul x16.0

● 将CANFDCLK改为 Src: PLL

● 将CANFDCLK分频器改为 Div /4


3.17 切回Stacks选项卡,选择CANFD lite,转至Properties选项卡

(确保当前为FSP 配置透视图 – 点击右上方

)。打开属性检查比特率。


本实例将使用自动比特率生成器的默认比特率配置。您可在Bitrate->Automatic中检查比特率。确保已禁用了“使用手动设置”。


3.18 检查实际采样点和比特率(hal_data.c)是否与应用程序的要求相匹配。


注意

● 为了获得最佳时钟容差,检查Arbitration baud_rate_prescaler和Data baud_rate_prescaler是否相同至关重要。

● 如果启用了收发器Delay Compensation,请不要使Data baud_rate_prescaler位大于 1。


3.19 我们将传输CANFD消息(msg ID:0x60),通过TX Mailbox 0(TX MB0)。

为此,我们需要修改以下参数: 

● Common->Reception->Acceptance Filtering->Channel 1 Rule Count: 0(修改后可以看到Stacks Tab上的error就没有了)

● Module CAN FD Lite->Transmit Interrupts: Enable TXMB 0

● Module CAN FD Lite->Reception->Message Buffer->Number of Buffer: 1


点击Generate Project Content按键


3.20 要使用CANFD Lite堆栈,您需要先初始化CANFD模块。

为此,在hal_entry()函数中添加以下内容:

左右滑动查看更多

    /* Initialize CANFD Lite driver*/    err = R_CANFD_Open(&g_canfd0_ctrl, &g_canfd0_cfg);    if(FSP_SUCCESS != err)    {        APP_ERR_TRAP();    }


3.21 须将AFL条目设置为在应用中接收消息。

本实例需求如下:

● CANFD Bus

● Standard ID (11 bits)

● Message FIFO Buffer 0 (接收0x60 ~ 0x6F的消息ID)


在hal_entry.c文件中hal_entry()函数前复制以下const来设置AFL:

左右滑动查看更多

const canfd_afl_entry_t p_canfd0_afl[CANFD_CFG_AFL_CH0_RULE_NUM] ={{     .id =     {         .id         = 0x60,         .frame_type = CAN_FRAME_TYPE_DATA,         .id_mode    = CAN_ID_MODE_STANDARD,     },     .mask =     {         .mask_id         = 0x7F0,         .mask_frame_type = 0,         .mask_id_mode    = 1,     },     .destination =     {         .minimum_dlc = CANFD_MINIMUM_DLC_0,         .fifo_select_flags = CANFD_RX_FIFO_0,     }, },};


注意

RA CANFD使用AFL条目来过滤接收到的消息。我们回顾一下AFL的主要参数:

点击查看大图


3.22 在hal_entry.c文件中hal_entry()函数前添加几个变量声明和一个宏定义:

左右滑动查看更多

/* Flags to be set in Callback function */bool b_canfd_tx_complete = false;bool b_canfd_rx_complete = false;bool b_canfd_err_status = false;
/* CANFD RX and TX variables */can_frame_t g_can_tx_frame;can_frame_t g_can_rx_frame;can_frame_t g_can_rx_frame_fifo;
uint8_t tx_data[64];#define DATA_LENGTH                  (64)  


3.23 添加Callback函数(也可以使用拖拽的方式进行添加):

左右滑动查看更多

/* Callback function */void canfd0_callback(can_callback_args_t *p_args){    /* TODO: add your own code here */    switch (p_args->event)    {        case CAN_EVENT_TX_COMPLETE:        {            b_canfd_tx_complete = true;        //set flag bit            break;        }        case CAN_EVENT_RX_COMPLETE: // Currently driver don't support this. This is unreachable code for now.        {            b_canfd_rx_complete = true;            break;        }        case CAN_EVENT_ERR_WARNING:             //error warning event        case CAN_EVENT_ERR_PASSIVE:             //error passive event        case CAN_EVENT_ERR_BUS_OFF:             //error Bus Off event        case CAN_EVENT_BUS_RECOVERY:            //Bus recovery error event        case CAN_EVENT_MAILBOX_MESSAGE_LOST:    //overwrite/overrun error event        case CAN_EVENT_ERR_BUS_LOCK:            // Bus lock detected (32 consecutive dominant bits).        case CAN_EVENT_ERR_CHANNEL:             // Channel error has occurred.        case CAN_EVENT_TX_ABORTED:              // Transmit abort event.        case CAN_EVENT_ERR_GLOBAL:              // Global error has occurred.        case CAN_EVENT_FIFO_MESSAGE_LOST:      // Transmit FIFO is empty.        case CAN_EVENT_TX_FIFO_EMPTY:           // Transmit FIFO is empty.        {            b_canfd_err_status = true;          //set flag bit            break;        }    }}


3.24 若传送CANFD数据,需用到CAN传输函数的选项参数。

有三个仅限CANFD的位可以启用一些独有的 CANFD 功能:

● CANFD_FRAME_OPTION_ERROR

= Error state set (ESI).

● CANFD_FRAME_OPTION_BRS

= Bit Rate Switching (BRS) enabled.

● CANFD_FRAME_OPTION_FD

= Flexible Data frame (FDF).

另外,CANFD可以增加到64字节,所以我们将DLC(数据长度代码)设为64。


在按键user_irq_callback函数if(9 == p_args->channel)中添加以下代码以发送标准数据(11 位 ID)CANFD frame

左右滑动查看更多

/* Callback function */void user_irq_callback(external_irq_callback_args_t *p_args){    /* TODO: add your own code here */    /* Make sure it's the right interrupt*/    if(9 == p_args->channel)    {        fsp_err_t err = FSP_SUCCESS;        for( uint16_t i = 0; i < DATA_LENGTH; i++)        {            tx_data[i]          = (uint8_t) (i + 1);        }        memcpy((uint8_t*)&g_can_tx_frame.data[0], (uint8_t*)&tx_data[0], DATA_LENGTH);        g_can_tx_frame.id               = 0x60;        g_can_tx_frame.id_mode          = CAN_ID_MODE_STANDARD;        g_can_tx_frame.type             = CAN_FRAME_TYPE_DATA;        g_can_tx_frame.data_length_code = 64;        g_can_tx_frame.options          = CANFD_FRAME_OPTION_FD | CANFD_FRAME_OPTION_BRS;
       /* Write some data to the transmit frame */        err = R_CANFD_Write(&g_canfd0_ctrl, 0, &g_can_tx_frame);        /* Handle error */        if(FSP_SUCCESS != err)        {            APP_ERR_TRAP();        }    }}


注意

在R_CANFD_Write函数中,如果传输消息缓冲区 (TXMB) 已在使用中,则传输消息将排队。CANFD_B外围设备自动传输排队的消息,并按消息缓冲区编号或消息ID确定其优先级(请参阅 CANFD Lite堆栈传输优先级属性)。


3.25 对工程进行编译和调试


3.26 运行代码,并按下FPB板上的S1,可以正常发送CANFD数据。

如果有CAN总线数据采集工具PCAN可以在这里进行验证,如果没有,请在下节完成后使用两块FPB板进行验证。


3.27 按下断开按钮

注意

这两张图片用于比较Classical CAN与CANFD frames。第一张图显示CAN帧以500Kb/s的速度传输8Bytes,第二张图显示CANFD以两个比特率(标称速率为500Kb/s,FD数据速率为2Mb/s)传输64Bytes。

Classical CAN Frame:

CANFD Frame:


4

CANFD:使用FIFO接收数据

本节要点:

本节学习如何通过FIFO接收CAN消息。当对方FPB板按下S1,发送CANFD数据,可以使用FIFO正常接收CANFD数据。


4.1 打开fpb_ra6e2_canfd_lab工程中FSP配置:


4.2 切到Stacks选项卡,选择CANFD Lite,然后转到Properties选项卡(确保当前为FSP配置透视图)。

Reception FIFO 0默认为启用状态,并配置为每帧触发一次中断。您可在FSP配置器中检查配置。(Module g_canfd0 CAN FD Lite (r_canfdlite)->Reception->FIFOs->FIFO 0)


并更改如下RX FIFO参数以确保其可以接收64字节的数据。

● Reception->FIFO->FIFO 0->Payload Size: 64 Bytes

● Reception->FIFO->FIFO 0->Depth: 8 Stages


点击Generate Project Content按钮。


注意

CANFD外设具有一个有限数量的缓冲池RAM,可用于分配RX MB和FIFO等级。就RA6E2和RA4E2而言:

● 最大64-byte 存储:16则消息

● 最大8-byte 存储:60则消息


4.3 在canfd0_callback中添加以下代码以便从FIFO获取数据:

左右滑动查看更多

        case CAN_EVENT_RX_COMPLETE: // Currently driver don't support this. This is unreachable code for now.        {            b_canfd_rx_complete = true;            memcpy(&g_can_rx_frame, &p_args->frame, sizeof(can_frame_t));            break;        }


注意

FIFO缓冲区中有帧时,FSP ISR Handler将会多次调用CANFD回调函数。


4.4 对工程进行编译和调试


4.5 运行代码,并按下对方FPB板上的S1,能够正确接收到CANFD数据。


4.6 按下断开按钮


完整工程您可以通过以下链接下载:

https://gitee.com/recn-mcu-ae/fpb_ra6e2-canfd-sample-project


更多内容,您可复制下方网址到浏览器中打开进入瑞萨中文论坛查看:

https://community-ja.renesas.com/zh/frums-groups/mcu-mpu/


1

END

1


推荐阅读

RA MCU CANFD在FSP中的配置详解

RA MCU CAN和CANFD IP介绍

CAN和CANFD协议简介(上)

更多精彩内容,请点击

评论
  • 首先在gitee上打个广告:ad5d2f3b647444a88b6f7f9555fd681f.mp4 · 丙丁先生/香河英茂工作室中国 - Gitee.com丙丁先生 (mr-bingding) - Gitee.com2024年对我来说是充满挑战和机遇的一年。在这一年里,我不仅进行了多个开发板的测评,还尝试了多种不同的项目和技术。今天,我想分享一下这一年的故事,希望能给大家带来一些启发和乐趣。 年初的时候,我开始对各种开发板进行测评。从STM32WBA55CG到瑞萨、平头哥和平海的开发板,我都
    丙丁先生 2024-12-11 20:14 73浏览
  • 全球智能电视时代来临这年头若是消费者想随意地从各个通路中选购电视时,不难发现目前市场上的产品都已是具有智能联网功能的智能电视了,可以宣告智能电视的普及时代已到临!Google从2021年开始大力推广Google TV(即原Android TV的升级版),其他各大品牌商也都跟进推出搭载Google TV操作系统的机种,除了Google TV外,LG、Samsung、Panasonic等大厂牌也开发出自家的智能电视平台,可以看出各家业者都一致地看好这块大饼。智能电视的Wi-Fi连线怎么消失了?智能电
    百佳泰测试实验室 2024-12-12 17:33 53浏览
  • 在智能化技术快速发展当下,图像数据的采集与处理逐渐成为自动驾驶、工业等领域的一项关键技术。高质量的图像数据采集与算法集成测试都是确保系统性能和可靠性的关键。随着技术的不断进步,对于图像数据的采集、处理和分析的需求日益增长,这不仅要求我们拥有高性能的相机硬件,还要求我们能够高效地集成和测试各种算法。我们探索了一种多源相机数据采集与算法集成测试方案,能够满足不同应用场景下对图像采集和算法测试的多样化需求,确保数据的准确性和算法的有效性。一、相机组成相机一般由镜头(Lens),图像传感器(Image
    康谋 2024-12-12 09:45 75浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-11 17:58 86浏览
  • 一、SAE J1939协议概述SAE J1939协议是由美国汽车工程师协会(SAE,Society of Automotive Engineers)定义的一种用于重型车辆和工业设备中的通信协议,主要应用于车辆和设备之间的实时数据交换。J1939基于CAN(Controller Area Network)总线技术,使用29bit的扩展标识符和扩展数据帧,CAN通信速率为250Kbps,用于车载电子控制单元(ECU)之间的通信和控制。小北同学在之前也对J1939协议做过扫盲科普【科普系列】SAE J
    北汇信息 2024-12-11 15:45 112浏览
  • 铁氧体芯片是一种基于铁氧体磁性材料制成的芯片,在通信、传感器、储能等领域有着广泛的应用。铁氧体磁性材料能够通过外加磁场调控其导电性质和反射性质,因此在信号处理和传感器技术方面有着独特的优势。以下是对半导体划片机在铁氧体划切领域应用的详细阐述: 一、半导体划片机的工作原理与特点半导体划片机是一种使用刀片或通过激光等方式高精度切割被加工物的装置,是半导体后道封测中晶圆切割和WLP切割环节的关键设备。它结合了水气电、空气静压高速主轴、精密机械传动、传感器及自动化控制等先进技术,具有高精度、高
    博捷芯划片机 2024-12-12 09:16 85浏览
  • 应用环境与极具挑战性的测试需求在服务器制造领域里,系统整合测试(System Integration Test;SIT)是确保产品质量和性能的关键步骤。随着服务器系统的复杂性不断提升,包括:多种硬件组件、操作系统、虚拟化平台以及各种应用程序和服务的整合,服务器制造商面临着更有挑战性的测试需求。这些挑战主要体现在以下五个方面:1. 硬件和软件的高度整合:现代服务器通常包括多个处理器、内存模块、储存设备和网络接口。这些硬件组件必须与操作系统及应用软件无缝整合。SIT测试可以帮助制造商确保这些不同组件
    百佳泰测试实验室 2024-12-12 17:45 53浏览
  • RK3506 是瑞芯微推出的MPU产品,芯片制程为22nm,定位于轻量级、低成本解决方案。该MPU具有低功耗、外设接口丰富、实时性高的特点,适合用多种工商业场景。本文将基于RK3506的设计特点,为大家分析其应用场景。RK3506核心板主要分为三个型号,各型号间的区别如下图:​图 1  RK3506核心板处理器型号场景1:显示HMIRK3506核心板显示接口支持RGB、MIPI、QSPI输出,且支持2D图形加速,轻松运行QT、LVGL等GUI,最快3S内开
    万象奥科 2024-12-11 15:42 88浏览
  • 时源芯微——RE超标整机定位与解决详细流程一、 初步测量与问题确认使用专业的电磁辐射测量设备,对整机的辐射发射进行精确测量。确认是否存在RE超标问题,并记录超标频段和幅度。二、电缆检查与处理若存在信号电缆:步骤一:拔掉所有信号电缆,仅保留电源线,再次测量整机的辐射发射。若测量合格:判定问题出在信号电缆上,可能是电缆的共模电流导致。逐一连接信号电缆,每次连接后测量,定位具体哪根电缆或接口导致超标。对问题电缆进行处理,如加共模扼流圈、滤波器,或优化电缆布局和屏蔽。重新连接所有电缆,再次测量
    时源芯微 2024-12-11 17:11 109浏览
  • 本文介绍瑞芯微RK3588主板/开发板Android12系统下,APK签名文件生成方法。触觉智能EVB3588开发板演示,搭载了瑞芯微RK3588芯片,该开发板是核心板加底板设计,音视频接口、通信接口等各类接口一应俱全,可帮助企业提高产品开发效率,缩短上市时间,降低成本和设计风险。工具准备下载Keytool-ImportKeyPair工具在源码:build/target/product/security/系统初始签名文件目录中,将以下三个文件拷贝出来:platform.pem;platform.
    Industio_触觉智能 2024-12-12 10:27 59浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-12 10:13 40浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦