バウンダリスキャンでRAMを読む
若い人たちに、バウンダリスキャンでRAMを読む解説をすることがあるのだが、説明が悪いのか聞いてる人たちはあまりピンときてないようなので、LCMXO2280C-B-EVN+UrJTAGを使ってデモ環境を作ってみた。
「NORFlashやSRAMは、NANDFlashと違ってアドレスを入力してOE,CEをLにすればデータが出てくるので簡単に読める。」
という説明をしたいのである。
- アドレス、OE、CE制御→データ出力
- バウンダリスキャンでアドレス、OE、CE出力可能
- バウンダリスキャンでデータ入力可能
簡単でしょ! というわけだ。
ベテランの人にこの話をしたら、
「そもそも、NORFlashやSRAMのアクセス方法を知らない人には、イメージできないのでは?」
という意見をもらった。
ならばと、アドレス、データに接続したスイッチをパチパチやって、データのアクセスが簡単っていうことが体験できるように、アドレス用8bit、データ用8bitのDipSWとOE、WEのスイッチを載せてみた。
アドレス、データ入力スイッチはトグル・スイッチを使いたいところだけれど、安さに負けてDIPスイッチにした。
こんな↓回路にしてみた。
バウンダリスキャンでRAMにアクセスしなければならないので、RAM(HM628256:256Kx8 SRAM)の端子、SWは個別にCPLDに入力し、バッファを経由してSWとRAMを接続している。
ここからが本題 バウンダリスキャンでRAMを読む
UrJTAGでFlashにアクセスするためにはBUSを定義するのが簡単である。デバイスがCPUであればすでに定義されていて、
jtag> help initbus |
で一覧が表示される。
このデモ環境ではCPLDを使用しているので、prototypeバスを使って自分でBUSを定義する必要がある。
jtag> initbus prototype amsb=A14 alsb=A0 dmsb=D7 dlsb=D0 ncs=nCS noe=nOE nwe=nWE amode=x8
のように指定すると、信号名D7、D6、D5、D3、D2、D1、D0を自動的に探してくれる。同様に信号名A14からA0を自動的に探してくれるので隣り合ったピンに配置していなくてもよい。
問題はA14~A0、D7~D0のように、プレフィックス'A'や'D'が同じで、サフィックス'14'~'0'が連続していなければならないことである。
LCMO2280では信号名はPT2D、PT2Cのような名づけ規則なので
jtag> initbus prototype amsb=PT2C alsb=PT6C ・・・・
のように指定してもうまく探してくれない。
エイリアス機能があって、PT2C→A14、PT6C→A0のエイリアスを指定してやればよさそうだ。エイリアス機能 saliasのヘルプを表示させると
jtag> help salias |
signalコマンドのヘルプが表示される。
aliasコマンドではなくてsignalコマンドを使えと言うことかと、signalでnOEを指定し、nOEに’0’を出力してみた。
jtag> signal nOE PT7A |
ところが、nOEは出力に設定できないとおっしゃる。
ユーザマニュアルには saliasコマンドがちゃんと記載されているので、saliasコマンドでやってみると、
jtag> salias nOE PT7A |
ちゃんと指定できるではないか。
ということで、SRAMの全ピンのエイリアスを設定するスクリプトを書いて実行すると、A14~A0、D7~D0、nCE、nOE、nWEが使えるようになった。
メモリ・アドレス0000hのデータを読むには、
- 外部テストモードに設定
- BSRのA14~A0にアドレス(0000h)、nCE、nOEに'0、nWEに'1'をセット
- BSR出力
- BSR入力
- データ表示
jtag> instruction EXTEST |
メモリ・アドレス0000hにデータA5hを書くには、
- 外部テストモードに設定
- BSRのA14~A0にアドレス(0000h)、D7~D0にデータ(A5h)、nCE、nOWに'0、nOEに'1'をセット
- BSR出力
- BSRのnOEに'1'をセット
- BSR出力
jtag> instruction EXTEST |
基本的にはこれで読み書きできるのだが、この操作をアドレスを変えて何回も繰り返すのは大変だ。
ということでこれらの操作を自動的に行うメモリアクセス系のコマンド、peek、poke、writemem、readmemがある。
アドレス0000hにA5hを書いて、それを読みだすには peek、pokeを使うととっても簡単である。
jtag> script D:\Users\Yoshi\Documents\JTAG\alias.txt |
めでたし、めでたし。
( 修正2012/8/26: nitbus→initbus)
最も大きな問題は、このデモでNORFlash、SRAMはバウンダリスキャンで簡単に読めるということが分かってもらえるどうかなのだが
「自分の常識他人の非常識」にはいつも気を付けているつもりなのだが、見事にハマってしまった。
« やっぱりソニーの話題に反応してしまう | トップページ | 「文章の書き方」本 »
「JTAG」カテゴリの記事
- STM32F0-Discovery + OpenOCD(2014.07.30)
- versaloon(2014.02.03)
- usb_jtag + カメレオンUSB FX2(2013.09.16)
- OpenOCD TI-ICDI + LM4F120 LaunchPad(2013.09.03)
- JTAGkey Clone(2012.08.04)
コメント