2018年6月9日土曜日

BBB

・事始め(2018年6月9日)

BBBはG+にもポストしましたが、一番最初に手を出したARM SoC搭載のボード。

ふと思えばLinux歴もだいぶ長いですが(NT3.5がリリースされた前後)、ARM7が組み込み用途で主力化した頃に少しかじって以後(「組み込みLINUXシステム構築」、読みました…)、組み込みは勉強したことがあまりなく、しかしこれほどのパフォーマンスがあるボードで色々つなげられるならと、当時は思って購入したものでした。

今、他のボードで起こっている事と同じ悩みだったのだな、と、当時抱えた問題を、思い返せばわかるんですが、このボードには今でもいろいろと勉強させてもらう機会が多くあります。

このボードを使って、某カメラ画像をストリーミングする記事を作成しました。

1.電源の問題
 この手のボードを購入した頃はIoTが知られ始めた頃で、『線』が付いてるのはかっこ悪い、と言う意識が(世間的にも)蔓延しており当然ネットワークにもWiLANでぶら下げたかったんです。
しかし、USBにWi-Fiドングルつけると起動しない、セルフパワーのUSBハブが必要、というのが当時通説で、否定する情報を見つけることはありませんでした。
この認識を改めたのは実はつい最近。ようは、当時一般流通が多かった5V/1AクラスのACアダプタ(携帯の充電器とも言う)では、容量が不足していた、ということ。
現在では2A以上供給できるものが容易に手に入るので、バスパワーのハブでWi-Fiドングル使っても、ちゃんと動きます。この辺はこのボードは素直。

2.組み込みボードとしての本領と容易さの両立って…。
 BBBは、ユーザーが触れる「端子」が、88本も出ており様々拡張できる(であろう)ことが、このボードの売りだったはずです。
結果として、OSサイドでの一環サポートが困難でgive upとなったのが一昨年くらい、なのでしょうか?以後、U-Boot Overlayに移行し現在に至る、と。すなわち、BBBに関する、2017年3月以前の組み込み記事はほぼ使えない。How-To記事を多数掲載している欧米系半導体商社などのweb記事もさほど更新されておらず、参考にならない。

そのことを知ったのは、去年、業務上の必要でこのボードにLCDを載せようと思ったことがきっかけ。なにせweb探し回って出てくるknow-howが通用しない。標準系のI/F(SPIとかI2Cとか)は使えているようだがGPIO系を動かすことができてない。
プログラムで使いたい端子をトグルさせることはできているので、使う方法はあるのだろうし使っている人もいるのだろけど、fbtftは終了して次世代に行っていることもあり、使えるようになるにはまだしばらく時間がかかりそうだ。

この件は、今後もフォローしていくつもり。パラレル系のLCDは他にも試しておきたいことがあるし、多分、BBBではまずはSPI LCDを動かすのが良いのだろう。(調達してあるけど、他のボード用に先に使いたい事情がある。)
なお、「業務上の必要」については優先順位を下げてある状態で、まだ実現するには手が足りてない、ときてる。それ実現できてないせいで、口頭説明が必要な事例が多くて結構大変なんですが…。




・半歩前進(2018年10月20日)

8bit I/Fの、ArduioシールドタイプのLCDをつなげようとしてうまくいかず、何が悪いのかすら判らずで寝かしてあった。

google groupsで質問した事もあったけど、解決に至らず。

そもそも、購入した時は、その品名ラベルからili9325を使ってると思っていたのだけども(UL028C9325D8)、Arduinoにつなげて動かしてみると、ili9341(つまりUL028C9341D8)だと言う。既にそこで混乱していたわけだけども、どっちにしろドライバ読み込みの際に:
[11230.365899] fb_ili9325 fb_ili9325.0: fbtft_request_gpios_match('reset')
[11230.365925] fb_ili9325 fb_ili9325.0: fbtft_request_gpios: gpio_request_one('reset'=48) failed with -16
[11230.383400] fb_ili9325: probe of fb_ili9325.0 failed with error -16

その他のピンもこうだったわけで(上記は当時google groupsに投稿した記事から)、デバイスをili9341に修正してもfailで、どうしてこうなるのか理解できずにいた。

6月の時点で書いたことではあるけど、BeagleBoneはdevice treeの洗礼で、いまgoogleの助けを求めても、dt以前以後の情報が混在しており、どちらを使った情報であるか確認しないと、使うことができる情報が揃ってない状況だし、dt以後ではBBBにnewbieは非常に少ないのが現状だろうと思います。なにせ今となってはBBBは高い。

仕事上の必要で、NanoPiでLCDを使い始め、M028C9341SDを使ってデモセットを構成できたところで、同じLCDならBBBでだって動くでしょう、ということで、戻ってきたのがつい最近。

SPIdevのdtをロード。LCD制御には、データを流すSPIだけではなく、GPIOも使う。ここでGPIO使えなきゃ以前と状況は変わらないわけだが、今度はしっかり使うことができる… そこで気づいた。つまり、なにもdevice treeを有効にしないと、どのピンもGPIOとしても機能しないのね、と…。何もロードしないと、88pinすべてがGPIOとして使えると思い込んでたんです(実際に、ピンコントロールでは反応していた)。

再び、UL028C9341D8をつなげて、残しておいてよかった以前の設定のまま、SPIdevのdtをロードしたまま、ili9341ドライバをロードさせて見ると、ちゃんとピン設定できるじゃないかっ!

[   64.420757] fb_ili9341 fb_ili9341.0: fbtft_request_gpios_match('reset')
[   64.420854] fb_ili9341 fb_ili9341.0: fbtft_request_gpios: 'reset' = GPIO81
[   64.420866] fb_ili9341 fb_ili9341.0: fbtft_request_gpios_match('dc')
[   64.420881] fb_ili9341 fb_ili9341.0: fbtft_request_gpios: 'dc' = GPIO86 (以後略)

…、そういうことだったんだね、BBB…。

さて、肝心のLCDですが、まだ表示には至っていません。すなわち、ドライバデフォルトのinitコードでは動かない、と言うことなので、用意しなきゃね…。

この先、8bit I/FのQVGAじゃなくて、16bit I/Fの320x480解像度のLCDを使えるようにしたいんですが、そこにはまだ、しばらくかかりそうですね…。


・もう半歩前進(2018年10月22日)

 諸事情でちょっと早く帰宅できたので、早速initコード追加して… ほーら、ちゃんと動いた。
はぁ~。ここに来るまでの道のりは、長かったわね~。シミジミ。

0 件のコメント:

コメントを投稿