mcommit's message

ソフトウェア開発の仕事をしているsimotinといいます。記事の内容でご質問やご意見がありましたらお気軽にコメントしてください\^o^/

PINE64をベアメタルで遊んでみる。

随分前にPine64+ 2GBというボードを買っていたのですが積み基板になっていました。
ちょっとARMで遊びたくなったのでベアメタルからのLチカしてみました。

ソース

とりあえずGithubで管理することにします。
github.com

ツールチェインについて

ロスコンパイラとイメージ作成用のツールが必要になります。


sudo apt install gcc-arm-none-eabi u-boot-tools

調べたこと

Pine64のブートについて

パワーオンリセットにより、BROM 内のプログラムから動き始めます。
Pine64はいくつかのブート方法に対応しています。
SDカードからブートする場合はセクタ16(オフセット8KB)の位置から32KB分読み込み、実行します。
この時点ではARM32bit命令で動作するそうです。

※要するに、BROMがBIOSとして機能し、SDカードのセクタ16がブートセクタになります。
注意点として、BROMはブートセクタの内容が適切かどうか、マジックナンバーとかチェックサムによって識別しているようです。

なので単純にARMの機械語のイメージがブートセクタに配置されていても正常に起動しません。
このため、コンパイル後、バイナリファイルに対してmksunxiboot コマンドによりブートセクタ用の変換を書ける必要があります。

LEDについて

いろいろ探してみたのですが、PINE64+には、ユーザーが制御できるオンボードのLEDは実装されていないようです。
回路図やネットの情報を見ると、PL7がLEDに割り当てられているようですが、このPL7は基板上ではホールになっており、ユーザによるオプション用のようです。

Lチカを試すにあたって、最初PL7をトグルさせてLチカを試そうとしたのですが、どうもうまく動きませんでした。
単純にIOアドレスとON/OFFの書き込みが間違っている可能性がありますが、何回か試してみてうまくいかなかったので
出力ポートをPB2にしてみて、トグル出力で無事Lチカできることを確認しました。


続き

BROMのコードが気になったのでダンプして逆アセンブルしてみました。まぁ、ただそれだけですが。
mcommit.hatenadiary.com