STM32F4 Discoveryも買いました

H8-3069Fが面白かったので、ついSTM32F4 Discoveryも買ってしまいました。Floatユニットがあるなんて、PC9801に8087を載せた時以来の感激です。
でも、使い古された3069Fと違って、ハードルが高そう。
とりあえず、audio_playback_and_recordのsampleをEWARMでコンパイルして、ST-LINKで書き込んでみた。イヤホンを差し込むとちゃんとループの音楽が聞こえて感激。
次はOSだ。サンプルにもFreeRTOSが含まれているが、組込み目的のミニマルセットで面白くない。OSにはシェルがなければ。BeRTOSはいろいろ揃っていて面白そうだが、まだF4用はなさそう。ChibiOS/RTはFreeRTOSと同じようだし。
といううわけで、探しているとnuttxが面白そう。STM32F4 Discoveryに対応しているし、nshというシェルも載っている。FreeRTOSより必要なリソースが多そうだが、STM32F4 Discoveryでは気にならない。
コンパイルするには、UNIX環境が必要そうなので、気は進まなかったが、Cygwinをインストールしてみた。何とか、努力したがnuttxのコンパイルができず、STM32F4 DiscoveryについてのREADMEを読むと、Cygwin環境はお勧めではなさそう。
結局、VirtualBoxをインストールして、実績のあるubuntu 11.04をセットアップした。debianと環境はほとんど同じだが、rootでないので、sudoがうっとおしい。
まず、arm-gccのセットアップからだが、以下の必要なパッケージをインストール。

git zlib1g-dev libtool flex bison libgmp3-dev libmpfr-dev
libncurses5-dev libmpc-dev texinfo libftdi-dev autoconf
gperf

よく引用されているhttps://github.com/MikeSmith/summon-arm-toolchain.gitのレポジトリーはもうないようなので、以下からダウンロードしてコンパイル。

git clone git://github.com/esden/summon-arm-toolchain
cd summon-arm-toolchain
./summon-arm-toolchain

newlibのダウンロードに失敗するので、別にダウンロードしたnewlib-1.19.0.tar.gzをあらかじめsourcesディレクトリに置き、stampsディレクトリにnewlib-1.19.0.fetchファイルを作っておく。
かなり時間はかかったが、親ディレクトリーにsatができるので、.profileを編集して、PATH=$PATH:$HOME/sat/binでPATHを通しておく。
次に、nuttxの設定メニューを使うために、kconfig-frontendsをダウンロードする。最新は、kconfig-*にコマンド名が変わっているので、nuttxのレポジトリーから、kconfig-frontends-3.3.0-1.tar.gzをダウンロードしてインストール。

cd kconfig-frontends-3.3.0-1
./configure
sudo make install
ldconfig

最後に、本体nuttx-6.22.tar.gzとapps-6.22.tar.gzをダウンロードして、コンパイル。

tar xvf nuttx*
tar xvf apps*
ln -s nuttx-6.22 nuttx
ln -s apps-6.22 spps
cd nuttx
cd tools
./configure.sh stm32f4discovery/nsh
cd ..
make menuconfig
. ./setenv.sh
make

これで、nuttx.binができるので、windows7に移してボードに書き込み。
USART2がコンソールになるので、冗長になるが、下記の回路でレベル変換して、シリアル接続したのちUSB変換ケーブルでwindows7に接続。材料は秋月電子通商でICセットI-03030の300円とDサブ9ピンK-05406の150円。
USART2レベル変換
teraterm-4.75でシリアル接続(115200bps8n1)して、リセットするとnshが動いた。

NuttShell (NSH) NuttX-6.22
nsh> help
help usage:  help [-v] []
[           dd          help        mkfifo      set         usleep
?           echo        kill        mh          sh          xd
cat         exec        losetup     mw          sleep
cd          exit        ls          ps          test
cp          free        mb          pwd         unset
Builtin Apps:
nsh> ls
/:
dev/
nsh> ls dev
/dev:
console
null
ttyS0
nsh> free
total       used       free    largest
Mem:        193312       6688     186624     126288
nsh> 

とりあえず、何もできないが、nshはアプリの追加ができるし、nuttx本体はいろいろ周辺のコンフィグレーションができそうで楽しみ。