Files
Gen4_R-Car_Trace32/2_Trunk/demo/arm/flash/pxa978-emmc.cmm
2025-10-14 09:52:32 +09:00

182 lines
4.7 KiB
Plaintext

; --------------------------------------------------------------------------------
; @Title: PXA978 eMMC FLASH Programming Script
; @Description:
; eMMC FLASH(SAMSUNG, 4GB eMMC) is connected MMC3
;
; S(D)RAM: 0x5c020000
; MMC3 Register : 0x55000000
;
; @Author: jjeong
; @Keywords: SAMSUNG eMMC
; @Copyright: (C) 1989-2022 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: pxa978-emmc.cmm 10516 2022-02-02 11:39:30Z bschroefel $
LOCAL &arg1
ENTRY &arg1
&arg1=STRing.UPpeR("&arg1") // for example "PREPAREONLY"
&MMC_BASE=0x55000000
AREA.RESet
AREA.view
RESet
SYStem.RESet
SYStem.CPU 88AP978
SYStem.CONFIG.CORE 1. 1.
SYStem.MemAccess Denied
SYStem.JtagClock 20000000.
SYStem.Option IMASKASM OFF
SYStem.Option IMASKHLL OFF
SYStem.Option RESBREAK ON
SYStem.Option INTDIS OFF
SYStem.Option DBGACK ON
SYStem.Option ENRESET ON
SYStem.Option SOFTWORD OFF
SYStem.Option SOFTLONG OFF
SYStem.Option TRST OFF
SYStem.Option PWRDWN OFF
SYStem.Option AMBA OFF
SYStem.Option NODATA OFF
SYStem.Option EXEC OFF
SYStem.Option DISMODE AUTO
SYStem.CONFIG CHIPIRPRE 4.
SYStem.CONFIG CHIPDRPRE 0.
SYStem.CONFIG CHIPIRPOST 0.
SYStem.CONFIG CHIPDRPOST 0.
SYStem.CONFIG CHIPIRLENGTH 8.
SYStem.CONFIG COREBASE DAP:0x80110000
SYStem.CONFIG TIOCPTYPE 3.
SYStem.CONFIG CHIPIRPATTERN ALTERNATE %Byte 0x7E
SYStem.JtagClock 10.mhz
SYStem.Up
PER.Set.simple C15:0x1 %Long 0xc52078; disable mmu & cache
Data.Set 0x40A00018 %Long 0x0
Data.Set ZSD:0x40A000A0 %LE %Long 0x1FFFFF
Data.Set AZSD:0x40E10550--0x40E1056F %LE %Long 0x11C2
Data.Set AZSD:0x40E10574 %LE %Long 0x11C2
Data.Set AZSD:0x40E10570 %LE %Long 0x10C2
Data.Set ZSD:0x55000100 %LE %Long 0x4a000000
Data.Set ZSD:0x55000104 %LE %Long 0x70305
Data.Set AZSD:0x40E10500 %LE %Long 0xC040 ;reset
Data.Set ZSD:0x40E00414 %LE %Long 0x10
Data.Set ZSD:0x40E00008 %LE %Long 0x0
Data.Set ZSD:0x40E000A4 %LE %Long 0x0
Data.Set ZSD:0x40E00138 %LE %Long 0x0
;clk Enable
Data.Set ZSD:0x41340024 %LE %Long 0xCFFFFFFF
//configure SD Host controller
Data.Set ZSD:0x55000004 %LE %Long 0x200
;Data.Set ZSD:0x55000028 %LE %LONG 0xF24 ; 8bit bus
Data.Set ZSD:0x55000028 %LE %Long 0xF04 ; when 1 bit bus
Data.Set ZSD:0x5500002C %LE %Long 0xEFF07
Data.Set ZSD:0x55000034 %LE %Long 0x307F0033
Data.Set ZSD:0x55000038 %LE %Long 0x8075003B
Data.Set ZSD:0x5500010C %LE %Long 0x18063FFF
Data.Set ZSD:0x55000138 %LE %Long 0xE0000
GOSUB READ_ID_TEST
Break.RESet
FLASHFILE.RESet
;FLASHFILE.CONFIG <eMMC controller> <0x0> <0x0>
FLASHFILE.CONFIG 0x55000000 0x0 0x0
;FLASHFILE.TARGET <<code range>> <<data range>> <<algorithm file>>
FLASHFILE.TARGET 0x5c020000++0x1fff 0x5c022000++0x1fff ~~/demo/arm/flash/byte/emmc_pxa.bin /KEEP
Data.Set SD:0x5500002C %LE %Long 0xEFF07 ; lower clk for the initialization
FLASHFILE.GETID
Data.Set SD:0x5500002C %LE %Long 0xE0107 ; higher clk for the data transfer
FLASHFILE.GetEXTCSD
//End of the test prepareonly
IF "&arg1"=="PREPAREONLY"
ENDDO
//When you access to the other partition on the flash
; FLASHFILE.SETEXTCSD 179. 0x48 ; access: partition null
; FLASHFILE.SETEXTCSD 179. 0x49 ; access: partition boot 1
; FLASHFILE.SETEXTCSD 179. 0x4A ; access: partition boot 2
;FLASHFILE.DUMP 0x0 ; Read eMMC
;FLASHFILE.ERASE 0x0--0xFFFFF ; Erase eMMC
;FLASHFILE.LOAD * 0x0 ; Write eMMC
ENDDO
READ_ID_TEST:
//MMC interface, not SD(HC)
//CMD0
RePeaT 2.
(
Data.Set &MMC_BASE+0x30 %Long 0xFFFFFFFF ;clear status
Data.Set &MMC_BASE+0x8 %Long 0x0 ;arg
Data.Set &MMC_BASE+0xc %Long 0x0 ;cmd
WAIT 10.ms
)
//CMD1
RePeaT 10.
(
Data.Set &MMC_BASE+0x30 %Long 0xFFFFFFFF ;clear status
Data.Set &MMC_BASE+0x8 %Long 0x40FF8000 ;arg
Data.Set &MMC_BASE+0xc %Long 0x01020000 ;cmd1
WAIT 100.ms
&resp=Data.Long(A:(&MMC_BASE+0x10))
//print "CMD1 resp: 0x" &resp
IF (&resp&0x80000000)==0x80000000
(
GOTO jump_cmd2
)
)
PRINT "CMD1 fail"
END
jump_cmd2:
//CMD2
Data.Set &MMC_BASE+0x30 %Long 0xFFFFFFFF ;clear status
Data.Set &MMC_BASE+0x8 %Long 0x0 ;arg
Data.Set &MMC_BASE+0xc %Long 0x02010000 ;cmd2
WAIT 10.ms
//CMD3
Data.Set &MMC_BASE+0x30 %Long 0xFFFFFFFF ;clear status
Data.Set &MMC_BASE+0x8 %Long 0x00010000 ; arg, MMC RCA is (0x0001<<16.)
Data.Set &MMC_BASE+0xc %Long 0x03020000 ;cmd3
WAIT 10.ms
//CMD10
Data.Set &MMC_BASE+0x30 %Long 0xFFFFFFFF ;clear status
Data.Set &MMC_BASE+0x8 %Long 0x00010000 ; arg, MMC RCA is (0x0001<<16.)
Data.Set &MMC_BASE+0xc %Long 0x0A010000 ;cmd10
WAIT 10.ms
//Response2
PRINT "CID register"
PRINT "[127:104] 0x" Data.Long(A:(&MMC_BASE+0x1c))
PRINT "[103:72] 0x" Data.Long(A:(&MMC_BASE+0x18))
PRINT "[71:40] 0x" Data.Long(A:(&MMC_BASE+0x14))
PRINT "[39:8] 0x" Data.Long(A:(&MMC_BASE+0x10))
RETURN