smc_dtc_format_fsm.hex

来自「HID-Ukey底层源码实现(st72651芯片) windows上层驱动」· HEX 代码 · 共 493 行 · 第 1/2 页

HEX
493
字号
 ;---------------
 0xb2,   ;  66 LD	LSB 2
 0x8b,   ;  67 LD	CMP11		; CMP1 = 0x0210; CMP10 is the 2nd CMD
 0xb0,   ;  68 LD	LSB 0
 0x86,   ;  69 LD	ADR_BUFFER10
 0x87,   ;  6a LD	ADR_BUFFER11	; buffer pointer 1 = 0x0000
  
 ; :loop_write_zeros
 0xb0,   ;  6b LD	LSB 0
 0x8c,   ;  6c LD	DATA_FLASH
 0xb8,   ;  6d LD	LSB 8
 0x90,   ;  6e LD	DR_PARALLEL	; WE = 0
 0xba,   ;  6f LD	LSB 10
 0x90,   ;  70 LD	DR_PARALLEL	; WE = 1
 0x2f,   ;  71 ADDER16	ADR_BUFFER1
 0xf,   ;  72 CP	ADR_BUFFER1<CMP1
 ; JP :loop_write_zeros
 0x68,   ;  73 JP  -8
  
 ;-----------------------------------------------------------
 ;	START ADDRESS FOR 2nd enter of erase block
 ;-----------------------------------------------------------
 ; :send_write_erase_cmd
 0xca,   ;  74 LD	A CMP10			; get the 2nd CMD
 0x8c,   ;  75 LD	DATA_FLASH
 0xa0,   ;  76 LD	MSB 0
 0xbb,   ;  77 LD	LSB 11
 0x90,   ;  78 LD	DR_PARALLEL	; WE = 1, CLE = 1
 0xb9,   ;  79 LD	LSB 9
 0x90,   ;  7a LD	DR_PARALLEL	; WE = 0, CLE = 1
 0xbb,   ;  7b LD	LSB 11
 0x90,   ;  7c LD	DR_PARALLEL	; WE = 1, CLE = 1
 0xba,   ;  7d LD	LSB 10
 0x90,   ;  7e LD	DR_PARALLEL	; WE = 1, CLE = 0
  
 ; :wait_write_erase_busy
 ;---------------------
 0xd0,   ;  7f LD	A DR_PARALLEL
 0x33,   ;  80 EXCHANGE
 0x28,   ;  81 BCLR1
 ; JP :wait_write_erase_busy
 0x63,   ;  82 JP  -3
  
 0xa7,   ;  83 LD	MSB 7
 0xb0,   ;  84 LD	LSB 0
 0x8c,   ;  85 LD	DATA_FLASH	; send command of Read_Status
 0xa0,   ;  86 LD	MSB 0
 0xbb,   ;  87 LD	LSB 11
 0x90,   ;  88 LD	DR_PARALLEL	; WE = 1, CLE = 1
 0xb9,   ;  89 LD	LSB 9
 0x90,   ;  8a LD	DR_PARALLEL	; WE = 0, CLE = 1
 0xbb,   ;  8b LD	LSB 11
 0x90,   ;  8c LD	DR_PARALLEL	; WE = 1, CLE = 1
 0xba,   ;  8d LD	LSB 10
 0x90,   ;  8e LD	DR_PARALLEL	; WE = 1, CLE = 0
  
 ;      LD	MSB 0		;data_flash port = input
 0xb9,   ;  8f LD	LSB 9		;DATA_FLASH Port driven by FCI  
 0x8d,   ;  90 LD	CTRL_FCI	;PARALLEL Port driven by FCI
  
 0xb2,   ;  91 LD	LSB 2
 0x90,   ;  92 LD	DR_PARALLEL
 0xba,   ;  93 LD	LSB 10
 0x90,   ;  94 LD	DR_PARALLEL
 0xcc,   ;  95 LD	A DATA_FLASH	; read the status
 0x28,   ;  96 BCLR1			; check the status bit
 ; JP :erase_write_pass
 0x43,   ;  97 JP  3
  
 ; :cluster_read_write_error
 ;------------------------
 0x0,   ;  98 NOP
 0x7,   ;  99 STATUS	STOP ERROR
  
 ; :erase_write_pass
 ;----------------
 0xc5,   ;  9a LD	A ADR_BUFFER01	; ADR_BUFFER01 = 0x00
 0xb,   ;  9b CP	ALWAYS
 0x60,   ;  9c BRANCH	:clear_cluster_pages
  
  
 ;--------------------------------------------------------
 ;	START ADDRESS FOR read and check all 0's
 ;--------------------------------------------------------
 ; :read_check_cluster
 ;------------------
 0xa0,   ;  9d LD	MSB 0		;data_flash port = input
 0xb9,   ;  9e LD	LSB 9		;DATA_FLASH Port driven by FCI  
 0x8d,   ;  9f LD	CTRL_FCI	;PARALLEL Port driven by FCI
 0xb2,   ;  a0 LD	LSB 2
 0x8b,   ;  a1 LD	CMP11
 0xbf,   ;  a2 LD	LSB 15
 0x8a,   ;  a3 LD	CMP10
 0xaf,   ;  a4 LD	MSB 15
 0x84,   ;  a5 LD	ADR_BUFFER00	; buffer pointer 0 = 0x00FF, points to the page counter
 0xdb,   ;  a6 LD	A DATA_BUFFER0
 0x82,   ;  a7 LD	Y
 0x3c,   ;  a8 DECY
  
 ; :loop_read_all_pages
 ;-------------------
 0xc4,   ;  a9 LD	A ADR_BUFFER00
 0x86,   ;  aa LD	ADR_BUFFER10
 0x87,   ;  ab LD	ADR_BUFFER11	; ADR1 = 0xFFFF
  
 ; :wait_read_page
 0xd0,   ;  ac LD	A DR_PARALLEL
 0x33,   ;  ad EXCHANGE
 0x28,   ;  ae BCLR1
 ; JP :wait_read_page
 0x63,   ;  af JP  -3
  
 ; :loop_read_page
 ;--------------
 0xcb,   ;  b0 LD	A CMP11
 0x90,   ;  b1 LD	DR_PARALLEL	; RD = 0
 0xba,   ;  b2 LD	LSB 10
 0x90,   ;  b3 LD	DR_PARALLEL	; RD = 1
 0xcc,   ;  b4 LD	A DATA_FLASH
 0x8,   ;  b5 CP	A=>X
 ; JP :cluster_read_write_error
 0x7e,   ;  b6 JP  -30
 0x2f,   ;  b7 ADDER16	ADR_BUFFER1
 0xf,   ;  b8 CP	ADR_BUFFER1<CMP1
 ; JP :loop_read_page
 0x69,   ;  b9 JP  -9
 0x3c,   ;  ba DECY
 ; JP :loop_read_all_pages
 0x72,   ;  bb JP  -18
 0x5,   ;  bc STATUS	STOP
  
  
 ;---------------------------------------------------------------
 ;		START ADDRESS FOR read_spare & check_spare
 ; redundant area is read to address of 1F0-1FF
 ;------------------------------------------------------------------------------------------------
 ; 1F0 | 1F1 | 1F2 | 1F3 | 1F4 | 1F5 | 1F6 | 1F7 | 1F8 | 1F9 | 1FA | 1FB | 1FC | 1FD | 1FE | 1FF |
 ;    Reserved Field     | DAT | BLK |  Address1 |   ECC Field-2   |  Address2 |   ECC Field-1   |
 ;------------------------------------------------------------------------------------------------
 ; :init_read_spare
 ;---------------
 0xaf,   ;  bd LD	MSB 15
 0xb0,   ;  be LD	LSB 0
 0x82,   ;  bf LD	Y			; Y = 0xF0
 0xa2,   ;  c0 LD	MSB 2
 0x9f,   ;  c1 LD	BUFFER_MNGT		; segment offset = 1, going to use <Y> for reading spare area
 0x33,   ;  c2 EXCHANGE
 0x88,   ;  c3 LD	CMP00			; CMP00 = 0x02, used for toggling bit for reading
  
 ;      LD	MSB 0			; data_flash port = intput   
 0xb9,   ;  c4 LD	LSB 9			; DATA_FLASH Port driven by FCI 
 0x8d,   ;  c5 LD	CTRL_FCI		; PARALLEL Port driven by FCI 
  
 ; :test_busy_line
 ;--------------
 0xd0,   ;  c6 LD	A DR_PARALLEL
 0x33,   ;  c7 EXCHANGE
 0x28,   ;  c8 BCLR1
 ; JP :test_busy_line
 0x63,   ;  c9 JP  -3
  
 ; read_spare
 ;-----------
 ; :read_spare
 0xc8,   ;  ca LD	A CMP00
 0x90,   ;  cb LD	DR_PARALLEL	; RD = 0
 0xba,   ;  cc LD	LSB 10
 0x90,   ;  cd LD	DR_PARALLEL	; RD = 1
  
 0xcc,   ;  ce LD	A DATA_FLASH	; load DATA_FLASH
 0x80,   ;  cf LD	<Y>
 0x3d,   ;  d0 INCY
 ; JP :read_spare
 0x67,   ;  d1 JP  -7
  
 ;------------------------------------------
 ; check Block_Status has no more than one 0
 ;------------------------------------------
 0xc5,   ;  d2 LD	A ADR_BUFFER01
 0x89,   ;  d3 LD	CMP01
 0xc1,   ;  d4 LD	A X
 0x87,   ;  d5 LD	ADR_BUFFER11
 0x88,   ;  d6 LD	CMP00		; CMP0 = 0x0001
 0xb8,   ;  d7 LD	LSB 8		; Y = 0x08; points to a pattern array as following
 0x82,   ;  d8 LD	Y		;	{ ~0x00, ~0x01, ~0x02, ~0x04, ~0x08, ~0x10, ~0x20, ~0x40, ~0x80 }
 0xaf,   ;  d9 LD	MSB 15
 0xb5,   ;  da LD	LSB 5
 0x86,   ;  db LD	ADR_BUFFER10	; pointer 1 = 0x01F5, points to Block_Status of the redundant area
  
 ; :check_Block_Status
 ;------------------
 0xdc,   ;  dc LD	A DATA_BUFFER1
 0x81,   ;  dd LD	X
 0xc0,   ;  de LD	A <Y>
 0x9,   ;  df CP	A<X
 ; JP :check_Block_Status_next
 0x45,   ;  e0 JP  5
 0x81,   ;  e1 LD	X
 0xdc,   ;  e2 LD	A DATA_BUFFER1
 0x8,   ;  e3 CP	A=>X
  
 ; JP :good_Block_Status
 0x44,   ;  e4 JP  4
 ; :check_Block_Status_next
 ;-----------------------
 0x3c,   ;  e5 DECY
 ; JP :check_Block_Status
 0x6a,   ;  e6 JP  -10
  
 ; :cluster_error
 ;-------------
 0x7,   ;  e7 STATUS	STOP ERROR
  
 ; :good_Block_Status
 ;-----------------
 0xc7,   ;  e8 LD	A ADR_BUFFER11
 0x81,   ;  e9 LD	X			; X = 1
 0x2f,   ;  ea ADDER16	ADR_BUFFER1		; buffer pointer 1 = 0x01F6
 0xdc,   ;  eb LD	A DATA_BUFFER1		; high byte of Address1
 0x85,   ;  ec LD	ADR_BUFFER01
 0x2f,   ;  ed ADDER16	ADR_BUFFER1
 0xdc,   ;  ee LD	A DATA_BUFFER1
 0x84,   ;  ef LD	ADR_BUFFER00		; ADR_BUFFER0 = Address1-Field
 0xd,   ;  f0 CP	ADR_BUFFER0<CMP0	; check with 0x0001, it may be a CIS
  
 ; JP :cluster_error
 0x6a,   ;  f1 JP  -10
 0xaf,   ;  f2 LD	MSB 15
 0xbb,   ;  f3 LD	LSB 11
 0x86,   ;  f4 LD	ADR_BUFFER10		; skip the ECC Field-2
  
 0xdc,   ;  f5 LD	A DATA_BUFFER1
 0x89,   ;  f6 LD	CMP01
 0x2f,   ;  f7 ADDER16	ADR_BUFFER1
 0xdc,   ;  f8 LD	A DATA_BUFFER1
 0x88,   ;  f9 LD	CMP00			; CMP0 = Address2-Field
 0xd,   ;  fa CP	ADR_BUFFER0<CMP0
 ; JP :cluster_error
 0x74,   ;  fb JP  -20
 0x26,   ;  fc SUB16	ADR_BUFFER0
 0xc,   ;  fd CP	ADR_BUFFER0=>CMP0
 ; JP :cluster_error
 0x77,   ;  fe JP  -23
  
 0x5,   ;  ff STATUS	STOP

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?