はじめに 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に限定し、以下の様な操作でMSYS2上でコンパイルしています。

# 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.12.0+dev-00755-gedf2c82cf
OpenOCD_x64_0.12.0+dev-00755-gedf2c82cf
OpenOCD_x86_0.12.0+dev-00730-gad2161361
OpenOCD_x64_0.12.0+dev-00730-gad2161361
OpenOCD_x86_0.12.0+dev-00699-ge09bb72da
OpenOCD_x64_0.12.0+dev-00699-ge09bb72da
OpenOCD_x86_0.11.0+dev-00873-g219cb9598
OpenOCD_x64_0.11.0+dev-00873-g219cb9598
OpenOCD_x86_0.10.0+dev-01524-g861e75f54
OpenOCD_x64_0.10.0+dev-01524-g861e75f54
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

以前紹介していたlibusb-win32のドライバに入れ替える方法ではなく、Windows上であればこちらもST-LINKと同様にWinUSBのデバイスドライバに入れ替える事で対応します。

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: 2024-10-06 (Sun) 11:58:19 (JST) (20h)