STM32F4シリーズを使ってみる4 -STLink/V2をversaloon化-

Versaloon本家がSTM32F4対応したのを受けて今回はSTM32F4 Discoveryに仕込まれている
STLink/V2をSWD接続方式のVersaloon化する方法を紹介します。

もう何度も行っていますが、Discovery系の基板をVersaloon化したことによるメリット
は以下の通りです。
1.書き込み・デバッグにOpenOCD(ただしVersaloon対応にビルドしたものに限る)が
 利用できる。
2.VersaloonのファームウエアにUSB-CDCも仕込まれているのでUARTの通信手段を別途
 用意する必要がない。
3.Versaloonはソフトもハードもファームウェアも無償で利用できるので自分の好き
 なように改造できる。

と言ったところでしょうか。ねむいさん的には"2."が実際のデバッグや情報表示等にか
なり使えると実感しています。



●Versaloon化手順 on STM32F4-Discovery
概念についてはこちらこちらで詳しく紹介しているので基本的な部分ははしょりますが、
Versaloon化するSTLink/V2(STM32F103C8T6)にいつもながらのDFUブートローダを仕込
んでおいてその後にversaloon本体(DFUファイル)を書き込みます。
DFUブートローダのバイナリはUARTブートローダ若しくはSWD経由でフラッシュに書き込み
を行います。各々の方法も基板に下準備が必要です。

1.SWD経由でDFUブートローダを書きこむ場合
 SWDで書きこむ手段として今回はvsprogを使用することにします。
 用意するものはVersaloon化したSTLinkですが素のSTLinkでも書き込むまでの
 下準備は同様です。
 
 まず基板をひっくり返して写真の箇所のジャンパ抵抗をそれぞれ移転させます。

 
 上記写真の要領でSWCLK,SWDIO,GNDをそれぞれ接続してください。

 
 STlink/V2が仕込まれているSTM32F103C8T6にはReadProtectionのヒューズビットが
 掛かっていて、これを解除しないとフラッシュの書き換えができません!これはOpenOCD
 のflash unlockコマンドでも解除できません。
2013年現在ではstm32f2x.cにバグ修正
 が入ったのでOpenOCDからでも解除可能です。
 vsprogを立ち上げSTM32マイコンを認識したら上記画像の要領でヒューズ設定を行って
 ください。エラーが出まくりますが無視してください。この状態でWriteを押すとエラ
 ーが出まくりますが無視して書きに行ってヒューズを消すことができます。

 その後はこちらに用意したSTM32F4Discovery用のDFUブートローダ(の中のmain.hex)を
 フラッシュに書き込み、ベリファイまでエラーが出ずに行えたら書き込み成功です。


2.UARTブートローダ経由でDFUブートローダを書きこむ場合
 この方法は以前細かく説明しているので、ここではSTM32F4-Discovery基板上ではどの線を
 引き出せばよいかという点に絞ってお伝えします。
 DFUブートローダはSTM32D4Discovery用を書き込んでください

 
 実はSTM8S,STM32VLDiscoveryの時と比べてすっごく楽です。UARTブートローダ用の
 線が引き出されていてなおかつ線を引き出しやすいSMDの抵抗がライン上にあります。
 書き込みの手段を持ってない人はUARTブートローダしか方法がないので比較的
 やりやすいと思います。"TO_+3.3V"のジャンパは書き込みが終わったらはずすのを
 忘れないでくださいね。
 UARTブートローダを起動するためのBOOT0につながる抵抗はR7ですが、シルクの位置が
 上にずれてるので間違えないようにご注意ください。

3.Versaloon本体のDFUファイルを書きこむ
 STM32VL-Discoveryの時と同じくSTM32F4-Discovery基板上のResetボタンを押し
 ながらPCとUSBケーブルで接続してください。DFUブートローダが正しく書きこまれてい
 たらPCがDFUを認識します。その後、STM32F4Discovery用VersaloonのDFUファイル
 書きこみます。書き込み方法はこちらを。

 書き込み後はPCとST<32F4-Discoveryの接続を切り離し、Resetボタンを押さずに再
 接続した時にVersaloonとして認識すればVersaloon化の成功です!
 Versaloon本体のLibusbドライバのインストールはZadigで行ってください。
 USB-CDC用ドライバ(COMonVersaloon)は本家のリポジトリを手繰って取得してください。
 これでおしまいっ!

 …と言いたいところですが、Versaloonとして使用する前に下に述べる処理を絶対
 に忘れないでください。

4.後始末
 
 
 SWDでDFUブートローダを書いた場合は最初に移動したジャンパ抵抗とジャンパを元
 の位置に戻します。次にDFU・UARTブートローダ共通ですが、R68を取っ払ってください。
 これはSTLink/V2側からターゲットのSTM32F4マイコン外部クロックを供給するための
 もので、Versaloonではこのピンは使用されていません!このジャンパ抵抗を外して
 8MHzクリスタルが効くようにしてやらないとSTM32F4は16MHzの内部RC発振に強制
 されてしまいます。一見普通に動いてしまいUART等のタイムベースが重要なペリ
 フェラルの動作で異常になってしまうので注意してください!



