Wed 05/28, 2014

STM32F429I-Discovery [Electronics ]

STM32F429I-Discovery です。詳細は ST Micro のページとか、ねむいさんのぶろぐとか見てください。と、これだけじゃ、あまりにアレですから、簡単に試せるネタをいくつか紹介します。

ご存知、pacman です。オリジナルはドイツ語ですが、google 英語翻訳のリンクもついているのでなんとかなります。ビルドには Windows で CooCox IDE (CoIDE) を使います。この解説も Installation der Toolchain und erstes Projekt にあります。ツールチェイン自体は arm-noneeabi な gcc ですが、ビルドスクリプトが CoIDE 用のものなので、他の環境でビルドするには Makefile を作成するとかの手間がかかります。CoIDE では Makefile の import/export をサポートしていないため、自前で Makefile を書くことになります。
STM32F429I-DISCO_PACMAN
写真ではシリアル端末をつないでいますが、タッチパネルでも操作できるので必須ではありません。 こちらのサイトには、他にも多くの STM32 向けプロジェクトが紹介されています。全て CooCox IDE のプロジェクトのようでした。

このボードには MCU 内蔵のメモリの他に、64Mbit の SDRAM が搭載されているので、uClinux も楽々動きます。ビルドとプログラムの書き込みは Linux 上で記載の通りにするだけです。私は Lubuntu 14.04 を使いました。uClinux 本体のビルドの前に openocd のビルドも必要です。.bootstrap とか configure でアレがない、コレがないと文句を言われたら適当にインストールしましょう。lilbusb-1.0-0h-dev とか libhidapi-dev も要るみたいです。ツールチェインは noneeabi ではなくて uclinuxeabi な gcc を使います。リンク先の Lefinnois さんのプロジェクトは jserv さんのものからのフォークで、i2c や spi デバイスのサポートなどが追加されていて、mmc を追加のファイルシステムとして使用でき、ここに置いたユーザアプリケーションが実行できるため、フラッシュの書き換えが不要です。mmc は接続しなくても最低限、シリアル端末だけ用意すれば試すことができます。
STM32F429I-DISCO_uClinux
ユーザランドのプログラムは localpgm ディレクトリにオンボード spi デバイスの ST L3GD20 ジャイロスコープ用のものがありますから、hello world とか試すには、この Makefile を流用すれば簡単です。

ひとつおまけとして、この uClinux 用の mruby を作って見ました。uClinux をビルドした Linux 機で mruby のソースコードを取得(git clone https://github.com/mruby/mruby.git)して、mruby をクロスビルドします。STM32F429I Discovery 用の記述を追加したビルドスクリプトがこれ(build_config.rb)です。 uClinux 用の gcc ツールチェインと uClinux のソースコードのパスは適当に調整してください。コンパイルオプション等には uClinux のユーザプログラム用のものを使います。これで make を実行すれば build/STM32F429I-UCLINUX ディレクトリ以下にターゲット用の mruby ができます。当初、コンパイルオプションに -D_GNU_SOURCE (-D_ISOC99_SOURCE でも可)を入れていなくて手間取りました。これがないと src/numeric.c で使用されている math ライブラリのマクロが見つからず、結果としてリンク時にエラーになります。リンカオプション -lm も付けます。

Build summary:

================================================
      Config Name: STM32F429I-UCLINUX
 Output Directory: build/STM32F429I-UCLINUX
         Binaries: mrbc
    Included Gems:
             mruby-sprintf - standard Kernel#sprintf method
             mruby-print - standard print/puts/p
             mruby-math - standard Math module
             mruby-time - standard Time class
             mruby-struct - standard Struct class
             mruby-enum-ext - extensional Enumerable module
             mruby-string-ext - extensional String class
             mruby-numeric-ext - extensional Numeric class
             mruby-array-ext - extensional Array class
             mruby-hash-ext - extensional Hash class
             mruby-range-ext - extensional Range class
             mruby-proc-ext - extensional Proc class
             mruby-symbol-ext - extensional Symbol class
             mruby-random - Random class
             mruby-object-ext - extensional Object class
             mruby-objectspace - ObjectSpace class
             mruby-fiber - Fiber class
             mruby-enumerator - Enumerator class
             mruby-enum-lazy - Enumerable::Lazy class
             mruby-toplevel-ext - extended toplevel object (main) methods
             mruby-bin-mirb - mirb command
               - Binaries: mirb
             mruby-bin-mruby - mruby command
               - Binaries: mruby
             mruby-bin-strip - irep dump debug section remover command
               - Binaries: mruby-strip
             mruby-kernel-ext - extensional Kernel module
================================================

こんな風にできあがります(ホストのほうは省略)。libmruby.a を使って実行プログラムを作るも良し、mruby や mirb を直接叩くも良し。具体的にこれで何するとかは考えてません、スミマセン。

Posted by masato at 09:54 PM
コメント

ども、いつもお世話になっております。
STM32F429で uclinuxを走らせようとしたのですが、
root=/dev/mmcblk0p1 で SD Cardをmountできないで、挫折しています。
kernel 起動時
root=/dev/mmcblk0p1 だけではピクリともせず
root=/dev/mmcblk0p1 rootdelay=5 でなんとか、認識しようとするも、とん挫している模様。


SD Cardを使っておられますでしょうか?

Posted by: LED at 06/22, 2014 09:31 PM

LED さん、こんにちは。SD カードは使っていますが、root デバイスにはしておらず、起動後に手動でマウントしています。
https://www.flickr.com/photos/n24bass/14019050478
私はまだ試していませんが、まずはオリジナルの fstab をいじってマウントさせるところから攻めて行くのが良いかと思います。

Posted by: masato at 06/22, 2014 10:56 PM

レスありがとうございます。
arch/arm/mach-stm32/iomux.c を見直したら
---
mmc_spi spi3.0: can't change chip-select polarity
mmc0: host does not support reading read-only switch. assuming write-enable.
mmc0: new SDHC card on SPI
mmcblk0: mmc0:0000 SU08G 7.40 GiB
mmcblk0:
p1 p2
EXT2-fs (mmcblk0p1): warning: mounting unchecked fs, running e2fsck is recommended
VFS: Mounted root (ext2 filesystem) on device 179:1.
---
なんとか、mmcblk0p1が見えました。

Posted by: LED at 06/23, 2014 07:58 PM

LED さん、うまく行って良かったですね。
すみません、私のほうはずれたコメントしているくらいで何も進んでません。

Posted by: masato at 06/23, 2014 09:29 PM