urJTAG(2)
urJTAGでバウンダリスキャンしてみる(2)
urJTAGを使ってLCMXO2280 breakout bordをバウンダリスキャンする。
urJTAGの設定はここを参照。
- IDレジスタを読む
jtag> instruction IDCODE jtag> shift ir
jtag> shift dr
jtag> dr
00000001001010001101000001000011
jtag> idcode Reading 0 bytes if idcode
Read 01000011 11010000 00101000 00000001 00000000 00000000 00000000 00000000
jtag>
jtag> instruction IDCODE ← インストラクションを指定:IDCODE
jtag> shift ir ← インストラクションレジスタにセット
jtag> shift dr ← バウンダリスキャンレジスタをシフト
jtag> dr ←バウンダリスキャン
レジスタを表示
データを読む場合の操作は、インストラクションを指定→インストラクションレジスタ(IR)をシフト→バウダリスキャンレジスタ(BSR)をシフト→BSRを表示
データを書く場合の操作は、インストラクションを指定→IRをシフト→BSRに値をセット→BSRをシフト
である。 - ピンの状態を読み取る
ピンの状態を読み取る場合には、SAMPLE/PRELOADコマンドを使用する。
jtag> instruction SAMPLE/PRELOAD jtag> shift ir
jtag> shift dr
jtag> dr
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111000101100100010001111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111011111111111
jtag>
太字の部分がLEDが繋がっているポートである。
良く見るとLEDは8個しかないのにデータが多い。
回路図を見ると、
8個のLEDは、CPLDのピンPB14D,PB15A,PB15B,PB15D,PB16A,PB16B,PB16C,PB16Dに接続されていることが分かる。
これらのピンの素性はBSDLに記述されている。---lcmxo2280c_cabga256.bsm--- PB16DはBSRの413番目のレジスタに接続されている双方向のポートであって、方向の制御はBSRの412番目のレジスタで行うことを示している。
attribute BOUNDARY_REGISTER of LCMXO2280C_XXB256 : entity is
:
"413 (BC_7, PB16D, bidir, X, 412, 1, Z), " &
"412 (BC_2, *, control, 1), " &
:
つまり、入出力を行う際には、この2つのレジスタに値をセットする必要があるということである。
ピンの制御を行う際にいちいち2ビット制御するのは面倒なのでsetコマンドを使う。
PB16Dに"0"を出力したい場合にはset signal PB16D out 1
のように指定する。
このLEDは"0"を出力すると点灯、"1"を出力すると消灯なので点灯させてみる。
jtag> instruction EXTEST jtag> shift ir
jtag> set siglan PB16D out 0
jtag> shift dr
EXTESTは指定したビット列を出力する命令である。
set signalコマンドでPB16Dに"0"を出力する設定にして、BSRをシフトすることでビット列がピンに出力される。 - まとめて処理
1ピンずつ手動で制御するのも面倒だし間違えることがあるので、決まった手順はスクリプトを作って自動的に制御させる。
---led1.txt---
set signal PB14D out 1
set signal PB15A out 1
set signal PB15B out 1
set signal PB15D out 1
set signal PB16A out 1
set signal PB16B out 1
set signal PB16C out 1
set signal PB16D out 1
shift dr
set signal PB14D out 0
shift dr
usleep 50000
usleep 50000
set signal PB15A out 0
shift dr
usleep 50000
usleep 50000
set signal PB15B out 0
shift dr
usleep 50000
usleep 50000
set signal PB15D out 0
shift dr
usleep 50000
usleep 50000
set signal PB16A out 0
shift dr
usleep 50000
usleep 50000
set signal PB16B out 0
shift dr
usleep 50000
usleep 50000
set signal PB16C out 0
shift dr
usleep 50000
usleep 50000
set signal PB16D out 0
---led1.txt---
このようなファイルを作って
jtag> cable ft2232
Connected to libftd2xx driver.
jtag> detect
IR length: 8
Chain length: 1
Device Id: 00000001001010001101000001000011 (0x000000000128D043)
Manufacturer: Lattice Semiconductors
Part(0): LCMXO2280-caBGA256
Stepping: 0
Filename: c:\program files\urjtag\data/lattice/lcmxo2280c-cabga256/lcmxo2280c-cabga256
jtag> instruction EXTEST jtag> script led1.txt jtag>
LEDが1秒間隔で順に点灯する。
ダウンロード LEDbar3.mp4 (975.6K)
« 中野四季の都市(セントラルパーク・ウエスト) | トップページ | マイケル・サンデル特別講義 »
「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)
コメント