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