imx6ul+can使用

imx6ull开发板的CAN通信 imx6ull开发板的CAN通信。 阅读详情
Source-lib第四弹:  can总线使用。

can总线的具体原理我就不说了,我也是第一次使用。可以看下下面的博客:
http://blog.youkuaiyun.com/righthek/article/details/17515465

老套路先看代码:
unsigned char send_buf[10] = {0xA5, 0xB4, 0xC3, 0xD2};
unsigned char rev_buf[10] = {0};
int rev_can_id = 0;

int main(int argc, char** argv)
{
        pid_t pid = -1;
        int master_fd;
        int slave_fd;
        master_fd = can_init(CAN0, 1000000, 0xA5A6, EXTENDED_FRAME);
        slave_fd = can_init(CAN1, 1000000, 0xA5A6, EXTENDED_FRAME);

        if (master_fd == -1 || slave_fd == -1) {
                ERR("get fd\n");
                return -1;
        }
        
         pid = fork();
         if (pid == -1) {
                ERR("fork\n");
         } else if (pid == 0) {/* 子进程 */
                while (1) {
                        can_send_data(master_fd, send_buf, 4);
                        sleep(1);
                }
         } else {
                while (1) {
                        rev_can_id = read_frame(slave_fd, rev_buf, 4);
                        //DEBUG("rev_can_id= %x\n", rev_can_id);
                        /* 扩展帧最高位为1,定义的又是无符号型所以会被识别为负数 */
                        if (rev_can_id != -1) {
                                INFO("rev_can_id = %x\n", rev_can_id);
                                INFO("rev_buf: %x %x %x %x\n", rev_buf[0], rev_buf[1], rev_buf[2], rev_buf[3]);
                        }
                        sleep(1);
                }
         }
        return 0;
}
1、先初始化了两个can口
2、然后创建了个子进程
3、子进程用于1秒发送一帧数据。父进程用于接收数据,并打印到串口上。

1.初始化了两个can口
EXPORT int can_init(int port,
                                        int bitrate,
                                        int can_id,
                                        int frame_type
                                        )
{
        int socket_fd = -1;
        close_can(port);
        set_bitrate(port, bitrate);
        open_can(port);
        socket_fd = socket_can_listen(port);
        if (socket_fd < 0) {
                ERR("socket_can_listen\n");
                return -1;
        }
        set_can_filter(socket_fd, can_id, frame_type);
        g_can_id = can_id;
        g_frame_type = frame_type;
        return socket_fd;
}
要设置can口必须先关闭can口,而且要先设置波特率。不然无法打开can口。
还有can的驱动框架已经套用网络框架了,所以可以使用socket。
接下来做了一个socket连接。

2、子进程发送
EXPORT int can_send_data(int socket_fd, unsigned char *data_buf, int len)
{
        return send_frame(socket_fd, g_can_id, g_frame_type, data_buf, len);
}
按指定的can_id,指定的帧格式进程一定长度的数据发送。
帧格式一共有三种:标准帧,扩展帧,远程帧。

3、父进程接收
EXPORT int read_frame(int socket_fd, unsigned char *rev_buf, int len)
{
        struct can_frame frame;
        int ret = read_hardware(socket_fd, &frame, sizeof(struct can_frame));
        if (ret < 0) {
                DEBUG("can raw socket read\n");
                return -1;
        }
        memcpy(rev_buf, frame.data, len);
        return frame.can_id;
}
就是read函数,读取一个can_frame结构体的数据,返回can_id

这个结构体如下:
/*
        struct can_frame {
        canid_t can_id;  // 32 bit CAN_ID + EFF/RTR/ERR flags
        __u8    can_dlc; // frame payload length in byte (0 .. CAN_MAX_DLEN)
        __u8    data[CAN_MAX_DLEN] __attribute__((aligned(8)));
};
*/

这是个can0和can1的通信例子,接线如下:


效果图如下:


IMX6ULL与STM32F103的CAN通信实现 阅读详情

