もくひょう
PlatformIOでUSBSerialライブラリを載せたコードを書きLPC11u35向けにビルドする。
ここで使うLPC11u35は一個前の記事でも取り上げた秋月の裸マイコンだ。
まずはLチカ
PIOのプロジェクトを作る際は「CQ Publishing TG-LPC11U35-501」ボードを選べばOK。
1114向けビルド同様、Mbedライブラリを3.5に落とす必要があるのでまずそれをやる。
PlatformIOのホーム画面からPlatformを選んで、NXP LPCのバージョン3.5をインストールし、プロジェクトのplatformio.iniに
を記述する。platform = [email protected]
ソースコードはこんな感じ。
#include
DigitalOut p(LED1);
int main() {
// put your setup code here, to run once:
while(1) {
p=!p;
wait(0.5);
}
}
ビルドできたら成功だ。
LPC1114はここまできたら後はバイナリを書き込むだけなんだが、USBで書き込む11u35はもうひと手間必要になる。
というのも、USB経由でバイナリを書く場合はバイナリのケツにチェックサムをつけなきゃならず、ISP向けバイナリを吐くPIOではこの処理をしてくれないからだ。
https://github.com/platformio/platform-nxplpc/issues/6
というわけでlpc_checksumというライブラリを使って自前でチェックサムをつけてやる。
以下はPythonが入っている前提なので、無いなら入れよう(PlatformIOはその辺カスで、内部でPython使ってるくせに環境変数とか通してくれないので自前で入れるなりしよう)。
まず管理者コマンドプロンプトで
pip install lpc_checksum
としてやる。上手くインストールできたら、ビルドしたバイナリファイルのある場所に移動し、
lpc_checksum firmware.bin
と叩く。“Succesfully updated checksum to 0x…”と出たら成功だ。
これでバイナリにチェックサムが付与されたので、USB経由で11u35に書き込もう。
尚、ピンの名前はPIO0_0ならP0_0と書けば良い。
Serial通信しよう
PlatformIOはlib_depsというフィールドがあり、わざわざ自分でライブラリを落とさなくてもビルド時に勝手にライブラリを落としてくれる機能がある。
今回はUSBDeviceというライブラリを使うので、platformio.iniに下記を追加だ。
lib_deps = USBDevice
ソースコードはとりあえずシリアルに適当な文字を吐き続けるサンプルにした。
#include
#include
USBSerial pc;
int main() {
// put your setup code here, to run once:
while(1) {
pc.printf("fuck\r\n");
wait(0.5);
}
}
さて、これでビルドをかけると、いらんファイル(他のターゲットのボード向けコード)までコンパイルした挙げ句No such fileしやがって失敗する。
ビルドパスから上手いこと除いてやりたいんだが、やり方がわからないのでいらんフォルダを消す。
知能指数が一桁しか無いソリューションだが動きゃァ良いんだよ動きゃよ。
プロジェクトフォルダ>.pio>libdeps>lpc11u35>USBDevice_ID2820>targetsと掘り進んで、TARGET_NXP以外のフォルダを全部削除してしまおう。これでビルドが通る。マジかよ。
ちなみに一度ビルドをかけておかないとライブラリが落ちてこないから注意。
後はさっきの手順でハッシュをつけて書き込みしてやればOKだ。
ドライバはわざわざ署名のないものを入れなくても、Mbed謹製のシリアルドライバを入れれば良い。
https://os.mbed.com/docs/mbed-os/v5.13/tutorials/windows-serial-driver.html
これでTeratermなりに文字が出力されれば晴れて500円USBDeviceの出来上がりだ。
ここまで面倒ならPlatformIO使うメリットはねぇな!