Posted at

PlatformIOでカスタムボードを使う

More than 3 years have passed since last update.


はじめに

PlatformIO はmbedにも対応しているが、公式にサポートされているボードは一部である。

手元にある罪(詰み)ボードを動かしてみようと思ったらリストになかったので、何とか動かせないかと思って調べた。


  • AVR/Arduinoについてはかなり対応しているので、ここではやらない。

  • 一応Windows/Mac/Linuxに対応しているが、ここではMacの場合について書く。

  • mbedについてはLチカ+αレベルしかやったことがない。

PlatformIOはmbedにも対応しており、webエディタから開放され、emacsでもvimでもatomでも使える。必要なコードだけを書いてGUI操作なしで(ショートカットだけで)すぐ実行できる。

まずリファレンスとなるLPC1768を試してみる。

次に現時点では公式なリストにはないLPC812(LPC800 MAX)ボードで動かしてみる。

現在のmbedはSTM32 nucleoやFRDMにも対応していてPlatformIOで使えるが、ここではLPCのボードに限ることにする。


インストール

arm-gccなどツールチェーン一式を自分で用意する必要はなく、

pythonのpipなり、easy_installがあればすぐ始められる。

pythonをどうやって入れたかに依るが、必要に応じてsudoを補ってください。

もし、pipがないなら、

python -c "$(curl -fsSL https://raw.githubusercontent.com/platformio/platformio/master/scripts/get-platformio.py)"

で一発です。

pipがある人は

pip install -U setuptools

pip install -U platformio
or
easy_install platformio

対応しているボードを調べるには

platformio boards

で一覧が出る。


基本操作


初期設定

mkdir blinky

cd blinky
platformio init -b lpc1768

インストールして初めて実行する場合はコンパイラなどツール一式をここでダウンロードするのでコーヒーでも入れながら待つ。gccのコンパイルほどはかからないので、お湯が沸く前にインストールは終わっている。

これでカレントディレクトリにsrc,libのディレクトリとplatformio.iniというファイルができる。

src/main.cppを作ったあと、blinkyディレクトリで


コンパイル

platformio run

とするだけで、コンパイルを行う。


アップロード

更にアップロードは

platformio run -t upload

でできるが、platformio.iniに

targets = upload

を追加しておけば、コンパイル後ただちにアップロードする。


ファイルのありか

~/.platformio以下にダウンロードしたツール類がインストールされている。

対応するボード名は

~/.platformio/packages/framework-mbed/boards.txt

にあり、それに関連したヘッダファイルは

~/.platformio/packages/framework-mbed/variant

以下に揃っていて、対応ボード一覧になかったものでもコンパイルはできそうである。

find ~/.platformio/packages/framework-mbed -name mbed.h

で出てくるものはおそらく対応可能。

コンパイラ関係は

~/.platformio/packages/toolchain-gccarmnoneabi

以下にある。


カスタムボードへの対応(LPC812の場合)

ここからが本題。

できそうなことはわかったがどうしたらいいんだろうと思って、ドキュメント

http://docs.platformio.org/en/latest/

を探すと、まさにぴったりな

http://docs.platformio.org/en/latest/platforms/creating_board.html

というのがあった。

home_dir = ~/.platformio

として、


  • home_dir以下に boards というディレクトリを(なければ)作る。

  • boards以下に my_own_boards.json というファイルを作る。形式は

{ 

"myboard": {
"build": {},
"frameworks": [],
"name": "",
"platform": "",
"upload": {},
"url": "",
"vendor"; ""
}
}

書き方の例は

https://github.com/platformio/platformio/tree/develop/platformio/boards

を見よということで、lpc1768なら

{

"lpc1768": {
"build": {
"f_cpu": "96000000L",
"cpu": "cortex-m3",
"mcu": "lpc1768"
},
"frameworks": ["mbed"],
"name": "NXP mbed LPC1768",
"platform": "nxplpc",
"upload": {
"maximum_ram_size": 32768,
"maximum_size": 524288
},
"url": "http://developer.mbed.org/platforms/mbed-LPC1768/",
"vendor": "NXP"
}
}

のように書くので、使いたいボードのスペックを調べればよいだろうということで、LPC812については次のようにした。(LPC824も追加した)


my_own_boards.json

{

"lpc812": {
"build": {
"f_cpu": "30000000L",
"cpu": "cortex-m0",
"mcu": "lpc812"
},
"frameworks": ["mbed"],
"name": "NXP mbed LPC812",
"platform": "nxplpc",
"upload": {
"maximum_ram_size": 4096,
"maximum_size": 16384
},
"url": "http://developer.mbed.org/platforms/mbed-LPC812/",
"vendor": "NXP"
},
"lpc824": {
"build": {
"f_cpu": "30000000L",
"cpu": "cortex-m0",
"mcu": "lpc824"
},
"frameworks": ["mbed"],
"name": "NXP mbed LPC824",
"platform": "nxplpc",
"upload": {
"maximum_ram_size": 8192,
"maximum_size": 32768
},
"url": "http://developer.mbed.org/platforms/mbed-LPC824/",
"vendor": "NXP"
}
}

platformio run

でめでたくコンパイルとアップロードができたが、Macの場合は「ディスクの不正な取り出し」というOSからの無慈悲な警告が出る。リセットボタンを押すとちゃんとアップロードはされている。lpc1768では出ないが、これは普通にブラウザでコンパイルしてD&Dしてもそうなる仕様のようだ。

同様にしてLPC824でもできた。