OpenOCD小ネタ11 -EFM32 ZeroGeckoとJLinkのSWD接続正式対応-


以前ちらっとお見せしましたがEFM32のZeroGeckoシリーズ
評価ボードをだいぶ前に手に入れて、評価しております。


MCUにはおなじみトカゲのマークがあります。Cortex-M0+コアを持つ
EFM32ZG222F32が搭載されています。


ボードは低消費電力のアプリ作成を意識したものになっていて搭載されて
いる液晶もメモリ液晶と呼ばれる超低消費電力なものとなっています。


最初に書き込まれているプログラムは、メモリ液晶を利用したインベーダー
もどきなゲームを遊ぶことができます。
なおこのゲーム、一機死んだら即ゲームオーバーなかなりシビアな代物です!!!

今回の記事に合わせ、私が基本としているLED&UARTなEFM32評価ボード向けの
GCCプロジェクト
も作成しております。
低消費電力モードは使わず極めてシンプルな代物です。

また、以前もふれましたがOpenOCDからもEFM32ZGシリーズも書き込みが
できるように対応しております
。EFM32自身はSW-DPしか持たないので
書き込み/デバッグするためにはSWD接続可能なアダプタが必要となりますが
現在ではSTLink/V2,JTAGKey2,Versaloon,そして後で述べるJLinkがSWD接続
対応のデバッガアダプタとしてOpenOCDから使用可能になっておりますので
不自由はしないでしょう。



こちらは素組みのEFM32ZG板をSWD接続版のJTAGKey2でデバッグしてる
ところです。もうおなじみの画面ですね。


話は評価ボードに戻しますがこちらにはJLink-OBと呼ばれる他社向けの
MCU評価ボード専用のJLinkが搭載されております。LPC-Link2等でもほぼ
同じ仕組みでオンボードでJLinkをエミュレーションしていますが従来、
OpenOCDからはJTAG接続だけが可能でした。
したがってSW-DPしか存在しないEFM32ではOpenOCDで書き込みデバッグする
際はオンボのJLinkは無効にしてSTLink/V2やVersaloonのSWD版で使用
せざるを得なかったのですが、少し前にJLinkも
正式にSWD接続に対応し
、単体でフル活用できるようになっております♥


オンボJLinkでOpenOCDです。JLink純正のドライバじゃないと外部に
デバッグプローブを引き出すことはできませんが私の場合はJLinkエミュが
可能なLPc-Link2を所持してるので通常はlibusb-1.0のみで十分だと思ってます。

ここでOpenOCDでEFM32シリーズを操作するためのコツですが…EFM32は
リセット直後の短い時間の間だけSWDの信号線が別の独自のデバッグ
プロトコルとして挙動するのでSRSTと組み合わせて操作することが
できません。したがって"connect under reset"は使用不可能になります。
誤って低消費電力モードにしてしまうとOpenOCDからの操作ではもう
元に戻せなくなりますので、くれぐれもご注意ください。

しかしながらEFM32板のオンボJLinkはsegger純正ドライバとEFM32が
提供するデバッグツール"energyAware Commander"から独自プロトコルの
操作が可能なため、初期状態に戻すことができるので心配はいりません。



ここまではEFM32とオンボJLinkについて述べてきました。私はJLink化が
可能なLPC-Link2を持っていますのでLPC-Link2にJLinkのファームウエアを
再び書き込みこちらも同じようにSWDで接続出来るか試してみたいと思います。

↑ターゲットはトラ技ARMライタという名のLPC11U35板です。
ライセンスの関係上NxP以外の製品で使うところはお見せできませんが
OpenOCDではほぼすべてのARMマイコンを書き込みデバッグできる攻守ともに
非常にバランスの良いデバッガアダプタとなりました。

20kBほどの同一のバイナリを同一のUSBポートから書き込んだときの
CMSIS-DAPとJlinkエミュとの速度の比較です。
*CMSIS-DAP on LPC-Link2
wrote 20480 bytes from file main.elf in 10.265428s (1.948 KiB/s)
verified 20204 bytes in 0.437491s (45.099 KiB/s)

*JLink on LPC-Link2
wrote 20480 bytes from file main.elf in 2.624950s (7.619 KiB/s)
verified 20204 bytes in 0.265620s (74.281 KiB/s)


CMSIS-DAPファームの時はOpenOCDの実装がせっかくのブロック転送機能を
フルに利用していない残念仕様のためやたらと遅いのですがJlinkエミュなら
バルク転送がびしばし使えるので超早いです♥但しSRST/TRSTの操作が
ちょっと怪しい所があります。
seggerの純正のツールではちゃんと操作できるので時間を見て両者の挙動の違いを
詰めて行きたいと思います。現状SRSTを必ず要する場面は限られていますので
JLinkエミュにしっぱなしの方がサクサク作業を進められると思います。
ねむいさんのおすすめです。
(※ただしNxP製品以外の書き込み/デバッグに使っちゃ駄目ですよ!)
20140820追:
F**K


今回は数日前のOpenOCDのコミットでHLA(HighLayerAdapter)系デバッガ
アダプタのcfgが一般の物に統合されたというかなり重要なことについても
お伝えしたかったのですが、JlinkのSWD対応の紹介で長くなりすぎましたので
次回じっくりと解説させていただきます。

Go to top of page