2017年11月14日

Raspberry PiベアメタルでMicroPythonの調査

Raspberry PiをOSを介さずに直接プログラミングすることを「ベアメタル・プログラミング」と呼ぶそうです。
マイコンだと、プログラミングといったらベアメタルが標準だと思いますが、Linuxを使っているとハードウェアは隠蔽されているので、プログラミングといったらカーネルを叩くことがせいぜいで、ハードウェアを直接触るプログラミングには別の名前をつけた、ということでしょうか。

Raspberry Piは、手元に1、2、W Zeroの3台があるのですが、現状ではほぼ積みボードになっていることもあり、MicroPythonをベアメタル・プログラミングでRaspberry Piの上で動かせないのかな? と思って少し現状を調べてみました。

まず、試みている人はいて、おそらく現状で一番進んでいるのはこちらです。

Porting Micropython to the Raspberry Pi – Part 2 – Stefan Naumann

言語のコア部分の動作は確認できていて、移植に際してアンアラインド・アクセスの設定が必要だった等の苦労話も書かれています。
同じ方の、MicroPythonフォーラムでの投稿です。

Raspberry Pi Port - MicroPython Forum

Wrong label-calculation for JUMP-Bytecode on Raspberry Pi, due to unaligned access ・ Issue #3201 ・ micropython/micropython

現状としては、main()から文字列をMicroPythonインタープリタに与えてLチカさせるところまではできているようです。


その先ですが、同じくRaspberry Piベアメタルプログラミングで動かしているIchigoJamのように、HDMIとUSBキーボードでMicroPythonのREPLが使えるようにするには入出力デバイス周りの実装が必要になります。

画面表示については、Raspberry PiのGPUを叩けばいいわけで、こちらにいろいろ先人の事例が紹介されています。

RaspberryPiのVideoCore IV(GPU)を使ってOS無し(ベアメタル)からポリゴン出して遊ぶ - Qiita


一方USBキーボードについては、USBプロトコルスタックを実装しなければならないわけで、これは「経験のある人でも半年かかる仕事」だそうです。

USB peripherals in bare metal? - Raspberry Pi Forums

とはいえ、先人の作ったものが使えればそんな苦労はないわけで、上記のリンクにも3つほどそういったものが紹介されています。
もっとも、マイコンと同様にUARTを使うのであれば、そのような苦労はしなくて済みます。
おそらくステップとしてはまずUARTからREPLを叩けるようにし、そのあと画面出力、次にUSBへと進んでいくべきでしょう。


さらにその先はどうでしょう? EthernetやBluetoothが使えるようになれば、ESP32版MicroPythonを凌駕したと言えそうです。
しかし、Raspberry PiではEthernetは内部的にUSB接続になっているので、まずUSB Host機能、さらにUSB Ethernetドライバが必要になると思われます。
そこまで実現しているプロジェクトとして、上記のリンクでも紹介されているultibo coreがあります。

Ultibo core a bare metal environment for Raspberry Pi - Raspberry Pi Forums

こちらはしかし、なんと全てPascalで書かれているそうです。別の意味ですごいです。

また、同じく上記のリンクで紹介されているcircleもUSBやEthernetのサポートがあります。こちらのほうは、C++です。

rsta2/circle: A C++ bare metal environment for Raspberry Pi with USB

MicroPythonをベアメタルで、かつキーボード、画面、ネットワークが使えるようにしようとすると、circleの上で動かせると良さそうではあります。
ただ、なかなか大きなシステムになってしまいそうです。
ちょっとcircleをダウンロードして見てみましたが、libだけで33000行、includeが1万行くらいです。
また、ライセンスがGPL3.0なので、MicroPythonのライセンスとは合わない感じです。


既存のコードを使わないとすると、自前で最低限のI/Oを実装しなければなりませんが、そういった点で参考になりそうなのは、上にも挙げたQiitaの記事を初めとしたネット上の記事と、以下の書籍です。

BareMetalで遊ぶ Raspberry Pi - 達人出版会

2017年2月号目次|Interface

両方とも購入してみましたが、上の書籍ではベアメタルで開発したバイナリをU-bootを使ってネットワークブートする手法が書かれているのが面白いと思いました。
下のほうはInterface誌ですので丁寧ですし、開発環境をインストールしたVMが入ったDVDが付属しています。

ただ、どちらもUSB Hostの実装まではたどりついていません。HIDデバイスだけなら、Arduino用のライブラリとかを見ながらやれば何とかなるのかもしれませんが・・・。

felis/USB_Host_Shield_2.0: Revision 2.0 of USB Host Library for Arduino.

