Tue 08/19, 2014

Nucleo F4x1 Motion Player [Electronics ]

NucleoF401RE-MotionPlayerNucleo F4x1 Motion Player は昨年、STM32F4-Discovery Motion Player を発表された Tonsuke さんの新プロジェクトで、今回はその名の通りに ST Micro の新しい評価基板 Nucleo F401RE をターゲットにしています。専用の拡張基板はマイコンワークショップとんとんで頒布されています。残り5枚(2014.08.19現在)なので、購入希望の方は急ぐべし。で、前回もそうでしたが、今回も素晴らしいファームウェアを Tonsuke さんが用意されています。ソースコードも公開されていて、私のような素人が手を入れるような余地はないのですが、これを手元でビルドしてみました。写真のように背景画像がバイナリ配布版ファームとは異なっています。

Tonsuke さんは MacOS 上で開発されているようですが、私は Lubuntu 14.04LTS を使いました。gcc toolchain には LaunchPadgcc-arm-none-eabi-4_6-2012q4-20121016.tar.bz2 を使います。これは /usr/local/gcc-arm-none-eabi-4_6-2012q4 に展開します。ソースコードは説明にしたがって、適当なディレクトリに取得、展開し。Makefile を下記のように変更してビルドすれば OK です。
  • リンカオプションに -lnosys を追加(L80)
    LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) $(GCC_LIB) $(patsubst %,-L%,$(DIRLIB)) \
    -lcm4 -lhal -lc -lgcc -ldsp -laac -lmp3 -lnosys
  • ライブラリ検索パスを変更する。(L90)
    DIRLIB = lib/Drivers/CMSIS/Device/ST/STM32F4xx lib/Drivers/STM32F4xx_HAL_Driver lib/Drivers/CMSIS/DSP_Lib/Source \
    /usr/local/gcc-arm-none-eabi-4_6-2012q4/arm-none-eabi/lib/armv7e-m/softfp \
    /usr/local/gcc-arm-none-eabi-4_6-2012q4/lib/gcc/arm-none-eabi/4.6.2/armv7e-m/softfp \
    ./aac ./mp

出来上がった nucleo_f4x1_motion_player.bin は mbed 方式で USB マスストレージにコピーすれば動作開始しますが、手元の環境では一度コピーした後は一旦取り外して再接続しないと再コピーできませんでした。Nucleo は USB-CDC もサポートしており、gtkterm などで /dev/ttyACM0 などに接続すればデバッグメッセージを見ることもできます。

当初、printf や syscall に別のコードを追加していたのですが、結局不要でした。また、ライブラリ検索パスを armv7e-m ではなく、thumb にしていたために浮動小数点演算周りでハングしたりしてしまいました。また、gcc-4.8 を使うと JPEG 画像表示がスキャンタイプによって 8x8 ブロック端(?)の表示が乱れる症状が出ているのですが、こちらは追っていません。

おそらく、Windows 上でも同様の方法でビルドできると思います。

[2014.08.20 追記]
Windows 上でもビルドできました。toolchain は「ねむいさんのブログ」辺りを参考に準備します。gcc は 4.6 を使います(4.7 でもOKでした)。Makefile はトップディレクトリとサブディレクトリのすべてのものについて下記のように BUILD マクロを定義している部分を変更します。

CDEFS = -DBUILD=0x`date '+%Y%m%d'` .... 
とりあえず -DBUILD=0x20140820 などとしておけば良いでしょう。ただし、これだけではターゲットを指定せずみ make を実行するとバイナリが出来たあとの処理で戻ってきません。これは all ターゲットにふくまれる sizeafrer ターゲットでの shell コマンド解釈ができないためなので、とりあえず make build とすれば良いでしょう。

[2014.08.22 追記]
また、すべての Makefile の MCU 定義で -mfloat-abi=softfp の箇所を -mfloat-abi=hard とし、上記で変更したライブラリ検索パスを armv7e-m/fpu とすれば Coretex-M4 の FPU 機能を活かせます。と言う事は、上記も armv7e-m/softfp が正解ですね(修正しました)。-mno-unaligned-access も指定したほうが良さそうです。

gcc-4.7.4+fpu でも OK でした。バイナリサイズが数キロバイト小さくなります。gcc-4.8 では更に小さくなりますが、やはり picojpeg の問題が残ります。

Posted by masato at 09:58 PM
このエントリーのトラックバックURL: http://bird.dip.jp/cgi-bin/mt/mt-tb.cgi/1868
コメントする

おそらく携帯電話等からは投稿できません。日本語文字列を含まないコメントやトラックバック、および当サイトへの言及を含まないトラックバックは御遠慮いただいております。また、90日以上経過した記事へのコメントはできません。










名前、アドレスを登録しますか?