为了能够让更多的工程师朋友了解多核异构处理器,飞凌嵌入式特别推出了【玩转多核异构】专题,帮助大家解决在多核异构处理器的开发过程中遇到的问题。【玩转多核异构】专题持续更新中,欢迎您的持续关注。
引言凭借实时性、抗干扰性和安全性等优点,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开发板
飞凌嵌入式okmx8mp-c开发板所搭载的nxp i.mx8m plus处理器具备强悍的性能,集成4个主频最高可达1.8ghz(工业级主频为1.6ghz) 的arm cortex-a53多任务核和1个cortex-m7实时核,不管是对数据的高速吞吐、处理,还是复杂的人机交互界面处理,都能从容应对。
一、m核can-fd1. can-fd初始化can-fd初始化主要包括总线时钟,管脚和相应寄存器的初始化。具体如下:
(1)can总线时钟:
现将can总线倍频到800mhz,再10分频到80mhz。
clock_setrootmux(kclock_rootflexcan1, kclock_flexcanrootmuxsyspll1); // 设置can1总线时钟为800mhz clock_setrootdivider(kclock_rootflexcan1, 2u, 5u); // 分频因子为2*5=10,设置can1总线时钟为80mhz
(2)管脚配置:
选择can1的发送管脚为32脚,接收管脚为34脚。
iomuxc_setpinmux(iomuxc_sai2_txc_can1_rx, 0u); // can1 rx iomuxc_setpinmux(iomuxc_sai2_rxc_can1_tx, 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/s
(4)can-fd使能:
除了使能can-fd,可变波特率也需要使能,否则数据区的最大速率和控制区的速率一样,最大为1mbit/s。
base->mcr |= can_mcr_fden_mask; // can-fd使能 fdctrl |= can_fdctrl_fdrate_mask; // 可变波特率使能
(5)关闭自回环:
如果开启了自回环,那么can1数据会在芯片内回环,不会到外部管脚,在程序调试时可以排除外部端子的干扰,但真实应用时,需要关闭自回环,从外部管脚收发数据。
pconfig->enableloopback = false; // 不回环,使用外部管脚
(6)帧格式:
本次我们使用11位标准数据帧,小伙伴也在后续试试扩展帧。需要设置自己的id,便于总线上其他设备识别。
mbconfig.format = kflexcan_frameformatstandard; // 11位标准帧,非扩展帧 mbconfig.type = kflexcan_frametypedata; // 数据帧 非远程帧 mbconfig.id = flexcan_id_std(rxidentifier); // 帧id 用于区别总线中不同的设备
(7)接收过滤:
用户可设置接收过滤规则,这样就可以只接收特定帧id的数据,减少应用处理的数据量。
rxidentifier = 0; flexcan_setrxmbglobalmask(example_can, flexcan_rx_mb_std_mask(rxidentifier, 0, 0));//接收所有id数据
2. can-fd收发流程本次测试m核做主站,can1先发送一帧包含64字节数据,a核can2收到,将64字节数据再次发送,m核can1接收。对比发送和接收的64字节数据是否一致。重复100次。
(1)can-fd发送数据:
example_can表示为can1,flexcanhandle为can实例,包含了发送接收回调函数,txxfer为要发送的64字节数据。
flexcan_transferfdsendnonblocking(example_can, &flexcanhandle, &txxfer); // can-fd发送数据
(2)can-fd接收数据:
example_can表示为can1,flexcanhandle为can实例,包含了发送接收回调函数,rxxfer为接收的64字节数据。
flexcan_transferfdreceivenonblocking(example_can, &flexcanhandle, &rxxfer); // can-fd接收函数
(3)接收和发送数据对比:
for (j = 0u; j dataword[j] != rxxfer.framefd->dataword[j]) { log_info(data mismatch !!! j=%d \r\n,j); } }
二、a核can-fda核设备树中保留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节点,重启开发板。
2. 演示demo进程名can_demo
使用方法:./can_demo设备名 [参数选项]… …
本次测试接口为can0(对应开发板can2),控制区波特率为1mbit/s,数据区最大为8mbit/s,11位标准帧,不过滤帧id,不主动发数据,不回环。因此命令为:
./can_demo can0-b 1000 -fd 8000。
三、程序验证1. 硬件连接使用杜邦线将can1和can2的can-h短接,同时将can-l短接,注意不要接反。
2. m核程序修改uboot环境变量设置m核自启动,同时将m核程序forlinx_m7_tcm_firmware.bin;
放到/run/media/mmcblk2p1/目录下。详细操作可看上篇文章【玩转多核异构】m核程序的启动、编写和仿真——飞凌嵌入式。
3. a核程序(1)使用串口xmodem,网络ftp,scp,u盘,tf卡等多种方式,将can_demo从电脑拷贝至核心板默认目录下,输入以下命令修改权限;
chmod 777 can_demo
(2)输入以下命令,a核应用程序can_demo将设置波特率后打开can0节点,等待m核发送的数据,再将接收的数据通过can2发送给m核。
./can_demo can0 -b 1000 -fd 8000
4. 实际测试(1)okmx8mp-c开发板重新上电后,m核程序启动,完成can1初始化后,在m核调试串口输出信息,等待按键;
(2)在a核调试串口输入以下命令,can2将处于接收的状态:
./can_demo 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的使用方法了,是不是感觉性能很强大呢?
商汤科技以AI技术驱动能源电力行业数字化转型
什么是推挽电路 推挽输出高低电平介绍
海盗船将最新推出Corsair K83无线智能键盘
回归初代设计,这样的iphone你喜欢吗?iphone8概念图惊艳曝光
华为海雀智能摄像头Pro系列正式上架京东开售
【玩转多核异构】双核高速率CAN-FD评测——飞凌嵌入式
开关电源内的四个电流环路设计
巍泰技术平交路口预警系统雷达设定150m检测距离的原因浅析
区块链为物联网设备提供了理想的安全福利
一加5什么时候上市最新消息:一加5配置曝光,配置与颜值都不在小米6之下
泰国洪水冲击硬盘驱动器市场,2012年前三季度难回常态
无人机灯光3D秀庆祝香港回归祖国25周年
谷歌推广Chrome设备管理,宣布了新的ChromeOS设备的可用性
人工智能将代替核武器?
realme真我GT详细规格参数曝光
食品安全快检设备检测项目有哪些
万用表电路设计方案汇总(几款模拟设计电路原理图详解)
蓝牙耳机RF自动化测试方案
垣信卫星A轮融资67亿元,助力卫星互联网及产业竞争力提升
利用人工智能来加快流程或有效监控各个领域的数据