BeagleBoard Black (BBB) に 外付けバスデバイスを接続する方法を纏めときます。
BBBで使われている CPU AM335x には general-purpose memory controller (以下 GPMC)のペリフェラルが入っています。このGPMCに対して Address / Data / Ctrl 線を繋げれば動くはずなのですが、このポートには eMMC 2G が接続されており、プログラムをeMMC にて実行している場合、GPMCで使用する事は出来ません。 よって、SDカードからの起動が大前提になります。 GPMCの Address / Data / Ctrl 線は P8,P9で外部に出されています。 また、下記手順ではなくkernel を最初から作り直してしまう方法もあります。
eMMCが登録されていると何故GPMCをDevice Tree Overlay出来ないかと言うと、 eMMCに使われているポートが排他利用で指定されているためです。下記ファイルにて確認できます。
/lib/firmware/BB-BONE-eMMC1-01-00A0.dts
手順:
1. SDカード起動の Angstrom Distribution を準備
SDカードから起動を行えた場合、USER3 LED が点滅しません。
2. eMMCを登録から外せるようにするために
SDカードから起動後、 /boot/uEnv.txt ファイルを開き 下記を追記
capemgr.disable_partno=BB-BONE-EMMC-2G
同様に /media/BEAGLE_BONE/uEnv.txt ファイルを開き 下記を追記
capemgr.disable_partno=BB-BONE-EMMC-2G
再起動
< 何故 同じ記述を2か所に必要なのか。>
3. eMMC の確認と取り外し
最初に現状の登録の確認
sh-4.2# cat /sys/devices/bone_capemgr.8/slots
0: 54:PF---
1: 55:PF---
2: 56:PF---
3: 57:PF---
4: ff:P-O-- Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
5: ff:P-O-L Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
4番目に eMMCが登録されている事が分かる。
eMMCを外す
sh-4.2# echo -4 >/sys/devices/bone_capemgr.8/slots
外れている事を確認
sh-4.2# cat /sys/devices/bone_capemgr.8/slots
0: 54:PF---
1: 55:PF---
2: 56:PF---
3: 57:PF---
5: ff:P-O-L Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
< 2にて disableにしているのに何故 登録されている状態で起動されるのか。 >
4. dts overlay にて GPMCポートに設定
使用するポートを exclusive-use で排他してない場合、何処かのタイミングで書きかえられている場合がある。
pinctrl-gpmc.dts を作って、、、、
sh-4.2# dtc -O dtb -o pinctrl-gpmc-00A0.dtbo -b 0 -@ pinctrl-gpmc.dts
sh-4.2# cp ./pinctrl-gpmc-00A0.dtbo /lib/firmware/
sh-4.2# echo pinctrl-gpmc >/sys/devices/bone_capemgr.8/slots
登録されているか確認
sh-4.2# cat /sys/devices/bone_capemgr.8/slots
5. 動作確認
下記リンクのtest.c を元に動作確認
https://groups.google.com/forum/#!category-topic/beagleboard/gpmc/QENqyIYTlO06. 追記で
GPMCのアドレスを 3:0 程度までなら P9側のポートを使用する事で事足りるのですが、上位のアドレスまで使用する場合は HDMI側も外す要があります。BB-BONEL-HDMT と BB-BONELT-HDMIN の両方を無効化
----
BeagleBoneBlack A5C
Angstrom-Cloud9-IDE-GNOME-eglibc-ipk-v2012.12-beaglebone-2013.06.20.img.xz
sdcard 4G