Compare commits

...

3 Commits

Author SHA1 Message Date
fecece3f20 update 2026-06-12 14:46:06 +09:00
9cdd1823ec add 2026-06-10 12:41:24 +09:00
38cb450796 add 2026-06-10 12:32:10 +09:00
31 changed files with 560 additions and 75 deletions

View File

@@ -0,0 +1,212 @@
; ============================================================
; Trace32 PRACTICE Script
; Description : Dump CPG Clock Control Registers
; CPG_SD0CKCR (0xE6150870) - SD0 Clock Control
; CPG_CSI0CKCR (0xE6150880) - CSI0 Clock Control
; CPG_DSICKCR (0xE6150884) - DSI Ext Clock Control
; ============================================================
; Output file path (edit as needed)
LOCAL &outfile
&outfile="C:\dump_cpg_clk_regs.txt"
; Open AREA window to show PRINT output
AREA.CLEAR
AREA.view
LOCAL &sd0ckcr
LOCAL &csi0ckcr
LOCAL &dsickcr
; Read register values
&sd0ckcr=Data.Long(SD:0xE6150870)
&csi0ckcr=Data.Long(SD:0xE6150880)
&dsickcr=Data.Long(SD:0xE6150884)
PRINT "============================================"
PRINT " CPG Clock Control Register Dump"
PRINT "============================================"
PRINT "CPG_SD0CKCR [0xE6150870] = 0x" %HEX &sd0ckcr
PRINT " STP0HCK (BIT9) = " (&sd0ckcr>>9.)&0x1 " (0=run, 1=stop)"
PRINT " SD0SRCFC[2:0] (BIT4:2) = " (&sd0ckcr>>2.)&0x7
PRINT ""
PRINT "CPG_CSI0CKCR [0xE6150880] = 0x" %HEX &csi0ckcr
PRINT " CKSTP (BIT8) = " (&csi0ckcr>>8.)&0x1 " (0=run, 1=stop)"
PRINT ""
PRINT "CPG_DSICKCR [0xE6150884] = 0x" %HEX &dsickcr
PRINT " CKSTP (BIT8) = " (&dsickcr>>8.)&0x1 " (0=run, 1=stop)"
PRINT "============================================"
; Data.dump window (opens dump window at CPG_SD0CKCR address)
PRINT ""
PRINT "--- Data.dump view (starting at CPG_SD0CKCR 0xE6150870) ---"
Data.dump SD:0xE6150870
; ============================================================
; After for-loop: All CKMCSR/CKMLCH/CKMLCL patterns (V4H)
; CKMCSR bits: CHKEN=BIT0, INTEN=BIT1, ENMON=BIT16 (expected all=1)
; Format: CKMCSR value | CKMLCH (upper limit) | CKMLCL (lower limit)
; ============================================================
PRINT ""
PRINT "============================================"
PRINT " After for-loop: All Clock Monitor Regs (V4H)"
PRINT "============================================"
; Note: Powered-down domains will cause bus errors.
; ON ERROR CONTINUE prevents script abort; unreadable registers print as 0xBADC0FFE.
ON ERROR CONTINUE
; --- CPGWPR domain (CPG_BASE=0xE6150000) ---
PRINT "--- CPGWPR domain (CPG_BASE=0xE6150000) ---"
PRINT "PLL1LB CKMCSR[0xE6150C00]=0x" %HEX Data.Long(SD:0xE6150C00) " CKMLCH[0xE6150C08]=0x" %HEX Data.Long(SD:0xE6150C08) " CKMLCL[0xE6150C0C]=0x" %HEX Data.Long(SD:0xE6150C0C)
PRINT "PLL2LB CKMCSR[0xE6150C20]=0x" %HEX Data.Long(SD:0xE6150C20) " CKMLCH[0xE6150C28]=0x" %HEX Data.Long(SD:0xE6150C28) " CKMLCL[0xE6150C2C]=0x" %HEX Data.Long(SD:0xE6150C2C)
PRINT "PLL3LB CKMCSR[0xE6150C60]=0x" %HEX Data.Long(SD:0xE6150C60) " CKMLCH[0xE6150C68]=0x" %HEX Data.Long(SD:0xE6150C68) " CKMLCL[0xE6150C6C]=0x" %HEX Data.Long(SD:0xE6150C6C)
PRINT "PLL4LB CKMCSR[0xE6150CA0]=0x" %HEX Data.Long(SD:0xE6150CA0) " CKMLCH[0xE6150CA8]=0x" %HEX Data.Long(SD:0xE6150CA8) " CKMLCL[0xE6150CAC]=0x" %HEX Data.Long(SD:0xE6150CAC)
PRINT "PLL5LB CKMCSR[0xE6150CC0]=0x" %HEX Data.Long(SD:0xE6150CC0) " CKMLCH[0xE6150CC8]=0x" %HEX Data.Long(SD:0xE6150CC8) " CKMLCL[0xE6150CCC]=0x" %HEX Data.Long(SD:0xE6150CCC)
PRINT "PLL6LB CKMCSR[0xE6150E60]=0x" %HEX Data.Long(SD:0xE6150E60) " CKMLCH[0xE6150E68]=0x" %HEX Data.Long(SD:0xE6150E68) " CKMLCL[0xE6150E6C]=0x" %HEX Data.Long(SD:0xE6150E6C)
PRINT "CBFUSA CKMCSR[0xE6150D00]=0x" %HEX Data.Long(SD:0xE6150D00) " CKMLCH[0xE6150D08]=0x" %HEX Data.Long(SD:0xE6150D08) " CKMLCL[0xE6150D0C]=0x" %HEX Data.Long(SD:0xE6150D0C)
PRINT "RCLK CKMCSR[0xE6150E80]=0x" %HEX Data.Long(SD:0xE6150E80) " CKMLCH[0xE6150E88]=0x" %HEX Data.Long(SD:0xE6150E88) " CKMLCL[0xE6150E8C]=0x" %HEX Data.Long(SD:0xE6150E8C)
; --- TOP domain (CPG_CKM_SAB_BASE=0xE6070000) ---
PRINT ""
PRINT "--- TOP domain (CPG_CKM_SAB_BASE=0xE6070000) ---"
PRINT "S0D2 CKMCSR[0xE6070240]=0x" %HEX Data.Long(SD:0xE6070240) " CKMLCH[0xE6070248]=0x" %HEX Data.Long(SD:0xE6070248) " CKMLCL[0xE607024C]=0x" %HEX Data.Long(SD:0xE607024C)
PRINT "S0D3 CKMCSR[0xE6070260]=0x" %HEX Data.Long(SD:0xE6070260) " CKMLCH[0xE6070268]=0x" %HEX Data.Long(SD:0xE6070268) " CKMLCL[0xE607026C]=0x" %HEX Data.Long(SD:0xE607026C)
PRINT "S0D4 CKMCSR[0xE6070280]=0x" %HEX Data.Long(SD:0xE6070280) " CKMLCH[0xE6070288]=0x" %HEX Data.Long(SD:0xE6070288) " CKMLCL[0xE607028C]=0x" %HEX Data.Long(SD:0xE607028C)
PRINT "CL CKMCSR[0xE60700F0]=0x" %HEX Data.Long(SD:0xE60700F0) " CKMLCH[0xE60700F8]=0x" %HEX Data.Long(SD:0xE60700F8) " CKMLCL[0xE60700FC]=0x" %HEX Data.Long(SD:0xE60700FC)
PRINT "ZX CKMCSR[0xE6070300]=0x" %HEX Data.Long(SD:0xE6070300) " CKMLCH[0xE6070308]=0x" %HEX Data.Long(SD:0xE6070308) " CKMLCL[0xE607030C]=0x" %HEX Data.Long(SD:0xE607030C)
PRINT "CL16M CKMCSR[0xE6070320]=0x" %HEX Data.Long(SD:0xE6070320) " CKMLCH[0xE6070328]=0x" %HEX Data.Long(SD:0xE6070328) " CKMLCL[0xE607032C]=0x" %HEX Data.Long(SD:0xE607032C)
PRINT "CP CKMCSR[0xE6070190]=0x" %HEX Data.Long(SD:0xE6070190) " CKMLCH[0xE6070198]=0x" %HEX Data.Long(SD:0xE6070198) " CKMLCL[0xE607019C]=0x" %HEX Data.Long(SD:0xE607019C)
PRINT "CPEX CKMCSR[0xE60701D0]=0x" %HEX Data.Long(SD:0xE60701D0) " CKMLCH[0xE60701D8]=0x" %HEX Data.Long(SD:0xE60701D8) " CKMLCL[0xE60701DC]=0x" %HEX Data.Long(SD:0xE60701DC)
PRINT "CBFUSATOP CKMCSR[0xE60701F0]=0x" %HEX Data.Long(SD:0xE60701F0) " CKMLCH[0xE60701F8]=0x" %HEX Data.Long(SD:0xE60701F8) " CKMLCL[0xE60701FC]=0x" %HEX Data.Long(SD:0xE60701FC)
PRINT "RCLKTOP CKMCSR[0xE60701B0]=0x" %HEX Data.Long(SD:0xE60701B0) " CKMLCH[0xE60701B8]=0x" %HEX Data.Long(SD:0xE60701B8) " CKMLCL[0xE60701BC]=0x" %HEX Data.Long(SD:0xE60701BC)
; --- VIO domain (CPG_CKM_VIO_BASE=0xFEAEE000) ---
PRINT ""
PRINT "--- VIO domain (CPG_CKM_VIO_BASE=0xFEAEE000) ---"
PRINT "S0D1VIO CKMCSR[0xFEAEE110]=0x" %HEX Data.Long(SD:0xFEAEE110) " CKMLCH[0xFEAEE118]=0x" %HEX Data.Long(SD:0xFEAEE118) " CKMLCL[0xFEAEE11C]=0x" %HEX Data.Long(SD:0xFEAEE11C)
PRINT "S0D2VIO CKMCSR[0xFEAEE130]=0x" %HEX Data.Long(SD:0xFEAEE130) " CKMLCH[0xFEAEE138]=0x" %HEX Data.Long(SD:0xFEAEE138) " CKMLCL[0xFEAEE13C]=0x" %HEX Data.Long(SD:0xFEAEE13C)
PRINT "S0D4VIO CKMCSR[0xFEAEE150]=0x" %HEX Data.Long(SD:0xFEAEE150) " CKMLCH[0xFEAEE158]=0x" %HEX Data.Long(SD:0xFEAEE158) " CKMLCL[0xFEAEE15C]=0x" %HEX Data.Long(SD:0xFEAEE15C)
PRINT "S0D8VIO CKMCSR[0xFEAEE170]=0x" %HEX Data.Long(SD:0xFEAEE170) " CKMLCH[0xFEAEE178]=0x" %HEX Data.Long(SD:0xFEAEE178) " CKMLCL[0xFEAEE17C]=0x" %HEX Data.Long(SD:0xFEAEE17C)
PRINT "CSI CKMCSR[0xFEAEE0F0]=0x" %HEX Data.Long(SD:0xFEAEE0F0) " CKMLCH[0xFEAEE0F8]=0x" %HEX Data.Long(SD:0xFEAEE0F8) " CKMLCL[0xFEAEE0FC]=0x" %HEX Data.Long(SD:0xFEAEE0FC)
PRINT "DSIEXT CKMCSR[0xFEAEE090]=0x" %HEX Data.Long(SD:0xFEAEE090) " CKMLCH[0xFEAEE098]=0x" %HEX Data.Long(SD:0xFEAEE098) " CKMLCL[0xFEAEE09C]=0x" %HEX Data.Long(SD:0xFEAEE09C)
PRINT "DSIREF CKMCSR[0xFEAEE0B0]=0x" %HEX Data.Long(SD:0xFEAEE0B0) " CKMLCH[0xFEAEE0B8]=0x" %HEX Data.Long(SD:0xFEAEE0B8) " CKMLCL[0xFEAEE0BC]=0x" %HEX Data.Long(SD:0xFEAEE0BC)
PRINT "VIOBUS CKMCSR[0xFEAEE190]=0x" %HEX Data.Long(SD:0xFEAEE190) " CKMLCH[0xFEAEE198]=0x" %HEX Data.Long(SD:0xFEAEE198) " CKMLCL[0xFEAEE19C]=0x" %HEX Data.Long(SD:0xFEAEE19C)
PRINT "VIOBUSD2 CKMCSR[0xFEAEE1B0]=0x" %HEX Data.Long(SD:0xFEAEE1B0) " CKMLCH[0xFEAEE1B8]=0x" %HEX Data.Long(SD:0xFEAEE1B8) " CKMLCL[0xFEAEE1BC]=0x" %HEX Data.Long(SD:0xFEAEE1BC)
PRINT "CBFUSAVIO CKMCSR[0xFEAEE1D0]=0x" %HEX Data.Long(SD:0xFEAEE1D0) " CKMLCH[0xFEAEE1D8]=0x" %HEX Data.Long(SD:0xFEAEE1D8) " CKMLCL[0xFEAEE1DC]=0x" %HEX Data.Long(SD:0xFEAEE1DC)
PRINT "RCLKVIO CKMCSR[0xFEAEE0D0]=0x" %HEX Data.Long(SD:0xFEAEE0D0) " CKMLCH[0xFEAEE0D8]=0x" %HEX Data.Long(SD:0xFEAEE0D8) " CKMLCL[0xFEAEE0DC]=0x" %HEX Data.Long(SD:0xFEAEE0DC)
; --- VC domain (CPG_CKM_VC_BASE=0xFE60E000) ---
PRINT ""
PRINT "--- VC domain (CPG_CKM_VC_BASE=0xFE60E000) ---"
PRINT "S0D1VC CKMCSR[0xFE60E0D0]=0x" %HEX Data.Long(SD:0xFE60E0D0) " CKMLCH[0xFE60E0D8]=0x" %HEX Data.Long(SD:0xFE60E0D8) " CKMLCL[0xFE60E0DC]=0x" %HEX Data.Long(SD:0xFE60E0DC)
PRINT "S0D2VC CKMCSR[0xFE60E0F0]=0x" %HEX Data.Long(SD:0xFE60E0F0) " CKMLCH[0xFE60E0F8]=0x" %HEX Data.Long(SD:0xFE60E0F8) " CKMLCL[0xFE60E0FC]=0x" %HEX Data.Long(SD:0xFE60E0FC)
PRINT "S0D4VC CKMCSR[0xFE60E110]=0x" %HEX Data.Long(SD:0xFE60E110) " CKMLCH[0xFE60E118]=0x" %HEX Data.Long(SD:0xFE60E118) " CKMLCL[0xFE60E11C]=0x" %HEX Data.Long(SD:0xFE60E11C)
PRINT "VCBUS CKMCSR[0xFE60E070]=0x" %HEX Data.Long(SD:0xFE60E070) " CKMLCH[0xFE60E078]=0x" %HEX Data.Long(SD:0xFE60E078) " CKMLCL[0xFE60E07C]=0x" %HEX Data.Long(SD:0xFE60E07C)
PRINT "VCBUSD2 CKMCSR[0xFE60E090]=0x" %HEX Data.Long(SD:0xFE60E090) " CKMLCH[0xFE60E098]=0x" %HEX Data.Long(SD:0xFE60E098) " CKMLCL[0xFE60E09C]=0x" %HEX Data.Long(SD:0xFE60E09C)
PRINT "CBFUSAVC CKMCSR[0xFE60E150]=0x" %HEX Data.Long(SD:0xFE60E150) " CKMLCH[0xFE60E158]=0x" %HEX Data.Long(SD:0xFE60E158) " CKMLCL[0xFE60E15C]=0x" %HEX Data.Long(SD:0xFE60E15C)
PRINT "RCLKVC CKMCSR[0xFE60E130]=0x" %HEX Data.Long(SD:0xFE60E130) " CKMLCH[0xFE60E138]=0x" %HEX Data.Long(SD:0xFE60E138) " CKMLCL[0xFE60E13C]=0x" %HEX Data.Long(SD:0xFE60E13C)
; --- VIP domain (CPG_CKM_VIP_BASE=0xE7B3E000) ---
PRINT ""
PRINT "--- VIP domain (CPG_CKM_VIP_BASE=0xE7B3E000) ---"
PRINT "SVD1VIP CKMCSR[0xE7B3E0D0]=0x" %HEX Data.Long(SD:0xE7B3E0D0) " CKMLCH[0xE7B3E0D8]=0x" %HEX Data.Long(SD:0xE7B3E0D8) " CKMLCL[0xE7B3E0DC]=0x" %HEX Data.Long(SD:0xE7B3E0DC)
PRINT "SVD2VIP CKMCSR[0xE7B3E0F0]=0x" %HEX Data.Long(SD:0xE7B3E0F0) " CKMLCH[0xE7B3E0F8]=0x" %HEX Data.Long(SD:0xE7B3E0F8) " CKMLCL[0xE7B3E0FC]=0x" %HEX Data.Long(SD:0xE7B3E0FC)
PRINT "CBFUSAVIP CKMCSR[0xE7B3E150]=0x" %HEX Data.Long(SD:0xE7B3E150) " CKMLCH[0xE7B3E158]=0x" %HEX Data.Long(SD:0xE7B3E158) " CKMLCL[0xE7B3E15C]=0x" %HEX Data.Long(SD:0xE7B3E15C)
PRINT "RCLKVIP CKMCSR[0xE7B3E130]=0x" %HEX Data.Long(SD:0xE7B3E130) " CKMLCH[0xE7B3E138]=0x" %HEX Data.Long(SD:0xE7B3E138) " CKMLCL[0xE7B3E13C]=0x" %HEX Data.Long(SD:0xE7B3E13C)
; --- MM domain (CPG_CKM_MM_BASE=0xE67FA000) ---
PRINT ""
PRINT "--- MM domain (CPG_CKM_MM_BASE=0xE67FA000) ---"
PRINT "S0D2MM CKMCSR[0xE67FA0D0]=0x" %HEX Data.Long(SD:0xE67FA0D0) " CKMLCH[0xE67FA0D8]=0x" %HEX Data.Long(SD:0xE67FA0D8) " CKMLCL[0xE67FA0DC]=0x" %HEX Data.Long(SD:0xE67FA0DC)
PRINT "S0D4MM CKMCSR[0xE67FA110]=0x" %HEX Data.Long(SD:0xE67FA110) " CKMLCH[0xE67FA118]=0x" %HEX Data.Long(SD:0xE67FA118) " CKMLCL[0xE67FA11C]=0x" %HEX Data.Long(SD:0xE67FA11C)
PRINT "CL16MMM CKMCSR[0xE67FA090]=0x" %HEX Data.Long(SD:0xE67FA090) " CKMLCH[0xE67FA098]=0x" %HEX Data.Long(SD:0xE67FA098) " CKMLCL[0xE67FA09C]=0x" %HEX Data.Long(SD:0xE67FA09C)
PRINT "ZB3 CKMCSR[0xE67FA130]=0x" %HEX Data.Long(SD:0xE67FA130) " CKMLCH[0xE67FA138]=0x" %HEX Data.Long(SD:0xE67FA138) " CKMLCL[0xE67FA13C]=0x" %HEX Data.Long(SD:0xE67FA13C)
PRINT "ZB3D2 CKMCSR[0xE67FA070]=0x" %HEX Data.Long(SD:0xE67FA070) " CKMLCH[0xE67FA078]=0x" %HEX Data.Long(SD:0xE67FA078) " CKMLCL[0xE67FA07C]=0x" %HEX Data.Long(SD:0xE67FA07C)
PRINT "ZB3D4 CKMCSR[0xE67FA150]=0x" %HEX Data.Long(SD:0xE67FA150) " CKMLCH[0xE67FA158]=0x" %HEX Data.Long(SD:0xE67FA158) " CKMLCL[0xE67FA15C]=0x" %HEX Data.Long(SD:0xE67FA15C)
PRINT "CBFUSAMM CKMCSR[0xE67FA170]=0x" %HEX Data.Long(SD:0xE67FA170) " CKMLCH[0xE67FA178]=0x" %HEX Data.Long(SD:0xE67FA178) " CKMLCL[0xE67FA17C]=0x" %HEX Data.Long(SD:0xE67FA17C)
PRINT "RCLKMM CKMCSR[0xE67FA190]=0x" %HEX Data.Long(SD:0xE67FA190) " CKMLCH[0xE67FA198]=0x" %HEX Data.Long(SD:0xE67FA198) " CKMLCL[0xE67FA19C]=0x" %HEX Data.Long(SD:0xE67FA19C)
; --- IR domain (CPG_CKM_IR0_BASE=0xFF8AE000 = CPG_CKM_IMP_BASE+0xE000) ---
PRINT ""
PRINT "--- IR domain (CPG_CKM_IR0_BASE=0xFF8AE000) ---"
PRINT "SVD1IR CKMCSR[0xFF8AE050]=0x" %HEX Data.Long(SD:0xFF8AE050) " CKMLCH[0xFF8AE058]=0x" %HEX Data.Long(SD:0xFF8AE058) " CKMLCL[0xFF8AE05C]=0x" %HEX Data.Long(SD:0xFF8AE05C)
PRINT "SVD2IR CKMCSR[0xFF8AE070]=0x" %HEX Data.Long(SD:0xFF8AE070) " CKMLCH[0xFF8AE078]=0x" %HEX Data.Long(SD:0xFF8AE078) " CKMLCL[0xFF8AE07C]=0x" %HEX Data.Long(SD:0xFF8AE07C)
PRINT "IMPAIR CKMCSR[0xFF8AE090]=0x" %HEX Data.Long(SD:0xFF8AE090) " CKMLCH[0xFF8AE098]=0x" %HEX Data.Long(SD:0xFF8AE098) " CKMLCL[0xFF8AE09C]=0x" %HEX Data.Long(SD:0xFF8AE09C)
PRINT "CBFUSAIR CKMCSR[0xFF8AE0D0]=0x" %HEX Data.Long(SD:0xFF8AE0D0) " CKMLCH[0xFF8AE0D8]=0x" %HEX Data.Long(SD:0xFF8AE0D8) " CKMLCL[0xFF8AE0DC]=0x" %HEX Data.Long(SD:0xFF8AE0DC)
PRINT "RCLKIR CKMCSR[0xFF8AE0B0]=0x" %HEX Data.Long(SD:0xFF8AE0B0) " CKMLCH[0xFF8AE0B8]=0x" %HEX Data.Long(SD:0xFF8AE0B8) " CKMLCL[0xFF8AE0BC]=0x" %HEX Data.Long(SD:0xFF8AE0BC)
; --- IRCN domain (CPG_CKM_IR1_BASE=0xFF8AC000 = CPG_CKM_IMP_BASE+0xC000) ---
PRINT ""
PRINT "--- IRCN domain (CPG_CKM_IR1_BASE=0xFF8AC000) ---"
PRINT "SVD1IRCN CKMCSR[0xFF8AC010]=0x" %HEX Data.Long(SD:0xFF8AC010) " CKMLCH[0xFF8AC018]=0x" %HEX Data.Long(SD:0xFF8AC018) " CKMLCL[0xFF8AC01C]=0x" %HEX Data.Long(SD:0xFF8AC01C)
PRINT "SVD2IRCN CKMCSR[0xFF8AC030]=0x" %HEX Data.Long(SD:0xFF8AC030) " CKMLCH[0xFF8AC038]=0x" %HEX Data.Long(SD:0xFF8AC038) " CKMLCL[0xFF8AC03C]=0x" %HEX Data.Long(SD:0xFF8AC03C)
PRINT "CBFUSAIRCN CKMCSR[0xFF8AC070]=0x" %HEX Data.Long(SD:0xFF8AC070) " CKMLCH[0xFF8AC078]=0x" %HEX Data.Long(SD:0xFF8AC078) " CKMLCL[0xFF8AC07C]=0x" %HEX Data.Long(SD:0xFF8AC07C)
PRINT "RCLKIRCN CKMCSR[0xFF8AC050]=0x" %HEX Data.Long(SD:0xFF8AC050) " CKMLCH[0xFF8AC058]=0x" %HEX Data.Long(SD:0xFF8AC058) " CKMLCL[0xFF8AC05C]=0x" %HEX Data.Long(SD:0xFF8AC05C)
; --- RT domain (CPG_CKM_RT_BASE=0xE61F0000) ---
PRINT ""
PRINT "--- RT domain (CPG_CKM_RT_BASE=0xE61F0000) ---"
PRINT "S0D2RT CKMCSR[0xE61F01D0]=0x" %HEX Data.Long(SD:0xE61F01D0) " CKMLCH[0xE61F01D8]=0x" %HEX Data.Long(SD:0xE61F01D8) " CKMLCL[0xE61F01DC]=0x" %HEX Data.Long(SD:0xE61F01DC)
PRINT "S0D3RT CKMCSR[0xE61F01F0]=0x" %HEX Data.Long(SD:0xE61F01F0) " CKMLCH[0xE61F01F8]=0x" %HEX Data.Long(SD:0xE61F01F8) " CKMLCL[0xE61F01FC]=0x" %HEX Data.Long(SD:0xE61F01FC)
PRINT "S0D4RT CKMCSR[0xE61F0210]=0x" %HEX Data.Long(SD:0xE61F0210) " CKMLCH[0xE61F0218]=0x" %HEX Data.Long(SD:0xE61F0218) " CKMLCL[0xE61F021C]=0x" %HEX Data.Long(SD:0xE61F021C)
PRINT "S0D6RT CKMCSR[0xE61F0230]=0x" %HEX Data.Long(SD:0xE61F0230) " CKMLCH[0xE61F0238]=0x" %HEX Data.Long(SD:0xE61F0238) " CKMLCL[0xE61F023C]=0x" %HEX Data.Long(SD:0xE61F023C)
PRINT "CL16MRT CKMCSR[0xE61F0190]=0x" %HEX Data.Long(SD:0xE61F0190) " CKMLCH[0xE61F0198]=0x" %HEX Data.Long(SD:0xE61F0198) " CKMLCL[0xE61F019C]=0x" %HEX Data.Long(SD:0xE61F019C)
PRINT "SASYNCRT CKMCSR[0xE61F02D0]=0x" %HEX Data.Long(SD:0xE61F02D0) " CKMLCH[0xE61F02D8]=0x" %HEX Data.Long(SD:0xE61F02D8) " CKMLCL[0xE61F02DC]=0x" %HEX Data.Long(SD:0xE61F02DC)
PRINT "CBFUSART CKMCSR[0xE61F02B0]=0x" %HEX Data.Long(SD:0xE61F02B0) " CKMLCH[0xE61F02B8]=0x" %HEX Data.Long(SD:0xE61F02B8) " CKMLCL[0xE61F02BC]=0x" %HEX Data.Long(SD:0xE61F02BC)
PRINT "RCLKRT CKMCSR[0xE61F0170]=0x" %HEX Data.Long(SD:0xE61F0170) " CKMLCH[0xE61F0178]=0x" %HEX Data.Long(SD:0xE61F0178) " CKMLCL[0xE61F017C]=0x" %HEX Data.Long(SD:0xE61F017C)
; --- RTCR52 domain (CPG_CKM_RTCR52_BASE=0xE61F2000 = RT_BASE+0x2000) ---
PRINT ""
PRINT "--- RTCR52 domain (CPG_CKM_RTCR52_BASE=0xE61F2000) ---"
PRINT "S0D2RTCR52 CKMCSR[0xE61F20C0]=0x" %HEX Data.Long(SD:0xE61F20C0) " CKMLCH[0xE61F20C8]=0x" %HEX Data.Long(SD:0xE61F20C8) " CKMLCL[0xE61F20CC]=0x" %HEX Data.Long(SD:0xE61F20CC)
PRINT "ZR0CR52 CKMCSR[0xE61F2010]=0x" %HEX Data.Long(SD:0xE61F2010) " CKMLCH[0xE61F2018]=0x" %HEX Data.Long(SD:0xE61F2018) " CKMLCL[0xE61F201C]=0x" %HEX Data.Long(SD:0xE61F201C)
PRINT "ZR1CR52 CKMCSR[0xE61F2100]=0x" %HEX Data.Long(SD:0xE61F2100) " CKMLCH[0xE61F2108]=0x" %HEX Data.Long(SD:0xE61F2108) " CKMLCL[0xE61F210C]=0x" %HEX Data.Long(SD:0xE61F210C)
PRINT "ZR2CR52 CKMCSR[0xE61F2120]=0x" %HEX Data.Long(SD:0xE61F2120) " CKMLCH[0xE61F2128]=0x" %HEX Data.Long(SD:0xE61F2128) " CKMLCL[0xE61F212C]=0x" %HEX Data.Long(SD:0xE61F212C)
PRINT "CBFUSARTCR52 CKMCSR[0xE61F2090]=0x" %HEX Data.Long(SD:0xE61F2090) " CKMLCH[0xE61F2098]=0x" %HEX Data.Long(SD:0xE61F2098) " CKMLCL[0xE61F209C]=0x" %HEX Data.Long(SD:0xE61F209C)
PRINT "RCLKRTCR52 CKMCSR[0xE61F2070]=0x" %HEX Data.Long(SD:0xE61F2070) " CKMLCH[0xE61F2078]=0x" %HEX Data.Long(SD:0xE61F2078) " CKMLCL[0xE61F207C]=0x" %HEX Data.Long(SD:0xE61F207C)
; --- PER domain (CPG_CKM_PER_BASE=0xE677E000) ---
PRINT ""
PRINT "--- PER domain (CPG_CKM_PER_BASE=0xE677E000) ---"
PRINT "S0D2PER CKMCSR[0xE677E280]=0x" %HEX Data.Long(SD:0xE677E280) " CKMLCH[0xE677E288]=0x" %HEX Data.Long(SD:0xE677E288) " CKMLCL[0xE677E28C]=0x" %HEX Data.Long(SD:0xE677E28C)
PRINT "S0D3PER CKMCSR[0xE677E2A0]=0x" %HEX Data.Long(SD:0xE677E2A0) " CKMLCH[0xE677E2A8]=0x" %HEX Data.Long(SD:0xE677E2A8) " CKMLCL[0xE677E2AC]=0x" %HEX Data.Long(SD:0xE677E2AC)
PRINT "S0D4PER CKMCSR[0xE677E2C0]=0x" %HEX Data.Long(SD:0xE677E2C0) " CKMLCH[0xE677E2C8]=0x" %HEX Data.Long(SD:0xE677E2C8) " CKMLCL[0xE677E2CC]=0x" %HEX Data.Long(SD:0xE677E2CC)
PRINT "S0D6PER CKMCSR[0xE677E2E0]=0x" %HEX Data.Long(SD:0xE677E2E0) " CKMLCH[0xE677E2E8]=0x" %HEX Data.Long(SD:0xE677E2E8) " CKMLCL[0xE677E2EC]=0x" %HEX Data.Long(SD:0xE677E2EC)
PRINT "S0D12PER CKMCSR[0xE677E300]=0x" %HEX Data.Long(SD:0xE677E300) " CKMLCH[0xE677E308]=0x" %HEX Data.Long(SD:0xE677E308) " CKMLCL[0xE677E30C]=0x" %HEX Data.Long(SD:0xE677E30C)
PRINT "S0D24PER CKMCSR[0xE677E340]=0x" %HEX Data.Long(SD:0xE677E340) " CKMLCH[0xE677E348]=0x" %HEX Data.Long(SD:0xE677E348) " CKMLCL[0xE677E34C]=0x" %HEX Data.Long(SD:0xE677E34C)
PRINT "CL16MPER CKMCSR[0xE677E1B0]=0x" %HEX Data.Long(SD:0xE677E1B0) " CKMLCH[0xE677E1B8]=0x" %HEX Data.Long(SD:0xE677E1B8) " CKMLCL[0xE677E1BC]=0x" %HEX Data.Long(SD:0xE677E1BC)
PRINT "SD0H CKMCSR[0xE677E090]=0x" %HEX Data.Long(SD:0xE677E090) " CKMLCH[0xE677E098]=0x" %HEX Data.Long(SD:0xE677E098) " CKMLCL[0xE677E09C]=0x" %HEX Data.Long(SD:0xE677E09C)
PRINT "SD0 CKMCSR[0xE677E0B0]=0x" %HEX Data.Long(SD:0xE677E0B0) " CKMLCH[0xE677E0B8]=0x" %HEX Data.Long(SD:0xE677E0B8) " CKMLCL[0xE677E0BC]=0x" %HEX Data.Long(SD:0xE677E0BC)
PRINT "RPC CKMCSR[0xE677E1F0]=0x" %HEX Data.Long(SD:0xE677E1F0) " CKMLCH[0xE677E1F8]=0x" %HEX Data.Long(SD:0xE677E1F8) " CKMLCL[0xE677E1FC]=0x" %HEX Data.Long(SD:0xE677E1FC)
PRINT "RPCD2 CKMCSR[0xE677E210]=0x" %HEX Data.Long(SD:0xE677E210) " CKMLCH[0xE677E218]=0x" %HEX Data.Long(SD:0xE677E218) " CKMLCL[0xE677E21C]=0x" %HEX Data.Long(SD:0xE677E21C)
PRINT "CANFD CKMCSR[0xE677E1D0]=0x" %HEX Data.Long(SD:0xE677E1D0) " CKMLCH[0xE677E1D8]=0x" %HEX Data.Long(SD:0xE677E1D8) " CKMLCL[0xE677E1DC]=0x" %HEX Data.Long(SD:0xE677E1DC)
PRINT "MSO CKMCSR[0xE677E130]=0x" %HEX Data.Long(SD:0xE677E130) " CKMLCH[0xE677E138]=0x" %HEX Data.Long(SD:0xE677E138) " CKMLCL[0xE677E13C]=0x" %HEX Data.Long(SD:0xE677E13C)
PRINT "FRAY CKMCSR[0xE677E170]=0x" %HEX Data.Long(SD:0xE677E170) " CKMLCH[0xE677E178]=0x" %HEX Data.Long(SD:0xE677E178) " CKMLCL[0xE677E17C]=0x" %HEX Data.Long(SD:0xE677E17C)
PRINT "IPC CKMCSR[0xE677E190]=0x" %HEX Data.Long(SD:0xE677E190) " CKMLCH[0xE677E198]=0x" %HEX Data.Long(SD:0xE677E198) " CKMLCL[0xE677E19C]=0x" %HEX Data.Long(SD:0xE677E19C)
PRINT "ADGH CKMCSR[0xE677E360]=0x" %HEX Data.Long(SD:0xE677E360) " CKMLCH[0xE677E368]=0x" %HEX Data.Long(SD:0xE677E368) " CKMLCL[0xE677E36C]=0x" %HEX Data.Long(SD:0xE677E36C)
PRINT "SASYNCPERD1 CKMCSR[0xE677E3A0]=0x" %HEX Data.Long(SD:0xE677E3A0) " CKMLCH[0xE677E3A8]=0x" %HEX Data.Long(SD:0xE677E3A8) " CKMLCL[0xE677E3AC]=0x" %HEX Data.Long(SD:0xE677E3AC)
PRINT "SASYNCPERD2 CKMCSR[0xE677E3C0]=0x" %HEX Data.Long(SD:0xE677E3C0) " CKMLCH[0xE677E3C8]=0x" %HEX Data.Long(SD:0xE677E3C8) " CKMLCL[0xE677E3CC]=0x" %HEX Data.Long(SD:0xE677E3CC)
PRINT "SASYNCPERD4 CKMCSR[0xE677E3E0]=0x" %HEX Data.Long(SD:0xE677E3E0) " CKMLCH[0xE677E3E8]=0x" %HEX Data.Long(SD:0xE677E3E8) " CKMLCL[0xE677E3EC]=0x" %HEX Data.Long(SD:0xE677E3EC)
PRINT "CBFUSAPER CKMCSR[0xE677E380]=0x" %HEX Data.Long(SD:0xE677E380) " CKMLCH[0xE677E388]=0x" %HEX Data.Long(SD:0xE677E388) " CKMLCL[0xE677E38C]=0x" %HEX Data.Long(SD:0xE677E38C)
PRINT "RCLKPER CKMCSR[0xE677E150]=0x" %HEX Data.Long(SD:0xE677E150) " CKMLCH[0xE677E158]=0x" %HEX Data.Long(SD:0xE677E158) " CKMLCL[0xE677E15C]=0x" %HEX Data.Long(SD:0xE677E15C)
; --- HSC domain (CPG_CKM_HSC_BASE=0xE644E000) ---
PRINT ""
PRINT "--- HSC domain (CPG_CKM_HSC_BASE=0xE644E000) ---"
PRINT "S0D1HSC CKMCSR[0xE644E150]=0x" %HEX Data.Long(SD:0xE644E150) " CKMLCH[0xE644E158]=0x" %HEX Data.Long(SD:0xE644E158) " CKMLCL[0xE644E15C]=0x" %HEX Data.Long(SD:0xE644E15C)
PRINT "S0D2HSC CKMCSR[0xE644E170]=0x" %HEX Data.Long(SD:0xE644E170) " CKMLCH[0xE644E178]=0x" %HEX Data.Long(SD:0xE644E178) " CKMLCL[0xE644E17C]=0x" %HEX Data.Long(SD:0xE644E17C)
PRINT "S0D4HSC CKMCSR[0xE644E1B0]=0x" %HEX Data.Long(SD:0xE644E1B0) " CKMLCH[0xE644E1B8]=0x" %HEX Data.Long(SD:0xE644E1B8) " CKMLCL[0xE644E1BC]=0x" %HEX Data.Long(SD:0xE644E1BC)
PRINT "S0D8HSC CKMCSR[0xE644E1D0]=0x" %HEX Data.Long(SD:0xE644E1D0) " CKMLCH[0xE644E1D8]=0x" %HEX Data.Long(SD:0xE644E1D8) " CKMLCL[0xE644E1DC]=0x" %HEX Data.Long(SD:0xE644E1DC)
PRINT "CL16MHSC CKMCSR[0xE644E130]=0x" %HEX Data.Long(SD:0xE644E130) " CKMLCH[0xE644E138]=0x" %HEX Data.Long(SD:0xE644E138) " CKMLCL[0xE644E13C]=0x" %HEX Data.Long(SD:0xE644E13C)
PRINT "CBFUSAHSC CKMCSR[0xE644E2F0]=0x" %HEX Data.Long(SD:0xE644E2F0) " CKMLCH[0xE644E2F8]=0x" %HEX Data.Long(SD:0xE644E2F8) " CKMLCL[0xE644E2FC]=0x" %HEX Data.Long(SD:0xE644E2FC)
PRINT "RCLKHSC CKMCSR[0xE644E0B0]=0x" %HEX Data.Long(SD:0xE644E0B0) " CKMLCH[0xE644E0B8]=0x" %HEX Data.Long(SD:0xE644E0B8) " CKMLCL[0xE644E0BC]=0x" %HEX Data.Long(SD:0xE644E0BC)
PRINT "============================================"
ON ERROR ; restore default error handling
; Save AREA output to text file
AREA.SAVE &outfile
PRINT "Saved to: " "&outfile"
ENDDO

