STM32でNUTTXを使ってみる

NucleoのST-Linkを使ったFirmware書き込み


Nucleoの64シリーズにはST-LINKが実装されていますが、これを単独で使うことができます。
こ ちらに単独で使う場合のジャンパーピンの切り替えと、SWDポートのピンマップが公開されています。
ST-LINKを持っていないボードへのNuttxのファーム書き込みも、NucleoシリーズのST-LINK を使うことができます。
なお、NucleoのSWDポートの1番ピンは出力ではなく、Vref入力です。
3V出力ピンは下の写真の位置です。


ST-LINKを使ったファームの書き込みは、F4 DiscoveryやF3 Discoveryと同じです。
こちらはF103 VEボードに書き込みを行った時のログです。
FLASHサイズを正しく認識できています。
$ st-flash --connect-under-reset write nuttx.bin 0x8000000
st-flash 1.4.0-47-gae717b9
2018-10-07T08:17:17 INFO common.c: Loading device parameters....
2018-10-07T08:17:17 INFO common.c: Device connected is: F1 High-density device, id 0x10036414
2018-10-07T08:17:17 INFO common.c: SRAM size: 0x10000 bytes (64 KiB), Flash: 0x80000 bytes (512 KiB) in pages of 2048 bytes
2018-10-07T08:17:17 INFO common.c: Attempting to write 51876 (0xcaa4) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x0800c800 erased
2018-10-07T08:17:18 INFO common.c: Finished erasing 26 pages of 2048 (0x800) bytes
2018-10-07T08:17:18 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
2018-10-07T08:17:18 INFO flash_loader.c: Successfully loaded flash loader in sram
 26/26 pages written
2018-10-07T08:17:21 INFO common.c: Starting verification of write complete
2018-10-07T08:17:22 INFO common.c: Flash written and verified! jolly good!

こちらはBlackPillに書き込みを行った時のログです。
BluePill BlackPillは128KBytesのFLASHを持っていますが、64KBytesしか認識できません。
$ st-flash --connect-under-reset write nuttx.bin 0x8000000
st-flash 1.4.0-47-gae717b9
2018-10-07T08:53:01 INFO common.c: Loading device parameters....
2018-10-07T08:53:01 INFO common.c: Device connected is: F1 Medium-density device, id 0x20036410
2018-10-07T08:53:01 INFO common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x10000 bytes (64 KiB) in pages of 1024 bytes
2018-10-07T08:53:01 INFO common.c: Attempting to write 40044 (0x9c6c) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x08009c00 erased
2018-10-07T08:53:02 INFO common.c: Finished erasing 40 pages of 1024 (0x400) bytes
2018-10-07T08:53:02 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
2018-10-07T08:53:02 INFO flash_loader.c: Successfully loaded flash loader in sram
 40/40 pages written
2018-10-07T08:53:04 INFO common.c: Starting verification of write complete
2018-10-07T08:53:04 INFO common.c: Flash written and verified! jolly good!

オプションでFLASHサイズを指定することができます。
$ st-flash --flash=128k --connect-under-reset write nuttx.bin 0x8000000
st-flash 1.4.0-47-gae717b9
2018-10-07T09:20:31 INFO common.c: Loading device parameters....
2018-10-07T09:20:31 INFO common.c: Device connected is: F1 Medium-density device, id 0x20036410
2018-10-07T09:20:31 INFO common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x10000 bytes (64 KiB) in pages of 1024 bytes
Forcing flash size: --flash=0x00020000
2018-10-07T09:20:31 INFO common.c: Attempting to write 40044 (0x9c6c) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x08009c00 erased
2018-10-07T09:20:32 INFO common.c: Finished erasing 40 pages of 1024 (0x400) bytes
2018-10-07T09:20:32 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
2018-10-07T09:20:32 INFO flash_loader.c: Successfully loaded flash loader in sram
 40/40 pages written
2018-10-07T09:20:34 INFO common.c: Starting verification of write complete
2018-10-07T09:20:34 INFO common.c: Flash written and verified! jolly good!



NucleoのST-LINKとUSB-TTLアダプターの両方から給電すると、ボードが燃えるみたいですが、
USB-TTLアダプターはGND/TX/RXだけを使うことで、NucleoのST-LINKとUSB-TTLアダプターの
両方を刺したままにすることができます。
接続は下の写真の様になります。


そこで、試しにnsh起動中に、ファームを書き換えてみました。
まずはアプリが何もないファームを書き込み、nshを実行します。


この状態で別の端末を使ってメニューでアプリを追加します。
NucleoのST-LINKを使ってファームを書き込むと、ボードにリセットが掛かります。


ボード上のリセットボタンを押すと新しいファームが有効になります。


今までいくつかのボードへのファーム書き込みを紹介してきました。
Nuttxがサポートするプラットフォームは、こ ちらに公開されて います。
STMicroelectronics以外にMicrochipやNXP/Freescaleのボードもサポートしています。

次回からNuttxが提供する機能について紹介します。

続く...