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的主要内容,如果未能解决你的问题,请参考以下文章