View File

@@ -0,0 +1,41 @@
============================================================
pattern_index=0
============================================================
--- SYSC Domain0 ISO Injection/Status ---
SYSCISOEHIR0 [0xE6180870] = 0x1
BIT0 (PDR0/A1E0D0C0 ISO_HIGH inject) = 1 (1=injecting, 0=stopped)
SYSCISOEHSR0 [0xE6180860] = 0x1
BIT0 (PDR0/A1E0D0C0 ISO_HIGH status) = 1 (1=error detected)
SYSCISOELIR0 [0xE6180878] = 0x0
(ISO_LOW inject, should be 0 for ISO_HIGH test)
SYSCISOELSR0 [0xE6180868] = 0x0
(ISO_LOW status, should be 0 for ISO_HIGH test)
--- SYSC Power Domain Status (Read-only: PDRSR) ---
PDRSR0 [0xE6181000] = 0x1
(PDR0/A1E0D0C0 power status)
PDRSR16 [0xE6181400] = 0x10
(PDR16/A2E0D0 parent domain power status)
PDRSR31 [0xE61817C0] = 0x10
(PDR31/C4 grandparent domain power status)
--- SYSC Power Domain Control Registers (Write-Only: read value may be 0) ---
PDRONCR0 [0xE6181004] = 0x0 (PDR0/A1E0D0C0 power-ON ctrl, BIT0=1 to trigger)
PDROFFCR0 [0xE6181008] = 0x0 (PDR0/A1E0D0C0 power-OFF ctrl, BIT0=1 to trigger)
PDRONCR16 [0xE6181404] = 0x0 (PDR16/A2E0D0 power-ON ctrl - parent)
PDROFFCR16[0xE6181408] = 0x0 (PDR16/A2E0D0 power-OFF ctrl - parent)
PDRONCR31 [0xE61817C4] = 0x0 (PDR31/C4 power-ON ctrl - grandparent)
PDROFFCR31[0xE61817C8] = 0x0 (PDR31/C4 power-OFF ctrl - grandparent)
--- ECM (base=0xE6250000) ---
ECMERRCTLR0 [0xE6250000] = 0x5F003002
BIT12 (ISO Cell Error Control) = 1 (1=error reporting enabled)
ECMERRTGTR0 [0xE6250200] = 0x0
BIT12 (ISO Cell Error Target) = 0 (0=ERROROUT# pin, 1=NMI)
ECMERRSTSR0 [0xE6250100] = 0x1000
BIT12 (ISO Cell Error Status) = 1 (1=error notified, 0=no error)

View File

@@ -0,0 +1,40 @@
============================================================
pattern_index=01
============================================================
--- SYSC Domain0 (base=0xE6180000) ---
SYSCISOEHIR0 [0xE6180870] = 0x2
BIT1 (PDR1/A1E0D0C1 ISO_HIGH inject) = 1 (1=injecting, 0=stopped)
SYSCISOEHIR1 [0xE6180874] = 0x0
(PDR32-63 ISO_HIGH inject, should be 0 for this pattern)
SYSCISOEHSR0 [0xE6180860] = 0x2
BIT1 (PDR1/A1E0D0C1 ISO_HIGH status) = 1 (1=error detected)
SYSCISOELIR0 [0xE6180878] = 0x0
(ISO_LOW inject, should be 0 for ISO_HIGH test)
SYSCISOELSR0 [0xE6180868] = 0x0
(ISO_LOW status, should be 0 for ISO_HIGH test)
PDRSR1 [0xE6181040] = 0x1
(PDR1 power status: bit0=PwrStat, bit8=IsoStat)
--- SYSC Power Domain Control Registers (Write-Only: read value may be 0) ---
PDRONCR1 [0xE6181044] = 0x0 (PDR1/A1E0D0C1 power-ON ctrl, BIT0=1 to trigger)
PDROFFCR1 [0xE6181048] = 0x0 (PDR1/A1E0D0C1 power-OFF ctrl, BIT0=1 to trigger)
PDRONCR16 [0xE6181404] = 0x0 (PDR16/A2E0D0 power-ON ctrl - parent)
PDROFFCR16[0xE6181408] = 0x0 (PDR16/A2E0D0 power-OFF ctrl - parent)
PDRONCR31 [0xE61817C4] = 0x0 (PDR31/C4 power-ON ctrl - grandparent)
PDROFFCR31[0xE61817C8] = 0x0 (PDR31/C4 power-OFF ctrl - grandparent)
--- ECM (base=0xE6250000) ---
ECMERRCTLR0 [0xE6250000] = 0x5F003002
BIT12 (ISO Cell Error Control) = 1 (1=error reporting enabled)
ECMERRTGTR0 [0xE6250200] = 0x0
BIT12 (ISO Cell Error Target) = 0 (0=ERROROUT# pin, 1=NMI)
ECMERRSTSR0 [0xE6250100] = 0x1000
BIT12 (ISO Cell Error Status) = 1 (1=error notified, 0=no error)

View File

@@ -0,0 +1,39 @@
============================================================
ISO Error Detection Register Dump
pattern_index=16
============================================================
--- SYSC Domain0 ISO Injection/Status ---
SYSCISOEHIR0 [0xE6180870] = 0x10000
BIT16 (PDR16/A2E0D0 ISO_HIGH inject) = 1 (1=injecting, 0=stopped)
SYSCISOEHSR0 [0xE6180860] = 0x10000
BIT16 (PDR16/A2E0D0 ISO_HIGH status) = 1 (1=error detected)
SYSCISOELIR0 [0xE6180878] = 0x0
(ISO_LOW inject, should be 0 for ISO_HIGH test)
SYSCISOELSR0 [0xE6180868] = 0x0
(ISO_LOW status, should be 0 for ISO_HIGH test)
--- SYSC Power Domain Status (Read-only: PDRSR) ---
PDRSR16 [0xE6181400] = 0x1
(PDR16/A2E0D0 power status - target domain)
PDRSR31 [0xE61817C0] = 0x10
(PDR31/C4 grandparent domain power status)
--- SYSC Power Domain Control Registers (Write-Only: read value may be 0) ---
PDRONCR16 [0xE6181404] = 0x0 (PDR16/A2E0D0 power-ON ctrl - target, BIT0=1 to trigger)
PDROFFCR16[0xE6181408] = 0x0 (PDR16/A2E0D0 power-OFF ctrl - target, BIT0=1 to trigger)
PDRONCR31 [0xE61817C4] = 0x0 (PDR31/C4 power-ON ctrl - grandparent)
PDROFFCR31[0xE61817C8] = 0x0 (PDR31/C4 power-OFF ctrl - grandparent)
--- ECM (base=0xE6250000) ---
ECMERRCTLR0 [0xE6250000] = 0x5F003002
BIT12 (ISO Cell Error Control) = 1 (1=error reporting enabled)
ECMERRTGTR0 [0xE6250200] = 0x0
BIT12 (ISO Cell Error Target) = 0 (0=ERROROUT# pin, 1=NMI)
ECMERRSTSR0 [0xE6250100] = 0x1000
BIT12 (ISO Cell Error Status) = 1 (1=error notified, 0=no error)

View File

@@ -0,0 +1,34 @@
============================================================
pattern_index=31
============================================================
--- SYSC Domain0 ISO Injection/Status ---
SYSCISOEHIR0 [0xE6180870] = 0x80000000
BIT31 (PDR31/C4 ISO_HIGH inject) = 1 (1=injecting, 0=stopped)
SYSCISOEHSR0 [0xE6180860] = 0x80000000
BIT31 (PDR31/C4 ISO_HIGH status) = 1 (1=error detected)
SYSCISOELIR0 [0xE6180878] = 0x0
(ISO_LOW inject, should be 0 for ISO_HIGH test)
SYSCISOELSR0 [0xE6180868] = 0x0
(ISO_LOW status, should be 0 for ISO_HIGH test)
--- SYSC Power Domain Status (Read-only: PDRSR) ---
PDRSR31 [0xE61817C0] = 0x1
(PDR31/C4 power status)
--- SYSC Power Domain Control Registers (Write-Only: read value may be 0) ---
PDRONCR31 [0xE61817C4] = 0x0 (PDR31/C4 power-ON ctrl, BIT0=1 to trigger)
PDROFFCR31[0xE61817C8] = 0x0 (PDR31/C4 power-OFF ctrl, BIT0=1 to trigger)
--- ECM (base=0xE6250000) ---
ECMERRCTLR0 [0xE6250000] = 0x5F003002
BIT12 (ISO Cell Error Control) = 1 (1=error reporting enabled)
ECMERRTGTR0 [0xE6250200] = 0x0
BIT12 (ISO Cell Error Target) = 0 (0=ERROROUT# pin, 1=NMI)
ECMERRSTSR0 [0xE6250100] = 0x1000
BIT12 (ISO Cell Error Status) = 1 (1=error notified, 0=no error)

View File

@@ -102,11 +102,30 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(ProjectDir)include;$(ProjectDir)external\FT4222\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>$(ProjectDir)external\FT4222\lib\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>$(CoreLibraryDependencies);%(AdditionalDependencies);LibFT4222-64.lib;ftd2xx.lib</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>:: 1. DLL 파일 먼저 복사
copy /y "$(ProjectDir)external\FT4222\dll\*.dll" "$(OutDir)"
@echo off
:: 2. PowerShell을 이용해 시스템 언어와 무관하게 날짜_시간 추출 (YYYYMMDD_HHmm)
for /f "tokens=*" %%i in ('powershell -NoProfile -Command "Get-Date -Format 'yyyyMMdd_HHmm'"') do set BUILD_NAME=%%i
:: 3. 경로 설정 (반드시 큰따옴표로 감싸야 함)
set "TARGET_PATH=$(SolutionDir)PMIC_Cmd_Tool_Build_Debug_History\%BUILD_NAME%"
:: 4. 폴더 생성 및 복사
echo Creating backup at: "%TARGET_PATH%"
if not exist "%TARGET_PATH%" mkdir "%TARGET_PATH%"
xcopy /y /e "$(OutDir)*.*" "%TARGET_PATH%\"</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
@@ -135,7 +154,7 @@ copy /y "$(ProjectDir)external\FT4222\dll\*.dll" "$(OutDir)"
for /f "tokens=*" %%i in ('powershell -NoProfile -Command "Get-Date -Format 'yyyyMMdd_HHmm'"') do set BUILD_NAME=%%i
:: 3. 경로 설정 (반드시 큰따옴표로 감싸야 함)
set "TARGET_PATH=$(SolutionDir)PMIC_Cmd_Tool_Build_History\%BUILD_NAME%"
set "TARGET_PATH=$(SolutionDir)PMIC_Cmd_Tool_Build_Release_History\%BUILD_NAME%"
:: 4. 폴더 생성 및 복사
echo Creating backup at: "%TARGET_PATH%"
@@ -144,6 +163,8 @@ xcopy /y /e "$(OutDir)*.*" "%TARGET_PATH%\"</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="external\FT4222\include\ftd2xx.h" />
<ClInclude Include="external\FT4222\include\LibFT4222.h" />
<ClInclude Include="include\PMIC_Reg_Map.h" />
</ItemGroup>
<ItemGroup>

View File

@@ -18,6 +18,12 @@
<ClInclude Include="include\PMIC_Reg_Map.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="external\FT4222\include\LibFT4222.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="external\FT4222\include\ftd2xx.h">
<Filter>헤더 파일</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\PMIC_Cmd_Tool.cpp">

View File

@@ -37,9 +37,11 @@ int parseCommand(const char* dir);
void PMIC_I2C_Write(FT_HANDLE ftHandle, uint8_t slaveAddr, uint8_t regAddr, uint8_t value); // Address에 1바이트 Write with CRC, 그리고 Address를 Read해서 Write한 값과 비교
uint8_t PMIC_I2C_Read(FT_HANDLE ftHandle, uint8_t slaveAddr, uint8_t regAddr); // Address에서 1바이트 Read (CRC 계산 없음)
void toBinaryString(uint8_t val, char* outBuf); // 8비트 데이터를 "0000_0000" 형식의 문자열로 변환
bool Run_DebugMode(FT_HANDLE ftHandle); // Enter Debug Mode
bool Run_DebugMode_On(FT_HANDLE ftHandle); // Enter Debug Mode On
bool Run_DebugMode_Off(FT_HANDLE ftHandle); // Enter Debug Mode Off
void Run_CheckFaults(FT_HANDLE ftHandle); // Check All Fault Registers
void Run_ReadChipInfo(FT_HANDLE ftHandle); // Read Chip Information (OTP/Version)
void Irq_Clear(FT_HANDLE ftHandle); // PMIC Irq Clear
void Handle_ManualCommand(FT_HANDLE ftHandle, char* line); // Manual Command
int main()
@@ -52,9 +54,12 @@ int main()
while (1) {
printf("\n========================================\n");
printf(" [MAIN MENU] Select a function\n");
printf(" 1. Toggle PMIC Debug Mode (Current: %s)\n", debugState ? "ON" : "OFF");
printf(" 2. Read All Fault Status (Specific 1)\n");
printf(" 3. Read Device Info & OTP (Specific 2)\n");
printf(" 1. Toggle PMIC Debug Mode ON\n");
printf(" 2. Toggle PMIC Debug Mode OFF\n");
printf(" 3. Read All Fault Status\n");
printf(" 4. Read Device Info & OTP\n");
printf(" 5. PMIC Irq Clear\n");
printf(" W. Manual I2C Write (w [Addr] [Reg] [Val])\n");
printf(" R. Manual I2C Read (r [Addr] [Reg])\n");
printf(" E. Exit Program\n");
@@ -82,9 +87,9 @@ int main()
switch (choice) {
case 1:
{
if (Run_DebugMode(ftHandle)) {
if (Run_DebugMode_On(ftHandle)) {
debugState = true;
printf("\n[SUCCESS] PMIC Debug Mode.\n");
printf("\n[SUCCESS] PMIC Debug Mode On\n");
}
else {
debugState = false;
@@ -93,13 +98,29 @@ int main()
break;
}
case 2:
{
if (Run_DebugMode_Off(ftHandle)) {
debugState = false;
printf("\n[SUCCESS] PMIC Debug Mode Off\n");
}
else {
debugState = true;
printf("\n[FAILURE] Communication error.\n");
}
break;
}
case 3:
Run_CheckFaults(ftHandle);
break;
case 3:
case 4:
Run_ReadChipInfo(ftHandle);
break;
case 5:
Irq_Clear(ftHandle);
break;
default:
printf("\n[ERROR] Menu number %d does not exist.\n", choice);
break;
@@ -741,16 +762,12 @@ void toBinaryString(uint8_t val, char* outBuf)
outBuf[9] = '\0'; // 문자열 끝 지정
}
// Enter / Exit Debug Mode
bool Run_DebugMode(FT_HANDLE ftHandle) {
// Set Debug Mode On
bool Run_DebugMode_On(FT_HANDLE ftHandle) {
uint8_t readVal = 0;
int retryCount = 0;
const int maxRetries = 100; // 과도한 반복 방지 (50회면 충분합니다)
const int maxRetries = 300; // 과도한 반복 방지 (50회면 충분합니다)
#if 0
printf("\n[PROCESS] Enter PMIC Debug Mode...\n");
readVal = PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x02); //0x102 - IO_MODECTRL Read시 디폴트 0x65
#else
printf("\n[PROCESS] Checking PMIC Communication...");
// 사전 통신 검사: 정상적인 리드 값이 올 때까지 무한 대기 (또는 특정 횟수)
@@ -769,9 +786,8 @@ bool Run_DebugMode(FT_HANDLE ftHandle) {
}
// 실제 디버그 모드 진입 시퀀스 시작
printf("[PROCESS] Attempting to Enter Debug Mode...\n");
printf("[PROCESS] Attempting to Enter Debug Mode On\n");
#endif
do {
retryCount++;
@@ -783,13 +799,13 @@ bool Run_DebugMode(FT_HANDLE ftHandle) {
PMIC_I2C_Write(ftHandle, PMIC_ADDR_PROTECTION, 0x02, 0x25); //0x102 - IO_MODECTRL
// 딜레이 및 확인 (Verification)
Sleep(10);
Sleep(50);
// 직접 읽어서 확인
readVal = PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x02);
if (readVal == 0x25) {
printf(" >>> Success! Debug Mode entered at cycle %d. <<<\n", retryCount);
if (readVal == 0x25) {;
printf(" >>> Success! Debug Mode On[0x%02X] at cycle %d. <<<\n", readVal, retryCount);
return true;
}
@@ -797,12 +813,66 @@ bool Run_DebugMode(FT_HANDLE ftHandle) {
} while (retryCount < maxRetries);
printf("\n[ERRPR] Failed to enter Debug Mode\n");
return false;
printf("\n[ERRPR] Failed to enter Debug Mode On\n");
return false;
}
// Set Debug Mode Off
bool Run_DebugMode_Off(FT_HANDLE ftHandle) {
uint8_t readVal = 0;
int retryCount = 0;
const int maxRetries = 100; // 과도한 반복 방지 (50회면 충분합니다)
printf("\n[PROCESS] Checking PMIC Communication...");
// 사전 통신 검사: 정상적인 리드 값이 올 때까지 무한 대기 (또는 특정 횟수)
while (1) {
readVal = PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x02); //0x102 - IO_MODECTRL Read시 Debug On으로 0x25
if (readVal != 0xFF) {
printf("\n[SUCCESS] Device detected! (Current Reg 0x02: 0x%02X)\n", readVal);
break; // 통신 성공 시 검사 루프 탈출
}
printf("."); // 대기 중임을 알리는 점 표시
Sleep(1000); // 1초 간격으로 확인
// 만약 무한 대기가 싫다면 별도의 카운터를 써서 break
}
// 실제 디버그 모드 진입 시퀀스 시작
printf("[PROCESS] Attempting to Enter Debug Mode Off...\n");
do {
retryCount++;
// Page01 선택
PMIC_I2C_Write(ftHandle, PMIC_ADDR_PROTECTION, 0x00, 0x01);
PMIC_I2C_Write(ftHandle, PMIC_ADDR_PROTECTION, 0x00, 0x01);
// 디버그 모드 해제 명령 (0x65)
PMIC_I2C_Write(ftHandle, PMIC_ADDR_PROTECTION, 0x02, 0x65); //0x102 - IO_MODECTRL
// 딜레이 및 확인 (Verification)
Sleep(50);
// 직접 읽어서 확인
readVal = PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x02);
if (readVal == 0x65) {
printf(" >>> Success! Debug Mode Off[0x%02X] at cycle %d. <<<\n", readVal, retryCount);
return true;
}
printf("[Retry %d]...\n", retryCount);
} while (retryCount < maxRetries);
printf("\n[ERRPR] Failed Debug Mode Off\n");
return false;
}
// Check All Fault Registers
void Run_CheckFaults(FT_HANDLE ftHandle)
@@ -849,6 +919,11 @@ void Run_CheckFaults(FT_HANDLE ftHandle)
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x1E); //0x01E - FLT_RECORD_ExtLDOs
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x1F); //0x01F - FLT_RECORD_BUCKS_B
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x20); //0x020 - FLT_RECORD_BUCKS_A
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x21); //0x021 - FLT_RECORD_ExtINPs_7_0
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x28); //0x028 - OTP_RWADDR
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x2A); //0x02A - OTP_FLT_RECORD
//Debug Regulation Chip Name etc
printf("[Regulation Chip ID]\n");
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x00); //0x00 - Page0x00
@@ -879,9 +954,76 @@ void Run_CheckFaults(FT_HANDLE ftHandle)
// Read Chip Information (OTP/Version)
void Run_ReadChipInfo(FT_HANDLE ftHandle)
{
printf("\n[PROCESS] Reading Chip Information...\n");
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x02); // IO_CHIPVERSION_REGU
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x03); // IO_DIEID3_REGU
//Regulation Register
printf("[OTP Version]\n");
//OTP Version
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x02); //0x00 - Page0x02
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x02); //0x00 - Page0x02
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x22); //0x222 - OTP_VERSION_REGU
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x23); //0x223 - OTP_VERSION_REGU
//Debug Regulation Chip Name etc
printf("[Regulation Chip ID]\n");
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x00); //0x00 - Page0x00
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x00); //0x00 - Page0x00
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x00); //0x000 - IO_PAGE_REGU
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x01); //0x001 - IO_CHIPNAME_REGU
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x02); //0x002 - IO_CHIPVERSION_REGU
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x03); //0x003 - IO_DIEID3_REGU
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x04); //0x004 - IO_DIEID2_REGU
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x05); //0x005 - IO_DIEID1_REGU
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x06); //0x006 - IO_DIEID0_REGU
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x0A); //0x00A - OTP_VERSION_REGU
//Debug Protection Chip Name etc
printf("[Protection Chip ID]\n");
PMIC_I2C_Write(ftHandle, PMIC_ADDR_PROTECTION, 0x00, 0x00); //0x00 - Page0x00
PMIC_I2C_Write(ftHandle, PMIC_ADDR_PROTECTION, 0x00, 0x00); //0x00 - Page0x00
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x00); //0x000 - IO_PAGE_REGU
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x01); //0x001 - IO_CHIPNAME_REGU
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x02); //0x002 - IO_CHIPVERSION_REGU
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x03); //0x003 - IO_DIEID3_REGU
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x04); //0x004 - IO_DIEID2_REGU
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x05); //0x005 - IO_DIEID1_REGU
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x06); //0x006 - IO_DIEID0_REGU
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x0A); //0x00A - OTP_VERSION_REGU
}
// PMIC Irq Clear
void Irq_Clear(FT_HANDLE ftHandle)
{
//Regulation Fault Register Clear : Regulation Register, Address 0x040 ~ 0x049
printf("[Regulation FLT Register Clear]\n");
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x00); //0x00 - Page0x00
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x00); //0x00 - Page0x00
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x40, 0x00); //0x040 - FLT_RECORD_OTP
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x41, 0x00); //0x041 - FLT_RECORD_TEMP
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x42, 0x00); //0x042 - FLT_RECORD_BUCK1
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x43, 0x00); //0x043 - FLT_RECORD_BUCK2
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x44, 0x00); //0x044 - FLT_RECORD_BUCK3
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x45, 0x00); //0x045 - FLT_RECORD_BUCK4
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x46, 0x00); //0x046 - FLT_RECORD_BUCK5
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x47, 0x00); //0x047 - FLT_RECORD_LDO
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x48, 0x00); //0x048 - FLT_RECORD_IF
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x49, 0x00); //0x049 - FLT_RECORD_LDO_DISC_DET
//Fault register data: Protection Register, Address 0x010 ~0x014, 0x019 ~0x021
printf("[Protection FLT Register Clear]\n");
PMIC_I2C_Write(ftHandle, PMIC_ADDR_PROTECTION, 0x00, 0x00); //0x00 - Page0x00
PMIC_I2C_Write(ftHandle, PMIC_ADDR_PROTECTION, 0x00, 0x00); //0x00 - Page0x00
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x14); //0x014 - FUSA_STATUS_4
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x19); //0x019 - FLT_RECORD_A
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x1A); //0x01A - FLT_RECORD_B
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x1B); //0x01B - FLT_RECORD_GND_AVIN
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x1C); //0x01C - FLT_RECORD_BG_Temp
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x1D); //0x01D - FLT_RECORD_IntLDOs
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x1E); //0x01E - FLT_RECORD_ExtLDOs
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x1F); //0x01F - FLT_RECORD_BUCKS_B
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x20); //0x020 - FLT_RECORD_BUCKS_A
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x21); //0x021 - FLT_RECORD_ExtINPs_7_0
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x2A); //0x02A - OTP_FLT_RECORD
}
// Manual Command