相关推荐

[imx6ull]Linux下的SocketCAN通信

控制器局域网络(Controller Area Network,简称CAN)是一种为实时应用精心设计的串行通信协议总线。它基于双绞线传输机制,已在全球范围内得到广泛认可,并在众多场合中得到应用,成为现场总线通信技术的国际标准化方案。CAN协议最初为汽车工业所设计,目的是在车辆内部实现不同电子控制单元(ECUs)之间的高效通信,它有效地取代了成本高昂、体积庞大的传统布线系统。得益于其卓越的健壮性和可靠性,CAN协议已经成功地扩展到自动化和工业控制等多个领域。

qq_52836452的博客 3681

IMX6 CAN接口调试

1).简介 CAN(Controller Area Network)总线是嵌入式设备最为常用的接口之一,常用于汽车以及工业自动化等嵌入式领域,因此本文就基于嵌入式Linux演示使用CAN总线进行通讯测试。 本文所演示的平台来自于Toradex Colibri iMX6DL和Apalis iMX6D ARM嵌入式平台,这两个平台是都是基于NXP iMX6系列ARM处理器,支持双核心Corte...

xinghuah的专栏 2173

SPI 转 CAN 接口

1. 其中 SPI 部分驱动参考原接口驱动部分。 2. 首先搜索一下 6UL 是否自带 mcp2515 驱动。 #cd drivers #find -name "mcp25*" #vi ./net/can/Makefile 3. 在配置文件 linux_imx6ul_emmc_defconfig 中设置 CONFIG_CAN_MCP251X=y. 4. 同时需要配置设备树。 步骤 1 编译内核和设备树。注意查看编译完内核之后,是否在 drivers/s...

sunjincai8的博客 3642

【IMX6ULL笔记】-- 从驱动到应用(基于Qt)- CAN总线

笔者之前从事车载行业诊断开发,不过那时候都是基于MCU驱动或者Windows端上位机开发,未涉猎于linux can的开发,不过经历最近一段时间学习,算是把这部分完善了,本章将介绍CAN在linux上,驱动和应用是如何开发的

weixin_38426553的博客 2592

IMX6UL平台(3)--硬件原理图设计(5)---底板对外通讯接口

