ARM Mcp2515添加驱动
Mcp2515添加驱动
2012-01-10 21:39:32
上图1:

上图2:

上图3:

之前完成了spi接口驱动,所以mcp2515也是通过spi来读写数据的。就是多加一个中断脚。
另外在2.6.36中我看到有mcp251x.c文件,还有帮助注释,太好了,注释里都教会你怎么使用。于是又去看了看help文档信息,原来这是socketcan,了解了下是与网络有关的。先试一下把他移植到2.6.30中。
把之前的spi_board_info信息注释掉,重新添加新的
static struct mcp251x_platform_data mcp251x_info = {
.oscillator_frequency = 8000000,
//.board_specific_setup = &mcp251x_setup,
.model = CAN_MCP251X_MCP2515,
.power_enable = NULL,//mcp251x_power_enable,
.transceiver_enable = NULL,24
};
static struct spi_board_info s3c2410_spi1_board[] = {
{
.modalias = "mcp251x",
.platform_data = &mcp251x_info,
.irq = IRQ_EINT8, //GPG0
.max_speed_hz = 2*1000*1000,
.chip_select = 0,
.bus_num = 1,
},
};
于是动手移植Makefile中添加内容Kconfig中添加内容,反正提示错误,就解决。基本上比较顺利。但是里面我注释掉了一些内容呢!
结果一开始probe failed。于是跟踪源代码。发现Mcp251x.c中
函数名:mcp251x_hw_reset
功能:写一个spi的复位命令,(此时mcp会进入配置模式),通过读取状态寄存器,判断mcp是否进入配置模式。通过一定时间延时后,还没有进入配置模式,则报错。否则继续。
也就是说,一定要连接上硬件的,它需要写寄存器,还要读出来,进行判断的。
于是乎连接上了硬件,呵呵!probe成功。如图1
接着,我要开始想怎么写应用程序了。这时候才想到去看ioctl等函数。发现mcp251x.c里根本没有。网上搜索了一番,说mcp2515.c的程序很多 。于是乎真的下载到一个,看了内容还不错。Read,write,open,ioctl接口函数都有。
于是再移植一次。发现网上只有.c文件下载,没有.h文件下载,里面有些数据结构报错。后来发现主要是接口函数中有这些数据结构,于是乎先注释掉。编译成功后,probe成功。如图2.
再接着,就是看代码,看看ioctl中的函数是否可以使用了。接着自己编写了驱动测试程序can_test1.c,主要是完成一个应用程序的框架调用reset函数。然后又自己在ioctl中添加了自定义的功能进行读写寄存器测试。成功,如图3。
好了,至此应该能判断,linux代码改完后,应该已经能够将mcp2515进行初始化了。接着就是应用层接口函数。
仔细看了代码后,它的write函数处理一帧信息的,如果出入的size不足一帧是不处理的。所以为这个c程序,自己添加了数据结构。
struct can_header{ //can frame header
canid_t id:11;
canid_t rtr:1;
canid_t ide:1;
canid_t dlc:4;
canid_t eid:18;
};
struct canflt_type{ //can filter type
canid_t id:11;
canid_t ide:1;
canid_t mode:2;
canid_t eid:18;
canid_t sidmask:11;
canid_t eidmask:18;
canid_t active:1;
};
最后就是写应用程序调用这些write函数等。但是调用的时候发现了问题。
Write(fd,(char *)mycanframe,sizeof(struct can_frame));居然不能在子函数里用,一定要在main函数中才可以用。
另外,一进入main函数当open后就是了irq子函数。这个问题我需要示波器帮忙。明天继续。
ARM Mcp2515添加驱动的更多相关文章
- 【initrd】向虚拟文件系统initrd.img中添加驱动
虚拟文件系统:initrd-2.6.18-194.el5.img 希望添加网卡或SCSI等驱动 步骤: 解压initrd-2.6.18-194.el5.img: 添加*.ko文件,并修改init可执行 ...
- Linux时间子系统之(十七):ARM generic timer驱动代码分析
专题文档汇总目录 Notes:ARM平台Clock/Timer架构:System counter.Timer以及两者之间关系:Per cpu timer通过CP15访问,System counter通 ...
- Linux时间子系统(十七) ARM generic timer驱动代码分析
一.前言 关注ARM平台上timer driver(clocksource chip driver和clockevent chip driver)的驱动工程师应该会注意到timer硬件的演化过程.在单 ...
- 往android的内核添加驱动及 ueventd.rc 修改【转】
本文转载自:http://blog.csdn.net/lkqboy2599/article/details/8350100 向android的内核添加驱动,其实就是向linux内核添加驱动.主要在两个 ...
- arm裸板驱动总结(makefile+lds链接脚本+裸板调试)
在裸板2440中,当我们使用nand启动时,2440会自动将前4k字节复制到内部sram中,如下图所示: 然而此时的SDRAM.nandflash的控制时序等都还没初始化,所以我们就只能使用前0~40 ...
- ARM&Linux 下驱动开发第三节
后台驱动代码如下:比较昨天的,添加了读写指针位置移动操作 #include<linux/init.h> #include<linux/module.h> #include< ...
- ARM&Linux 下驱动开发第二节
驱动文件:qudong.c,make生成qudong.ko文件,烧录到ARM板上 #include<linux/init.h> #include<linux/module.h> ...
- Qt添加驱动——Qt数据库之添加MySQL驱动插件
Qt数据库之添加MySQL驱动插件(1) 现在可用的数据库驱动只有3种,在Qt中,我们需要自己编译其他数据库驱动的代码,让它们以插件的形式来使用.下面我们就以现在比较流行的MySQL数据库为例,说明一 ...
- MTK andorid从底层到上层添加驱动
1 [编写linux驱动程序] 1.1 一.编写驱动核心程序 1.2 二.配置Kconfig 1.3 三.配置Makefile 1.4 四.配置系统的autoconfig 1.5 五.编译 2 [编写 ...
随机推荐
- html5 Canvas绘制时钟以及绘制运动的圆
1.绘制时钟 <!-- js代码 --> <script type="text/javascript"> window.onload=function(){ ...
- 第二个项目:WC
第二个项目:Word Count 一.主要功能:文件中字符数.单词数.行数的统计 二.github源码和工程文件地址:https://github.com/miniyuan222/the-second ...
- (70)Wangdao.com第十一天_JavaScript 日期对象 Date
日期对象 Date 表示一个时间 Date 对象是 JavaScript 原生的时间库 它以1970年1月1日00:00:00作为时间的零点,可以表示的时间范围是前后各1亿天(单位为毫秒) 时间零点( ...
- [LeetCode] Split Array With Same Average 分割数组成相同平均值的小数组
In a given integer array A, we must move every element of A to either list B or list C. (B and C ini ...
- 解决C#中FileSystemWatcher类的Changed事件触发多次的问题
public static void WatchFile() { FileSystemWatcher watcher = new FileSystemWatcher(); watcher.Path = ...
- [SDOI2009]SuperGCD
题目链接 这题.高精度.恶心.难受. 那么高精度的gcd怎么做呢? 若a=b gcd(a,b)=a ①a偶b偶 gcd(a,b)=2*gcd(a/2,b/2) ②a偶b奇 gcd(a,b)=gcd(a ...
- Java常用类库 读书笔记 一
1.String Buffer 类 String 类所表示的字符串有一个局限就是字符串常量一旦声明则不可改变,只有内存地址的指向可以改变,如果要频繁修改字符串,需要使用String Buffer 类. ...
- vmware您无权输入许可证密钥,请请使用系统管理员账户重试
vmware15,输入许可证时报“您无权输入许可证密钥,请请使用系统管理员账户重试”,切换到Administrator以后,并没有什么作用. 网上的各种进入cmd的方法也无效. 后来发现,只要是已经存 ...
- [05-01]Linux如何重启系统
/* 私人笔记 */ 1.在linux相关路径下J2EE上传代码,指令:svn update : 2. 若项目名在linux中的目录为Scorpius ,跟新代码目录地址为 cd /home/xagd ...
- 自学stm32的一些个人经验
1.首先我们先看看与STM32相关的文档 我们假定大家已经对STM32的书籍或者文档有一定的理解.如不理解,请立即阅读STM32的文档,以获取最基本的知识点. 如果你手上拥有ST官方主推的STM32神 ...