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

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

3天内不再提示

瑞芯微(EASY EAI)RV1126B CAN使用

广州灵眸科技有限公司 2026-01-07 10:14 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1. CAN简介

使用Socket CAN的主要目的就是为用户空间的应用程序提供基于Linux网络层的套接字接口。与广为人知的TCP/IP协议以及以太网不同,CAN总线没有类似以太网的MAC层地址,只能用于广播。CAN ID仅仅用来进行总线的仲裁。因此CAN ID在总线上必须是唯一的。当设计一个CAN-ECU(Electronic Control Unit 电子控制单元)网络的时候,CAN报文ID可以映射到具体的ECU。因此CAN报文ID可以当作发送源的地址来使用。

1.1 开发板的CAN资源

wKgZO2ldwWyAHr0CAA2wao6tbKs194.jpg

1.2 硬件连接

wKgZO2lUw7qAYD_5AADYb7LhCcw830.jpg

通常由CPU出来的CAN信号是TTL信号,并不是差分信号。因此需要一个CAN TTL信号转CAN差分信号的模块。其具体的接线图如下所示。

wKgZPGldwWyAF8cpAAFWvGQ5ZxE041.jpg

2. 快速上手

2.1 开发环境准备

如果您初次阅读此文档,请阅读《入门指南/开发环境准备/Easy-Eai编译环境准备与更新》,并按照其相关的操作,进行编译环境的部署

在PC端Ubuntu系统中执行run脚本,进入EASY-EAI编译环境,具体如下所示。

cd ~/develop_environment ./run.sh

wKgZPGkmcrqAUDHhAAGt1XOkqw8819.jpg

2.2 源码下载以及例程编译

首先,在虚拟机后台终端,执行以下命令,创建外设单例源码管理目录:

cd /opt mkdir -p EASY-EAI-Nano-TB/demo

首先,到【百度网盘】上下载相关的单例程序:

链接:https://pan.baidu.com/s/1Br608Hiff2Xs65PzWO_qWQ?pwd=1234

提取码:1234

比如把单例程序下载到:此电脑\D:\BaiduNetdisk (无规定,用户可自主选择),如下图所示。

wKgZPGldwWyAL8blAAClvZl27iA637.jpg

再将下载好的单例复制进入虚拟机的文件系统,过程如下图所示。

wKgZO2ldwW2ACPNsAAEl7Jby5nw969.jpgwKgZO2kmcruAekwKAAEv5Q2aAtI194.jpgwKgZPGldwW2AfmYvAAD5nS_nCBU894.jpg

最后,进入到对应的例程目录执行编译操作,具体命令如下所示:

cd EASY-EAI-Nano-TB/demo/11_CAN ./build.sh

注:

* 由于依赖库部署在板卡上,因此交叉编译过程中必须保持/mnt挂载。

wKgZO2ldwW2ALRfsAAGPst_CK6Y276.jpg

编译成功后,会生成2个demo,一个是发送端:test-can_send,另一个是接收端:test-can_reception。并会自动部署到开发板的/userdata/目录中。

* 此例程需要2个板卡做收发测试,所以2个板卡都需要重复上述操作。

2.3 例程运行

通过串口调试或ssh调试,进入板卡后台,定位到例程部署的位置,如下所示:

cd /userdata

wKgZPGldwW2AVErPAAAcP1BG1Zs494.jpg

首先在一台板卡上运行发送端,运行命令如下:

sudo ./test-can-send

然后【再在另外一台】板卡上,运行接收端,运行命令如下:

cd /userdata sudo ./test-can-reception

【接收端】执行效果如下所示。

wKgZO2ldwXKAYNd0AAAqqJ2ZxY0701.jpg

API的详细说明,以及API的调用(本例程源码),详细信息见下方说明。

3. CAN操作API说明

3.1 创建socketcan套接字操作

创建socketcan套接字操作函数原型如下所示。

int socket(int domain, int type, int protocol);

具体介绍如下所示。

