在linux2.6.37上添加MCP251x驱动

mcp2518驱动调试 只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效 The SPI in the microcontroller must be configured in mode (0,0) or (1,1) in 8-bit operating mode Spi-imx.c spi_imx 30830000.ecspi: mode_bits = 71(0x47)... 阅读详情
 

Socket CAN 对CAN protocol做了封装,对CAN设备的读写变成了类似tcp/ip的读写网络(socket操作)。

目标环境:linux2.6.37, i.mx27开发板带mcp2515

首先注册spi device和mcp2515 device:

 

代码
   
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> 1 static const int plat27_pins[] __initconst = { 2 ... 3 4   #if (defined CONFIG_SPI_IMX || defined CONFIG_SPI_IMX_MODULE ) 5 // PD27_PF_CSPI1_SS1, // use mxc_gpio_mode instead mxc_gpio_setup_multiple_pins otherwise spi-imx.c can't request it 6 // PD28_PF_CSPI1_SS0, 7   PD25_PF_CSPI1_RDY, 8 PD29_PF_CSPI1_SCLK, 9 PD30_PF_CSPI1_MISO, 10 PD31_PF_CSPI1_MOSI, 11   #endif 12 } 13 14   #if (defined CONFIG_SPI_IMX || defined CONFIG_SPI_IMX_MODULE ) 15   static int cspi1_ss[] = {GPIO_PORTD + 28 }; // CSPI1 ss0=PD28, ss1=PD27 16   static const struct spi_imx_master cspi_pdata __initconst = { 17 .chipselect = cspi1_ss, 18 .num_chipselect = ARRAY_SIZE(cspi1_ss), 19 }; 20 21 #if (defined CONFIG_CAN_MCP251X || defined CONFIG_CAN_MCP251X_MODULE ) 22 static struct mcp251x_platform_data mcp251x_info = { 23 .oscillator_frequency = 16 * 1000 * 1000 , 24 }; 25 26 static struct spi_board_info plat27_spi_board_info[] __initdata = { 27 { 28 .modalias = " mcp2515 " , // must match with device driver id_table name 29 .bus_num = 0 , // 0 for CSPI1, 1 for CSPI2, ... 30 .chip_select = 0 , // 0 for SS0 ,1 for SS1, .... 31 .max_speed_hz = 2 * 1000 * 1000 , // maxium is 10MHz, but will lost data in my experience 32 .irq = IRQ_GPIOC( 15 ), 33 .platform_data = & mcp251x_info, 34 .mode = SPI_MODE_0, // not required exactly since mcp251x driver will set it to SPI_MODE_0 35 }, 36 }; 37 #endif 38 #endif 39 40 static void __init XXX_init( void ) 41 { 42 ... 43 44 #if (defined CONFIG_SPI_IMX || defined CONFIG_SPI_IMX_MODULE ) 45 mxc_gpio_mode(GPIO_PORTD | 28 | GPIO_GPIO | GPIO_OUT); 46 imx27_add_spi_imx0( & cspi_pdata); 47 48 #if (defined CONFIG_CAN_MCP251X || defined CONFIG_CAN_MCP251X_MODULE ) 49 spi_register_board_info(plat27_spi_board_info, ARRAY_SIZE(plat27_spi_board_info)); 50 #endif 51 #endif 52 53 }

make menuconfig中加入:

 

代码
   
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> 1 [ * ]Networking support -> 2 <M > CAN bus subsystem support -> 3 <M > Raw CAN Protocal 4 <M > Broadcast Manage CAN Protocal 5 CAN Device Drivers -> 6 <M > Platform CAN driver with Netlink support 7 [ * ]CAN bit - timing calculation 8 <M > Microchip MCP251x SPI CAN controllers 9 10 Device drivers -> 11 [ * ]SPI support -> 12 < *> Freescale i.MX spi controllers 13 14  

 

编译安装mod:

insmod can.ko

insmod can-raw.ko

insmod can-bcm.ko

insmod can-dev.ko

insmod mcp251x.ko

 

最新版busybox的ip还是不支持socketcan,所以要自己编译一个。

上http://corp-dev.linuxfoundation.org/collaborate/workgroups/networking/iproute2下载iproute2,目前版本是2.6.35。

编译iproute2的时候有很多问题,安装了bison,flex,libdb4.7-dev还是死在tc目录,后来想想只要用它的ip,于是最终修改Makefile如下:

CC = /opt/arm-2010q1/bin/arm-none-linux-gnueabi-gcc
SUBDIRS=lib ip

make通过,把ip目录中的ip(elf文件)拷到目标板中运行:

chmod 777 ip

./ip link set can0 up type can bitrate 250000
./ip -details link show can0

can0设置好后可以用以下命令修改bitrate

ifconfig can0 down 
echo 125000 > /sys/class/net/can0/can_bitrate 
ifconfig can0 up 
 

到这一步socketcan就算配置完成了,不过还是可以给它添加一些工具。

1.用socketcan里的can-utils:

sudo apt-get install subversion
svn checkout svn://svn.berlios.de/socketcan/trunk socketcan
cp -r socketcan ../Workspaces
修改socketcan/can-utils/Makefile
PREFIX=./bin
KERNELDIR = http://www.cnblogs.com/linux-2.6.37
CC=/opt/arm-2010q1/bin/arm-none-linux-gnueabi-gcc  (新增)
socketcan和linux2.6.37带的socketcan版本不同,导致有些不能编译成功,不过大部分工具都有了,剩下的如果要的话可以考虑merge linux内核----还不如自己写工具呢

2.在http://www.pengutronix.de/software/socket-can下载can-utils 4.0.6,里面有5个工具,不过搞不定它的configure,手工编译之吧:

先在include下建一个can_config.h,里面就一句话#define VERSION 20090105  (随便怎么写吧,我是看到can.ko的版本是20090105) 

然后进到src目录

/opt/arm-2010q1/bin/arm-none-linux-gnueabi-gcc  -o xxx  xxx.c -I$PWD/../include -I$PWD/***/linux-2.6.37/include  (faint,http://www.cnblogs.com/被转成www.cnblogs.com)

除了canconfig.c通不过(需要libsocketcan.h,好在已经有iproute2了)其他的都成功。 感觉这个cansend比socketcan里的cansend好用。

【RK3399】【Linux】rk3399 Can驱动分析 mcp2515 【RK3399】【Linux】Rockchip3399 Can驱动分析 阅读详情

相关推荐

树莓派SPI1启用与MCP2515 CAN总线配置全攻略

SPI(串行外设接口)是一种高速、全双工的同步串行通信总线,广泛应用于嵌入式系统连接各类传感器、存储器和控制器。其工作原理基于主从架构,通过时钟信号同步数据交换,具有接线简单、速度快的优点。在工业控制、汽车电子和物联网设备中,SPI是实现设备间可靠数据通信的关键技术。当系统需要连接多个SPI外设时,启用备用SPI总线资源成为扩展系统能力的重要实践。本文以树莓派平台为例,针对其默认SPI0接口被占用的典型场景,深入解析如何通过配置设备树(Device Tree)启用隐藏的SPI1硬件控制器,并成功挂载MCP2

weixin_30629653的博客 363

linux之socketcan

Socket CAN 对CAN protocol做了封装,对CAN设备的读写变成了类似tcp/ip的读写网络(socket操作)。 目标环境:linux2.6.37, i.mx27开发板带mcp2515 首先注册spi device和mcp2515 device: 代码 1 static const int plat27_pins[] __initconst= { 2 ...

weixin_33951761的博客 400

宇树G1人形机器人刷机全链路指南:设备树、JetPack与ROS2深度适配

设备树(Device Tree)是嵌入式Linux系统中描述硬件拓扑的核心机制,其原理在于将硬件配置从内核代码中解耦,通过二进制dtb文件在启动时动态加载。这一机制对高度定制化的机器人平台尤为关键——当标准JetPack镜像无法识别宇树G1的Tegra234 SoC特有外设(如L1激光雷达PCIe复位引脚、三自由度肩关节PWM映射)时,设备树即成为软硬协同的‘硬件宪法’。其技术价值体现在保障驱动兼容性、支撑实时运动控制闭环,并为ROS2节点提供准确的传感器/执行器拓扑视图。典型应用场景包括人形机器人固件重刷

diaogan4202的博客 527

can3--socketcan之mcp251x.c

函数原型源于2.6.38 ****************************************************************** spi驱动结构见 http://blog.csdn.net/songqqnew/article/details/7037583 mcp251x.c几乎是抄袭dm9000的写作格式 参考  dm9000 driver

openCpu 6518

RACECAR竞速无人车ROS顶层平台安装实战指南

RACECAR是一种面向工程实践的竞速级无人车平台,其核心挑战在于构建具备确定性实时响应能力的嵌入式机器人系统。不同于通用ROS安装,它要求深度耦合硬件抽象层、PREEMPT_RT实时内核、CUDA加速驱动与ROS1中间件,以支撑激光雷达、双目视觉、IMU及电机闭环等多传感器高并发任务。该方案聚焦Ubuntu 20.04 + ROS Noetic + JetPack 4.6技术栈,解决嵌入式场景下调度延迟、GPU兼容性与驱动桥接等关键问题,广泛应用于高校教学、MIT开源赛事及边缘AI小车部署。本文详解从内核

weixin_30256901的博客 471

TB-RK3399ProD 主线内核运行NPU测试

rk3399pro主线内核驱动NPU及功能测试

weixin_45682654的博客 278

linux2.6.37.4在XC2440上移植成功

linux2.6.37.4在XC2440上移植成功    新版内核移植的过程真是艰难,历时4个月,曾多次想过放弃。如果我都使用以前做好的东西,我的板在去年12月份就能开始卖了,也没必要等到现在。现在发现我以前做的那些东西真是低级,当时才疏学浅,也只知道照搬别人的东西。    在现在的公司做了半年的驱动,对驱动也有了一个新的认识,我一直看高通的android代码,觉得高通的驱动做的挺专业的,就算一个LED的驱动也要写个几百行。我准备尝试用新版的内核,将内核中所有能用的驱动都用在XC2440上。    这次使用

IT人生 1059

【CAN】libsocketcan库详解

libsocketcan是用户空间通过SocketCAN操作CAN的接口。源码:https://github.com/linux-can/libsocketcan。

郭老二 1352

Nvidia Jetson Xavier CAN总线配置避坑指南:从GPIO到modprobe全流程解析

本文详细解析了在Nvidia Jetson Xavier开发者套件上配置CAN总线的完整流程与常见陷阱。内容涵盖从GPIO引脚复用、使用modprobe加载驱动,到构建持久化启动方案的全过程,旨在帮助开发者快速实现稳定可靠的CAN通信,适用于工业控制、机器人及车载网络开发。

weixin_29188997的博客 506

MCP251XFD:MCP2517FD和MCP2518FD驱动程序

MCP251XFD MCP251XFD是一款完全独立于硬件的驱动程序,主要用于嵌入式世界。 介绍 该驱动程序仅负责配置和检查内部寄存器以及与设备的通信格式。 这意味着它不会直接处理物理通信,而是有功能接口可以做到这一点。 通过这样做,驱动器可以通过I2C到SPI转换器控制MCP2517FD,而无需进行任何更改,转换将在接口功能中完成。 每个驾驶员的功能都需要一个设备结构,该结构指示他必须威胁和与哪个设备通信。 每个设备可以有自己的配置。 驱动程序可以检测到连接了MCP2517FD或MCP2518FD中的哪一个。 用法 安装 获取资源 获取以下3个文件并将其添加到您的项目中 MCP251XFD.c MCP251XFD.h Conf_MCP251XFD_Template.h ErrorsDef.h 将文件Conf_MCP251XFD_Template.h复制或重命名为Conf_MCP251X

基于linux的MCP251X的can驱动

基于全志T3/A40I实测过,可生成can0节点,能够进行回环测试,建议使用can-utils工具完成测试,相关链接https://github.com/linux-can/can-utils

RACECAR ROS 2底层平台安装:JetPack固件、实时内核与CycloneDDS深度配置

ROS 2是机器人中间件的核心框架,其运行稳定性高度依赖底层操作系统、硬件驱动与通信机制的协同优化。在RACECAR等嵌入式移动机器人平台上,单纯安装ROS 2发行版远不足以支撑实时控制需求;必须深入固件层(如JetPack版本与Orin SoC Revision精确匹配)、内核层(PREEMPT_RT补丁的精准裁剪)和中间件层(CycloneDDS低延迟QoS策略),才能满足舵机响应≤8ms、传感器时间同步、CAN总线确定性传输等硬实时约束。本文聚焦RACECAR-Jetson AGX Orin+ROS

wentao365的专栏 472

mcp2515驱动的实现.doc

用mcp2515作为例子,介绍了在Linux操作系统下如何挂载一个硬件驱动的代码步骤

RK3399ProD移植主线Linux内核

TB-RK3399ProD移植主线Linux内核

weixin_45682654的博客 357

【SABRE 3D, SABRE 3DxT,LAM设备】2025年9月13日-安全配置-准备工作

请遵循本规程将SABRE 3D/3DxT/3D Scimitar系统设置为安全配置,以便能够在电镀单元、APT模块、XMM(或SRD)模块、工厂接口(FI)外壳或中央通道内部及周边区域执行作业p104-p117。在生产过程中暂停调度程序存在一定风险:若待维护模块未离线且在其他模块完成处理前重启调度程序,可能对生产晶圆造成影响。维护人员需特别注意电镀模块内的晶圆状态,并尽可能快速地恢复调度程序。确认待维护模块内无晶圆滞留暂停调度程序并将相应模块设置为离线状态打开模块检修门并关闭安全盖板(槽位)

weixin_46735260的博客 1363

一周涨十万星,GitHub 爆火的 REA 逆向工程到底是什么?

REA 这波热度里,我一直没太想明白的是它为什么火在 AI 圈而不是安全圈。同类的 MCP 工具早就在了,技术上也谈不上新,真正变的只有一件事:门槛。门槛一降,参与的人就从"会逆向的工程师"变成了"会打字的任何人"。这大概也是争议的根源。护城河这件事,多数报道的共识是它从"你看不到我的代码"挪到了"你拿不走我的服务能力和业务理解"。这话对不对,现在没人拿得出证据,只能等下一批真实案例。哪天有人拿 REA 把某个还在卖钱的闭源软件啃出可维护的工程,那个答案才算落地。

优快云zhizunbao的博客 1181

18、性能之王对决|Kreuzberg vs Docling 企业级文档解析横向评测

摘要:本文对比了Kreuzberg和Docling两款企业级文档解析工具,聚焦性能、内存占用、并发能力和格式支持四大核心维度。Kreuzberg基于Rust核心构建,提供多语言绑定和轻量级部署(71MB安装包),在速度和吞吐量上表现突出;Docling作为IBM开源的Python方案,在文档结构理解和表格提取上更优。文章详细分析了两者的架构设计、RAG集成能力,并提供了选型建议:Kreuzberg适合高吞吐量场景,Docling更适合需要深度语义理解的复杂文档处理。通过性能基准测试和实际案例,帮助开发者根据

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1250

从零到实战:用QCustomPlot在QT中绘制动态曲线图(含OpenGL加速配置)

本文详细介绍了如何在QT中使用QCustomPlot库绘制动态曲线图,并配置OpenGL加速以提升渲染性能。从环境搭建、动态数据可视化到OpenGL加速配置,手把手教你实现工业级动态曲线监控系统,适用于大数据量实时展示场景。

weixin_29019241的博客 351

SPI设备的驱动

今天折腾了一天的SPI设备的驱动加载,甚至动用了逻辑分析仪来查看spi总线的波形,主要包括两个SPI设备,at45db321d和mcp2515,一个是串行的dataflash,一个是can总线设备芯片。前者对于我们来说非常重要,我们可以借助该设备对uboot和kernel以及根文件系统进行更新。 预备知识:设备和驱动是如何匹配的?系统的热插拔是如何实现的? 首先一点,设备和驱动...

weixin_38632329的博客 540

【AI深究】合成数据(Synthetic Data)深度解析:原理、算法与工程实践——全网最详细流程|核心原理、主流方法、数学表达、工程实践与细节、未来趋势|GAN、VAE、语言模型LLM合成如GPT

大家好,我是爱酱。本篇延续将会系统梳理合成数据(Synthetic Data)的核心原理、主流方法、数学表达、工程实践与未来趋势,结合数学公式,帮助你全面理解这一AI建模的关键技术。 注:本文章含大量数学算式、详细例子说明及大量代码演示,大量干货,建议先收藏再慢慢观看理解。新频道发展不易,你们的每个赞、收藏跟转发都是我继续分享的动力!

AI人工智能爱酱~你的AI学习好帮手~ 4919

Hadoop与Kafka集群部署与优化实践指南

分布式系统是现代大数据处理的核心架构,其中Hadoop作为分布式存储与计算框架,Kafka作为分布式消息队列系统,共同构成了实时数据处理的基础设施。通过HDFS实现海量数据存储,结合YARN进行资源调度,而Kafka则保障了数据流的实时传输与高吞吐。这种技术组合在电商用户行为分析、物联网数据采集等场景中表现卓越。部署过程中需关注硬件资源配置、关键参数调优以及集群监控方案,例如通过调整HDFS块大小和Kafka partition数量来优化性能。合理运用Flume、Spark Streaming等工具可实现系

weixin_29061997的博客 360

linux龙芯LS1B socketCAN测试(含canutils安装)

1.硬件说明 这里采用龙芯LS1B的CPU 2.配置linux内核 [*] Networking support ---> <*> CAN bus subsystem support ---> CAN Device Drivers ---> <*> Philips/NXP SJA1000 devices ---> <*> Generic Platform Bus base

嵌入式相关的日常 2093

Claude Code 任务编排 头脑风暴与 疯狂拷问:Superpowers vs Grill-me 硬核对比与工程落地

Superpowers和Grill-me是AI编程中的互补工具:Superpowers提供工程化开发流程(从需求梳理到代码审查),确保规范执行;Grill-me通过持续追问帮助厘清需求,避免方向偏差。两者结合形成"构思-拷问-执行"工作流,前者负责方案生成与落地,后者专注需求审查。根据场景选择:个人项目可用Grill-me快速澄清需求,企业项目推荐Superpowers全流程,复杂开发则建议组合使用。它们分别解决"如何落地"和"是否对齐"的问题,共

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 324
上一篇: SocketCAN
下一篇: 什么是iNAND,iNAND有什么优点?
flymachine
博客等级 码龄23年 253粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值