みつきんのメモ

組み込みエンジニアです。Interface誌で「My オリジナルLinuxの作り方」連載中

NuttXをSTM32F103 minimum(BluePill)で動かす

はじめに

STM32F103 Minimum BoardでNuttXというRTOSを動かしてみる。 このボードはAmazonで買えた

2個で990円。もっと安いものもあるみたいだが、中国から直送で1ヶ月くらい輸送にかかりそうなのでプライムで短期間で届きそうなものを買った。

このボードにはSTM32F103C8T6が載っている。

メモリ サイズ
フラッシュ 64KiB
RAM 20KiB

NuttXを動かすためには大まかに次のような作業が必要になる。

  1. kconfig-frontendsのインストール
  2. stlink toolsのインストール
  3. ARMツールチェーンのインストール
  4. NuttXの作成
  5. ボードへの書き込み

kconfig-frontendsのインストール

nuttxのビルドにはKconfigを使用するが、その際にkconfig-frontendsが必要となる。

ubuntu 18.04では、自分でビルドする必要がある。

必要パッケージのインストール

次のパッケージをインストールする。

$ sudo apt install build-essential
$ sudo apt install make gperf flex bison libncurses-dev

ビルドとインストール

次のようにしてkconfig-frontendを作成、インストールする。

$ git clone https://bitbucket.org/nuttx/tools
$ cd tools/kconfig-frontends
$ ./configure
$ make -j 4
$ sudo make install

stlink toolsのインストール

nuttxの書き込みにstlink toolsを使用する場合はインストールする。 ubuntu 18.04では自分でビルドする必要がある。

必要パッケージのインストール

次のパッケージをインストールする。

$ sudo apt install cmake libusb-1.0

ビルドとインストール

$ wget https://github.com/texane/stlink/archive/v1.5.1.tar.gz
$ tar xvfz ./v1.5.1.tar.gz
$ cd stlink-1.5.1
$ make -j4
$ cd build/Release
$ sudo make install
$ sudo ldconfig

udevルールの更新

root権限無しでstlinkにアクセスできるようにudevルールを更新する。

$ sudo udevadm control --reload-rules
$ sudo udevadm trigger

ARMツールチェーンのインストール

$ wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/8-2018q4/gcc-arm-none-eabi-8-2018-q4-major-linux.tar.bz2
$ tar xvf gcc-arm-none-eabi-8-2018-q4-major-linux.tar.bz2
$ mv gcc-arm-none-eabi-8-2018-q4-major ~/bin

次のようにPATHに追加する。

PATH="/home/mickey/bin/gcc-arm-none-eabi-8-2018-q4-major/bin:${PATH}";

nuttxの作成

ソースの取得

$ git clone https://bitbucket.org/nuttx/nuttx.git
$ git clone https://bitbucket.org/nuttx/apps.git

コンフィグレーション

$ cd nuttx
$ tools/configure.sh -l configs/stm32f103-minimum/usbnsh

ビルド

$ make -j4

イメージの書き込み

ST-Link V2とボードの接続

ST-Link V2のピン配置とファンクションをマニュアルから抜粋する

f:id:mickey_happygolucky:20190127210206p:plain:w400
ピン配置

f:id:mickey_happygolucky:20190127210426p:plain:w600
ピンファンクション

ST-Link V2 Pin ターゲット
GND 20 GND
TCK 9 CLK
TMS 7 IO
TVCC 1 3.3V

st-flashコマンドによる書き込み

st-flashコマンドでnuttx.binを書き込む。

$ st-flash write nuttx.bin 0x8000000
st-flash 1.5.1
2019-01-27T15:55:48 INFO usb.c: -- exit_dfu_mode
2019-01-27T15:55:48 INFO common.c: Loading device parameters....
2019-01-27T15:55:48 INFO common.c: Device connected is: F1 Medium-density device, id 0x20036410
2019-01-27T15:55:48 INFO common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x10000 bytes (64 KiB) in pages of 1024 bytes
2019-01-27T15:55:48 INFO common.c: Attempting to write 50224 (0xc430) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x0800c400 erased
2019-01-27T15:55:50 INFO common.c: Finished erasing 50 pages of 1024 (0x400) bytes
2019-01-27T15:55:50 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
2019-01-27T15:55:50 INFO flash_loader.c: Successfully loaded flash loader in sram
 50/50 pages written
2019-01-27T15:55:53 INFO common.c: Starting verification of write complete
2019-01-27T15:55:54 INFO common.c: Flash written and verified! jolly good!

jolly good!が表示されていれば、書き込みは成功している。

ターゲットの起動

USB NSH環境のNuttXを書き込んだボードをUbuntuのPCに接続すると/dev/ttyACM0として見える。 minicomでNSHに接続する。

何度かEnterキーを押してみて、プロンプトが表示されればOK。

nsh>
nsh> help
help usage:  help [-v] [<cmd>]

  [        cp       exit     kill     mw       sleep    usleep
  ?        dd       false    ls       pwd      test     xd
  cat      echo     help     mb       set      true
  cd       exec     hexdump  mh       sh       unset

Builtin Apps:
nsh>

f:id:mickey_happygolucky:20190127220255j:plain:w600
BluePill