というわけで、今のところ「USBキーボードとUSB経由のイーサネットをどうするか」が一番の課題のような気がします。
ラベル:MicroPython
posted by boochow at 21:14| Comment(0) | Raspberry Pi | このブログの読者になる | 更新情報をチェックする

2017年04月28日

HDMI接続ができる3.5インチ液晶ユニット

Amazonを見ていたら、「HDMI入力付き」のRaspberry Pi用のLCDユニットを見つけ、値段も2980円と安かったので、ためしに買ってみました。
解像度は480×320というよくあるものですが、HDMI入力は1920×1080を受け付けます。
給電はMicro USB端子になります。

ためしにRaspberry Pi Zero Wにつないでみた様子です。
解像度は1920×1080なのですが、ちゃんと全体が映っています。
アスペクト比が合っていないので、縦長ではありますが・・・。

osoyoo_00.jpg


もちろん、実際の解像度は低いです。字は読めないですが、解像度よりも大きさが問題な気もします。


osoyo_002.jpg


裏面です。Realtek RTD2660Hが搭載されています。
検索してみると、HDMIディスプレイのドライバとしてメジャーなチップのようです。


osoyoo_01.jpg


他のRaspberry Pi用LCDユニットと違い、特別なドライバが要らないのはメリットだと思います。
HDMI端子はディスプレイの上側になりますので、Raspberry Pi以外のものと接続するときはちょっと使いにくいかもしれませんが、面白い製品です。
posted by boochow at 00:44| Comment(0) | Raspberry Pi | このブログの読者になる | 更新情報をチェックする

2017年03月20日

Raspberry Pi Zero WとESP32のサイズ比較

rpizerow.jpg

実はRaspberry Pi Zero Wも買ってみたりしています。
小さくてオールインワン、という以外に初代Raspberry Piとあまり違わなさそうなので、若干モチベーションは低いですが、そのうちいじってみようと思います。

ESP32 DevKitと並べて写真を撮ってみました。
こうしてみると大きさはわずかにPi Zero Wのほうが大きい、という程度です。

大きさも値段もほぼ同じ(Pi Zero Wは送料込みで13.5ポンドでした)というこの2つのボードですが、スペックはCPUクロックで4倍、RAMの容量に至っては1000倍の開きがあります。
趣味としては窮屈な環境で工夫をするほうが面白いのですが、将来どちらが主流になるかというと、やはりリソースが潤沢なほうになるのかもしれません。
posted by boochow at 17:11| Comment(0) | Raspberry Pi | このブログの読者になる | 更新情報をチェックする

2012年10月04日

Raspberry Pi User Guide

usrgd.jpg

Raspberry Piユーザガイドが届きました。
もちろん英語ですが、技術者なら問題なく読めるレベルのものです。
250ページあり、構成は以下のような感じ(意訳)です。

1.使ってみよう
2.Linuxシステム管理
3.トラブルシューティング
4.ネットワーク設定
5.パーティション管理
6.Raspberry Piの設定
7.ホームシアターPCとしてのRPi
8.生産性向上のためのマシンとしてのRPi
9.WebサーバとしてのRPi
10.Scrachでプログラミングしてみよう
11.Pythonへの招待
12.ハードウェアをハックする
13.アドオン・ボードいろいろ
付録A.Pythonレシピ
付録B.HDMI表示モード

単に使うことから、プログラミング、ハードウェアまで、一通りカバーされています。
というわけで明日から読んでみようと思います。


posted by boochow at 20:47| Comment(0) | Raspberry Pi | このブログの読者になる | 更新情報をチェックする

2012年09月30日

Raspberry PiでMAMEを動かしてみる

pi_mame.jpg

ここ2週間ほど他のことに関わっていて、Raspberry Piをあまりいじれていないのですが、MAMEをちょっと動かしてみたりしました。

さすがにCPUパワー的になかなか苦しそうですが、「ゼビウス」やそれ以前のゲームなら何とかなる、という感じでしょうか。

RPi用のバイナリがこちらにあります。
Raspbian on Raspberry Pi – MAME, MESS, Quake3, NeoGeo, and Cave Story Binaries | Shea Silverman's Blog

これを解凍すると、/home/pi/mameBinというディレクトリができます。
ゲームのROMは
mameBin/share/advance/rom
に入れ、実行は
mameBin/bin/advmame name
です。

他に若干、設定が必要になる場合がありますが、
Raspberry Pi and MAME Part 2 | Shea Silverman's Blog
を参照してください。

サウンドがノイジーになることが多いですが、他のソフトでもサウンド関連はうまく動かないことが多いので、どうもドライバの問題のような気がします。


posted by boochow at 22:00| Comment(0) | Raspberry Pi | このブログの読者になる | 更新情報をチェックする
人気記事