2015年12月5日土曜日

BeagleBone BlackをCCSでJTAGデバッグ!

BeagleBone BlackをCCS上でJTAGデバッグできるようにしてみたけれど、またすぐに忘れると思うので備忘録として残すことにしました。


  • JTAG信号は、BBBの裏側P2コネクタにある。JTAGヘッダは、Samtec FTR-110-03-G-D-LC-06が使え、Digikeyで買える
  • JTAGエミュレータは、XDS100v2を使用。
  • JTAG信号の接続は、こちら(http://elinux.org/BeagleBoardJTAG)この絵(http://elinux.org/File:Ti_arm_jtag.jpg)が分かりやすいと思う。絵の"20-pin TI header"がBBB側のピン配置で、真ん中の"14-pin TI header"(いわゆる、"Compact TI header")がXDS100v2側のピン配置。この1~14番ピンをそのままストレートに繋げば良い。BBB側の15~20ピンは繋がなくても問題なかった。
つぎに、CCS側の設定。 
  • まずデバッガコンフィグレーションファイル(.ccxml)を作る。
    名前は適当にbbb.ccxmlとかで作成して、下記のように設定する。下記以外の設定についてはよくわからなかった。デフォルトのままでいいのではないかと思われる。
    なお、gelファイルについては、StarterWareにあるものをそのまま使用できた。



  • 次にDebug Configurrationの設定を行う。ここが一番苦労したところ。

    購入したBBBのRev.Cは、電源を投入するとすぐにu-boot~Linuxが起動してしまう。古いリビジョンのものは、SDカードを抜いてBBBのS2ボタンを押しながら起動すると、内蔵eMMCからのu-bootプロセスをキャンセルできたようだけど、Rev.Cは有無を言わせず起動してしまう。そのせいか、u-boot起動orLinuxカーネル起動後にCCSでデバッガ接続をしようとしても、次のようなエラーが表示されて接続できなかった。

    CortxA8: GEL: Error while executing OnTargetConnect(): Target failed to read 0x44E10040 at (*((unsigned int *) (0x44E10000+0x40))>>22) [beagleboneblack.gel:366] at GetInputClockFrequency() [beagleboneblack.gel:437] at ARM_OPP100_Config() [beagleboneblack.gel:357] at AM335x_BeagleBlack_Initialization() [beagleboneblack.gel:343] at OnTargetConnect() .
    CortxA8: Trouble Writing Memory Block at 0x44e35048 on Page 0 of Length 0x4: (Error -1065 @ 0x3D5A) Unable to access device memory. Verify that the memory address is in valid memory. If error persists, confirm configuration, power-cycle board, and/or try more reliable JTAG settings (e.g. lower TCLK). (Emulation package 5.1.641.0) 

    原因はよくわからないが、u-bootまたはLinuxがMMUを設定してしまい、JTAGデバッガと言えどレジスタ関係へのアクセスが禁止されてしまっているのが原因ではないかと。

    これを回避する方法が下記の設定。要点は、デバッガ接続時ターゲットをリセットさせるのだけれど、Cortex-A8だけでなく、CS_DAP_DebugSSとIcdPick_D_0もリセットするところ。




これで、CCS上でF11を押すことで、いつでもデバッガを起動できるようになった。

0 件のコメント:

コメントを投稿