OpenOCD小ネタ7 -JTAGKey2でSWDできるじゃない!-

20140708追:
ついにSWDに正式対応しました!
20140708追:




ここ数日OpenOCDのgerritにVersaloonのSWDサポートの修正が盛んにあげられていて私も
いろいろヨイショしております。同時に汎用のSWDドライバも見直されどんどん変化しており
ます。その矢先になんかすごいの来てました。FTDIデバイスのSWD対応です!
しかも結線がめっちゃ簡単でJTAGKey2(Compatible)系のバッファがついたものでも極め
て簡単な回路の追加でSWDれます♥

本来FTDIデバイスのSWD対応については約一年前、libswdというのがコミットに当たりか
けていたのですが実装に関する思想をめぐりくだらない激論となりスクラップ状態で放り
投げられていました。今回の奴はそれとは別のアプローチで実装された物のようです。
末端ユーザーの私たちとしましてはちゃんと動作して恩恵が受けられるのかが大事です。


そんな訳で早速試してみました!コードレビューにはJTAGで言うTDIとTDOの間にトライ
ステートバッファをおいてnTRSTでOEを制御してターゲットのSWDIOと接続すべしと書か
れております。SWCLKに関してはそのまんまTCLKにつなげばOKです。さらに"トライステ
ートバッファ噛ますのめどいんなら220~470ohmくらいの抵抗でワイヤードORでもいける
かもね"とさえ書かれていました。


もちろん私はお気楽に510ohmのカーボン抵抗でワイヤードOR作戦です。当たり前ですが
TDIが直接ターゲットのSWDIOに来てショートしないように抵抗を配置してください。
(私のJTAGKey2Compatibleの回路はそれでも素子の即死はしないように配慮してます)

今回の実験対象はSWDのみ接続可能なNuvotonのCortex-M0コアのNano130SE3です。
このマイコンも以前からちらっとお見せしていますがNuvotonネタはFM3の修正がコミット
されたら一気に攻めるので今はまだ脇役なのです。もう少しお待ちください。
JTAGkey2はVref必須故にVersaloonの+3.3Vを拝借してターゲットに供給しております。
使用するOpenOCDは現在の最新のコミットベースのVersaloon-SWD対応版と、同じく最新
のコミットベースで上記のコードレビューからCheckoutしてきたFTDI-SWD対応版+α
OpenOCDバイナリをそれぞれビルドし、VersaloonとJTAGKey2で同一のelfファイルの
書き込みとベリファイ速度を比較します。

↓んでこんなん出ました。
*JTAGKey2-SWD


> "C:¥Devz¥Coreutils¥bin¥make.exe" program
openocd -s C:/Devz/ARM/OCD/tcl -f interface/ftdi/jtagkey2.cfg -c "transport select swd" -f target/nano130se_swd_flash.cfg -c "mt_flash main.elf"
Open On-Chip Debugger 0.8.0-dev-00358-g5b3885f-dirty (2014-02-19-17:22)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : Init SWD
swd
none separate
Info : add flash_bank nuc1x nano130se3.flash
adapter speed: 1000 kHz
cortex_m reset_config sysresetreq
Info : JTAG->SWD
Info : clock speed 1000 kHz
Info : SWD IDCODE 0x0bb11477
Info : nano130se3.cpu: hardware has 4 breakpoints, 2 watchpoints
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0xc1000000 pc: 0x000006ec msp: 0x20004000
auto erase enabled
Info : DeviceID : 0x00113034
Info : Detect NANO130SE3AN!
Info : Nuvoton NUC: Sector Erase ... (0 to 39)
Info : Nuvoton NUC: FLASH Write ...
wrote 20480 bytes from file main.elf in 2.452780s (8.154 KiB/s)
verified 20240 bytes in 0.203096s (97.322 KiB/s)
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0xc1000000 pc: 0x000006ec msp: 0x20004000
shutdown command invoked

> Process Exit Code: 0
> Time Taken: 00:04



*Versaloon-SWD

> "C:¥Devz¥Coreutils¥bin¥make.exe" program
openocd -s C:/Devz/ARM/OCD/tcl -f interface/vsllink_swd.cfg -f target/nano130se_swd_flash.cfg -c "mt_flash main.elf"
Open On-Chip Debugger 0.8.0-dev-00350-g6c74255-dirty (2014-02-19-11:18)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : OpenOCD runs in SWD mode
none separate
Info : add flash_bank nuc1x nano130se3.flash
adapter speed: 1000 kHz
cortex_m reset_config sysresetreq
Info : Versaloon(0x15)by Simon(compiled on Sep 5 2013)
Info : USB_TO_XXX abilities: 0x0000176E:0x010001EF:0xC0000007
Info : clock speed 1000 kHz
Info : SW-DP IDCODE: 0x0bb11477
Info : nano130se3.cpu: hardware has 4 breakpoints, 2 watchpoints
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0xc1000000 pc: 0x000006ec msp: 0x20004000
auto erase enabled
Info : DeviceID : 0x00113034
Info : Detect NANO130SE3AN!
Info : Nuvoton NUC: Sector Erase ... (0 to 39)
Info : Nuvoton NUC: FLASH Write ...
wrote 20480 bytes from file main.elf in 1.905981s (10.493 KiB/s)
verified 20240 bytes in 0.203097s (97.321 KiB/s)
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0xc1000000 pc: 0x000006ec msp: 0x20004000
shutdown command invoked

> Process Exit Code: 0
> Time Taken: 00:02


ログも微妙に違いますが書き込みベリファイの速度に注目すると…
JTAGKey2-SWDが
wrote 20480 bytes from file main.elf in 2.452780s (8.154 KiB/s)
verified 20240 bytes in 0.203096s (97.322 KiB/s)
Versaloon-SWDは
wrote 20480 bytes from file main.elf in 1.905981s (10.493 KiB/s)
verified 20240 bytes in 0.203097s (97.321 KiB/s)
となり、JTAGKey2-SWDの方は書き込みでは2割ほどパフォーマンスが落ちますがまだ
コードが練られてない段階ながらも十分実用レベルで使用可能なことが分かりました♥
ついでにトライステートバッファによる制御がなくても抵抗一本でお手軽に既存のFT2232
系のJTAGデバッガがSWDにも対応できるのでなんというかCMSIS-DAPとは一体何
だったのか
感すらあります。

というわけでまだまだコードの手直しが必要な段階ですがFTDIデバイスのSWD対応は
シンプルかつ強力なポテンシャルを秘めていると言えるでしょう!

Comments

Post a Comment








Go to top of page