imx6q引出双路CAN

Posted a永不言败a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于imx6q引出双路CAN的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式测试手册——基于NXP iMX6ULL开发板

IMX6Q RTC驱动分析

经验分享-iMX6Q linux4.1.15 修改开机动画方法

imx6q android 添加开机启动脚本

IMX6Q LTIB 安装编译错误的解决办法

IMX6Q LTIB 安装编译错误的解决办法