EXT_IO21のブートローダ起動後信号状態の変更方法

お世話になっております。ロームの大岡です。

Armadillo410ハードウェアマニュアルの
表6.10 Armadillo-410 CON2信号状態(ブートローダー起動後)には
ピン番号66のEXT_IO21(EXT_ARMCLK)は起動後の信号状態はLowと記述されていますが、
これをHighにする方法はありますでしょうか?

ざっと調べてみた所では、できるとすれば以下の2パターンが考えられると思いました。
方向性が合っているかだけでも教えていただければ幸いです。

1. hermit-atのソースコード書き換え
hermit-at-2.1.5/src/target/armadillo4x0/board.cの300行目あたり、

		if (gpio_pins[i].pin == MX25_PIN_CLKO ||
		    gpio_pins[i].pin == MX25_PIN_EXT_ARMCLK)
			mx25_gpio_output(gpio_pins[i].pin, 0);

を書き換えて、

		if (gpio_pins[i].pin == MX25_PIN_CLKO)
			mx25_gpio_output(gpio_pins[i].pin, 0);
                else if(gpio_pins[i].pin == MX25_PIN_EXT_ARMCLK)
			mx25_gpio_output(gpio_pins[i].pin, 1);

のようにする。

2. linuxカーネルのソースコード書き換え
linux-2.6.26-at18/arc/arm/mach-mx25/armadillo400.cのstatic struct mxc_ext_gpio gpio_list_revc[]の

#if defined(CONFIG_ARMADILLO400_CON9_28_GPIO3_15)
	{"CON9_28",  GPIO(3, 15), MXC_EXT_GPIO_DIRECTION_OUTPUT, 0},
#endif

を、

#if defined(CONFIG_ARMADILLO400_CON9_28_GPIO3_15)
	{"CON9_28",  GPIO(3, 15), MXC_EXT_GPIO_DIRECTION_OUTPUT, 1},
#endif

のようにする。

以上です。よろしくお願いします。

製品: 
Armadillo-410

中村です。

> 表6.10 Armadillo-410 CON2信号状態(ブートローダー起動後)には
> ピン番号66のEXT_IO21(EXT_ARMCLK)は起動後の信号状態はLowと記述されていますが、
> これをHighにする方法はありますでしょうか?
>
> ざっと調べてみた所では、できるとすれば以下の2パターンが考えられると思いました。
> 方向性が合っているかだけでも教えていただければ幸いです。

それでいいと思いますよ。

私の場合、EXT_IO21とは別のポートになりますが、
hermit-atのそのソースを書き換えて使っています。

ブートローダじゃなくてLinuxカーネルでの初期化も
そこでいいはずです。

ブートローダーでの設定を気にされるということは、
リセット時の状態も大事かと思います。念のため。

--
なかむら

大岡です。

中村様、ありがとうございました。

1と2を実際にやってみた所、うまくいっているようです。
回路にプルダウン抵抗をつけているのでリセット直後はLOWになってしまいますが、
ファンの回転制御に使用するピンなのでその程度は問題ないかと思っています。

以上です。よろしくお願いします。

中村です。

> 1と2を実際にやってみた所、うまくいっているようです。

うまくいって良かったです。

> 回路にプルダウン抵抗をつけているのでリセット直後はLOWになってしまいますが、
> ファンの回転制御に使用するピンなのでその程度は問題ないかと思っています。

大岡さんとは違うポートですが、その場所の修正だけではダメだった
という例を参考に書いておきます。

EXT_IO4(CON9_5相当)は、リセット時はOutputでLow出力です。
Pull/Keeperは100kΩPullUp。
デフォルトのブートローダー起動後はInputで、やはりPull/Keeperは100kΩPullUpです。

リセット時OutputでLow出力のポートなので、ブートローダを改造して
ブートローダ起動後もOutputでLow出力、アクティブHIGHの出力ポートして使おうと、
board.cの
void armadillo4x0_init(struct platform_info *pinfo)
の中に次の1行を追加しました。
mx25_gpio_output(MX25_PIN_CSPI1_MISO, 0);

実際に動かしてみると、リセットを解除してブートローダが動いたタイミングで、
約9msecくらいのHIGHパルスが出てしまいます。

このHIGHパルスは、次の修正で消えました。
static struct iomux_info uart3_pins[]の
{ MX25_PIN_CSPI1_MISO, MUX_ALT2, MUX_ALT5, -1, -1 },

{ MX25_PIN_CSPI1_MISO, MUX_ALT2, MUX_ALT5, -1, 0x00c0 },
に変更。

コンソール用UART2の設定のときに、UART3がGPIO設定され(デフォルトは入力)、
そのときにデフォルト(リセット状態)のPull-Upが生きているので、
ポートをテスタ(オシロ)で当たるとHIGHがでてしまっていました。
これを回避するために、PADのPull-Downを入れました。

0x00c0は、100kΩプルダウンのPAD設定です。

--
なかむら