(技术交流QQ群:744140106) (博客:https://blog.youkuaiyun.com/weixin_43854435) imx6ul硬件原理图设计----底板对外接口 ...

848

imx6的can总线开发

imx6的flexcan驱动开发,以及其测试流程和参数设置

imx6 linux can测试,iTOP-iMX6UL开发板-MiniLinux-CAN测试使用文档

iTOP-iMX6UL开发板-MiniLinux-CAN测试使用文档[复制链接]本文档介绍的是迅为iMX6UL开发板在 MiniLinux 系统环境下 iTOP-iMX6UL CAN 实验调试步骤。给用户提供了“can_libs.rar”、“can_tools.zip”和“can_test.zip”压缩包,分别是 can 工具需要的库文件、can 工具二进制文件以及 can 实验 C 程序源码。C...

weixin_39989033的博客 154

TMS320F28388D 学习笔记2 高精度PWM (HRPWM)

HRPWM的学习记录。

whyorwhnt的专栏 9534

iTOP-iMX6UL开发板-MiniLinux-CAN测试使用文档

本文档介绍的是迅为iMX6UL开发板在 MiniLinux 系统环境下 iTOP-iMX6UL CAN 实验调试步骤。给用户提 供了“can_libs.rar”、“can_tools.zip”和“can_test.zip”压缩包,分别是 can 工具需要的 库文件、can 工具二进制文件以及 can 实验 C 程序源码。 CAN 是 Controller Area Network 的缩写,是 IS...

mucheni的博客 319

低速信号设计之 LPC 篇

摘要:LPC总线作为服务器低速信号设计的关键技术,在BIOS芯片连接、Super I/O芯片控制和嵌入式管理等方面发挥着重要作用。其采用33MHz时钟频率和4位并行传输机制,理论速率达16.5MB/s。设计时需重点关注布线长度(建议<10cm)、信号完整性(45°走线、合理层间隔离)和过孔优化等要点。典型应用案例表明,通过规范设计可确保在工业控制等复杂环境中稳定工作。LPC总线凭借低成本、低引脚数和良好兼容性,仍是服务器低速外设连接的重要解决方案。

qq_16237389的博客 1164

Oracle Scheduler任务故障诊断 实战指南

当基础环境无异常时,需聚焦任务本身的配置与状态。定义(JOB)→ 调度(SCHEDULE)→ 执行(SLAVE进程)→ 日志(LOG),每个环节都可能存在卡点。Oracle Scheduler任务的“隐性故障”看似棘手,实则是环境配置、资源竞争、时间逻辑等问题的集中体现。通过本文的诊断工具和排查思路,你可以构建从“基础环境→任务配置→执行链路→日志追踪”的全维度分析体系,让每一个“消失”的任务都无所遁形。

Nuzbb的博客 1073

imx6ul can调试(代码)

下面是我的代码,然后代码呢实际的使用 需要注意,如果重新设置了can的引脚对应关系,需要重新配置设备树文件; 然后注意can0SystemInit和can1SystemInit中的频率,125000,这个可以修改和从机相同的频率用来通信; can_id这个是表示can的id这个发送接收的对应要注意; #include <sys/ioctl.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioc

cao849861802的博客 1099

Zemax操作33--5倍激光扩束器

5倍扩束

lzy750750的博客 2931

i.mx6ul引脚复用

使用CAN1 RX引脚作为例子 arch\arm\boot\dts\imx6ul-14x14-evk.dts: [html] view plain copy   pinctrl_flexcan1: flexcan1grp{       fsl,pins =            MX6UL_PAD_UART3_RTS_B__FLEXCAN1_RX

u010871058的专栏 1873

python机器人编程——用python实现一个写字机器人

本篇我们构建一个可以跟人一样写字的机器人python软件。实现如下功能:打开一个写字板,人类在屏幕上写或画出任意形状,机器人同步在纸面上画出和人类一样的形状,就好像人类在远程操控机械臂,又或是机械臂是人的另一只手。这个软件是可以扩展的,如果连上互联网,可以实现人在北京写了一行字,在上海的机器臂同时也在自己的本子上写了一行字。

JAMES费的空间 7993

半导体AMHS系统振动控制技术演进:从0.5G到超低振动的工艺革命

在半导体制造进入埃米级时代后,AMHS的振动控制能力将成为区分厂商技术等级的标尺。国内企业通过“弹性机械设计-混合主动控制-智能调度”的三重创新,正逐步突破0.2G阈值,支撑12英寸晶圆厂向3nm/2nm制程升级。未来,振动抑制不再仅是物流系统的性能参数,而是与光刻、刻蚀等核心工艺深度耦合的基础能力,这将重塑半导体设备产业的竞争格局。

m0_60674045的博客 1584

IMX6UL时钟配置

IMX6UL时钟配置 以can总线的时钟为例进行分析: IMX6UL数据手册中,第18章Clock Controller Module (CCM)描述了相关配置,如下图: 从上图可以分析出,FLEXCAN的时钟是由PLL3(480M),经过CAN_CLK_SEL选择器,再经过CAN_CLK_PODF分频器得到的。 CAN_CLK_SEL选择器有4个选择: 1、PLL3的8分频(60M) 2、PLL3的6分频(80M) 3、OSC外部晶振时钟(24M) 4、Disable linux3.14.38源码中ar

qq_38532590的博客 918

2025_NIPS_RAGRouter: Learning to Route Queries to Multiple Retrieval-Augmented Language Models

该研究聚焦检索增强生成(RAG)场景下的大语言模型(LLM)路由问题,提出了首个RAG感知的路由框架RAGRouter。核心解决现有路由方法依赖静态参数知识、忽略检索文档动态影响的缺陷,通过融合文档嵌入、RAG能力嵌入与对比学习,捕捉RAG引发的模型知识表征变化,为每个查询-文档对选择最优LLM。实验覆盖5个知识密集型任务、15个开源/闭源LLM,验证了RAGRouter在性能上超越最佳单LLM和非RAG感知路由方法,且通过阈值机制实现低延迟约束下的性能-效率平衡。

UnknownBody_2的博客 271

迅为-IMX6UL开发板丨双网口丨双CAN总线丨4路USB HOST丨2路串口、6路插座引出,共8路串口丨1路RGB信号丨2路LVDS信号...

迅为iMX6UL开发板多路串口开发平台迅为i.MX 6UL开发板基于ARM Cortex-A7内核,主频高达528 MHz,内存:512MDDR3存储:8G EMMC,支持2路CAN,2路百兆以太网,4路USB HOST,8路串口,以及其他诸多接口IMX6UL开发板适合于物联网,人机界机,电子支付,智能家居,能源管理,工控,医疗,安防,金融,电力,手持设备,显示控制等领域 底板接口功能化 ...

weixin_30401605的博客 299

IEC61850规约客户端软件开发实战(第六章)

IEC 61850标准中的GOOSE(Generic Object Oriented Substation Event,面向通用对象的变电站事件)功能是变电站自动化系统的核心通信机制,主要用于实现智能电子设备(IED)间高可靠性、低延时的实时信号传输。本章简述其核心功能与技术特点。

半青年的博客 1778

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

讯为IMX6UL开发板CAN接口测试学习笔记

问题 原因 移植iproute2的ip命令 验证 IMX6官方手册:i.MX_6_Linux_Reference_Manual.pdf CAN接口相关说明在Chapter 39。 问题 使用ip link set can0 up type can bitrate 125000命令设置并启动CAN接口时报错: ip: either &quot;dev&quot; is duplicate...

China_Style的专栏 2999

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

迅为-IMX6UL开发板丨双网口丨双CAN总线丨4路USB HOST丨2路串口、6路插座引出,共8路串口丨1路RGB信号丨2路LVDS信号

迅为iMX6UL开发板多路串口开发平台迅为i.MX 6UL开发板基于ARM Cortex-A7内核,主频高达528 MHz,内存:512MDDR3存储:8G EMMC,支持2路CAN,2路百兆以太网,4路USB HOST,8路串口,以及其他诸多接口IMX6UL开发板适合于物联网,人机界机,电子支付,智能家居,能源管理,工控,医疗,安防,金融,电力,手持设备,显示控制等领域系统支持Linux-QT4...

mucheni的博客 464

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

基于imx6ul的硬件学习(1)

之前写软件的时候对硬件一窍不通,只知道调用I2C或者UART接口或者各种设备文件而不清楚其工作原理, 本文章是基于imx6ul核心板与底板的学习笔记,补习一下硬件知识。 先看底板资料 1.显示方式(Display)有两种,一种是通过LCD屏,一种是通过HDMI。 2.Camera ,通过CSI(CMOS Sensor Interface)与底板建立连接,对该接口的讲解可以看https:...

qq_37863891的博客 673

迅为linux下串口,迅为iMX6UL开发板多路串口开发平台接口详解

原标题:迅为iMX6UL开发板多路串口开发平台接口详解iMX6UL开发板 核心板参数尺寸:38mm*42mmCPU:iMX6UL 主频528MHz ARM Cortex-A7架构 单核内存:512MDDR存储:8G EMMC工作电压:5V电压供电系统支持:Linux-QT4.7操作系统运行温度:-20℃ ~ +80℃引脚间距:1.27mm引角扩展:i.MX6功能全部引出,146PIN脚连接方式:...

weixin_35396246的博客 367
上一篇: imx6ul+ts校准问题
下一篇: imx6ul+QT5中文显示
Sourcelink
博客等级 码龄12年 31粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值