View File

@@ -1,14 +0,0 @@
c:\work\src\0_tool\pmic_tool\pmic_cmd_tool\x64\release\vc143.pdb
c:\work\src\0_tool\pmic_tool\pmic_cmd_tool\x64\release\pmic_cmd_tool.obj
c:\work\src\0_tool\pmic_tool\x64\release\pmic_cmd_tool.exe
c:\work\src\0_tool\pmic_tool\x64\release\pmic_cmd_tool.pdb
c:\work\src\0_tool\pmic_tool\pmic_cmd_tool\x64\release\pmic_cmd_tool.ipdb
c:\work\src\0_tool\pmic_tool\pmic_cmd_tool\x64\release\pmic_cmd_tool.iobj
c:\work\src\0_tool\pmic_tool\pmic_cmd_tool\x64\release\pmic_cmd_tool.tlog\cl.command.1.tlog
c:\work\src\0_tool\pmic_tool\pmic_cmd_tool\x64\release\pmic_cmd_tool.tlog\cl.items.tlog
c:\work\src\0_tool\pmic_tool\pmic_cmd_tool\x64\release\pmic_cmd_tool.tlog\cl.read.1.tlog
c:\work\src\0_tool\pmic_tool\pmic_cmd_tool\x64\release\pmic_cmd_tool.tlog\cl.write.1.tlog
c:\work\src\0_tool\pmic_tool\pmic_cmd_tool\x64\release\pmic_cmd_tool.tlog\link.command.1.tlog
c:\work\src\0_tool\pmic_tool\pmic_cmd_tool\x64\release\pmic_cmd_tool.tlog\link.read.1.tlog
c:\work\src\0_tool\pmic_tool\pmic_cmd_tool\x64\release\pmic_cmd_tool.tlog\link.secondary.1.tlog
c:\work\src\0_tool\pmic_tool\pmic_cmd_tool\x64\release\pmic_cmd_tool.tlog\link.write.1.tlog

