« Raspi4を使ってARMのデバッグ仕様を勉強中(続) | トップページ | Raspberry Pi 5 はSWDならデバッグできる »

2023.12.29

RasPi5のARM JTAGデバッグ命令を総当たりで探してみた

RasPi4でARM JTAGデバッグ機能にアクセスできるようになってきたので、Raspi5でも同様のことができないかどうかを試してみました。

Raspi4と5のJTAGで大きく異なるのは、IRの長さやIDCODEです。

  • Raspi4のBCM2711はIRが4bitで、IDCODEは0x4ba00477
  • Raspi5のBCM2712はIRが32bitで、IDCODEは0x2a03217f

です。

IRが4bitのARMではIDCODE命令のコードは0xeですが8bitのARMでは0xfeです。では、32bitは・・・ARMのデバッグ仕様書には記載されていません。本当にこれはARMのコアなのかと疑いたくなのですが、IRの長さは紛れもなく32bitあります。

様々な命令を発行しまくって調べてみると、確かに0xffffff0eや0xfffffffeのときにIDCODEを返してくるので、これで正しいのでしょう。

下4bitは0xeでいいのだとしても、上位28bitに何を入れればいいのかわかりません。

32bitの命令空間は広大なのですが、プログラムを組んで28bitを総当たりで調べてみることにしました。

まず、プログラムを組んでRaspi 5 のCPUのJTAG Instructionを順番に与えていって、何bitのDRがつながっているかを総当たりで調べてみます。

Raspi5jtag1

何かいろいろ反応しているようで、0xffffff10とか0xffffff18とかバウンダリスキャンレジスタが見えているのではないかと思えるようなビット列が見えています。(492490492というのは010010010010010010010000010010010010ですから、3bitごとに1が立つ、つまりバウンダリスキャンレジスタのコントロールセルが見えているのでしょう。)

いろいろ試してみるのですが、下4bitが6でもEでもIDOCDEが見えています。IRデコーダは3bitしかないのでしょうか。しかし上28bitも見ているような気もします。

Raspi5jtag2

INSTを変えてみるとDRの長さがいろいろ変わってくる(何も出力しないパターンもある)のですが、35bitのレジスタがつながることはないのかと思って、下4bitが0x0aである(DPACC)に相当すると思われる0x0000000aから0xfffffffaまでの268,435,456通りの命令コードを送ってみました。

DRに35bitレジスタが実装されていれば、「0x00000000 & "101" & ダミー32bit」 みたいなデータを与えると、「ダミー32bit & レジスタ読み出し値 & ACC」が読み出されるわけです。これを様々なINSTを送った後でDR SCANして試してみるわけです。

Raspi5jtag3

結果としては、35bitのレジスタが接続されることはありませんでした。

BCM2712のJTAGには、ARMのデバッグ仕様とは異なる実装がされているか、何かのセキュリティが働いていてJTAGデバッグを禁止している可能性が高いと言えます。

 

|

« Raspi4を使ってARMのデバッグ仕様を勉強中(続) | トップページ | Raspberry Pi 5 はSWDならデバッグできる »

コメント

コメントを書く



(ウェブ上には掲載しません)




« Raspi4を使ってARMのデバッグ仕様を勉強中(続) | トップページ | Raspberry Pi 5 はSWDならデバッグできる »