0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Coral3568如何软硬件过滤can帧及优化?

ZLG致远电子 2023-12-08 15:52 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

CAN总线调试时,根据数据的重要性,接收端可以专注于接收重要消息,提高效率。CAN报文帧是用一个标识符或一系列标识符来过滤的。可以使用CAN总线软件和芯片硬件过滤规则实现过滤功能。

c02d85f4-959e-11ee-9788-92fbcf53809c.jpg  软件过滤

struct can_filter filter[1];/* 规则:可以接收ID为0x200数据帧和错误帧 */
filter[0].can_mask = CAN_SFF_MASK;filter[0].can_id = 0x200 & CAN_SFF_MASK;filter[0].can_mask |= CAN_EFF_FLAG;
if (setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, &filter, sizeof(filter))){perror("setsockopt failed");exit(EXIT_FAILURE);}

软件的配置可以在系统中检查:

root@host:/root# ls /proc/net/can/rcvlist_all rcvlist_err rcvlist_inv reset_statsrcvlist_eff rcvlist_fil rcvlist_sff stats
root@host:/root# cat /proc/net/can/rcvlist_filreceive list 'rx_fil': (any: no entry) (can0: no entry) device can_id can_mask function userdata matches ident can1 200 800007ff 0000000095327ce0 00000000674196b1 0 raw (can2: no entry)

此处rcvlist_*为CAN协议中的接收器:struct receiver,包含软件的过滤规则。
c02d85f4-959e-11ee-9788-92fbcf53809c.jpg  硬件过滤芯片手册:c0388e9a-959e-11ee-9788-92fbcf53809c.png

硬件过滤方式在驱动:drivers/net/can/rockchip/rockchip_canfd.c 中实现,具体代码:

static int rockchip_canfd_start(struct net_device *ndev){ ...... rockchip_canfd_write(rcan, CAN_INT_MASK, 0);
/* RECEIVING FILTER, accept all */ rockchip_canfd_write(rcan, CAN_IDCODE, 0); rockchip_canfd_write(rcan, CAN_IDMASK, CAN_RX_FILTER_MASK); rockchip_canfd_write(rcan, CAN_IDCODE0, 0); rockchip_canfd_write(rcan, CAN_IDMASK0, CAN_RX_FILTER_MASK); rockchip_canfd_write(rcan, CAN_IDCODE1, 0); rockchip_canfd_write(rcan, CAN_IDMASK1, CAN_RX_FILTER_MASK); rockchip_canfd_write(rcan, CAN_IDCODE2, 0); rockchip_canfd_write(rcan, CAN_IDMASK2, CAN_RX_FILTER_MASK); rockchip_canfd_write(rcan, CAN_IDCODE3, 0); rockchip_canfd_write(rcan, CAN_IDMASK3, CAN_RX_FILTER_MASK); rockchip_canfd_write(rcan, CAN_IDCODE4, 0); rockchip_canfd_write(rcan, CAN_IDMASK4, CAN_RX_FILTER_MASK); ......}

从以上代码可以看出,每次执行CAN软件都会重新配置CAN控制器寄存器不过滤任何数据。通过2个寄存器来实现硬件过滤:CAN_IDCODEn、CAN_RX_FILTER_MASK
RK3568 CAN控制器有6个过滤器,其中第一个过滤器默认使能,不受开关控制,其余过滤器需要使能对应的过滤器。可以在can软件运行时,再去配置硬件过滤方式,如:

root@host:/root# ip link set can1 type can bitrate 1000000root@host:/root# ip link set can1 uproot@host:/root# candump can1 &# 只接收0x123 id的帧,不受开关控制root@host:/root# io -4 0xfe58003c 0x123root@host:/root# io -4 0xfe580040 0x0# 只接收0x124 id的帧,需开关控制root@host:/root# io -4 0xfe580120 0x124root@host:/root# io -4 0xfe580124 0x0root@host:/root# io -4 0xfe58011c 0x1

c02d85f4-959e-11ee-9788-92fbcf53809c.jpg  系统优化1. 发送异常返回

系统CAN默认发送队列:txqueuelen:10,有线网口该数值为1000。更小的数值,实时性更强。

在大量数据发送时,write函数经常异常返回,大部分原因是由于系统发送队列内存不足,可以使用以下指令增大发送队列:

root@host:/root# ip link set txqueuelen 500 dev can1

2. 接收数据丢失

接收队列不足表现在read得到的数据不全,大部分情况为数据skb已经提供到receiver 队列中,但是应用来不及取出,导致最终占满所有可支配的内存大小,数据更新到了队列中错误的位置。

可使用以下指令调整接收队列大小:

root@host:/root# echo 1000000 > /proc/sys/net/core/rmem_maxroot@host:/root# echo 1000000 > /proc/sys/net/core/rmem_default

