コメを噛め

コメを噛め

rerofumi の電子工作メモ

Archive for 2月, 2011


hatena bookmark

LEDチカチカはいいね、リリンの生んだ電子工作の極みだよ。

STBee でLEDチカチカやってみました。というんじゃなくて最低限のビルドプロジェクトを構成するお話。

ARM系のクロスコンパイラがあればそれだけで開発ができるという話ではなく、割り込みベクタにスタートアップ、周辺回路のライブラリなどを用意する必要がある。
ストロベリーリナックスで配布している STBee 用のサンプルプロジェクトが一通りそろっていて参考になる。make 一発で STBee 上の LEDチカチカがビルドできるので、これをベースに自分用のプロジェクトを作るのが手軽ではある。しかし、Makefile がお世辞にも綺麗と言えないのと AVR 用の使い回しなので不満も残るところがあったりする。
今回の目的は、自分の手で同等品を全てそろえることでスタートアップ構成を理解したいというのと、自分にとって使いやすい Rakefile を構築しようというところにある。

今回の成果、ビルド用ソースコードツリー。
Download: fumi2_stbee_project-0.1.0.zip
main.c のLEDチカチカ部分はストロベリーリナックスのモノをほぼそのままです。

Read the rest of this entry »


hatena bookmark

OpenOCD で JTAG ダウンロードができるようになったといっても毎回 gdb サーバーを起動して gdb からバイナリを流し込むのも面倒くさいもの。
Makefile(Rakefile) やコマンドラインから一発でフラッシュを書き込めないものか。

OpenOCD にはフラッシュを読み書き消去する基本的な機能が備わっている。
単純な機能のダウンロードケーブルとして使うにはこれで十分だったりする。
このコマンドは OpenOCD が起動している時に port 4444 (標準時)に telnet アクセスして打ち込めば使えるが、起動時にコマンドラインとして与えることもできる。

毎回コマンドを入力するのも大変なのでコンフィグファイルに書いておくのが便利。
このへん参考記事がいくつか見つかるので、そのうちの一つのものを参考にコピペする。
—–

proc flash_program {ELF_FILENAME} {
halt
flash probe 0
flash write_image erase $ELF_FILENAME
echo "flash program complete. reset and run"
resume
reset run
exit
}

—–
これをコンフィグファイルに書いておく。

それを使いやすくシェルスクリプトにまとめて、書き込みコマンドを作成する。
—–

#/bin/sh
openocd.exe -f (コンフィグを置いたパス)/armblaster_stm32.cfg -c "flash_program $1"

—–
これに armblaster_flash などと名前をつけておくと使いやすい。

これで書き込み&実行確認がやりやすくなった。

※注意?
そういえばこの方法だとフラッシュイレースの範囲をちゃんと指定していないから DSU が書き込まれている 0x08000000 – 0x08002fff の範囲も書きつぶしてしまうのでした。
DSU を消したくない人やバックアップをまだ取っていない人はご注意を。
それ故にダウンロードするプログラムの先頭アドレスを 0x08000000 にしておく必要がありまする。


hatena bookmark

STBee とその開発に使えるJTAGケーブルの実際。
iruka さん製作の STBEE MINI を使った JTAGアダプター

STBee Mini もお安いしあっという間に作れるし、ファームも DSUe で書き込めるのでもうこれでいいんじゃね的なソリューション。
コマンドラインベースだけれども、シリアルライト機能の応用として AVRライターや PIC18Fライターも用意されているのでパワーユーザーにはおいしい感じである。

若干遅めではあるものの、OpenOCD 経由の利用も、gdb でのデバッグもできた。
個人的にはこれで十分かな。

OpenOCD とそれ用の HID コントローラーは用意されているバイナリを使うことになるんだけれども、それが今のところ Windows のみというのがたぶん最大の条件。
HID 部分は libusb じゃなくて Windows のデバイスを直接 Open しているので、他の OS に持って行くには libusb への移植作業が必要そう。

MaxOSX でも使えたらうれしいかもと思って調べ始めた JTAG ケーブルだったが、結局安定して使える環境が Windows だけという結果に落ち着いたり。


hatena bookmark

STBee とその開発に使えるJTAGケーブルの実際。
USB Blaster もどきで OpenOCD がどれくらい使えるか。

