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

  • 9
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

はじめに

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でもできた。