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