OpenOCD には ALTERA のダウンロードケーブルである USB Blaster やその互換品を JTAG ケーブルとして使うというオプションがある。
OpenOCD はパラレルポート(が使えた過去の時代)や FT2232ベースのJTAGケーブルを使うことを想定されている。だが MacOSX では FT2232 のドライバーだといまいちな場面があるらしく使いづらいとの声を聞く。
そこで浮上してくるのが USB Blaster 互換ケーブルの使用である。

そもそも、OpenOCD が難しいのはなぜかというと USB 接続デバイスを扱うからということに他ならない。デバイスの問題は結構大きいのだけれども、それは Windows, MacOSX、Linux のそれぞれでデバイスモデルが異なるところにある。なのでオープンソースで開発を固めようとしても、どうしてもこのターゲットとの接続部分がいまくいかないものなのである。
libusb はそういった機種間の proxy となり一つの stub を提供してくれるのだが、Windows では専用の USB ドライバをインストールする必要があるとか inf を作成しないとインストールできないとか色々とあったり、すんなりとは行かなかったりする。MacOSXと Linux は libusb で割と問題無くいけそうに見えるなあ。
そういう意味でダウンロードポートを USART(シリアル接続)のみに絞った Arduino の設計は正解なのだよね。

さて、USB Blaster もどきを使って OpenOCD を使う実験だけれども、Windows 上では早々に諦めた(w。
Windows だと 32bit と 64bit のドライバーって異なっているので、libusb-win のドライバーも二種類存在している。我が家は Win7 64bit を使っているので、64bit の方をインストールすることになる。かたや Cygwin は 32bitなので libusb はバイナリも付いてくるものの 32bit 版しかない。
このへんに食い違いがあるのかどうかよく分からないのだけれども、うまいこと使えなかった。原因究明するにも、準備が面倒な段階でもういいやと投げてしまった次第。

MacOSX と Linux での OpenOCD ビルドはそんなに難しくはない。
libusb, libusb-compat, libftdi, openocd といった順番でビルドしていけば良い。
libusb は Linux ディストリビューションに入ってることが多いので、devパッケージだけ用意すれば後は libftdi, openocd のインストールで良い。

そんなこんなで OpenOCD が用意できて MacOSX と Linux はこれでばっちりだぜと思っていたのだけれどもそうはうまくはいかないのでした。

ターゲットと接続して scan_chain とか難なくできるから大丈夫かと思っていたのだけれども、gdb から操作しているとやたら遅かったり失敗したりする。どうも通信がうまくできていないような印象。
先達の記事にも OpenOCD で USB-Blaster はイマイチと書いてあったりするので深追いしないことにした。

OpenOCD を使うのであれば素直に FT2232 系の JTAG ケーブルを購入するのが良さそうである。
ストロベリーリナックスの FT2232H モジュールとか EEPROM も載っていてまさにそういった用途にお使いくださいといった感じだしなー。


hatena bookmark

STBee とその開発に使えるJTAGケーブルの実際。
まずは STM 純正の ST-Link のお話。

これ自体 2500円ちょいで買えるので、開発ツールはこれ一本で完璧なんじゃね?と思われるのだけれども、本当にオープンソース周りで開発を固めようとすると「ドライバー等がオープンじゃない」という問題がある。一番大きな影響は MacOSX や Linux で利用するすべがなさそうだ、という所に尽きるだろう。
Windows だけで良いよといった場合は無償環境でそこそこはいけるので、なにができるのかを記しておく。

■ ファームのアップデート
ST-Link を入手したらまずはファームウェアのアップデートを行う。
STMicro のサイトに行って ST-Link Upgrade をダウンロードする。

すると案の定古いバージョンだからアップデートするように催促されるのでアップデートしておこう。
ここで、最新のファームウェアにしておかないと後述する Atollic のデバッグプロキシが動作しないことがある。地味にひっかかるポイント。

■ AT-Link Utility
STMicro のサイトに AT-Link 用のアプリケーションとして AT-Link Utility が提供されている。もちろん無償。

これを使うと ST-Link を JTAGケーブルとして STM32 のメモリ空間がダンプできる。
このダンプされているメモリ空間に対し、バイナリデータのアップロードや、ダウンロード、およびフラッシュメモリのイレースを行うこともできる。つまり基本的なダウンロード作業は ST-Link と ST-Link Utility で一通りできるのだ。
フラッシュメモリの吸い上げもできるのが嬉しいところ。STBeeユーザーは、これを使って DFUe ファームウェアをバックアップしておくと、書きつぶしちゃった後にいつでも復活できるようになるよ。

Reset/Run/Halt といった実行だけでなく、レジスタも見れてプログラムカウンタ単位のステップ実行もできるので、バイナリダンプを見て命令を脳内デコードできる人ならこれだけでデバッグできるかもしれない。

とまあ、ソースコードデバッグを考えなければ ST-Link と無償提供の ST-Link Utility でダウンロード&実行はできてしまう。
Windows ユーザーであれば持っていても良いケーブルかもしれない。

■ デバッグ環境
ARM系列を JTAG ケーブルでソースコードデバッグするとき、hobbyユーザーとしては GDB+OpenOCDが鉄板というか他があまりないわけなのだが、ST-Link がオープンじゃないっぽいので OpenOCD が使えないらしい。
デバッグをするには IAR, KEIL, Atollic といったプロユースの有料開発環境には ST-Link 用のドライバーとそれを利用する GDB Server が付いてくる。
しかしそれらはプロ用と称すだけあってお値段数十万円だったり、hobby用の廉価版がなかったりといった問題がある。一応、無料利用できる制限版があるのだけれども、IARとKEILは出力バイナリにサイズ制限があったりする。
Atollic TrueSTUDIO は無料体験できる Lite版でもサイズ制限がなく、デバッグもできるので多くの人が使っているようだ。

Eclips ベースの IDE 製品なのでこういった環境が欲しい人は ST-Link とセットで使えば、完全なゴールとなろう。
ただし Lite版には以下の制限がある。
・事ある毎に「Pro版にアップグレードしましょう」というダイアログが出てきて 3秒待たされる
・ダウンロードする際登録したメールアドレスに「あなたの業種はなんですか?Pro版を購入しませんか?」といった旨のアンケートメールが届く
それが気にならないなら悪くない選択だろう。

さて、Atollic TrueSTUDIO をインストールすると、ST-Link GDB server というコマンドラインプログラムが存在している事に気がつく。

これがまさに GDB Server そのもので、True STUDIO は裏でこれを起動してデバッグを行っている。ST-Link へ続く GDB server なのでこれさえあれば、別個に用意した ARMクロス開発用の GDB でデバッグをすることができる。

実際にコマンドライン上での GDB でデバッグできることはもちろん、Meadow などの Emacs をつかって GUD ソースコードデバッグを行うことができる。
先にビルドしておいた Tool chain で、コンパイルからデバッグまで一通りできることが確認された。

なので個人的に欲しいのは Atollic TrueSTUDIO の ST-Link GDB server だけなのだけれども、それだけのために個人情報を入力してダウンロードするかというのは考えどころ。


hatena bookmark

STBee には DFU (USB Device Firmware Upgrade) という USB 標準規格なファームウェア書き換えのブートローダが乗っており、Windows PC と USB 接続するだけでユーザーが作成したプログラムのダウンロードと実行ができるようになっている。
このマイコンボードを買うだけでマイコン開発ができるということでもあり、とてもお手軽なマイコン工作環境を提供してくれている。

通常ならばその恩恵に預かっていれば良いのだけれども、ちと深いことをやろうとするとやっぱり JTAG ケーブルが欲しくなってくるところ。
DFU だけだと不満な点というのはだいたい次の様なところ。

  • USB DFU のドライバーインストールが必要になる (ST社製)
  • ドライバーと転送ソフトが Windows でしかない
  • ダウンロードのみでデバッグまではできない(スタブを乗せれば手はあるけど)
  • ブートローダをつぶしちゃうと利用できなくなる
  • 自分でチップ買って作成した時はJTAGでなんとかしないとならない

そういった将来的な所も考えて JTAG ケーブルによる開発環境も用意しておいた方がよさそう、と思った。

ARM 開発での安価な JTAG ケーブルというと、OLIMEX の ARM-USB-OCD が鉄板な感じ。
中身は FT2232 なので互換機の製作もできなくないし、OpenOCD を使うなら JTAG ケーブルはシンプルにできるというもの。
7000円とか 9800円とか開発機材としては安いんだけれども、今回はなんとなく OLIMEX のこいつを使わないでできる方法を探してみた。ARM-USB-OCD を回避しているのには特に深い意味は無いですが。

■ ST-LINK

ST純正のデバッガ&プログラムケーブル。
2700円ほどと大変お安い。STBee を買った時に、ブートローダの保存&復活のために買っておいたもの。
これがあれば十分じゃんという意見もあるけれどもね。
基本的にデバッグには IAR, Keil, Atollic といった商用開発環境(hobby用は存在しない)が必要でドライバーもオープンじゃないので OpenOCD が使えない。Atollic lite が無料で使えるのでその上で開発を完結させるつもりならばそんなに問題は無い。
詳細についてはあとで書く。

■ arm_blaster

iruka さん製作の STBEE MINI を使った JTAGアダプター
HID なのでドライバ要らずなのがステキ。
OpenOCD は独自のパッチをあてて利用する形だけれども、Windows版のソース&バイナリもあるのでそれを利用すれば容易。

■ USB-Blaster もどき

以前作ってあった PIC18F2550 使用の USB-Blaster もどき。ALTERA のダウンロードケーブルとして使えている。
OpenOCD 0.4.0 では多少微妙なれど USB-Blaster をサポートするオプションが付いている。これを利用すると、この USB-Blaster もどきも OK なはず。

■ つづく
取り急ぎで上にある 3種類の JTAGケーブルを使ってのフラッシュ書き込みと GDB からの接続を確認済み。
もうちょっと環境の広がりを検討するので、ちょびちょびと報告していく予定。

基本的にコマンドラインと手書き Makefile で扱えるように検討していくのが目的。
必要なときに gdb をコマンドラインから叩いて扱ったりするような人向け。


hatena bookmark

toolchain 製作の rake スクリプトに gdb を加えた。
OpenOCD と JTAG ケーブルなどを使ってダウンロードやデバッグをリモートで行う用。

Download: fumi2_cortexM3_toolchain-0.0.2.tar.gz

メモ、GDBサーバーとの繋げ方例(ポートが3333のとき)

$ arm-none-eabi-gdb example.elf
(gdb) target remote localhost:3333
(gdb) monitor reset halt
(gdb) load
(gdb) continue


hatena bookmark

IOが沢山あってそれなりにパワフルでお安いマイコンが使いたくなり、STM32 に手を出してみることにした。てなわけでまずは Strawberry LinuxSTBeemini を入手。

さて、ボードも買ったことだし開発環境を作るかと LEDチカチカもさせずにいきなり GCC toolchain をビルドし始めたというのが今回のお話。
toolchain バイナリは DevKitPro がスタンダードかと思っていたら、今時だと CodeSourcery G++ なのだそうで。知らなかった。(追記: YAGARTO ってのもあるらしい)
しかし、CodeSourcery G++ は GNU GCC toolchain だといっても一応商用のライト版だしなー、とか。他の環境はなんやか制限があるしなー、とか。Cygwin ネイテブはないしなー、とか。色々思うところあって、久しぶりに自分でビルドすることにした次第。

以前 SDL の時にやったように、ぽちぽち手作業でビルドしてその時の手順や configure 引数を rake 形式でメモしていくもの。
rake(make の ruby 実装) 一発でソースをダウンロードしてきて自動的にビルドできるのだけれども、どっちかというとドキュメントを rake というフォーマットで書きましたという意味合いの方が大きいのでできればスクリプトを読んでいただけるとありがたく。

Download: fumi2_cortexM3_toolchain-0.0.1.tar (4KB)

上記スクリプトでインストールされるのは

  • binutils-2.21
  • newlib-1.19.0
  • gcc-4.5.2

といった一応現時点で最新のもの。
言語は C と C++ の二つ。
まあ、STM32 で C++ が使い物になるかどうかは知らないけど。

ターゲットは Cygwin, MacOSX(10.6), Linux でそれぞれでビルドできることを確認している。
ただし、Wow64(Windows 64bit)上の Cygwin では、この規模のビルドは fork エラーが出たりして完了できないと思う。実のところ、4日前後この問題と取っ組み合いしていたのだけれどもお手上げした。Cygwin で使いたいひとは Win32 環境でビルドしてバイナリだけ持ってくるのがオススメ。
MacOSX や Linux は何の問題も無し。

参考程度に Cygwin 版のバイナリを置いておく
Download: cortexM3_gcc_toolchain.tgz (76.5MB)

この toolchain で、Strawberry Linux の STBee ページに置いてある LEDチカチカサンプルをビルドし無事実行できることを確認している。