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

📄 smc_dtc_download2562k_end.hex

📁 HID-Ukey底层源码实现(st72651芯片) windows上层驱动
💻 HEX
📖 第 1 页 / 共 2 页
字号:
  
 // Save the ECC code
 //------------------
 0xde,   //  85 LD	A TMP_ECC	// first read (Line parity 1)
 0x9b,   //  86 LD	DATA_BUFFER0
 0xdd,   //  87 LD	A ECC_CRC	// -- INCR CRC_ECC_STATE --
 0x27,   //  88 ADDER16	ADR_BUFFER0
  
 0xde,   //  89 LD	A TMP_ECC	// second read (Line parity 2)
 0x9b,   //  8a LD	DATA_BUFFER0
 0xdd,   //  8b LD	A ECC_CRC	// -- INCR CRC_ECC_STATE --
 0x27,   //  8c ADDER16	ADR_BUFFER0
  
 0xde,   //  8d LD	A TMP_ECC	// third read ( column parity)
 0x9b,   //  8e LD	DATA_BUFFER0
  
 0xaf,   //  8f LD	MSB 15
 0xb8,   //  90 LD	LSB 8
 0x84,   //  91 LD	ADR_BUFFER00	// Load pointer of ECC2 (0x00F8)
  
 0xc7,   //  92 LD	A ADR_BUFFER11	// Write buf0: 0001=>0010, =>0011
  
 0x28,   //  93 BCLR1
 // JP :Write_256_Bytes
 0x7c,   //  94 JP  -28
  
 //============================================================================
 //// Write 16 bytes of the redundant area
 0xaf,   //  95 LD	MSB 15
 0xb0,   //  96 LD	LSB 0
 0x82,   //  97 LD	Y		// Y = 0xF0// pointer of redundant area (0x00F0)
  
 // :Write_Spare_Area
 //----------------
 0xc0,   //  98 LD	A <Y>
 0x8c,   //  99 LD	DATA_FLASH
  
 0xb8,   //  9a LD	LSB 8
 0x90,   //  9b LD	DR_PARALLEL	// WE = 0
 0xba,   //  9c LD	LSB 10
 0x90,   //  9d LD	DR_PARALLEL	// WE = 1
  
 0x3d,   //  9e INCY
 // JP :Write_Spare_Area
 0x67,   //  9f JP  -7
  
  
 //-----------------------------------------------------------------
 //testing
 //----------------------------------------------------------------
 // :Release_Buffer
 //--------------
 0xc7,   //  a0 LD	A ADR_BUFFER11	// Buf0: 0001=>0010=>0011
  
 0x2a,   //  a1 BCLR3			// Wrap the segment pointer
 0x87,   //  a2 LD	ADR_BUFFER11	// Reload for the next page writing
 // JP :Free_Buffer0
 0x43,   //  a3 JP  3
 0xb2,   //  a4 LD	LSB 2
 // JP :Free_Buffer
 0x42,   //  a5 JP  2
  
 // :Free_Buffer0
 //------------
 0xb1,   //  a6 LD	LSB 1
 // :Free_Buffer
 //-----------
 0x9f,   //  a7 LD	BUFFER_MNGT
 0xb0,   //  a8 LD	LSB 0
 0x9f,   //  a9 LD	BUFFER_MNGT
  
 //-----------------end testing-------------------------------------
  
 //-------------
 //For 256MB
 //-------------
  
 0xae,   //  aa LD MSB 14
 0xb0,   //  ab LD LSB 0
 0x84,   //  ac LD ADR_BUFFER00 //point to 0xe0
  
 0xdb,   //  ad LD A DATA_BUFFER0
 0x2,   //  ae CLC
 0x24,   //  af SUB8 X
 0x9b,   //  b0 LD DATA_BUFFER0
 0x9,   //  b1 CP A<X
 // JP :pgm_page
 0x52,   //  b2 JP  18
  
  
 0xae,   //  b3 LD MSB 14
 0xb4,   //  b4 LD LSB 4
 0x84,   //  b5 LD ADR_BUFFER00
  
  
 0xa0,   //  b6 LD MSB 0
 0xb2,   //  b7 LD LSB 2
 0x82,   //  b8 LD Y
  
  
 0xdb,   //  b9 LD A DATA_BUFFER0
 0x2,   //  ba CLC
 0x2d,   //  bb ADDER8 Y
 0x2b,   //  bc BCLR4
 0x9b,   //  bd LD DATA_BUFFER0
 //      BCLR4
 0xa6,   //  be LD MSB 6
 0xb9,   //  bf LD LSB 9
 0x60,   //  c0 BRANCH :write_next_col
  
 0xc5,   //  c1 LD A ADR_BUFFER01
 //      LD DATA_BUFFER0
 0x27,   //  c2 ADDER16 ADR_BUFFER0 //Reload both 0xe5 and 0xe4 for nxt page
 0x9b,   //  c3 LD DATA_BUFFER0 
  
 //============================================================================
 // :pgm_page
 //----------
 0xa1,   //  c4 LD	MSB 1		// Send the "Page Program" command - 0x10
 // JP :Send_CMD2
 0x42,   //  c5 JP  2
  
 // :Send_Erase_CMD
 //--------------
 0xad,   //  c6 LD	MSB 13		// Send the "Block Erase" command - 0xD0
 // :Send_CMD2
 //---------
 0xb0,   //  c7 LD	LSB 0
 0x8c,   //  c8 LD	DATA_FLASH
 0xbb,   //  c9 LD	LSB 11
 0x90,   //  ca LD	DR_PARALLEL	// WE = 1, CLE = 1
 0xb9,   //  cb LD	LSB 9
 0x90,   //  cc LD	DR_PARALLEL	// WE = 0, CLE = 1
 0xbb,   //  cd LD	LSB 11
 0x90,   //  ce LD	DR_PARALLEL	// WE = 1, CLE = 1, ALE = 0, RD = 1
  
 //============================================================================
 //// Wait on busy line
 //============================================================================
 // :Wait_On_Busy
 //------------
 //      ADDER16	ADR_BUFFER0
 //      CP	ADR_BUFFER0=>CMP0
 //      JP :No_Timeout
 //      STATUS ERROR STOP		// timeout of 19ms
 0x0,   //  cf NOP
 0x0,   //  d0 NOP
 0x0,   //  d1 NOP
 //:No_Timeout
 //----------
 0xd0,   //  d2 LD	A DR_PARALLEL
 0x33,   //  d3 EXCHANGE
 0x28,   //  d4 BCLR1			// Test R/-B line
 // JP :Wait_On_Busy
 0x66,   //  d5 JP  -6
  
 //============================================================================
 //// Read the status byte
 0xa7,   //  d6 LD	MSB 7
 0xb0,   //  d7 LD	LSB 0
 0x8c,   //  d8 LD	DATA_FLASH	// Send "Status Read" command
  
 0xb9,   //  d9 LD	LSB 9
 0x90,   //  da LD	DR_PARALLEL	// WE = 0, CLE = 1
 0xbb,   //  db LD	LSB 11
 0x90,   //  dc LD	DR_PARALLEL	// WE = 1, CLE = 1, ALE = 0, RD = 1
 0xba,   //  dd LD	LSB 10
 0x90,   //  de LD	DR_PARALLEL	// WE = 1, CLE = 0, ALE = 0, RD = 1
  
 0xa0,   //  df LD	MSB 0		// DATA_FLASH port = input
 0xb9,   //  e0 LD	LSB 9		// DATA_FLASH Port driven by FCI  
 0x8d,   //  e1 LD	CTRL_FCI	// PARALLEL Port driven by FCI
  
 0xb2,   //  e2 LD	LSB 2 
 0x90,   //  e3 LD	DR_PARALLEL	// WE = 1, CLE = 0, ALE = 0, RD = 0
  
 0xba,   //  e4 LD	LSB 10
 0x90,   //  e5 LD	DR_PARALLEL	// WE = 1, CLE = 0, ALE = 0, RD = 1
  
 0xcc,   //  e6 LD	A DATA_FLASH	// Get the status byte
 0x28,   //  e7 BCLR1
 // JP :Status_Good
 0x42,   //  e8 JP  2
 ////// Status "FAIL" Stop the DTC
 0x7,   //  e9 STATUS ERROR STOP
  
 //============================================================================
 // :Status_Good
 //-----------
 0xc7,   //  ea LD	A ADR_BUFFER11	// Buf0: 0001=>0010=>0011
  
 0x38,   //  eb BSET1
 //      JP :Release_Buffer
 // JP :increment_page
 0x42,   //  ec JP  2
  
 0x5,   //  ed STATUS	STOP		// Return if it is a BLOCK_ERASE
  
 //:Release_Buffer
 //--------------
 //      BCLR3			// Wrap the segment pointer
 //      LD	ADR_BUFFER11	// Reload for the next page writing
 //      JP :Free_Buffer0
 //      LD	LSB 2
 //      JP :Free_Buffer
  
 //:Free_Buffer0
 //------------
 //      LD	LSB 1
 // :Free_Buffer
 //-----------
 //      LD	BUFFER_MNGT
 //      LD	LSB 0
 //      LD	BUFFER_MNGT
  
 //============================================================================
  
  
 // :increment_page
 //--------------- 
 //// Decrease the page number and increase the page address
  
 0xc9,   //  ee LD A CMP01
 0x85,   //  ef LD ADR_BUFFER01
  
 0xae,   //  f0 LD MSB 14
 0xb3,   //  f1 LD LSB 3
 0x84,   //  f2 LD ADR_BUFFER00 //0xe5 = 1st col. byte
  
 //      LD MSB 1
 //      LD LSB 0
 //      LD Y
  
 //      LD A DATA_BUFFER0
 //      CLC
 //      ADDER8 Y       
 //      LD DATA_BUFFER0
  
 //      SUB16 ADR_BUFFER0    //0xe4 = 2nd col byte
 //      LD MSB 0
 //      LD LSB 2
 //      LD Y
 //      LD A DATA_BUFFER0
 //      CLC
 //      ADDER8 Y       
 //      BCLR4      
 //      LD DATA_BUFFER0
 //      JP :dec_page
  
 //       ADDER16 ADR_BUFFER0     // 1st col = 0 at page change
 //       LD A ADR_BUFFER01
 //       LD DATA_BUFFER0
 //       SUB16 ADR_BUFFER0       
 //       SUB16 ADR_BUFFER0       // 0xe3 = 1st row byte
  
 // :next_page
 //------------
 //      LD A <Y>
 0xdb,   //  f3 LD A DATA_BUFFER0
 0x2,   //  f4 CLC
 0x25,   //  f5 ADDER8	X
 //      LD	<Y>	// Increase the page address and save it back
 0x9b,   //  f6 LD DATA_BUFFER0
  
 //For 256mb
 // :dec_page
  
 0xae,   //  f7 LD MSB 14
 0xb0,   //  f8 LD LSB 0
 0x82,   //  f9 LD Y 
 0xc0,   //  fa LD A <Y>
 //     CLC
 //     SUB8 X
 //     LD <Y> //new
 0x8,   //  fb CP A=>X
 0xa3,   //  fc LD	MSB 3
 0xbd,   //  fd LD	LSB 13
 0x60,   //  fe BRANCH :Loop_Write_Pages
  
 0x5,   //  ff STATUS STOP
  

⌨️ 快捷键说明

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