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 + -
显示快捷键?