1571|2

187

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【玩转多核异构】双核高速率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实时核,不管是对数据的高速吞吐、处理,还是复杂的人机交互界面处理,都能从容应对。
![image.png](/img/bVbMDQ
01
M核CAN-FD

  1. CAN-FD初始化
    CAN-FD初始化主要包括总线时钟,管脚和相应寄存器的初始化。具体如下:
    (1)CAN总线时钟:
    现将CAN总线倍频到800MHz,再10分频到80MHz。
    CLOCKSetRootMux(kCLOCKRootFlexCan1, kCLOCKFlexCanRootmuxSysPll1); // 设置CAN1总线时钟为800MHz
    CLOCKSetRootDivider(kCLOCKRootFlexCan1, 2U, 5U); // 分频因子为25=10,设置CAN1总线时钟为80MHz
    (2)管脚配置:
    选择CAN1的发送管脚为32脚,接收管脚为34脚。
    IOMUXCSetPinMux(IOMUXCSAI2TXCCAN1RX, 0U); // CAN1 RX
    IOMUXCSetPinMux(IOMUXCSAI2RXCCAN1TX, 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/
    (4)CAN-FD使能:
    除了使能CAN-FD,可变波特率也需要使能,否则数据区的最大速率和控制区的速率一样,最大为1Mbit/s。
    base->MCR |= CANMCRFDENMASK; // CAN-FD使能
    fdctrl |= CANFDCTRLFDRATEMASK; // 可变波特率使能
    (5)关闭自回环:
    如果开启了自回环,那么CAN1数据会在芯片内回环,不会到外部管脚,在程序调试时可以排除外部端子的干扰,但真实应用时,需要关闭自回环,从外部管脚收发数据。
    pConfig->enableLoopBack = false; // 不回环,使用外部管脚
    (6)帧格式:
    本次我们使用11位标准数据帧,小伙伴也在后续试试扩展帧。需要设置自己的ID,便于总线上其他设备识别。
    mbConfig.format = kFLEXCANFrameFormatStandard; // 11位标准帧,非扩展帧
    mbConfig.type = kFLEXCANFrameTypeData; // 数据帧 非远程帧
    mbConfig.id = FLEXCANIDSTD(rxIdentifier); // 帧ID 用于区别总线中不同的设备
    (7)接收过滤:
    用户可设置接收过滤规则,这样就可以只接收特定帧ID的数据,减少应用处理的数据量。
    rxIdentifier = 0;
    FLEXCANSetRxMbGlobalMask(EXAMPLECAN, FLEXCANRXMBSTDMASK(rxIdentifier, 0, 0));//接收所有ID数据
  2. CAN-FD收发流程
    本次测试M核做主站,CAN1先发送一帧包含64字节数据,A核CAN2收到,将64字节数据再次发送,M核CAN1接收。对比发送和接收的64字节数据是否一致。重复100次。
    (1)CAN-FD发送数据:
    EXAMPLECAN表示为CAN1,flexcanHandle为CAN实例,包含了发送接收回调函数,txXfer为要发送的64字节数据。
    FLEXCANTransferFDSendNonBlocking(EXAMPLECAN, &flexcanHandle, &txXfer); // CAN-FD发送数据
    (2)CAN-FD接收数据:
    EXAMPLECAN表示为CAN1,flexcanHandle为CAN实例,包含了发送接收回调函数,rxXfer为接收的64字节数据。
    FLEXCANTransferFDReceiveNonBlocking(EXAMPLECAN, &flexcanHandle, &rxXfer); // CAN-FD接收函数
    (3)接收和发送数据对比:
    for (j = 0U; j <= DLC; j++) // 对比收发数据,不一致打印
    {
    if(txXfer.framefd->dataWord[j] != rxXfer.framefd->dataWord[j])
    {

     LOGINFO("Data mismatch !!! j=%d \r\n",j);  

    }
    }

02A核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节点,重启开发板。
    EEWORLDIMGTK0
  2. 演示Demo
    进程名:candemo
    使用方法:./candemo设备名 [参数选项]… …

    本次测试接口为can0(对应开发板CAN2),控制区波特率为1Mbit/s,数据区最大为8Mbit/s,11位标准帧,不过滤帧ID,不主动发数据,不回环。因此命令为:
    ./candemo can0-b 1000 -fd 8000。
    03
    程序验证
  3. 硬件连接
    使用杜邦线将CAN1和CAN2的can-H短接,同时将can-L短接,注意不要接反。

    1. M核程序

    修改uboot环境变量设置M核自启动,同时将M核程序forlinxm7tcmfirmware.bin;
    放到/run/media/mmcblk2p1/目录下。详细操作可看上篇文章《【玩转多核异构】M核程序的启动、编写和仿真》。

  4. A核程序
    (1)使用串口Xmodem,网络FTP,SCP,U盘,TF卡等多种方式,将candemo从电脑拷贝至核心板默认目录下,输入以下命令修改权限;
    chmod 777 candemo
    (2)输入以下命令,A核应用程序candemo将设置波特率后打开can0节点,等待M核发送的数据,再将接收的数据通过CAN2发送给M核。
    ./candemo can0 -b 1000 -fd 8000
  5. 实际测试
    (1)OKMX8MP-C开发板重新上电后,M核程序启动,完成CAN1初始化后,在M核调试串口输出信息,等待按键;
    (2)在A核调试串口输入以下命令,CAN2将处于接收的状态:
    ./candemo 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的使用方法了,是不是感觉性能很强大呢?

此帖出自ARM技术论坛

最新回复

8Mbit的速率,确实不错,不知道距离是否受影响。   详情 回复 发表于 2023-2-28 17:07
点赞 关注
 

回复
举报

7452

帖子

2

TA的资源

五彩晶圆(高级)

沙发
 

很详细,谢谢分享!

此帖出自ARM技术论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

6773

帖子

2

TA的资源

版主

板凳
 

8Mbit的速率,确实不错,不知道距离是否受影响。

此帖出自ARM技术论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
[吐血推荐]^_^单片机多媒体教程-下载地址

http://wstatic.xunlei.com/web/download.htm?cid=446712C427207D83DBBD6E963CF09CC55BBF9BA2迅雷上的,速度很快.分享一下,没人反 ...

第一次看见假的PFC电感

前几天看到一个帖子,说有的杂牌开关电源使用假的PFC电感,今天终于被我遇到了。闲言少绪,上图。 45645 先看看它华丽的外表 ...

SPI/UART访问RC522的区别

前面介绍过<M1卡应用总结>提供了SPI下访问RC522例程,这里我们说说UART下访问RC522的区别。 RC522支持三种访问模式:SPI ...

SHOW--LPC1114之模拟指针式时钟

现在很多手机上,不仅有数字时钟,还有指针式时钟作为装饰,比如右面这张图,如果自己动手做一个的话,岂不是很好玩。133820 ...

USB Type-C™和 USB 功率传输电源路径设计注意

借助 USB Type-C 连接器,用户可以通过同一连接器为笔 记本电脑充电并连接到显示器、音箱、存储设备或耳机。利 用 USB 功率传输 ...

【花雕动手做】有趣好玩的音乐可视化系列小项目(01)---LED节奏灯

本帖最后由 eagler8 于 2021-10-4 09:16 编辑 偶然脑子发热心血来潮,想要做一个声音可视化的系列专题。这个专题的难度有点高 ...

GD32L233C-START评测——01.开箱、开发包

# GD32L233C-START评测——01.开箱、开发包 ## 前言 - 首先感谢EEWORLD(电子工程世界)与兆易创新举办的此次活动,有幸获得 ...

超宽带通信技术与频谱管理

超宽带(UWB)是指-10 dB带宽大于500 MHz或分数带宽(带宽除以频带中心频率)大于20%的信号。最近人们对使用此类信号进行高数据 ...

机器学习中的概率统计

本书围绕机器学习算法中涉及的概率统计知识展开介绍,沿着概率思想、变量分布、参数估计、随机过程和统计推断的知识主线进行讲解 ...

【瑞萨RA8D1开发板,基于M85内核的图形MCU测评】RT-Thread UART实践

开发环境: IDE:MKD 5.38a 开发板:CPKCOR-RA8D1B开发板 MCU:R7FA8D1BHEC332AS00 1 SCI 简介 SCI(Serial ...

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表