在PXA270下 移植mcp2515驱动(两路can)


今天把mcp2515的can总线驱动移植到pxa270上,总体看起来不是很复杂,但也碰到了不少挫折,最终还是解决了,也没算白忙活。

为了能够记住做过的驱动,以及便于日后查看,便记了下来,也方便遇到此类问题的朋友,尽快得到答案。


mcp2515.c文件已经写好了吧,网上可以下载的很多。

可以在各种平台下移植,它是基于平台设备的驱动,基本不用改动,只要根据 原理图 在内核文件下改动一点点即可。

下面说说我的步骤和理解:

1、看原理图,找出spi通道是哪一个,这样在270处理器下面就可以对应相应的bus_num,和chip_select。这里记录下来。在2里可以用的到。

2、这里进入源码打开 vi arch/arm/mach-pxa/mainstone.c ,在这里加一个结构体的定义,如下:

static struct spi_board_info spi_board_info[] __initdata =
{
        {
            .modalias       = "mcp2515_1", //这个名称要也mcp2515_1.c里的.name名字要相同,设备是通过这个名字来找到驱动的。
            .chip_select    = 0,
            .max_speed_hz   = 5000*24, /*(4700 * 26)-125000 * 26, (max sample rate @ 3V) * (cmd + data + overhead) */
            .bus_num        = 1, //这个和spi通道有关,是在原理图里记录下来的。
            .platform_data  = &mcp251x_info,
            .irq            = IRQ_MCP2515_1, //对应的中断号
        },
        // begin: add by dudebing for using two mcp2515 and ad7888
        {
            .modalias       = "mcp2515_2",
            .chip_select    = 0,
            .max_speed_hz   = 5000*24, /*(4700 * 26)-125000 * 26, (max sample rate @ 3V) * (cmd + data + overhead) */
            .bus_num        = 2, //这个和spi通道有关
            .platform_data  = &mcp251x_info,
            .irq            = IRQ_MCP2515_2,
        },
};


并在下面的初始化函数里加上这么一句话,如果没有的话。


static void __init mainstone_init(void)

{

………………


spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));

………………


}


3、仍然在arch/arm/mach-pxa/mainstone.c这个文件里,定义和设置中断号使能,同时设置触发方式, 这相要根据设计图纸来定。配置相应spi管脚功能。在不同的体系下配置函数不同,目的都是一样。

4、这里要改动驱动模块源文件了。也就是前面说的mcp2515.c 


  这里改动非常少,只需改动下面这个结构体里的 name成员即可。这里的名称一定要和上面的modalias 一致。不然设备找不到驱动。

static struct spi_driver mcp251x_driver = {
    .driver = {
        .name   = DRIVER_NAME,//这里宏定义  #define DRIVER_NAME "mcp2515_1" ,另外一个驱动模块是"mcp2515_2"
        .bus    = &spi_bus_type,
        .owner  = THIS_MODULE,
    },  
    .probe  = mcp251x_probe,
    .remove = __devexit_p(mcp251x_remove),
#ifdef CONFIG_PM
    .suspend    = mcp251x_suspend,
    .resume = mcp251x_resume,
#endif
};


5、编译内核,烧录内核代码。

 记得一定要重新烧录内核,因为内核是改动过的。或者直接加载到内存中。

6、编译驱动,insmod 驱动.ko即可。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值