⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smc_dtc_erase256_2k.fsm

📁 HID-Ukey底层源码实现(st72651芯片) windows上层驱动
💻 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 + -