can2--tiny6410移植mcp2515驱动
生活随笔
收集整理的這篇文章主要介紹了
can2--tiny6410移植mcp2515驱动
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
根據te6410
移植mcp2515到tiny6410,將tiny按照te的連線如下
tiny6410,linux2.6.38移植mcp251x 使用spi1,eint81.修改板子文件mach-mini6410.c,加入plateform平臺設備 先加入頭文件//for spi add by medconn #include <plat/s3c64xx-spi.h> #include <linux/spi/spi.h> #include <linux/can.h> //for mcp251x add by medconn #include <linux/can/platform/mcp251x.h> #include <mach/gpio-bank-c.h>在static struct platform_device *mini6410_devices[] __initdata 函數中加入 spi的平臺設備 //&s3c64xx_device_spi0, &s3c64xx_device_spi1,加入spi板子信息,這里使用eint8,飛凌使用的是eint16/*add by medconn for mcp251x*/ static void cs_set_level(unsigned line_id, int lvl) {gpio_direction_output(line_id, lvl); }; static struct s3c64xx_spi_csinfo s3c64xx_spi1_csinfo = {.fb_delay=0x3,.line=S3C64XX_GPC(7),.set_level=cs_set_level, }; static int mcp251x_ioSetup(struct spi_device *spi) { // printk(KERN_INFO "mcp251x: setup gpio pins CS and External Int\n");printk("mcp251x_ioSetup\n"); //s3c_gpio_setpull(S3C64XX_GPL(8), S3C_GPIO_PULL_UP); // External interrupt from CAN controller--eint16(gpl8) //s3c_gpio_cfgpin(S3C64XX_GPL(8), S3C_GPIO_SFN(3)); // External interrupt from CAN controller (hopefully external interrupt)--eint16(gpl8) s3c_gpio_setpull(S3C64XX_GPN(8), S3C_GPIO_PULL_UP); // External interrupt from CAN controller--eint8(gpn8) s3c_gpio_cfgpin(S3C64XX_GPN(8), S3C_GPIO_SFN(2)); // External interrupt from CAN controller (hopefully external interrupt)--eint8(gpn8) s3c_gpio_setpull(S3C64XX_GPC(7), S3C_GPIO_PULL_NONE); // Manual chip select pin as used in 6410_set_cs s3c_gpio_cfgpin(S3C64XX_GPC(7), S3C_GPIO_OUTPUT); // Manual chip select pin as used in 6410_set_cs return 0; } static struct mcp251x_platform_data mcp251x_info = { .oscillator_frequency = 16000000, .board_specific_setup = mcp251x_ioSetup, .transceiver_enable = NULL, .power_enable = NULL, }; static struct spi_board_info __initdata forlinx6410_mc251x_info[] = { { .modalias = "mcp2515", .platform_data = &mcp251x_info, //.irq = IRQ_EINT(16),//--eint16(gpl8) .irq = IRQ_EINT(8), .max_speed_hz = 10*1000*1000, .bus_num = 1, .chip_select = 0, .mode = SPI_MODE_0, .controller_data=&s3c64xx_spi1_csinfo, }, };在static void __init mini6410_machine_init(void) 中加入幾行,注冊板子文件 //by medconn s3c64xx_spi_set_info(0,0,1); s3c64xx_spi_set_info(1,0,1); spi_register_board_info(forlinx6410_mc251x_info,ARRAY_SIZE(forlinx6410_mc251x_info)); platform_add_devices(mini6410_devices, ARRAY_SIZE(mini6410_devices));2.此時編譯會出現錯誤 s3c64xx_device_spi0 符號鏈接出錯,原因是s3c64xx_device_spi0所在文件dev-spi.c沒有編譯進內核,修改 arch/arm/mach-s3c64xx/Kconfig的 在config MACH_MINI6410 所屬項目下加入一行 select S3C64XX_DEV_SPI 3.tiny6410默認沒有配置spi主控制器驅動,所以需要配置一下 Device Drivers ---> [*] SPI support ---> <*> Samsung S3C64XX series type SPI <*> GPIO-based bitbanging SPI Master 4.修改mcp251x驅動 使用自帶的mcp251x.c也可以,但是傳輸一會又失敗了 使用我們的mcp251x.c,需修改line1131左右的一行為,否則在2.6.38下編譯不通過 priv->wq = create_freezable_workqueue("mcp251x_wq"); tiny6410默認沒有配置mcp251x驅動,配置一下 [*] Networking support ---> <*> CAN bus subsystem support ---> <*> Raw CAN Protocol (raw access with CAN-ID filtering) <*> Broadcast Manager CAN Protocol (with content filtering) CAN Device Drivers ---> <*> Platform CAN drivers with Netlink support [*] CAN bit-timing calculation <*> Microchip MCP251x SPI CAN controllers 重新編譯燒寫即可。
移植mcp2515到tiny6410,將tiny按照te的連線如下
tiny6410,linux2.6.38移植mcp251x 使用spi1,eint81.修改板子文件mach-mini6410.c,加入plateform平臺設備 先加入頭文件//for spi add by medconn #include <plat/s3c64xx-spi.h> #include <linux/spi/spi.h> #include <linux/can.h> //for mcp251x add by medconn #include <linux/can/platform/mcp251x.h> #include <mach/gpio-bank-c.h>在static struct platform_device *mini6410_devices[] __initdata 函數中加入 spi的平臺設備 //&s3c64xx_device_spi0, &s3c64xx_device_spi1,加入spi板子信息,這里使用eint8,飛凌使用的是eint16/*add by medconn for mcp251x*/ static void cs_set_level(unsigned line_id, int lvl) {gpio_direction_output(line_id, lvl); }; static struct s3c64xx_spi_csinfo s3c64xx_spi1_csinfo = {.fb_delay=0x3,.line=S3C64XX_GPC(7),.set_level=cs_set_level, }; static int mcp251x_ioSetup(struct spi_device *spi) { // printk(KERN_INFO "mcp251x: setup gpio pins CS and External Int\n");printk("mcp251x_ioSetup\n"); //s3c_gpio_setpull(S3C64XX_GPL(8), S3C_GPIO_PULL_UP); // External interrupt from CAN controller--eint16(gpl8) //s3c_gpio_cfgpin(S3C64XX_GPL(8), S3C_GPIO_SFN(3)); // External interrupt from CAN controller (hopefully external interrupt)--eint16(gpl8) s3c_gpio_setpull(S3C64XX_GPN(8), S3C_GPIO_PULL_UP); // External interrupt from CAN controller--eint8(gpn8) s3c_gpio_cfgpin(S3C64XX_GPN(8), S3C_GPIO_SFN(2)); // External interrupt from CAN controller (hopefully external interrupt)--eint8(gpn8) s3c_gpio_setpull(S3C64XX_GPC(7), S3C_GPIO_PULL_NONE); // Manual chip select pin as used in 6410_set_cs s3c_gpio_cfgpin(S3C64XX_GPC(7), S3C_GPIO_OUTPUT); // Manual chip select pin as used in 6410_set_cs return 0; } static struct mcp251x_platform_data mcp251x_info = { .oscillator_frequency = 16000000, .board_specific_setup = mcp251x_ioSetup, .transceiver_enable = NULL, .power_enable = NULL, }; static struct spi_board_info __initdata forlinx6410_mc251x_info[] = { { .modalias = "mcp2515", .platform_data = &mcp251x_info, //.irq = IRQ_EINT(16),//--eint16(gpl8) .irq = IRQ_EINT(8), .max_speed_hz = 10*1000*1000, .bus_num = 1, .chip_select = 0, .mode = SPI_MODE_0, .controller_data=&s3c64xx_spi1_csinfo, }, };在static void __init mini6410_machine_init(void) 中加入幾行,注冊板子文件 //by medconn s3c64xx_spi_set_info(0,0,1); s3c64xx_spi_set_info(1,0,1); spi_register_board_info(forlinx6410_mc251x_info,ARRAY_SIZE(forlinx6410_mc251x_info)); platform_add_devices(mini6410_devices, ARRAY_SIZE(mini6410_devices));2.此時編譯會出現錯誤 s3c64xx_device_spi0 符號鏈接出錯,原因是s3c64xx_device_spi0所在文件dev-spi.c沒有編譯進內核,修改 arch/arm/mach-s3c64xx/Kconfig的 在config MACH_MINI6410 所屬項目下加入一行 select S3C64XX_DEV_SPI 3.tiny6410默認沒有配置spi主控制器驅動,所以需要配置一下 Device Drivers ---> [*] SPI support ---> <*> Samsung S3C64XX series type SPI <*> GPIO-based bitbanging SPI Master 4.修改mcp251x驅動 使用自帶的mcp251x.c也可以,但是傳輸一會又失敗了 使用我們的mcp251x.c,需修改line1131左右的一行為,否則在2.6.38下編譯不通過 priv->wq = create_freezable_workqueue("mcp251x_wq"); tiny6410默認沒有配置mcp251x驅動,配置一下 [*] Networking support ---> <*> CAN bus subsystem support ---> <*> Raw CAN Protocol (raw access with CAN-ID filtering) <*> Broadcast Manager CAN Protocol (with content filtering) CAN Device Drivers ---> <*> Platform CAN drivers with Netlink support [*] CAN bit-timing calculation <*> Microchip MCP251x SPI CAN controllers 重新編譯燒寫即可。
轉載于:https://www.cnblogs.com/-song/archive/2012/07/12/3331865.html
總結
以上是生活随笔為你收集整理的can2--tiny6410移植mcp2515驱动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: can4--测试can
- 下一篇: CrtInvertedIdx