Stm32.cfgを読む

出典: Wikimura

OpenOCDのtargetディレクトリにあるstm32.cfgは、ターゲットデバイス用のTAPを設定するための記述があるようです。 それを読んでみます。

stm32.cfg

# script for stm32

if { [info exists CHIPNAME] } {	
   set  _CHIPNAME $CHIPNAME    
} else {	 
   set  _CHIPNAME stm32
}
  • CHIPNAMEという変数があるか?
    • あるなら_CHIPNAME変数に既存のCHIPNAMEを代入
    • なければ_CHIPNAME変数に文字列stm32を入れる
if { [info exists ENDIAN] } {	
   set  _ENDIAN $ENDIAN    
} else {	 
   set  _ENDIAN little
}
  • ENDIANという変数があるか?
    • あるなら_ENDIAN変数に既存のENDIANを代入
    • なければ_ENDIAN変数に文字列littleを入れる
# jtag speed
jtag_khz 500
  • ドングルの設定([8]参照)
jtag_nsrst_delay 100
jtag_ntrst_delay 100
#use combined on interfaces or targets that can't set TRST/SRST separately
reset_config trst_and_srst
  • リセットに関する設定([2]参照)
#jtag scan chain
if { [info exists CPUTAPID ] } {
   set _CPUTAPID $CPUTAPID
} else {
  # See STM Document RM0008
  # Section 26.6.3
   set _CPUTAPID 0x3ba00477
}
jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
  • CPUTAPIDという変数があるか?
    • あるなら_CPUTAPID変数に既存のCPUTAPIDを代入(予め用意しておかないといけない)
    • なければ_CPUTAPID変数に文字列0x3ba00477を入れる(STMicroelectronicsのリファレンスマニュアルRM0008、26.6.3にIDについての記述がある[4])
  • 新しいCPU用TAPを生成する([5]参照)
if { [info exists BSTAPID ] } {
   set _BSTAPID $BSTAPID
} else {
  # See STM Document RM0008
  # Section 26.6.2
  # Medium Density RevA
  set _BSTAPID 0x06410041
  # Rev B and Rev Z
  set _BSTAPID 0x16410041
  # High Density Devices, Rev A
  set _BSTAPID 0x06414041
}   
jtag newtap $_CHIPNAME bs  -irlen 5 -ircapture 0x1 -irmask 0x1 -expected-id $_BSTAPID
  • BSTAPIDという変数があるか?
    • あるなら_BSTAPID変数に既存のBSTAPIDを代入
    • なければ_BSTAPID変数に文字列0x06414041を入れる
      • 3つ連続しているが、最後のが反映される
      • 実際には予め用意しておき、else側を使わないこと
      • BSTAPID(Boundary Scan Test Access Point ID)は、CPUIDと同様RM0008に記述されているらしい。
  • 新しいバウンダリスキャン用TAPを生成する([5]参照)
set _TARGETNAME [format "%s.cpu" $_CHIPNAME]
target create $_TARGETNAME cortex_m3 -endian $_ENDIAN -chain-position $_TARGETNAME
$_TARGETNAME configure -work-area-virt 0 -work-area-phys 0x20000000 -work-area-size 16384 -work-area-backup 0
  • [変数_CHIPNAMEの中身.cpu]を変数_TARGETNAMEに代入
  • ターゲットの生成([6]参照)
  • ターゲットの設定([6]参照)
flash bank stm32x 0 0 0 0 0
# For more information about the configuration files, take a look at:
# openocd.texi
  • Flash設定(このままでは使えない...[7]参照)

参考文献

  1. infoコマンド
  2. Reset Configuration
  3. STM32シリーズ資料
  4. STM32シリーズリファレンスマニュアル(RM0008)
  5. Tap Creation
  6. Target Configuration
  7. Flash Configuration
  8. Interface - Dongle Configuration
個人用ツール