Armadillo-400シリーズハードウェアマニュアル5.2.1. 入出力インターフェースの電気的仕様 - 「Armadillo-420/440」 に記載されている 「i.MX257のSoftware Pad Control Register(SW_PAD_CTL)とDrive Voltage Select Group Control Register(SW_PAD_CTL_GRP_DVS)で、 出力電流(Std, High, Max)、スルーレート(Slow, Fast)、プルアップ/プルダウンを変更することができます。」 について、端子の出力電流の設定を実際にしてみた。
今回は、Armadillo-440を使って、拡張インタフェースCON9の
CON9_2
CON9_21
CON9_22
CON9_23
CON9_24
をGPIOの出力にして確認した。
1.カーネルのソースコードの修正
端子の出力の設定は、 atmark-dist/linux-2.6.x/arch/arm/mach-mx25/armadillo400_gpio.c ファイルで設定できる。
Armadillo-400シリーズハードウェアマニュアル 表5.5 入出力インターフェースの電気的仕様(OVDD=+3.3V_IO) - 「Armadillo-420/440」 のConditionsにある Std Drive High Drive Max Drive に該当する設定は、armadillo400_gpio.c内のレジスタ設定で、 PAD_CTL_DSE_STANDARD PAD_CTL_DSE_HIGH PAD_CTL_DSE_MAX を指定すればよい。
なお、デフォルトで未設定になっている場合は、 PAD_CTL_DSE_STANDARD 相当になっているようである。
・CON9_2をHigh Driveにする場合、
static struct pad_desc armadillo400_ext_gpio_pads_revc[] = {
の
MX25_PAD_RTCK__GPIO_3_14(PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_100K_UP),
の箇所を
MX25_PAD_RTCK__GPIO_3_14(PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_100K_UP | PAD_CTL_DSE_HIGH),
にする。
・CON9_21、CON9_22、CON9_23、CON9_24をMax Driveにする場合
static struct pad_desc armadillo400_ext_gpio_pads_revc[] = {
の末尾に
MX25_PAD_CTL_GRP_DSE_CSI(PAD_CTL_DSE_MAX),
を追加する。
備考)
上記設定について、i.MX257のデータシートを参照して、ソースコード内の表記とi.MX257の出力電流設定のレジスタとの相関をとった。
上記の修正をしてビルドしたカーネルイメージをArmadillo-440に書き込む。
2.確認
簡易的に 端子(GPIO:High出力)--抵抗--GND のような回路で、端子--GND間の電圧降下が変わるかどうか確認する。
以下は、CON9_2の例だが、CON9_21、CON9_22、CON9_23、CON9_24も末尾の番号が違うだけで同様。
・該当端子をGPIO:High出力にする。
[armadillo ~]# echo out > /sys/class/gpio/CON9_2/direction [armadillo ~]# echo 1 > /sys/class/gpio/CON9_2/value
・CON9_2端子--抵抗--GND間の電圧測定結果 抵抗は、1k、500、250[ohm]の3パターンで測定
PAD_CTL_DSE_STANDARDの場合
1k:3.08V
500:2.85V
250:2.43V
PAD_CTL_DSE_HIGHの場合
1k:3.19V
500:3.08V
250:2.85V
PAD_CTL_DSE_MAXの場合
1k:3.25V
500:3.19V
250:3.07V
上記結果より電圧降下の大きさから、出力電流は、 PAD_CTL_DSE_STANDARD < PAD_CTL_DSE_HIGH < PAD_CTL_DSE_MAX の順に設定されていることが確認できた。