wKgZPGldwXKAVh05AABD54KVKQE582.jpg

3.2 指定本地网络接口地址操作

指定本地网络接口地址函数原型如下所示。

int ioctl(int fd, unsigned long request, ...);

具体介绍如下所示。

wKgZO2ldwXOAbRheAABBHuSwodk637.jpgwKgZPGldwXOAUozqAAArHSZIelw552.jpg

3.3 绑定地址结构操作

绑定地址结构函数原型如下所示。

int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

具体介绍如下所示。

wKgZPGldwXOALnLfAABHP3LooZs740.jpg

3.4 设置CAN过滤器操作

设置CAN过滤器操作函数原型如下所示。

int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);

wKgZO2ldwXOAcv8WAABdMwcRC6Q494.jpgwKgZPGldwXOAXoT_AAA8Ym9iJIM493.jpg

3.5 CAN定义报文格式操作

CAN定义报文格式如下所示。

wKgZO2ldwXOABJduAABAJqw7dfE197.jpg

4. CAN通信例程

【发送端】例程源码为11_CAN/test-can_send/main.c,操作流程如下。

wKgZPGldwXOAG1o_AAC7CPC5PzI519.jpg

【接收端】例程源码为11_CAN/test-can_send/main.c,操作流程如下。

wKgZO2ldwXOABpQOAACmEyDgGaw342.jpg

参考例程如下所示。

发送端例程:

/* 将CAN0波特率设置为500000 bps */ #define ip_cmd_set_can_params "ip link set can0 type can bitrate 500000 triple-sampling on" /* 打开CAN0 */ #define ip_cmd_open "ifconfig can0 up" /* 关闭CAN0 */ #define ip_cmd_close "ifconfig can0 down" int main() { int fd, nbytes; struct sockaddr_can addr; struct ifreq ifr; struct can_frame frame[2] = {{0}}; system(ip_cmd_close); system(ip_cmd_set_can_params); system(ip_cmd_open); fd = socket(PF_CAN, SOCK_RAW, CAN_RAW);//创建套接字 strcpy(ifr.ifr_name, "can0" ); ioctl(fd, SIOCGIFINDEX, &ifr); //指定 can0 设备 addr.can_family = AF_CAN; addr.can_ifindex = ifr.ifr_ifindex; bind(fd, (struct sockaddr *)&addr, sizeof(addr));//将套接字与 can0 绑定 //禁用过滤规则,本进程不接收报文,只负责发送 setsockopt(fd, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0); //生成两个报文 frame[0].can_id = 0x11; frame[0]. can_dlc = 1; frame[0].data[0] = 'Y'; frame[1].can_id = 0x22; frame[1]. can_dlc = 1; frame[1].data[0] = 'N'; //循环发送两个报文 while(1) { nbytes = write(fd, &frame[0], sizeof(frame[0])); //发送 frame[0] printf("write ret:%d",nbytes); if(nbytes != sizeof(frame[0])) { printf("Send Error frame[0]\n!"); break; //发送错误,退出 } sleep(1); nbytes = write(fd, &frame[1], sizeof(frame[1])); //发送 frame[1] if(nbytes != sizeof(frame[1])) { printf("Send Error frame[1]\n!"); break; } sleep(1); } close(fd); return 0; }

接收端例程:

