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添加驱动的更多相关文章

  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< ...

  7. ARM&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. Spring 使用 feign时设置header信息

    最近使用 SpringBoot 项目,把一些 http 请求转为 使用 feign方式.但是遇到一个问题:个别请求是要设置header的. 于是,查看官方文档和博客,大致推荐两种方式.也可能是我没看明 ...

  2. [LeetCode] Minimum Distance Between BST Nodes 二叉搜索树中结点的最小距离

    Given a Binary Search Tree (BST) with the root node root, return the minimum difference between the ...

  3. windows系统 phpstudy2018 配置阿里云https最简单的流程!

    一.从阿里去下载ssl文件放到C:\phpStudy\PHPTutorial\Apache\conf\cert 二.首先phpstudy开户php_openssl扩展,具体如下图 一般网上的教程,都要 ...

  4. Selenium 3----WebDriver常用方法

    在学会定位元素的基础上,进行元素的操作. WebDriver常用方法: clear(): 清除文本. send_keys (value): 模拟按键输入. click(): 单击元素. submit( ...

  5. CAD数据导入Arcgis10.1的依赖关系

    这段时间在做基于Arcgis10.1API处理AutoCAD图纸数据并将处理后的数据坐标转换为xml文件,以便于在开发的项目中使用.通过这段时间的开发总结以下问题希望能对童鞋有所帮助: 1.遇到CAD ...

  6. 在区块链侧链上进行Dapp技术开发

    我在白皮书里提到过,asch使用的是不同于以太坊和比特币的侧链架构,dapp是运行在侧链上的,每套侧链对应一个dapp. 侧链的独立性 侧链架构的好处是代码和数据独立,不增加主链的负担,避免数据过度膨 ...

  7. easyui dialog 中 panel-body 高度太小出现 滚动条 的原因

    easyui dialog 中 panel-body 高度太小出现 滚动条 的原因: dialog 高度比 iframe 高度大79 就可以了 $.editcompanypersoninfo = fu ...

  8. 关于反射和JVM的整理

  9. 【C++】满二叉树问题

    /* 给出一棵满二叉树的先序遍历,有两种节点:字母节点(A-Z,无重复)和空节点(#).要求这个树的中序遍历.输出中序遍历时不需要输出#. 满二叉树的层数n满足1<=n<=5. Sampl ...

  10. 使用sessionStorage进行数据存值

    <!DOCTYPE html> <head> <meta charset="UTF-8" /> <meta name="view ...