View File

@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<ProjectOutputs>
<ProjectOutput>
<FullPath>C:\Work\Src\0_Tool\PMIC_Tool\x64\Release\PMIC_Cmd_Tool.exe</FullPath>
</ProjectOutput>
</ProjectOutputs>
<ContentFiles />
<SatelliteDlls />
<NonRecipeFileRefs />
</Project>

View File

@@ -1,19 +0,0 @@
 PMIC_Cmd_Tool.cpp
C:\Work\Src\0_Tool\PMIC_Tool\PMIC_Cmd_Tool\external\FT4222\include\ftd2xx.h(2072,1): warning C4819: 현재 코드 페이지(949)에서 표시할 수 없는 문자가 파일에 들어 있습니다. 데이터가 손실되지 않게 하려면 해당 파일을 유니코드 형식으로 저장하십시오.
(소스 파일 'src/PMIC_Cmd_Tool.cpp'을(를) 컴파일하는 중)
코드를 생성하고 있습니다.
2 of 14 functions (14.3%) were compiled, the rest were copied from previous compilation.
0 functions were new in current compilation
0 functions had inline decision re-evaluated but remain unchanged
코드를 생성했습니다.
PMIC_Cmd_Tool.vcxproj -> C:\Work\Src\0_Tool\PMIC_Tool\x64\Release\PMIC_Cmd_Tool.exe
C:\Work\Src\0_Tool\PMIC_Tool\PMIC_Cmd_Tool\external\FT4222\dll\ftd2xx.dll
C:\Work\Src\0_Tool\PMIC_Tool\PMIC_Cmd_Tool\external\FT4222\dll\LibFT4222-64.dll
2개 파일이 복사되었습니다.
Creating backup at: "C:\Work\Src\0_Tool\PMIC_Tool\PMIC_Cmd_Tool_Build_History\20260402_1952"
C:\Work\Src\0_Tool\PMIC_Tool\x64\Release\ftd2xx.dll
C:\Work\Src\0_Tool\PMIC_Tool\x64\Release\LibFT4222-64.dll
C:\Work\Src\0_Tool\PMIC_Tool\x64\Release\PMIC_Cmd_Tool.exe
C:\Work\Src\0_Tool\PMIC_Tool\x64\Release\PMIC_Cmd_Tool.pdb
4개 파일이 복사되었습니다.

View File

@@ -1 +0,0 @@
C:\Work\Src\0_Tool\PMIC_Tool\PMIC_Cmd_Tool\src\PMIC_Cmd_Tool.cpp;C:\Work\Src\0_Tool\PMIC_Tool\PMIC_Cmd_Tool\x64\Release\PMIC_Cmd_Tool.obj

View File

@@ -1,2 +0,0 @@
PlatformToolSet=v143:VCToolArchitecture=Native64Bit:VCToolsVersion=14.44.35207:TargetPlatformVersion=10.0.26100.0:
Release|x64|C:\Work\Src\0_Tool\PMIC_Tool\|

View File

@@ -1,3 +0,0 @@
^C:\WORK\SRC\0_TOOL\PMIC_TOOL\PMIC_CMD_TOOL\X64\RELEASE\PMIC_CMD_TOOL.OBJ
C:\Work\Src\0_Tool\PMIC_Tool\PMIC_Cmd_Tool\x64\Release\PMIC_Cmd_Tool.IPDB
C:\Work\Src\0_Tool\PMIC_Tool\PMIC_Cmd_Tool\x64\Release\PMIC_Cmd_Tool.iobj