Files
Gen4_R-Car_Trace32/2_Trunk/demo/arm/hardware/imx6/imx6-sjc-access.cmm
2025-10-14 09:52:32 +09:00

173 lines
4.1 KiB
Plaintext

; --------------------------------------------------------------------------------
; @Title: Access to SJC Registers on i.MX6
; @Description:
; Example shows how to access the SJC Registers of an i.MX6 Solo/Dual/Quad.
; The example verifies the IDCODE of the i.MX6 first and tries to access the
; EXTRA_DEBUG register afterwards. Script uses READ ACCESS ONLY.
; Note:
; * With SJC_MOD=0 the total IR-Lenght is 5+4+4 = 13
; * The script is respects only this specific daisy chaining configuration
; Prerequisites:
; * JTAG is connected to MIPI Connector
; * SJC_MOD=0 (for SabreLite don't connect pin 7 and pin 9 of MIPI connector)
; * i.MX6 is not DaisyChained with other chips
; @Keywords: Freescale, SDMA, SecureJtag
; @Author: AME
; @Board: iMX6-SabreLite
; @Chip: IMX6*
; @Copyright: (C) 1989-2022 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: imx6-sjc-access.cmm 18877 2022-02-02 07:04:07Z bschroefel $
LOCAL &value &SdmaDapIrPattern &SdmaDapDrPattern
ON CMD GShiftIr GOSUB GotoShiftIr
ON CMD GShiftDr GOSUB GotoShiftDr
ON CMD GDef GOSUB GotoDefault
&SdmaDapIrPattern="1 1 1 1 1 1 1 1 "
&SdmaDapDrPattern="0 0"
; enable JTAG output driver
; RESET TAP CONTROLLER
JTAG.PIN ENable
GOSUB Init
; shift in BYPASS IR
GShiftIr
JTAG.SHIFTREG %Long 0xffffffff 0xffffffff
GDef
GShiftDr
JTAG.SHIFTREG 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
GDef
; Set IDCODE IR
GShiftIr
JTAG.SHIFTREG &SdmaDapIrPattern 0 0 0 0 0
GDef
GShiftDr
; shift in 32 dummy bits to get the IDCODE
JTAG.SHIFTREG &SdmaDapDrPattern 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
GOSUB GetSjcOut JTAG.SHIFT()
ENTRY &value
PRINT "Sjc JTAG ID = " &value
IF (&value&0x7fe)!=0x1c
(
PRINT %ERROR "JTAG ID INVALID"
ENDDO
)
GDef
; set EXTRA_DEBUG IR - Command 0x5 READ (SSR)
GShiftIr
JTAG.SHIFTREG &SdmaDapIrPattern 0 0 1 0 0
GDef
GShiftDr
JTAG.SHIFTREG &SdmaDapDrPattern 1 0 1 0 0 1
GDef
GShiftDr
JTAG.SHIFTREG &SdmaDapDrPattern 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
GOSUB GetSjcOut JTAG.SHIFT()
ENTRY &value
PRINT "SSR value " &value
GDef
; set EXTRA_DEBUG IR - Command 0x0 READ (GPUSR1)
GShiftIr
JTAG.SHIFTREG &SdmaDapIrPattern 0 0 1 0 0
GDef
GShiftDr
JTAG.SHIFTREG &SdmaDapDrPattern 0 0 0 0 0 1
GDef
GShiftDr
JTAG.SHIFTREG &SdmaDapDrPattern 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
GOSUB GetSjcOut JTAG.SHIFT()
ENTRY &value
PRINT "GPUSR1 value " &value
GDef
; set EXTRA_DEBUG IR - Command 0x1 READ (GPUSR2)
GShiftIr
JTAG.SHIFTREG &SdmaDapIrPattern 0 0 1 0 0
GDef
GShiftDr
JTAG.SHIFTREG &SdmaDapDrPattern 1 0 0 0 0 1
GDef
GShiftDr
JTAG.SHIFTREG &SdmaDapDrPattern 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
GOSUB GetSjcOut JTAG.SHIFT()
ENTRY &value
PRINT "GPUSR2 value " &value
GDef
; set EXTRA_DEBUG IR - Command 0x2 READ (GPUSR2)
GShiftIr
JTAG.SHIFTREG &SdmaDapIrPattern 0 0 1 0 0
GDef
GShiftDr
JTAG.SHIFTREG &SdmaDapDrPattern 0 1 0 0 0 1
GDef
GShiftDr
JTAG.SHIFTREG &SdmaDapDrPattern 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
GOSUB GetSjcOut JTAG.SHIFT()
ENTRY &value
PRINT "GPUSR3 value " &value
GDef
; set EXTRA_DEBUG IR - Command 0x3 READ (GPSSR)
GShiftIr
JTAG.SHIFTREG &SdmaDapIrPattern 0 0 1 0 0
GDef
GShiftDr
JTAG.SHIFTREG &SdmaDapDrPattern 1 1 0 0 0 1
GDef
GShiftDr
JTAG.SHIFTREG &SdmaDapDrPattern 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
GOSUB GetSjcOut JTAG.SHIFT()
ENTRY &value
PRINT "GPSSR value " &value
GDef
JTAG.PIN DISable ; disable JTAG output driver
ENDDO
; --------------------------------------------------------------------------------
; Subroutines
Init: ;()
(
; soft reset of the JTAG interface, goto Test-Logic Reset state
JTAG.SHIFTTMS 1 1 1 1 1
; enter Rti as default state
JTAG.SHIFTTMS 0
RETURN
)
GotoShiftIr: ;()
(
JTAG.SHIFTTMS 1 1 0 0
RETURN
)
GotoShiftDr: ;()
(
JTAG.SHIFTTMS 1 0 0
RETURN
)
GotoDefault: ;()
(
JTAG.SHIFTTMS 1 0
RETURN
)
GetSjcOut: ;(value)
(
LOCAL &value
ENTRY &value
&value=&value>>2.
RETURN &value
)