Coral-EVa为致远电子推出的Coral3568配套评估底板,同样功能强大,接口丰富。Coral-EVa评估底板采用适配器供电,更方便实验室和研发办公室使用,HDMI、DP、USB、CAN、RS485RS232、TTL UART、3.5mm四线耳麦接口、Micro SD卡槽、SATA、M.2、LVDS LCD、MIPI_DSI、MIPI-CSI、RTC时钟、蜂鸣器等功能一应俱全。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN
    CAN
    +关注

    关注

    58

    文章

    3010

    浏览量

    471391
  • 硬件
    +关注

    关注

    11

    文章

    3555

    浏览量

    68733
  • 软件
    +关注

    关注

    69

    文章

    5296

    浏览量

    90854
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    USB的串行通信软硬件设计

    USB的串行通信软硬件设计
    发表于 09-04 10:08 14次下载
    USB的串行通信<b class='flag-5'>软硬件</b>设计

    基于FPGA的软硬件协同测试设计影响因素分析与设计实现

    软硬件的开发阶段中,测试结果直接关系到这个软硬件能否顺利进行调试应用。其中,硬件的测试往往容易受外界因素的影响,如环境、计算机设备等,可以通过一些仿真软件来避免外界环境的影响,但是其测试速度比较慢
    发表于 11-18 05:46 2299次阅读

    软硬件协同设计机遇与挑战分析

    软硬件协同设计是指对系统中的软硬件部分使用统一的描述和工具进行集成开发,可完成全系统的设计验证并跨越软硬件界面进行系统优化软硬件协同设计是
    发表于 11-25 03:45 957次阅读

    基于FPGA芯片的软硬件平台的使用

    基于FPGA芯片的软硬件平台的使用
    发表于 07-01 09:35 20次下载

    为什么要从“软硬件协同”走向“软硬件融合”?

    软件和硬件需要定义好交互的“接口”,通过接口实现软硬件的“解耦”。例如,对CPU来说,软硬件的接口是指令集架构ISA:ISA之下的CPU处理器是硬件,指令集之上的各种程序、数据集、文件
    的头像 发表于 12-07 14:23 3557次阅读

    【新品发布】Coral3568金手指核心板

    经典,无线旗舰 Coral3568金手指核心板是致远电子最新推出的高端核心板,延续  M3568核心板 (点击了解详情) 的强大性能和丰富接口,采用RK3568多核处理器拥有2GHz的四核64位Cortex-A55 CPU,同时
    的头像 发表于 12-12 12:10 1097次阅读

    【产品应用】如何在Coral3568平台快速适配mipi显示屏?

    电子推出的Coral3568配套评估底板,同样功能强大,接口丰富。Coral-EVa评估底板采用适配器供电,更方便实验室和研发办公室使用,HDMI、DP、USB、CAN、RS485、RS232、TTL
    的头像 发表于 01-09 19:40 1025次阅读

    Coral3568金手指核心板

    经典,无线旗舰 Coral3568金手指核心板是致远电子最新推出的高端核心板,延续  M3568核心板 (点击了解详情) 的强大性能和丰富接口,采用RK3568多核处理器拥有2GHz的四核64位Cortex-A55 CPU,同时
    的头像 发表于 06-16 11:45 919次阅读
    <b class='flag-5'>Coral3568</b>金手指核心板

    【新品发布】Coral3568金手指核心板

    ,无线旗舰Coral3568金手指核心板是致远电子最新推出的高端核心板,延续M3568核心板(点击了解详情)的强大性能和丰富接口,采用RK3568多核处理器拥有2
    的头像 发表于 12-13 14:59 1223次阅读
    【新品发布】<b class='flag-5'>Coral3568</b>金手指核心板

    【产品应用】如何在Coral3568平台快速适配mipi显示屏?

    Coral3568配套评估底板,同样功能强大,接口丰富。Coral-EVa评估底板采用适配器供电,更方便实验室和研发办公室使用,HDMI、DP、USB、CAN、RS
    的头像 发表于 01-13 09:24 1649次阅读
    【产品应用】如何在<b class='flag-5'>Coral3568</b>平台快速适配mipi显示屏?

    Coral3568金手指核心板

    ,无线旗舰Coral3568金手指核心板是致远电子最新推出的高端核心板,延续M3568核心板(点击了解详情)的强大性能和丰富接口,采用RK3568多核处理器拥有2
    的头像 发表于 06-21 17:47 901次阅读
    <b class='flag-5'>Coral3568</b>金手指核心板

    基于软件模拟的SPI端口CAN控制卡的软硬件设计

    电子发烧友网站提供《基于软件模拟的SPI端口CAN控制卡的软硬件设计.pdf》资料免费下载
    发表于 10-13 11:38 0次下载
    基于软件模拟的SPI端口<b class='flag-5'>CAN</b>控制卡的<b class='flag-5'>软硬件</b>设计

    软硬件融合的概念和内涵

    跟很多朋友交流,当提到软硬件融合的时候,他们会这么说:“软硬件融合,难道不是显而易见吗?我感觉在二三十年前就已经有这个概念了。”在他们的想法里,其实:软硬件融合等同于软硬件协同,甚至等
    的头像 发表于 10-17 14:36 2579次阅读
    <b class='flag-5'>软硬件</b>融合的概念和内涵

    CAN协议的软件过滤硬件过滤

    过滤器来只接收特定的消息。CAN过滤分为软件过滤硬件过滤。往期推荐:《CH32FV系列
    的头像 发表于 12-26 19:33 1017次阅读
    <b class='flag-5'>CAN</b>协议的软件<b class='flag-5'>过滤</b>和<b class='flag-5'>硬件</b><b class='flag-5'>过滤</b>

    解析ECAN-E02单过滤CAN硬件过滤

    什么是CAN总线?CAN(ControllerAreaNetwork)总线是一种用于车辆电子设备之间通信的标准协议。CAN过滤器是用来过滤
    的头像 发表于 01-16 19:35 690次阅读
    解析ECAN-E02单<b class='flag-5'>过滤</b>器<b class='flag-5'>CAN</b><b class='flag-5'>硬件</b><b class='flag-5'>过滤</b>