ブログ

Armadilllo-400シリーズで、CAN1を有効にする

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を有効にすることが可能です。

以上