📄 smc_dtc_erase256_2k.fsm
字号:
LD MSB 1 ; data_flash port = output,removed for 256mb
LD LSB 9 ; DATA_FLASH Port driven by FCI
LD CTRL_FCI ; PARALLEL Port driven by FCI
LD MSB 0
LD LSB 15
LD DDR_PARALLEL ; PA3-0 as output, PA7-4 as input
LD OR_PARALLEL ; PA3=/RD, PA2=ALE, PA1=/WE, PA0=CLE
; PA4=R/B
LD MSB 15
LD MASK
XOR
; LD MSB 0
; LD LSB 0
LD ADR_BUFFER01 ; clear the high byte of ADR0
LD LSB 1
LD X ; X = 1
LD LSB 10
LD DR_PARALLEL ; RD = 1; ALE = 0; WE = 1; CLE = 0
;============================================================================
LD MSB 6
LD LSB 0 ; Load "Block Erase" cmd: 0x60
LD DATA_FLASH ; Send the first command. It is 0x80 or 0x60
LD LSB 11
LD DR_PARALLEL ; RD = 1, ALE = 0, WE = 1, CLE = 1
LD LSB 9
LD DR_PARALLEL ; RD = 1, ALE = 0, WE = 0, CLE = 1
LD LSB 11
LD DR_PARALLEL ; RD = 1, ALE = 0, WE = 1, CLE = 1
LD LSB 10
LD DR_PARALLEL ; RD = 1, ALE = 0, WE = 1, CLE = 0
;============================================================================
;; Finish output a command, set CLE low.
;; Going to output the address, set ALE high
LD LSB 14
LD DR_PARALLEL ; RD = 1, ALE = 0, WE = 1, CLE = 0
LD MSB 14
LD LSB 5
LD ADR_BUFFER00 ; ADR0 = 0x00E6; points to "Num of address"
LD MSB 0
LD LSB 2 ; Load "Block Erase" cmd: 0x60
LD Y ; Load number of addres bytes
:Send_Address_Bytes
;------------------
LD A DATA_BUFFER0
SUB16 ADR_BUFFER0
LD DATA_FLASH ; Send the address byte
LD LSB 12
LD DR_PARALLEL ; RD = 1, ALE = 1, WE = 0, CLE = 0
LD LSB 14
LD DR_PARALLEL ; RD = 1, ALE = 1, WE = 1, CLE = 0
DECY
JP :Send_Address_Bytes
LD LSB 10
LD DR_PARALLEL ; RD = 1, ALE = 0, WE = 1, CLE = 0
;============================================================================
LD MSB 13 ; Send the "Block Erase" command - 0xD0
LD LSB 0
LD DATA_FLASH
LD LSB 11
LD DR_PARALLEL ; RD = 1, ALE = 0, WE = 1, CLE = 1
LD LSB 9
LD DR_PARALLEL ; RD = 1, ALE = 0, WE = 0, CLE = 1
LD LSB 11
LD DR_PARALLEL ; RD = 1, ALE = 0, WE = 1, CLE = 1
LD LSB 10
LD DR_PARALLEL ; RD = 1, ALE = 0, WE = 1, CLE = 0,
;============================================================================
;; Wait on busy line
;============================================================================
:Wait_On_Busy
LD A DR_PARALLEL
EXCHANGE
BCLR1 ; Test R/-B line
JP :Wait_On_Busy
;============================================================================
;; Read the status byte
LD MSB 7
LD LSB 0
LD DATA_FLASH ; Send "Status Read" command
LD LSB 11
LD DR_PARALLEL ; RD = 1, ALE = 0, WE = 0, CLE = 1
LD LSB 9
LD DR_PARALLEL ; RD = 1, ALE = 0, WE = 0, CLE = 1
LD LSB 11
LD DR_PARALLEL ; RD = 1, ALE = 0, WE = 1, CLE = 1
LD LSB 10
LD DR_PARALLEL ; RD = 1, ALE = 0, WE = 1, CLE = 0
LD MSB 0 ; DATA_FLASH port = input
LD LSB 9 ; DATA_FLASH Port driven by FCI
LD CTRL_FCI ; PARALLEL Port driven by FCI
LD LSB 2
LD DR_PARALLEL ; WE = 1, CLE = 0, ALE = 0, RD = 0
LD LSB 10
LD DR_PARALLEL ; WE = 1, CLE = 0, ALE = 0, RD = 1
LD A DATA_FLASH ; Get the status byte
BCLR1
JP :Status_Good
;;; Status "FAIL" Stop the DTC
STATUS ERROR STOP
;============================================================================
:Status_Good
;-----------
STATUS STOP ; Return if it is a BLOCK_ERASE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -