ARM Mcp2515添加驱动

时间:2023-01-30 09:47:12

Mcp2515添加驱动  

2012-01-10 21:39:32

上图1:

ARM Mcp2515添加驱动

上图2:

ARM Mcp2515添加驱动

上图3:

ARM Mcp2515添加驱动

之前完成了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添加驱动的更多相关文章

  1. 【initrd】向虚拟文件系统initrd.img中添加驱动

    虚拟文件系统:initrd-2.6.18-194.el5.img 希望添加网卡或SCSI等驱动 步骤: 解压initrd-2.6.18-194.el5.img: 添加*.ko文件,并修改init可执行 ...

  2. Linux时间子系统之(十七):ARM generic timer驱动代码分析

    专题文档汇总目录 Notes:ARM平台Clock/Timer架构:System counter.Timer以及两者之间关系:Per cpu timer通过CP15访问,System counter通 ...

  3. Linux时间子系统(十七) ARM generic timer驱动代码分析

    一.前言 关注ARM平台上timer driver(clocksource chip driver和clockevent chip driver)的驱动工程师应该会注意到timer硬件的演化过程.在单 ...

  4. 往android的内核添加驱动及 ueventd.rc 修改【转】

    本文转载自:http://blog.csdn.net/lkqboy2599/article/details/8350100 向android的内核添加驱动,其实就是向linux内核添加驱动.主要在两个 ...

  5. arm裸板驱动总结(makefile+lds链接脚本+裸板调试)

    在裸板2440中,当我们使用nand启动时,2440会自动将前4k字节复制到内部sram中,如下图所示: 然而此时的SDRAM.nandflash的控制时序等都还没初始化,所以我们就只能使用前0~40 ...

  6. ARM&Linux 下驱动开发第三节

    后台驱动代码如下:比较昨天的,添加了读写指针位置移动操作 #include<linux/init.h> #include<linux/module.h> #include&lt ...

  7. ARM&amp&semi;Linux 下驱动开发第二节

    驱动文件:qudong.c,make生成qudong.ko文件,烧录到ARM板上 #include<linux/init.h> #include<linux/module.h> ...

  8. Qt添加驱动——Qt数据库之添加MySQL驱动插件

    Qt数据库之添加MySQL驱动插件(1) 现在可用的数据库驱动只有3种,在Qt中,我们需要自己编译其他数据库驱动的代码,让它们以插件的形式来使用.下面我们就以现在比较流行的MySQL数据库为例,说明一 ...

  9. MTK andorid从底层到上层添加驱动

    1 [编写linux驱动程序] 1.1 一.编写驱动核心程序 1.2 二.配置Kconfig 1.3 三.配置Makefile 1.4 四.配置系统的autoconfig 1.5 五.编译 2 [编写 ...

随机推荐

  1. BZOJ 1004

    一道奇怪的数学题.为了这道题我看了很多题解,到底还是一知半解..整个感觉就是上了一场数学课. HNOI2008 Cards 题目描述 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有 ...

  2. HDUOJ-------2719The Seven Percent Solution

    The Seven Percent Solution Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  3. php 实现树形结构

    <?phpclass Tree{ private $OriginalList; public $pk;//主键字段名 public $parentKey;//上级id字段名 public $ch ...

  4. Flex Array内置排序方法的使用

    在Array类中,提供内置的排序方法.排序是在软件开发的过程中,经常遇到的问题.通过这些内置的方法,可以快速轻便的进行排序操作. Array类提供sort方法对Array实例进行排序.sort方法没有 ...

  5. 【老鸟学算法】大整数乘法——算法思想及java实现

    算法课有这么一节,专门介绍分治法的,上机实验课就是要代码实现大整数乘法.想当年比较混,没做出来,颇感遗憾,今天就把这债还了吧! 大整数乘法,就是乘法的两个乘数比较大,最后结果超过了整型甚至长整型的最大 ...

  6. 推荐系统架构-&lpar;附ppt&amp&semi;代码)

    Part1.乐视网视频推荐系统 推荐系统:和传统的推荐系统架构无异(基础建模+规则) 数据模块特点:用户反馈服务数据->kv 缓存->log存储 行为日志->解析/聚合->se ...

  7. 面试时怎样回答:你对原生ajax的理解

    很多人跟我一样用习惯了jq封装好的$.ajax,但是面试时,原生ajax是很多面试官喜欢问的问题,今天再查资料,打算好好整理一下自己理解的原生ajax. 首先,jq的ajax:一般我常用的参数就是这些 ...

  8. linux修改默认语言

    echo $PATH #查看当前语言LANG=en_US.UTF-8 #临时修改当前语言,修改为英文echo 'LANG=en_US.UTF-8' > /etc/sysconfig/i18n # ...

  9. 转--python之正则入门

    原文地址 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法 ...

  10. mount&colon; unknown filesystem type &&num;39&semi;vboxsf&&num;39&semi; centos ubuntu 处理方案

    Vagrant was unable to mount VirtualBox shared folders. This is usually because the filesystem " ...