Armadillo-640で、ブートローダーでGPIOを設定する方法です。
ここでは例として、
Armadillo-640製品マニュアル「表6.9 CON9 ピンとGPIO番号の対応」
より
ピン番号 | ピン名 | GPIO番号 |
---|---|---|
4 | GPIO1_IO31 | 31 |
上記のCON9の4番ピンをGPIO:High出力に設定します。
備考)
下記手順にて、ブートローダーは「u-boot-a600-v2018.03-at13」の場合で記述しています。
異なるバージョンを使用する場合は、バージョンを読み替えてください。
以下、
Armadillo-640 製品マニュアル「10.1. ブートローダーをビルドする」
の手順をベースに、
カスタマイズしたブートローダーを作成します。
1.ソースコードの準備
atmark@atde8:~$ wget https://armadillo.atmark-techno.com/files/downloads/armadillo-640/source/u-boot-a600-v2018.03-at13.tar.gz atmark@atde8:~$ tar zxvf u-boot-a600-v2018.03-at13.tar.gz
2.デフォルトコンフィギュレーションの適用
atmark@atde8:~$ cd u-boot-a600-v2018.03-at13 atmark@atde8:~/u-boot-a600-v2018.03-at13$ make ARCH=arm armadillo-640_defconfig
3.ブートローダーのカスタマイズ
CON9の4番ピンをGPIO:High出力に設定します。
u-boot-a600-v2018.03-at13内のソースコード
u-boot-a600-v2018.03-at13/board/atmark-techno/armadillo-640/board.c
を変更します。
board.cに、下記コメントで挟んだ2箇所を追加します。
/**** custom_gpio(番号/2): begin ****/
/**** custom_gpio(番号/2): end ****/
/**** custom_gpio(1/2): begin ****/ #define CUSTOM_GPIO_CON9_4 IMX_GPIO_NR(1, 31) static iomux_v3_cfg_t custom_gpio_pads[] = { MX6_PAD_UART5_RX_DATA__GPIO1_IO31 | MUX_PAD_CTRL(PAD_CTL_DSE_240ohm), }; static void setup_custom_gpio(void) { imx_iomux_v3_setup_multiple_pads(custom_gpio_pads, ARRAY_SIZE(custom_gpio_pads)); gpio_direction_output(CUSTOM_GPIO_CON9_4, 1); } /**** custom_gpio(1/2): end ****/
int board_init(void) { setup_maintenance_sw(); /**** custom_gpio(2/2): begin ****/ setup_custom_gpio(); /**** custom_gpio(2/2): end ****/ setup_fec(); setup_usb(); return 0; }
参考)board.cに上記変更を施したもの
board_custom_gpio_20230331.c
解説)変更箇所について
#define CUSTOM_GPIO_CON9_4 IMX_GPIO_NR(1, 31)
CON9の4番ピン(GPIO1_IO31)の定義。ピン番号とピン名の相関については下記参照。
Armadillo-640製品マニュアル「表6.9 CON9 ピンとGPIO番号の対応」
Armadillo-640 マルチプレクス表
MX6_PAD_UART5_RX_DATA__GPIO1_IO31 | MUX_PAD_CTRL(PAD_CTL_DSE_240ohm),
PADの設定。プルアップ/ダウン、ドライブ能力等、対向の回路に合わせた設定が必要。
上記の例はドライブ能力のみ設定を変更。詳細は下記マニュアルを参照。
「i.MX 6ULL Applications Processor Reference Manual」
(
i.MX 6ULL Single-Core Processor with Arm Cortex-A7 Coreよりダウンロード可能)
32.6.178 SW_PAD_CTL_PAD_UART5_RX_DATA SW PAD Control Register
(IOMUXC_SW_PAD_CTL_PAD_UART5_RX_DATA)
gpio_direction_output(CUSTOM_GPIO_CON9_4, 1);
CON9の4番ピンのGPIOをHigh出力に設定。
4.ビルド
atmark@atde8:~/u-boot-a600-v2018.03-at13$ make CROSS_COMPILE=arm-linux-gnueabihf- atmark@atde8:~/u-boot-a600-v2018.03-at13$ ls u-boot.imx u-boot.imx
上記手順で生成されたu-boot.imxが、CON9の4番ピンをGPIO:High出力に設定したブートローダーです。
Armadillo-640 製品マニュアル「11.2.1. ブートローダーイメージの書き換え」
の手順で
Armadillo-640のブートローダーをこのu-boot.imxで書き換えます。
再起動すると、ブートローダー起動時にCON9の4番ピンはHigh出力になります。
備考)
この方法はブートローダーでの設定になります。
カーネル起動後もGPIOで使用する場合は、
Armadillo-640 製品マニュアル「20.3. Device Treeをカスタマイズする」
の方法で、該当の端子に「何の機能も割り当てない(=GPIO)」設定をしたデバイスツリーを使用する必要があります。
ユーザースペースからGPIOを制御する制御方法は、下記を参照ください。
Armadillo-640 製品マニュアル「6.7. GPIO」