[[FrontPage]] #contents 2011/10/02からのアクセス回数 &counter; ** SWD対応オープンソースのJTAG Versaloon [#w2cf96a1] Versaloonは、ARM Coretex-M3シリーズで最近よく使われているデバッガとのインターフェース SWDをサポートするオープンソースのJTAGです。 [[STM32マイコン評価ボードSTM32VLDISCOVERY>http://akizukidenshi.com/catalog/g/gM-04276/]] やARMマイコンパーフェクト学習基板で採用されているLPC1343の評価ボード[[http://akizukidenshi.com/catalog/g/gM-03598/>http://akizukidenshi.com/catalog/g/gM-03598/]] が開発環境とボードに組み込まれたSWDデバッガでとても簡単に開発できるのですが、すべてWindows上の開発環境です。 ((これらを使うときには、VMWareを使ってバーチャルマシンでWindowsを起動しなくてはなりません)) [[arm/CodeBaseを使ったARMマイコンパーフェクト学習基板の使い方]]でMac OSX上でコンパイルと、 プログラムのセットができても、オープンソースのデバッガOpenOCDがSWDに対応していない ((Ver. 6以降はサポートされているみたい)) ので、とても悔しい思いをしていました。 *** Versaloonとの出会い [#yf65c24e] はじめてVersaloonの存在を知ったのは、 [[ねむいさんのぶろぐ>http://nemuisan.blog.bai.ne.jp/?eid=178353]] を見たときでした。世の中にはすごい人がいるものだと感動しました。 さっそく、STM8S-Discoveryはじめ必要な部品を揃えSTM8S-DiscoveryのVersaloon化に挑戦しましが、 ハンダ技術にとぼしい私には、MCUのピンにハンダ付けをすることは不可能でした。 そこで、 [[Versaloonのサイト>http://www.versaloon.com/]] から完成品のVersaloon Miniを購入し、OpenOCDを作ろうとしましたが、 開発途中のためパッチとソースのバージョンが合わず上手くいきませんでした。 Windowsの方は、ねむいさんが [[OpenOCDの作成手順>http://nemuisan.blog.bai.ne.jp/?eid=188402]] を紹介されていますので、そちら参照するとよいでしょう。 この他に [[LPC1343 QuickStart Board>http://www.embeddedartists.com/products/boards/lpc1343_qsb.php]] を販売しているサイトから [[10-pin to 20-pin JTAG Adpater Kit>http://www.embeddedartists.com/products/acc/acc_jtag_adapter_kit.php]] を合わせて購入すると便利です。 &ref(versaloon.png); *** 再度挑戦しようと思ったわけ [#d6e77a12] それでももう一度Versaloon対応のOpenOCDを作ってみようと思ったのは、 [[Bingo氏のサイト>http://www.mikrocontroller.net/topic/202785]] で紹介されている [[STM32 DiscoveryのVersaloon化の手順書>http://www.mikrocontroller.net/attachment/96661/STMxx-Discovery-Versaloon-How2-pict.pdf]] を見たときです。 これならトラ技のオフ会でもらったSTM32L-Dsicoveryを使ってハードの改造なしに、簡単にSTM8S-Discovery をVersaloon化することができると気づきました。 ((私の方法は、Bingo氏の方法よりも簡単です)) その前に、Versaloon用のOpenOCDを作成する必要があります。以下ではMac OSX上でVersaloon対応のOpenOCDを作成する手順を紹介します。 ** Mac OSXで動作するSWD対応OpenOCD [#tb95f149] Bingo氏は、VersaloonのForumでだれでも再現できるようにな [[スクリプトと必要なパッチ>http://www.versaloon.com/bbs/download/file.php?id=87&sid=09b55e9f01ead650364b0f495ff53e5d]] をまとめてくれました。 Bingo氏は、Versaloonの著者Simon氏の配布ファイルにあるopenocd_updateを修正し、 - Simon氏が作成したOpenOCDと同じバージョンのソースを取得する - Coretex M3の例外処理を修正するパッチを提供 しています。 *** MacOSXでのmake [#tfa22322] 上記配布ファイルを使ってMac OSXでmakeをする場合、準備と若干の修正が必要です。 - [[MacPort]]を使ってVer. 0.4のOpenOCDを作成し、必要なライブラリをインストールする #pre{{ $ sudo port install openocd }} - 順序は逆転しますが、openocd_updateのを以下のように修正 9行目 #pre{{ SUDO=sudo }} 81行目 #pre{{ ./configure --enable-vsllink --enable-ft2232_libftdi --enable-maintainer-mode \ --enable-ft2232 --enable-libftdi }} *** openocd_updateの実行 [#f514216b] 準備ができれば、後は簡単です。 - 配布ファイルの展開(私はホームのlocalディレクトリに展開、ダウンロードしたファイルはopenocd-force-10-mar-2011.tar.gz) #pre{{ $ cd local $ tar xzvf ~/Downloaded/openocd-force-10-mar-2011.tar.gz }} - openocd_updateの実行 #pre{{ $ cd openocd-force-10-mar-2011 $ ./openocd_update 途中でsudoからパスワードの要求がありますので、ユーザのログインパスワードを入力してください。 }} ** Versaloonのファームウェアの更新 [#ee8bcba4] 私が購入したVersaloon Miniのファームウェアが古く、これをopenocd-force-10-mar-2011.tar.gzに付属する - Versaloon_IAR.hex と入れ替えなくてはならないことが分かりました。 *** ファームウェアの更新 [#l330b84a] ファームウェアの更新には、STMの提供するFlash Loader Demonstratorが必要ですが、これを見つけるのに一苦労しました。 - [[ストロベリーリナックスサイト>http://strawberry-linux.com/stbee/bb?c=%A5%CF%A1%BC%A5%C9%A5%A6%A5%A7%A5%A2&s=-date]]からum0462.zipをダウンロードしました ((STマイクロのウェブページの構成が悪いのだと思います。)) - この他に、STM関連のツールの場所をまとめた [[Embedded newbie>http://embeddednewbie.blogspot.com/2011/01/free-toolchains-for-stm32vldiscovery.html]] も便利です。 Versaloonにファームウェアを書き込むには、ボタンを押しながらUSBに接続すると赤のLEDが点灯します。 これで、シリアル通信ができるようになります。 Flash Loader Demonstratorを起動し、 &ref(flash_loader_demo1.png); 指示に従いながら進んでVeraloon_IAR.hexを指定して書き込みます。 &ref(flash_loader_demo4.png); ** OpenOCDのコンフィグファイル [#yd919d73] OpenOCDを使う場合、JTAGインターフェースの定義ファイル、ターゲットのMPUの定義ファイルが必要となります。 OpenOCDでは、インストール時によく使われているものについてこれらの定義を - /usr/local/share/openocd/scripts/ にセットされていますが、versaloonやSWD対応MPUであるLPC1114, LPCLPC1343, LPC1768の定義ファイルは 提供されていません。 いろいろ探してみると流石 [[ねむいさんのぶろぐ おきば>http://nemuisan.blog.bai.ne.jp/?eid=160746]] にありました。 - OpenOCD(0.5.0)Flash書き込み・デバッグ用のカスタムcfgファイル -- [[LPC2388,STM32用等の詰め合わせ>http://cid-36f4d1230f8a673c.office.live.com/self.aspx/.Public/tool/OpenOCD/OpenOcd%5E_cfgs.zip]] を使用しました。 ねむいさん、ありがとうございます。 私の使ったコンフィグと最新は、少し違うみたいです。 - &ref(OpenOcd_cfgs.zip); *** 定義ファイルのコピー [#o39e52d2] ダウンロードした定義ファイルを解凍し、以下のようにコピーします。 #pre{{ $ cd OpendOcd_cfgs $ sudo cp tcl/interface/* /usr/local/share/openocd/scripts/interface/ $ sudo cp tcl/target/* /usr/local/share/openocd/scripts/target/ }} ** OpenOCDを使って書き込みのテスト [#k6e7b444] *** MacOSX固有の前処理 [#y4c3186b] Mac OSXでは、VersaloonのCDCがOSのドライバーに取られしまうため、一時的にそれをいったん止めます。 #pre{{ $ sudo kextunload /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBCDC.kext }} もとに戻すには、 #pre{{ sudo kextload /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBCDC.kext }} *** プロジェクトの準備 [#t314b48c] 書き込みのテストには、ねむいさんの作られたkick startのプロジェクトを使いました。 - LPC13xx(LPC1343/LPCXPresso互換回路) [[KickStart>http://cid-36f4d1230f8a673c.office.live.com/browse.aspx/.Public/src/Cortex/LPC1343]] ファイルを展開したら、 #pre{{ $ cd LPC1343_with_KickStarts_20100901 $ /usr/local/bin/openocd -f interface/vsllink_swd.cfg -f target/lpc1343_swd_flash.cfg -c "mt_flash main.elf" Open On-Chip Debugger 0.5.0-dev-00783-g0123985-dirty (2011-10-02-18:39) Licensed under GNU GPL v2 For bug reports, read http://openocd.berlios.de/doc/doxygen/bugs.html Warn : must select a transport. Info : OpenOCD runs in SWD mode adapter_nsrst_delay: 200 jtag_ntrst_delay: 200 trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain Info : OpenOCD runs in SWD mode Error: Fail to receive usb data, error string is Operation timed out. Info : Versaloon(0x15)by Simon(compiled on Jan 29 2011) Info : USB_TO_XXX abilities: 0x0000024F:0x010001EF:0xC0000007 Info : RCLK (adaptive clock speed) Info : lpc1343.cpu: hardware has 6 breakpoints, 4 watchpoints target state: halted target halted due to debug-request, current mode: Thread xPSR: 0x21000000 pc: 0x000004b4 msp: 0x10001fc8 flash 'lpc2000' found at 0x00000000 auto erase enabled wrote 4096 bytes from file main.elf in 0.409816s (9.760 KiB/s) verified 2968 bytes in 0.119172s (24.321 KiB/s) requesting target halt and executing a soft reset target state: halted target halted due to breakpoint, current mode: Thread xPSR: 0x01000000 pc: 0x000000c0 msp: 0x10001fe0 shutdown command invoked }} と無事、書き込みに成功しました。 &ref(versaloon-QuickStart1343.png); *** ARMマイコンパーフェクト学習基板でためしてみる [#j522df97] 次にARMマイコンパーフェクト学習基板で、SWDIO, GND, SWCLKの3本の線で書き込みができるか、 試してみます。 ARMマイコンパーフェクト学習基板のP1ピンコネクタ #pre{{ 2 SWDIO 3 DWCLK 8 GND }} これをVersaloonの #pre{{ 7 SWDIO 9 SWCLK (4~20の偶数ピン) GND }} に接続します。 結線は以下のようになります。 &ref(versaloon-TR-connect.png); ** コメント [#p2e46e45] #vote(おもしろかった[11],そうでもない[0],わかりずらい[0]) #vote(おもしろかった[12],そうでもない[0],わかりずらい[0]) 皆様のご意見、ご希望をお待ちしております。 #comment_kcaptcha