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

127 lines
3.2 KiB
Plaintext

; --------------------------------------------------------------------------------
; @Title: AT91SAM9XE NAND FLASH Programming Script
; @Description:
; NAND FLASH(SAMSUNG,K9F2G08U) is connected NCS3(PC14)
;
; Internal SRAM : 0x300000
; Command Register : 0x40400000
; Address Register : 0x40200000
; Data Register : 0x40000000
;
; @Author: jjeong
; @Copyright: (C) 1989-2022 Lauterbach GmbH, licensed for use with TRACE32(R) only
; @Chip: AT91SAM9XE512
; @Keywords: SAMSUNG K9F2G08U NAND
; --------------------------------------------------------------------------------
; $Id: at91sam9xe-nand2g08.cmm 12049 2023-04-20 12:32:16Z bschroefel $
LOCAL &arg1
ENTRY &arg1
&arg1=STRing.UPpeR("&arg1") // for example "PREPAREONLY"
//SYStem Configuration
SYStem.RESet
SYStem.CPU AT91SAM9XE512
SYStem.JtagClock RTCK
SYStem.Option IMASKASM ON
SYStem.Option IMASKHLL ON
SYStem.Option RESBREAK OFF
SYStem.Option ENRESET ON
SYStem.Mode Up
Register.RESet
//CPU initialization
GOSUB cpu_init
//Assign the EBI CS3 to the NandFlash
Data.Set ASD:0xFFFFEF1C %Long 0x10008 ; EBI_CS3A
// setup NCS3 (NAND Flash) 8-bit
Data.Set ASD:0xFFFFEC30 %Long 0x03030303 ; SMC_SETUP
Data.Set ASD:0xFFFFEC34 %Long 0x04040404 ; SMC_PULSE
Data.Set ASD:0xFFFFEC38 %Long 0x00080008 ; SMC_CYCLE
;Data.Set ASD:0xFFFFEC3C %Long 0x00161003 ; SMC_MODE ; 16-bit
Data.Set ASD:0xFFFFEC3C %Long 0x00160003 ; SMC_MODE ; 8-bit
// NAND FLash: configure PIOs in periph mode
Data.Set ASD:0xFFFFF800 %Long 0x4000 ;PIOC.14 Enable
Data.Set ASD:0xFFFFF810 %Long 0x4000 ;PIOC.14 Output Enable
//for asserting the Nand Flash Chip select (PIOC.14)
Data.Set ASD:0xFFFFF830 %Long 0x4000 ; High
Data.Set ASD:0xFFFFF834 %Long 0x4000 ; Low
Break.RESet
FLASHFILE.RESet
//FLASHFILE.config <Cmd_reg> <Addr_reg> <Data_reg>
FLASHFILE.CONFIG 0x40400000 0x40200000 0x40000000
// FLASHFILE.TARGET <code range> <data range> <Algorithm file>
FLASHFILE.TARGET 0x300000++0x1fff 0x302000++0x1FFF ~~/demo/arm/flash/byte/nand2g08.bin
//Read FLASH Manufacture and Device ID
FLASHFILE.GETID
//End of the test prepareonly
IF "&arg1"=="PREPAREONLY"
ENDDO
//Put a list of bad blocks into area window for 2Gbit (256MB) size
FLASHFILE.GETBADBLOCK 0x0--0xFFFFFFF
DIALOG.YESNO "Program flash memory?"
ENTRY &progflash
IF &progflash
(
//Erase NAND FLASH Main and Bad block inforamtion
FLASHFILE.Erase 0x0--0xFFFFFFF /EraseBadBlocks
//Skipped way
FLASHFILE.LOAD.binary * 0x0
;FLASHFILE.LOADSPARE * 0x0
//Reserved block area way
;FLASHFILE.LOAD * 0x0 /WriteBadBlocks
;FLASHFILE.LOADSPARE * 0x0 /WriteBadBlocks
)
//for releasing the Nand Flash Chip select
Data.Set A:0xFFFFF830 %Long 0x4000 ; High
ENDDO
cpu_init:
;Setup PLL to 100MHz
Data.Set ASD:0xFFFFFC20 %Long 0x00004001
WAIT 10ms
Data.Set ASD:0xFFFFFC30 %Long 0x00000102
WAIT 10ms
Data.Set ASD:0xFFFFFC28 %Long 0x206dbf12
WAIT 10ms
WAIT 10ms
; It is necessary to write to memory after setting it up
Data.Set 0x20000000 %Long 0x1
;Reset ECC
PER.Set.simple ASD:0xFFFFE000 %Long 1
; Setup ITCM and DTCM
PER.Set.simple ASD:0xFFFFED14 %Long 0xB66
;Remap SRAM to 0x0
Data.Set SD:0xFFFFED00 %LE %Long 0x3
;Disable Watchdog
PER.Set.simple ASD:0xFFFFFD44 %Long 0x8000
RETURN