at_takuya.sasaki
2014年12月1日 5時53分
Armadillo-400シリーズのSoCであるi.MX257には、CANコントローラは2つ(CAN1、CAN2)あります。 しかし、現在のカーネルソースでは、CON14のCAN2のみを有効にできるようになっています。
CON11にマルチプレクサされているCAN1を有効化する手順を紹介します。
(注意)
こちらはハードウェアを接続しての検証はしておりません。またCAN2を有効化している環境を想定しています。CAN2を有効化するには以下を参照してください。
https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_software_manual_ja-1.9.1/ch09.html#sec-CAN
環境: linux-2.6.26-at20
Kconfigを修正
CAN1はCON11の48,49pinにアサインされていますが、デフォルトではI2C3が 選択されていますので、排他で選択できるように修正します。 以下はKconfigのdiffです。
--- a/arch/arm/mach-mx25/Kconfig +++ b/arch/arm/mach-mx25/Kconfig @@ -500,6 +501,23 @@ config ARMADILLO400_I2C3_CON11_S35390A default y depends on ARMADILLO400_I2C3_CON11 +config ARMADILLO400_CAN1_CON11 + bool "Assign CAN1 to CON11" + default n + depends on !ARMADILLO400_I2C3_CON11 + help + Assign CAN1 to CON11. + Say Y to register CAN1 as a platform device. + Selecting this option will connect as follows + CON11_48: CAN1_TXCAN + CON11_49: CAN1_RXCAN + + To use CAN1, you also need to select CONFIG_CAN_FLEXCAN for + CAN driver. + select ARMADILLO400_CON11_48_CAN1_TXCAN + select ARMADILLO400_CON11_49_CAN1_RXCAN + select FLEXCAN_SELECT1 + config ARMADILLO460_RTC bool "Enable on-board RTC" default y @@ -1155,6 +1173,10 @@ config ARMADILLO400_CON11_48_GPIO1_0 bool default n +config ARMADILLO400_CON11_48_CAN1_TXCAN + bool + default n + config ARMADILLO400_CON11_48_I2C3_SCL bool default n @@ -1167,6 +1189,10 @@ config ARMADILLO400_CON11_49_GPIO1_1 bool default n +config ARMADILLO400_CON11_49_CAN1_RXCAN + bool + default n + config ARMADILLO400_CON11_49_I2C3_SDA bool default n
CON11の48,49ピンをCANのTX/RXに割り当てます
--- a/arch/arm/mach-mx25/armadillo400_gpio.c +++ b/arch/arm/mach-mx25/armadillo400_gpio.c @@ -623,7 +623,12 @@ static struct pad_desc armadillo400_mxc_w1_pads[] = { }; static struct pad_desc armadillo400_flexcan1_pads[] = { - +#if defined(CONFIG_ARMADILLO400_CON11_48_CAN1_TXCAN) + MX25_PAD_GPIO_A__CAN1_TX(0), +#endif +#if defined(CONFIG_ARMADILLO400_CON11_49_CAN1_RXCAN) + MX25_PAD_GPIO_B__CAN1_RX(PAD_CTL_PKE | PAD_CTL_PUS_100K_UP), +#endif }; static struct pad_desc armadillo400_flexcan2_pads[] = {
make menuconfigでCAN11を選択して、makeします
System Type ---> Freescale MXC Implementations ---> Armadillo-400 Board options ---> [] Assign I2C3 to CON11 ← チェックを外す [*] Assign CAN1 to CON11 ← チェックをつける
上記イメージをArmadillo-400シリーズに書き込むことで、CAN1を有効にすることが可能です。
以上