はじめに anchor.png

各種JTAG-ICEに対応したオープンソースとして公開されているデバッガです。マイコン上のプログラムをデバッグする事だけが目的というわけではなく、マイコンに接続ないし内蔵された様々なメモリへのアクセスも出来ますので、単体でマイコン内蔵のFLASH書き込みツールとしても便利に使えます。
ここではARM7に主眼を置いていますが、OpenOCDとしてはARM7 (ARM7TDMI, ARM720t), ARM9 (ARM920T, ARM922T, ARM926EJ-S, ARM966E-S)・XScale (PXA25x, IXP42x)・Cortex-M3 (Stellaris LM3, ST STM32F1, ST STM32F2, ATMEL SAM3等)のデバッグ、CFI compatible NOR フラッシュ (Intel, AMD/Spansion)・各種マイコン内蔵フラッシュ (LPC2000, LPC1700, AT91SAM7, SAM3, SAM4, STR7x, STR9x, LM3, STM32F等)の書き込み等をサポートしますので、興味があれば本家のサイトを参考に使ってみてはいかがでしょう。

Page Top

使用する前に anchor.png

Page Top

OpenOCDの構成イメージ anchor.png

OpenOCDによって構成できるシステムの概略イメージです。

oocd_diaglam.png

OpenOCDはPC内でネットワークのデーモンとして実行され、割り当てられたポートに対して種々のアプリケーションからアクセスし、OpenOCD及びJTAG I/F Hardwareを介してターゲットとコンタクトする形を取るのが一般的の様です。

Page Top

コンパイル済みバイナリの提供 anchor.png

OpenOCD自体はソースから使用者自ら構築するのが通常ですが、TINY JTAG-ICE2を有効に活用するためにWindows上で動作するバイナリを提供しています。I/FないしチップはTINY JTAG-ICE2, J-LINK, FT2232, ST-Link, CMSIS-DAPに限定し、以下の様な操作でmingw上でコンパイルしています。

# git clone git://git.code.sf.net/p/openocd/code openocd
# cd openocd
# make distclean
# git pull origin master
# ./guess-rev.sh
# ./bootstrap
# ./configure --build=mingw32 --host=mingw32 --disable-dependency-tracking --disable-werror --enable-dummy --enable-jtag_vpi --enable-remote-bitbang --enable-amtjtagaccel --enable-gw16012 --enable-parport --enable-parport-giveio --enable-usbprog --enable-jlink --enable-stlink --enable-usb_blaster_libftdi
# make

OpenOCD_x86_0.10.0+dev-00921-g263deb380
OpenOCD_x64_0.10.0+dev-00921-g263deb380
OpenOCD_x86_0.10.0+dev-00920-g6ea43726a
OpenOCD_x64_0.10.0+dev-00920-g6ea43726a
OpenOCD_x86_0.10.0+dev-00916-g42cee465c
OpenOCD_x64_0.10.0+dev-00916-g42cee465c
OpenOCD_0.9.0-dev-00874-g2d4ae3f-ft2232o​nly
OpenOCD_0.8.0-rc2-dev-00456-g7ad635b-ft2​232only.zip

※0.10.0-rc1以降のバイナリからWinUSBベースに変更したので、デバイスドライバはこちらの手順でインストールの事

Page Top

適用可能なJTAG I/F anchor.png

Page Top

TINY JTAG-ICE2 (FT2232ベース) anchor.png

市販品は星の数ほどありますが、似た回路で自作するのも有りです。最新のデバイスドライバ等の詳細はTINY JTAG-ICE2のページで確認してください。

Page Top

ST-LINK/V2 anchor.png

WinUSBのデバイスドライバに入れ替える必要があります。

  1. Zadigのサイトよりドライバのインストールツールをダウンロードします。 http://zadig.akeo.ie/
  2. ダウンロードしたZadigのツールを起動します。
    Zadig_1.png
  3. メニューの「Options」→「List All Devices」をクリックした後、リストに「STM32 STLink」が含まれていることを確認し選択します。
    Zadig_2.png
    Zadig_3.png
  4. 最後に入れ替えるドライバのリストから「WinUSB」を選択し、「Replace Driver」ボタンを押せばインストールは完了です。
  5. デバイスドライバを入れ替えてしまうとST社から提供されているツール類では使用できなくなりますので、元に戻したい時はデバイスマネージャから手動でデバイスドライバを入れ替えて下さい。
Page Top

J-LINK anchor.png

