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