というわけでSTM32F4-DiscoveryもVersaloonで快適デバッグ/書き込みができるように
なりました♥先に書いた通り私のお目当ては複合デバイスとしてVersaloonと
ともにに仕込まれているUSB-CDCです。ごてごて外付けのデバイスを接続せずに済みま
すのでとってもスマートになります。



おまけ
今のOpenOCDでデバッグした際に浮動小数点レジスタは見えるのか!?

ねむいさんがバリバリ使っているOpenOCD(V0.6.0)+Insight(GDB7.25)でやってみましたが
レジスタ表示をALLにしても浮動小数点レジスタは見えませんでした(; _ ;)
OpenOCD+InsightがCortex-M3というか無印のARMV7M扱いでデバッグしてるせい
(Cortex-M4FのコアはCortex-M3と上位互換してるから整数演算部は普通にデバッグ・
書き込みできる)でしょか???情報待ちですね。


も一つおまけ
ぜんっぜん関係ないですがtaobaoで超掘り出し物の液晶モジュール見っけました!
2.6inch,240x400のWQVGAサイズでタッチパネルつきのTFT-LCDがたったの20元でしかも
新品!もちろんデータシートなんて無かったのですが運よく推定したピン配置がドンピ
シャでバッチリ動いてくれました♥しかも類似品種のピン配置を調べるとSPIも使用可能な
のが分かりコストパフォーマンス最高だと思います。

あーしまったこの角度で撮るとせっかくのゆっこちゃんの肢体がー(棒)

Comments

UARTブートローダ経由でDFUブートローダを書きこむ場合の写真のTO_+3.3Vの接続は,
―●がR6に掛かってますけど,R7(BOOT0)の方でしょうか?

  • 774
  • 2012/02/01 11:30 AM

うぉぅ…
思い切り勘違いして間違ってますね…すみません。
コラージュですが画像を正しいものに差し替えて
注意書きも加えておきました。
ご指摘ありがとうございます。

  • 2613
  • 2012/02/01 12:47 PM

ねむいさま、stm32fシリーズに関するコアな情報を提供していただき感謝しています。
今までTxD,RxDを追加したJTAGKEYクローンを使ってOpenOCDでstm32Fシリーズの書込みをやってきたのですがstm32F407vgt6のrev.Zから書込みが出来なくなってしまいました。
急遽stlink/v2を入手してSWDで書込みは出来るようになりましたがデバッグ用のシリアルポートが使えなくなってしまい代替手段を探して、ねむいさんのこのブログにたどりつきました。
stm32F4-discoveryを改造してversaloon化したstlinkからswdを使った書込みとUSB-CDCが使えそうなことを確認出来たのでTxD,RxD端子つきのstlinkクローンを作って使っていくつもりです。
「素直にversaloon Miniを買えば?」という声もありますがケースが紙製というのがちょっと気に入らないので大きめの収縮チューブで保護できる形の基板にする予定です。

  • km
  • 2012/12/10 3:27 PM

km様
はじめまして、ねむいです。


私も気になって手持ちのRevAとZが乗ってるSTM32F4Discoveryをそれぞれ
比べて見ましたが私の環境ではどちらも書き込みができました。
その時のログファイルは下のURLにあります。
cid-36f4d1230f8a673c.skydrive.live.com/browse.aspx/.Public/tool/OpenOCD/yakketsu/STM32F407VGT_rev.zip
また、上記の検証で用いたOpenOCD0.7.0はログファイルと同じディレクトリ
に置いてあるTI-ICDI対応の特別版ですがgerritに上がっている最近の
STM32F系フラッシュのパッチは当ててないのでSTM32関連の動作は0.6.1
相当かと思います。

結構気づきづらいのはソフトウエアでJTAGの機能を殺していた場合で、
微妙に動いて微妙に動かないといういやらしい状態になり問題の切り分けが
困難になるので確実にJTAG(若しくはSWD)で引っ掛けることができる
システムブートモードでSTM32を起動させて検証を行うことをお勧めします。

また、話は少しずれますが今Versaloon化をされるならSTM32F3Discoveryの
物をお勧めします。STLink/V2(STM32F103C8T)側からおあつらえ向きにVCP用の
UART-Tx,Rxが引き出されており、裏面の半田ブリッジで簡単にSTM32F3側とつな
げられます。

ねむい様
丁寧なご回答ありがとうございます、
もう一度ねむいさんのところから貰ったOpenOCDとcfgで試してみたらすんなり書けてしまいました。
telnetでつなげるとpollコマンドでunknownになるしmdwコマンドで全て0x004000などという変な値が見えるのでこりゃ駄目だと思っていたんですけどね。
この迷走でZadigという便利なツールを知ることが出来、WinUSBとFTDIの仮想COMドライバが同時に使えることも判ったのは収穫でした。
stlinkクローンの基板は発注してしまったのでSWDの勉強がてらぼちぼち遊んでみます。
最近部品を海外から直接購入することが増えていますがねむいさんが他のところに書かれていたtaobaoというのは初めて知りました、新しいものへのアンテナがすごいですね改めて感心しました。
これからも面白いトピックを楽しみにしています。

  • km
  • 2012/12/11 11:29 AM

Post a Comment








Go to top of page