最近のパッチでかなり広い範囲でJ-LINKのサポートがなされています。各社の評価キットを購入して余っているJ-LINKがOpenOCDで使える可能性がありますので、試してはどうでしょう。
Linuxでは当然の様につなげば直ぐに使える状態になりますが、Windowsではそうもいきません。OpenOCDにおいてはUSBデバイスのアクセス方法がLinuxの流儀に大体従っているため、かなり低レベルの所からUSBを制御できる環境が必要です。OpenOCDにおいてはlibusbのWindows版であるlibusb-win32を仲介する事でJ-LINKへ直接制御をかけられる様になります。
libusb-win32をインストールしても問題ない環境であれば良いのですが、PC丸ごとおかしげになるのが普通ですので止めるべきです。ここではJ-LINK用のinfファイルを構成し、J-LINKのみのデバイスドライバを置き換える方法を紹介します。

  • libusb-win32のダウンロードからlibusb-win32-bin-1.2.6.0.zipを落としてくる。
  • J-LINKをPCに接続し、ダウンロードしたファイルを適宜解凍してbin/x86フォルダにあるinf-wizard.exeを実行。
    libusb-bin.png
  • USBにつながったデバイスが列挙されるので、J-LINKに該当するデバイスを選択し、Next>をクリック。
    inf-wizard.png
  • ベンダIDやプロダクトIDが表示され、間違いが無ければNext>をクリック。
    inf-wizard2.png
  • 保存先とファイル名を聞いてくるので、適宜入力し保存をクリック(ここではひとまず「J-LINKforOOCD.inf」としている)。
    j-link_saveinf.png
  • 最後にFinishを押すと2つのファイル(J-LINKforOOCD.catとJ-LINKforOOCD.inf)が作られる。binフォルダ内にある4つのフォルダを今作ったinfファイルにコピーしてデバイスドライバ一式が完成。
    j-link_inf_sys_dll.png
  • SEGGER社のJ-LINKソフトウェアのデバイスドライバが適用されているのであれば、デバイスマネージャで先ほど作ったデバイスドライバへ手動で入れ替える。不明なデバイス状態もしくはデバイスドライバを要求された場合も、先ほどのデバイスドライバを適用すれば準備完了。

J-LINKソフトウェアにおいてライセンスを登録しない場合に利用制限を受けるJ-LINKが、うまくゆけばOpenOCDで活用できるかもしれません :p
J-LINKソフトウエアで使用したくなったら、デバイスドライバを元の物に入れ替えれば良いまでです。

Page Top

その他 anchor.png

ターゲットによって使用方法が異なる部分が多いため、ドキュメントを参考にしてもらうのがベストです。ここで一生懸命日本語訳しても、あっという間に陳腐化して全く使い物になる代物ですので。

動かすまでの大まかなネタは、

  • OpenOCD.exe単体では実行しても何事もなかったように終了してしまう。実行時に諸々記述したオプションを指定し、使用するUSB接続のJTAG I/Fを接続した状態でしか使用できない。
  • 設定ファイルのある場所を検索させるには、-sオプションを付加して起動。
  • 何が起こっているのか詳細に知りたい時は-d 3を指定すると、内部状況をつぶさにコンソールに吐き出す。そのログをファイルに保存するオプションもあり。
  • shutdownコマンドを記述しない設定ファイルを指定して起動すると常駐する。また、設定ファイル内にtelnet_portの指定があればtelnetのデーモンとなるので、指定されたポートへtelnetクライアントを使ってログインできる。使用できるコマンドはhelpで参照可。
  • Windows環境で動くと言っても、自らウィンドウを持つプログラムではない。コマンドプロンプト内でひっそり動いている。強制終了するならそのコマンドプロンプト内で[CTRL]+[C]を入力するか、コマンドプロンプトのタイトルバーの×を押すが程度。
  • 設定ファイルにgdb_portの設定があれば、gdbからそのポートへアクセスしgdbのコマンドを使用してターゲットの制御が可能。
  • FLASH WRITERのCPU TYPEにOpenOCDが指定されていると、FLASH WRITERはOpenOCDのtelnetデーモンにログインし、FLASH WRITERのWrite Script Fileに従ってコマンドを送信できる。先のtelnetクライアントにて手動でコマンドを叩くといった操作を自動化できるので、複数のコマンドを併用する必要があるターゲットのフラッシュROMの書き込み処理に使用してるだけ。
  • 日本語は理解してくれないので、ファイル名等は半角英数字でなくてはならない。
  • 設定ファイルの類の改行コードがCR+LFだと解釈しないので、必ずLFのみにする事。
  • 全く同じ回路であっても、ターゲット間をつなぐケーブルの長さ等の条件によって両者で同じ設定で同様に動くとは限らない。JTAGラインのプルアップ/ダウン・コネクタの接触抵抗・ノイズの影響等を考慮しながらJTAGのスピードを調整する。速ければ良い物でもない。
  • 予め用意された設定ファイルはよく見かける主要なマイコン用の物しか用意されていない。似たような型番だからといって同じ設定ファイルが使えるわけでもないので、新しいデバイスに対応させるにはそれ相応のスキルが必要。
  • チップ内蔵のフラッシュROMに書き込むだけならOpenOCDを使うメリットは無く、サポートされていないチップの方が遙かに多い。メーカの提供するツールを適用する方が良い。
  • 本家に協力者として参加するのも良し。自力で解決したいのであればメーリングリストに参加すべき。英語は必須。

Front page   Diff ReloadPrint View   Page list Search Recent changes   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)
Last-modified: 2019-07-08 (Mon) 05:43:15 (JST) (12d)