; -------------------------------------------------------------------------------- ; @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 <0x0> <0x0> FLASHFILE.CONFIG 0x55000000 0x0 0x0 ;FLASHFILE.TARGET <> <> <> 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