/* 将CAN0波特率设置为500000 bps */ #define ip_cmd_set_can_params "ip link set can0 type can bitrate 500000 triple-sampling on" /* 打开CAN0 */ #define ip_cmd_open "ifconfig can0 up" /* 关闭CAN0 */ #define ip_cmd_close "ifconfig can0 down" int main() { int fd, nbytes; struct sockaddr_can addr; struct ifreq ifr; struct can_frame frame; struct can_filter rfilter[1]; system(ip_cmd_close); system(ip_cmd_set_can_params); system(ip_cmd_open); fd = socket(PF_CAN, SOCK_RAW, CAN_RAW); //创建套接字 strcpy(ifr.ifr_name, "can0" ); ioctl(fd, SIOCGIFINDEX, &ifr); //指定 can0 设备 addr.can_family = AF_CAN; addr.can_ifindex = ifr.ifr_ifindex; bind(fd, (struct sockaddr *)&addr, sizeof(addr)); //将套接字与 can0 绑定 //定义接收规则,只接收表示符等于 0x11 的报文 rfilter[0].can_id = 0x11; rfilter[0].can_mask = CAN_SFF_MASK; //设置过滤规则 setsockopt(fd, SOL_CAN_RAW, CAN_RAW_FILTER, &rfilter, sizeof(rfilter)); while(1) { nbytes = read(fd, &frame, sizeof(frame)); //接收报文 //显示报文 if(nbytes > 0) { printf("ID=0x%X DLC=%d data[0]=0x%X\n", frame.can_id, frame.can_dlc, frame.data[0]); } } close(fd); return 0; }

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

    关注

    88

    文章

    11871

    浏览量

    219976
  • 瑞芯微
    +关注

    关注

    27

    文章

    909

    浏览量

    54753
  • EASY-EAI灵眸科技

    关注

    4

    文章

    140

    浏览量

    3757
  • RV1126B
    +关注

    关注

    0

    文章

    135

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    (EASY EAI)RV1126B 音频输入

    1.声卡资源介绍EASY-EAI-Nano-TB仅有一块由RV1126B主控输出的声卡。通过串口调试或ssh调试,可以进入开发板终端。执行aplay命令查看声卡相关的详细信息,如下所示
    的头像 发表于 12-18 13:41 2718次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b>(<b class='flag-5'>EASY</b> <b class='flag-5'>EAI</b>)<b class='flag-5'>RV1126B</b> 音频输入

    (EASY EAI)RV1126B PWM使用

    1.PWM简介1.1开发板PWM资源1.2查找PWM节点rv1126b的pwm资源表如下:【PWM1CH0】对应的是pwm1_4ch_0,寄存地址为20700000。【PWM1CH1】对应
    的头像 发表于 01-06 10:49 9057次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b>(<b class='flag-5'>EASY</b> <b class='flag-5'>EAI</b>)<b class='flag-5'>RV1126B</b> PWM使用

    (EASY EAI)RV1126B 音频输出

    1.声卡资源介绍EASY-EAI-Nano-TB仅有一块由RV1126B主控输出的声卡。通过串口调试或ssh调试,可以进入开发板终端。执行aplay命令查看声卡相关的详细信息,如下所示
    的头像 发表于 04-01 17:13 8747次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b>(<b class='flag-5'>EASY</b> <b class='flag-5'>EAI</b>)<b class='flag-5'>RV1126B</b> 音频输出

    EASY EAI Nano-TB(RV1126B)开发板试用】+初识篇

    Nano-TB是灵眸科技研发的一款应用于AIoT领域的开发板,它基于RV1126B处理器,集成了4个Cortex-A53及独立的NEON协处理器,它支持4K@30fps的H.
    发表于 10-25 22:06

    EASY EAI Nano-TB(RV1126B)开发板试用】介绍、系统安装

    ,并介绍了系统镜像安装部署的相关流程。 介绍 EASY-EAI-Nano-TB是灵眸科技研发的一款应用于AIoT领域的AIOT主板。 核心板基于
    发表于 12-23 18:05

    RV1126系列选型指南:从RV1126RV1126B,一文看懂升级差异

    2025年7月,正式发布新一代AI视觉芯片RV1126B。作为其金牌方案商,EASYEAI灵眸科技同步推出搭载该芯片的AIoT核心板EAI11
    的头像 发表于 09-04 10:50 5509次阅读
    <b class='flag-5'>RV1126</b>系列选型指南:从<b class='flag-5'>RV1126</b>到<b class='flag-5'>RV1126B</b>,一文看懂升级差异

    【免费试用】EASY EAI Nano-TB(RV1126B)开发套件评测

    EASY-EAI-Nano-TB是灵眸科技研发的一款应用于AIoT领域的AIOT主板。核心板基于RV1126B处理器设计,并引入了新
    的头像 发表于 09-23 08:09 1416次阅读
    【免费试用】<b class='flag-5'>EASY</b> <b class='flag-5'>EAI</b> Nano-TB(<b class='flag-5'>RV1126B</b>)开发套件评测

    RV1126B特性概述

    RV1126BRockchip在2025年第二季度全新推出的Arm架构AI视觉芯片,搭载4核Cortex-A53与自研3Tops算力NPU。全面替代上一代的
    的头像 发表于 10-09 11:22 2433次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b><b class='flag-5'>RV1126B</b>特性概述

    替代升级实锤!实测RV1126B,CPU性能吊打RV1126

    AI智能芯片迭代提速,推出了全新的Arm架构AI视觉芯片RV1126B,是否替换RV1126,CPU性能是挤牙膏还是大突破。带着这些核
    的头像 发表于 12-11 17:13 2791次阅读
    替代升级实锤!实测<b class='flag-5'>RV1126B</b>,CPU性能吊打<b class='flag-5'>RV1126</b>

    (EASY EAI)RV1126B 人体关键点识别

    的特点。本人员检测算法在数据集表现如下所示:基于EASY-EAI-Nano-TB(RV1126B)硬件主板的运行效率:17个人体关键点索引定义:2.快速上手2.1开发
    的头像 发表于 01-23 10:13 4256次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b>(<b class='flag-5'>EASY</b> <b class='flag-5'>EAI</b>)<b class='flag-5'>RV1126B</b> 人体关键点识别

    (EASY EAI)RV1126B rknn-toolkit-lite2使用方法

    1.rknn-toolkit-lite2介绍RKNN-Toolkit-Lite2是(Rockchip)专为旗下RK系列芯片(如RV1126B、RK3576、RK3588等)打造的
    的头像 发表于 04-22 17:38 1119次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b>(<b class='flag-5'>EASY</b> <b class='flag-5'>EAI</b>)<b class='flag-5'>RV1126B</b> rknn-toolkit-lite2使用方法

    (EASY EAI)RV1126B yolov11训练部署教程

    、使用最广泛的YOLO变体。YOLO11将延续YOLO系列的传奇。本教程针对目标检测算法yolo11的训练和部署到EASY-EAI-Nano-TB(RV1126B)进行
    的头像 发表于 05-09 16:59 952次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b>(<b class='flag-5'>EASY</b> <b class='flag-5'>EAI</b>)<b class='flag-5'>RV1126B</b> yolov11训练部署教程

    RV1126B 方案特性

    RV1126B是面向边缘视觉场景的专用处理芯片,凭借低功耗、内置AI-ISP、双路MIPI-CSI接口以及端侧AI算力,可支撑常规监控、双光谱、多目视觉等多类相机产品开发,配合定
    的头像 发表于 05-11 14:27 1787次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b><b class='flag-5'>RV1126B</b> 方案特性

    (EASY EAI)RV1126B ubuntu系统SDK源码获取

    1.源代码获取RV1126B的ubuntu系统SDK基于ubuntu22.04进行适配移植,所以建议同样在ubuntu22.04的环境(如EASY-EAI编译环境)下编译开发,并且源码部署在服务器
    的头像 发表于 05-23 16:32 116次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b>(<b class='flag-5'>EASY</b> <b class='flag-5'>EAI</b>)<b class='flag-5'>RV1126B</b> ubuntu系统SDK源码获取

    (EASY EAI)RV1126B kernel

    把烧录工具放进虚拟机任意位置(以~/rv1126b_sdk为例)。如下图所示。然后定位到工具的位置(以~/rv1126b_sdk为例),并修改可执行权限:cd~/rv1126b_sdk
    的头像 发表于 05-25 10:26 113次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b>(<b class='flag-5'>EASY</b> <b class='flag-5'>EAI</b>)<b class='flag-5'>RV1126B</b> kernel