imx6q引出双路CAN

环境:

1.飞凌嵌入式imx6q开发板

2.底板版本OK_MX6X_C_V1.3

3.核心板版本FETMX6X-C V1.1

4.linux内核版本3.0.35

 

当前开发板上面已经有一路can,我们需要引出另外一路can出来。

步骤:

1.添加CAN的收发引脚以及省电开关引脚的定义

在linux-3.0.35\arch\arm\mach-mx6路径下找到board-mx6q_sabresd.h添加

/* CAN2 */
 MX6Q_PAD_KEY_COL4__CAN2_TXCAN,
 MX6Q_PAD_KEY_ROW4__CAN2_RXCAN,
 MX6Q_PAD_GPIO_1__GPIO_1_1,

需要注意的是:这几个引脚都被其它模块占用。

 

2.添加CAN的初始化函数

在linux-3.0.35\arch\arm\mach-mx6路径下找到board-mx6q_sabresd.c添加如下定义

#define SABRESD_CAN2_STBY IMX_GPIO_NR(7, 11)

static void mx6q_sabresd_flexcan1_switch(int enable)
{
 if (enable) {
  gpio_set_value(SABRESD_CAN2_STBY, 0);
 } else {
  gpio_set_value(SABRESD_CAN2_STBY, 1);
 }
}
 
static struct gpio mx6q_sabresd_flexcan1_gpios[] = {
 { SABRESD_CAN2_STBY, GPIOF_OUT_INIT_LOW, "flexcan2-stby" },
};
 
static const struct flexcan_platform_data
 mx6q_sabresd_flexcan1_pdata __initconst = {
 .transceiver_switch = mx6q_sabresd_flexcan1_switch,
};

 

在mx6_sabresd_board_init(void)函数中添加can2初始化:

/* CAN2 init */
ret = gpio_request_array(mx6q_sabresd_flexcan1_gpios,
   ARRAY_SIZE(mx6q_sabresd_flexcan1_gpios));
 if (ret)
  pr_err("failed to request flexcan2-gpios: %d\n", ret);
 else
  imx6q_add_flexcan1(&mx6q_sabresd_flexcan1_pdata);

 

重新编译即可。

 

验证方式:

在串口终端下输入 ifconfig -a

 

posted on 2017-10-18 18:12  a永不言败a  阅读(1396)  评论(0编辑  收藏  举报

导航