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

202 lines
6.6 KiB
Plaintext

; --------------------------------------------------------------------------------
; @Title: Vayu EVM CPU TI Jacinto6 eMMC FLASH Programming script
;
; @Description:
; eMMC: MTFC8GLDDQ on MMCHS2
; SRAM: 0x40300000
; SD/MMC Controller Register : 0x4809C200(MMC1), 0x480B4000(MMC2)
;
; @Author: jjeong
; @Chip: DRA7xx
; @Board: Vayu EVM
; @Keywords: DRA7xx (Jacinto 6) EMMC
; @Copyright: (C) 1989-2022 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: dra7xx-emmc.cmm 12049 2023-04-20 12:32:16Z bschroefel $
LOCAL &arg1
ENTRY &arg1
&arg1=STRing.UPpeR("&arg1") // for example "PREPAREONLY"
LOCAL &pdd
LOCAL &MMC_BASE
;&MMC_BASE=0x4809C000 ;on MMCHS1
&MMC_BASE=0x480B4000 ;on MMCHS2
; ------------------------------------------------------------------------------
; Setup CPU
RESet
SYStem.CPU DRA7XX
CORE.ASSIGN 1
SYStem.MemAccess DAP
SYStem.JtagClock 20Mhz
SYStem.Up
&pdd=OS.PresentDemoDirectory()
//disable MMU & cache
PER.Set.simple C15:0x1 %Long Data.Long(C15:0x1)&~0x1005
; ------------------------------------------------------------------------------
; Flash Controller Power & Clock Enable
//CM_L3INIT_MMC1_CLKCTRL , This register manages the MMC1 clocks.
;Data.Set A:0x4A009300+0x28 %Long 0x2 ;Enable mmc1 clk
//CM_L3INIT_MMC2_CLKCTRL , This register manages the MMC2 clocks.
Data.Set A:0x4A009300+0x30 %Long Data.Long(A:0x4A009300+0x30)|0x2 ;Enable mmc2 clk
; ------------------------------------------------------------------------------
; Flash Pin Mux Configuration
;//MMC1
;Data.Set A:(0x4A003754) %Long 0x0 ;SYSCFG_PAD_MMC1_CLK
;Data.Set A:(0x4A003758) %Long 0x0 ;SYSCFG_PAD_MMC1_CMD
;Data.Set A:(0x4A00375C) %Long 0x0 ;SYSCFG_PAD_MMC1_DAT0
;Data.Set A:(0x4A003760) %Long 0x0 ;SYSCFG_PAD_MMC1_DAT1
;Data.Set A:(0x4A003764) %Long 0x0 ;SYSCFG_PAD_MMC1_DAT2
;Data.Set A:(0x4A003768) %Long 0x0 ;SYSCFG_PAD_MMC1_DAT3
;Data.Set A:(0x4A00376C) %Long 0x0 ;SYSCFG_PAD_MMC1_SDCD
;Data.Set A:(0x4A003770) %Long 0x0 ;SYSCFG_PAD_MMC1_SDWP
;//MMC2
Data.Set A:(0x4A00348C) %Long 0x70001 ;mmc2_dat4 ,gpio2_09
Data.Set A:(0x4A003490) %Long 0x70001 ;mmc2_dat5
Data.Set A:(0x4A003494) %Long 0x70001 ;mmc2_dat6
Data.Set A:(0x4A003498) %Long 0x70001 ;mmc2_dat7
Data.Set A:(0x4A00349C) %Long 0x40001 ;mmc2_clk
Data.Set A:(0x4A0034A0) %Long 0x70001 ;mmc2_dat0
Data.Set A:(0x4A0034A4) %Long 0x70001 ;mmc2_dat1
Data.Set A:(0x4A0034A8) %Long 0x70001 ;mmc2_dat2
Data.Set A:(0x4A0034AC) %Long 0x70001 ;mmc2_dat3
Data.Set A:(0x4A0034B0) %Long 0x60001 ;mmc2_cmd ,gpio2_18
Data.Set A:(0x4A0034D0) %Long 0x6000F ;mmc2_sdcd ,gpio1_14
Data.Set A:(0x4A0034D4) %Long 0x6000F ;mmc2_sdwp ,gpio1_15
; ------------------------------------------------------------------------------
; Flash Controller Init
Data.Set A:(&MMC_BASE+0x0240) %LE %Long 0x22E90080 ; MMCHS_CAPA, Voltage support 1.8 & 3.x
Data.Set A:(&MMC_BASE+0x0110) %LE %Long 0x00002015 ; MMCHS_SYSCONFIG, default
Data.Set A:(&MMC_BASE+0x012C) %LE %Long 0x00000680 ; MMCHS_CON
Data.Set A:(&MMC_BASE+0x0204) %LE %Long 0x0200 ; MMCHS_BLK, block size: 512B
Data.Set A:(&MMC_BASE+0x0228) %LE %Long 0x0c10 ; power level 3.0v, sd bus power off
WAIT 10.ms
Data.Set A:(&MMC_BASE+0x0228) %LE %Long 0x0d10 ; power level 3.0v, sd bus power on
Data.Set A:(&MMC_BASE+0x22C) %LE %Long 0xE3C87 ; MMCHS_SYSCTL Clock frequency, 400Khz
Data.Set A:(&MMC_BASE+0x234) %LE %Long 0x307f0033 ; enable the BRR bit
; ------------------------------------------------------------------------------
; Flash Read ID Test
GOSUB READ_ID_TEST
; ------------------------------------------------------------------------------
; Init SRAM (16KB) for the flash algorithm
Data.Test A:0x40301000++0x3FFF
; ------------------------------------------------------------------------------
; Flash declaration
Break.RESet
FLASHFILE.RESet
//FLASHFILE.CONFIG <MMC Controller Base> 0x0 0x0
FLASHFILE.CONFIG &MMC_BASE+0x200 0x0 0x0
//FLASHFILE.target <Code_range> <Data_range> <Algorithm file>
FLASHFILE.TARGET 0x40301000++0x1FFF E:0x40303000++0x23FF ~~/demo/arm/flash/byte/emmc_omap.bin /KEEP /DUALPORT
//Read FLASH Manufacture and Device ID
Data.Set A:&MMC_BASE+0x22C %LE %Long 0xE3C87 ; 400Khz , the Card identification mode
FLASHFILE.GETID
//Increase the eMMC freq for Data Transfer Mode
Data.Set A:&MMC_BASE+0x22C %LE %Long 0x10047 ; please find the best eMMC clk freq (around 10 Mhz), MMCHS_SYSCTL[15:6]
;GOSUB MMC_8BIT_MODE
//Get EXTended CSD registers
FLASHFILE.GETEXTCSD
//End of the test prepareonly
IF "&arg1"=="PREPAREONLY"
ENDDO
//When you access to the other partition on the flash
; FLASHFILE.SETEXTCSD 179. 0x00 ; access: partition null, no boot, access: no boot partition
; 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
; FLASHFILE.ERASE 0x0--0xFFFFFF
; FLASHFILE.LOAD * 0x0
; FLASHFILE.LOAD * 0x0 /ComPare
ENDDO
READ_ID_TEST:
(
//MMC interface, not SD(HC)
//CMD0
RePeaT 2.
(
Data.Set A:&MMC_BASE+0x230 %Long 0xFFFFFFFF ;clear status
Data.Set A:&MMC_BASE+0x208 %Long 0x0 ;arg
Data.Set A:&MMC_BASE+0x20c %Long 0x0 ;cmd
WAIT 10.ms
)
//CMD1
RePeaT 10.
(
Data.Set A:&MMC_BASE+0x230 %Long 0xFFFFFFFF ;clear status
Data.Set A:&MMC_BASE+0x208 %Long 0x40FF8000 ;arg
Data.Set A:&MMC_BASE+0x20c %Long 0x01020000 ;cmd1
WAIT 100.ms
&resp=Data.Long(A:(&MMC_BASE+0x210))
//print "CMD1 resp: 0x" &resp
IF (&resp&0x80000000)==0x80000000
(
GOTO jump_cmd2
)
)
PRINT "CMD1 fail"
END
jump_cmd2:
//CMD2
Data.Set A:&MMC_BASE+0x230 %Long 0xFFFFFFFF ;clear status
Data.Set A:&MMC_BASE+0x208 %Long 0x0 ;arg
Data.Set A:&MMC_BASE+0x20c %Long 0x02010000 ;cmd2
WAIT 10.ms
//CMD3
Data.Set A:&MMC_BASE+0x230 %Long 0xFFFFFFFF ;clear status
Data.Set A:&MMC_BASE+0x208 %Long 0x00010000 ; arg, MMC RCA is (0x0001<<16.)
Data.Set A:&MMC_BASE+0x20c %Long 0x03020000 ;cmd3
WAIT 10.ms
//CMD10
Data.Set A:&MMC_BASE+0x230 %Long 0xFFFFFFFF ;clear status
Data.Set A:&MMC_BASE+0x208 %Long 0x00010000 ; arg, MMC RCA is (0x0001<<16.)
Data.Set A:&MMC_BASE+0x20c %Long 0x0A010000 ;cmd10
WAIT 10.ms
//Response2
PRINT "CID register"
PRINT "[127:104] 0x" Data.Long(A:(&MMC_BASE+0x21c))
PRINT "[103:72] 0x" Data.Long(A:(&MMC_BASE+0x218))
PRINT "[71:40] 0x" Data.Long(A:(&MMC_BASE+0x214))
PRINT "[39:8] 0x" Data.Long(A:(&MMC_BASE+0x210))
RETURN
)
MMC_8BIT_MODE:
(
FLASHFILE.SETEXTCSD 183. 0x2 ; change bus width to 8 bits. ( 0:1bit, 1:4bits, 2:8bits )
Data.Set A:(&MMC_BASE+0x012C) %Long Data.Long(A:&MMC_BASE+0x012C)|(0x1<<5) ; MMCHS_CON, Enable 8bit mode (DW8)
RETURN
)