2014年3月17日月曜日

HDMIとeMMCに使われているピンをgpioとして使おう

どうも、JP3BGYです。
今回は前回の続きとしてピンの設定の変更のやり方について話したいと思います。
前回の記事を見ていない人は見てください↓↓
http://koyomachineclub.blogspot.jp/2014/03/beaglebone-black.html

というわけで、ピンの設定の変更についてですがその前に以下のコマンドをBeagleBone Blackでやってみてください。

# cat /sys/devices/bone_capemgr.*/slots

*のところはシステムによって違うようなので自分で調べてください。
僕は9でした。
見えたものは何だと思いますか?
 0: 54:PF--- 
 1: 55:PF--- 
 2: 56:PF--- 
 3: 57:PF--- 
 4: ff:P-O-L 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

これは、実はデバイスツリーというgpioなどのピンを最初に初期化させるものです。
これが読み込まれることでHDMIとeMMCは扱えるようになります。
ということで初期設定でこれを読み込ませないようにすればいいのですが・・・。
システムの奥の設定をいじることになるので失敗すると大変な事になります。
前もそんなことありましたけどやっぱり責任は回避したいんで今回のことを真似する場合は自己責任でおねがいします。
まあそんな危険な橋をわたんないと栄光も知識も手にはいらないので先進めます。

実は作業は至って簡単、以下の通りにやるだけです。
なお今回はSDでブートさせているUbuntuで動作確認しました

mkdir /mnt/boot
mount /dev/mmcblk0p1 /mnt/boot
vim /mnt/boot/uEnv.txt

 ここまでやるとテキストファイルの中身が出ますが、数行下にこんなものが
##BeagleBone Black:
##Disable HDMI/eMMC
#optargs=capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN,BB-BONE-EMMC-2G

とっても親切設計、optargsの左の#を消すだけというもの
これで保存してreboot
もう一度起動してうまく行っているか確認
# cat /sys/devices/bone_capemgr.*/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-- Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
 6: ff:P-O-- Bone-Black-HDMIN,00A0,Texas Instrument,BB-BONELT-HDMIN
最初あったLがなくなっていれば成功です。
一応ピンの設定も見ておきましょう
ピンの設定の見方は
# cat /sys/kernel/debug/pinctrl/44e10800.pinmux/pins
で現れる一覧を見ればいいです、見方は例えば
pin 4 (44e10810) 00000027 pinctrl-single 
とあるこれは実はP8_23の設定なのだが pin xとある隣のカッコになっている数字、これの下三桁は
(下のコマンドはみんなの手持ちのパソコンでしてね)
git clone git://github.com/derekmolloy/boneDeviceTree.git
上のコマンドでホームディレクトリにダウンロードされるファイル一式のうちDocフォルダにあるpdfファイルの一覧のADDRと対応している。
つまりこの段取りとは逆に探したいgpioのADDRをpdfファイルから見つけてそれに対応する設定を見ることでそのピンの設定を見ることができる。
設定自体は()で囲まれた数字の次にある数字を見ればわかる。
これの場合は27だがこれは16進数なので実際は0x27、そしてこれを2進数にして0b0100111。
この2進数の左から3桁はピンのモードを表しこのモードはさっきのpdfファイルのModeXというものと対応している。
今回の場合はP8_23の0b111=7なのでMode7のgpioということがわかる。
残りは4桁目がプルアップ・プルダウンの無効有効、5桁目が0だとプルダウン 1だとプルアップ、6桁目がRXの無効有効、7桁目が立ち上がりの速さを表していて0でfast 1でslowとなる。
基本設定の見方はこれだけである。
で、実はこのピンはemmcに使われていたピンなのだがgpioの設定になっているので成功です。
またもしこれのとおりになっていないピンがあっても今度やるデバイスツリーオーバーレイの作成によって変えることができます。

わかりにくいところあったらコメントで質問ください、まだまだ素人ですが答えられる範囲で出来る限り答えます。
そんな訳で今回はここまで、次回から少しBBBから離れます。
数回で戻ってくるとは思いますがね。
それでは、また次回。