编辑代码

#include <stdio.h>



typedef  unsigned char uint8_t;   
typedef unsigned int  uint16_t;
typedef unsigned long uint32_t;



uint8_t const Uart_Cmd_Table[256] = {
//0xAA, 0x55, 0x9A, 0xFB, 0x00, 0x61, 0x48, 0x34, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
//0xFF, 0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x16, 0x02, 0x00,
//0x04, 0x03, 0x00, 0x17, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x02,
//0x17, 0x00, 0x08, 0x03, 0x00, 0x88, 0x13, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0A,
//0x01, 0x00, 0x7F, 0x00, 0x0B, 0x06, 0x00, 0x00, 0x00, 0x15, 0x05, 0xE6, 0x07, 0x00, 0x0C, 0x06,
//0x00, 0x3B, 0x17, 0x16, 0x06, 0xE8, 0x07, 0x00, 0x0D, 0x02, 0x00, 0x15, 0x08, 0x00, 0x0E, 0x02,
//0x00, 0x16, 0x10, 0x00, 0x0F, 0x01, 0x00, 0x01, 0x00, 0x10, 0x01, 0x00, 0x02, 0x00, 0x11, 0x01,
//0x00, 0x03, 0x00, 0x12, 0x08, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x13,
//0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x08, 0x00, 0x02, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x06, 0x00, 0x82, 0x0A, 0x0A, 0x0A, 0x14, 0x14,
//0x00, 0x16, 0x20, 0x00, 0x88, 0x13, 0x00, 0x00, 0x00, 0x32, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x04, 0x00, 0x32, 0x01, 0x50, 0x01, 0x00, 0x79, 0x01, 0x00,
//0x04, 0x00, 0x7A, 0x01, 0x00, 0x05, 0x00, 0x7B, 0x01, 0x00, 0x06, 0x00, 0x7C, 0x08, 0x00, 0x04,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x08, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x7E, 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8};

//0xAA, 0x55, 0x9A, 0xFB, 0x00, 0x61, 0x48, 0x34, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
//0xFF, 0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x40, 0x28, 0x00,
//0x04, 0x03, 0x00, 0x44, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00,
//0x00, 0x00, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0A,
//0x01, 0x00, 0x00, 0x00, 0x0B, 0x06, 0x00, 0x00, 0x00, 0x03, 0x0A, 0xE6, 0x07, 0x00, 0x0C, 0x06,
//0x00, 0x3B, 0x17, 0x04, 0x0C, 0xE8, 0x07, 0x00, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x02,
//0x00, 0x00, 0x00, 0x00, 0x0F, 0x01, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x11, 0x01,
//0x00, 0x00, 0x00, 0x12, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13,
//0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x08, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x16, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x04, 0x00, 0x32, 0x01, 0x50, 0x01, 0x00, 0x79, 0x01, 0x00,
//0x00, 0x00, 0x7A, 0x01, 0x00, 0x00, 0x00, 0x7B, 0x01, 0x00, 0x00, 0x00, 0x7C, 0x08, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x7E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB9};

//0xAA, 0x55, 0x9A, 0xFB, 0x00, 0x61, 0x48, 0x34, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
//0xFF, 0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x08, 0x00, 0x00,
//0x04, 0x03, 0x00, 0x10, 0x08, 0x01, 0x00, 0x06, 0x01, 0x00, 0x03, 0x00, 0x07, 0x02, 0x00, 0x04,
//0x18, 0x00, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0A,
//0x01, 0x00, 0x04, 0x00, 0x0B, 0x06, 0x00, 0x00, 0x00, 0x18, 0x0A, 0xE7, 0x07, 0x00, 0x0C, 0x06,
//0x00, 0x3B, 0x17, 0x19, 0x0C, 0xE9, 0x07, 0x00, 0x0D, 0x02, 0x00, 0x02, 0x02, 0x00, 0x0E, 0x02,
//0x00, 0x04, 0x05, 0x00, 0x0F, 0x01, 0x00, 0x0A, 0x00, 0x10, 0x01, 0x00, 0x0B, 0x00, 0x11, 0x01,
//0x00, 0x0C, 0x00, 0x12, 0x08, 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0x00, 0x13,
//0x08, 0x00, 0xB0, 0xB5, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0x00, 0x00, 0x14, 0x08, 0x00, 0x61, 0x62,
//0x63, 0x64, 0x65, 0x69, 0x6A, 0x6B, 0x00, 0x15, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x16, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x04, 0x00, 0x32, 0x01, 0x50, 0x01, 0x00, 0x79, 0x01, 0x00,
//0x1B, 0x00, 0x7A, 0x01, 0x00, 0x3C, 0x00, 0x7B, 0x01, 0x00, 0x3D, 0x00, 0x7C, 0x08, 0x00, 0x41,
//0x42, 0x43, 0x44, 0x45, 0x47, 0x48, 0x49, 0x00, 0x7D, 0x08, 0x00, 0xBF, 0xBE, 0xC0, 0xCA, 0xCB,
//0xCC, 0xCD, 0xCE, 0x00, 0x7E, 0x08, 0x00, 0x6C, 0x6D, 0x6E, 0x6F, 0xAB, 0xAC, 0xAD, 0xAE, 0x3C};
	
0xAA, 0x55, 0x9A, 0xFB, 0x00, 0x61, 0x48, 0x34, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x08, 0x00, 0x00, 0x04, 0x03,
0x00, 0x1D, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x03, 0x12, 0x00, 0x08,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x00, 0x00,
0x0B, 0x06, 0x00, 0x00, 0x00, 0x18, 0x0A, 0xE7, 0x07, 0x00, 0x0C, 0x06, 0x00, 0x3B, 0x17, 0x19, 0x0C,
0xE9, 0x07, 0x00, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x01,
0x00, 0x01, 0x00, 0x10, 0x01, 0x00, 0x02, 0x00, 0x11, 0x01, 0x00, 0x03, 0x00, 0x12, 0x08, 0x00, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x13, 0x08, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0x3F, 0x00, 0x14, 0x08, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x06, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x04, 0x00, 0x32, 0x01, 0x50, 0x01, 
0x00, 0x79, 0x01, 0x00, 0x04, 0x00, 0x7A, 0x01, 0x00, 0x05, 0x00, 0x7B, 0x01, 0x00, 0x06, 0x00, 0x7C, 
0x08, 0x00, 0xFF, 0xFF, 0x0F, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x00, 0x7D, 0x08, 0x00, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7E, 0x08, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2F};

//0xAA, 0x55, 0x9A, 0xFB, 0x00, 0xE4, 0x96, 0x86, 0x12,   // 未知待确认
//// -------------------------------------- 0x16A
//0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,         // 未知待确认
//0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,         // 未知待确认
//// -------------------------------------- 0x17A
//0x00, 0x03, 0x02, 0x00, 0x16, 0x02,     
//// -------------------------------------- 0x180
//0x00, 0x04, 0x03, 0x00, 0x17, 0x00, 
//// -------------------------------------- 0x186
//0x00, 0x06, 0x01, 0x00, 0x00,  
//// -------------------------------------- 0x18B
//0x00, 0x07, 0x02, 0x00, 0x02, 0x17,   
//// -------------------------------------- 0x191
//0x00, 0x08, 0x03, 0x00, 0x88, 0x13, 0x00,   
//// -------------------------------------- 0x198
//0x00, 0x09, 0x02, 0x00, 0x00, 0x00,  
//// -------------------------------------- 0x19E
//0x00, 0x0A, 0x01, 0x00, 0x7F,   
//// -------------------------------------- 0x1A3
//0x00, 0x0B, 0x06, 0x00, 0x00, 0x00, 0x15, 0x05, 0xE6, 0x07, 
//// -------------------------------------- 0x1AD
//0x00, 0x0C, 0x06, 0x00, 0x3B, 0x17, 0x16, 0x06, 0xE8, 0x07,  
//// -------------------------------------- 0x1B7
//0x00, 0x0D, 0x02, 0x00, 0x15, 0x08,
//// -------------------------------------- 0x1BD
//0x00, 0x0E, 0x02, 0x00, 0x16, 0x10, 
//// -------------------------------------- 0x1C3
//0x00, 0x0F, 0x01, 0x00, 0x01, 
//// -------------------------------------- 0x1C8
//0x00, 0x10, 0x01, 0x00, 0x02,   
//// -------------------------------------- 0x1CD
//0x00, 0x11, 0x01, 0x00, 0x03,    
//// -------------------------------------- 0x1D2
//0x00, 0x12, 0x08, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
//// -------------------------------------- 0x1DE
//0x00, 0x13, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
//// -------------------------------------- 0x1EA
//0x00, 0x14, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   
//// -------------------------------------- 0x1F6
//0x00, 0x15, 0x06, 0x00, 0x82, 0x0A, 0x0A, 0x0A, 0x14, 0x14,  
//// -------------------------------------- 0x200
//0x00, 0x16, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//// -------------------------------------- 0x213
//0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
//// -------------------------------------- 0x223
//0x00, 0x6F, 0x04, 0x00, 0x32, 0x01, 0x50, 0x10,  
//// -------------------------------------- 0x22B
//0x00, 0x79, 0x01, 0x00, 0x04,    
//// -------------------------------------- 0x230
//0x00, 0x7A, 0x01, 0x00, 0x05, 
//// -------------------------------------- 0x235
//0x00, 0x7B, 0x01, 0x00, 0x06,   
//// -------------------------------------- 0x23A
//0x00, 0x7C, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
//// -------------------------------------- 0x246
//0x00, 0x7D, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
//// -------------------------------------- 0x252
//0x00, 0x7E, 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   
//// -------------------------------------- 0x25E
//0xA8
//};   


       
uint8_t const EEPROM_Data_TableA[512] = {
// --------------------------------------------------------------------------- Page0
0x11, 0x22, 0x33, 0x35, // Device ID 
0x12, 0x22, 0x38, 0x45, 0x27, 0x2E, 0x31, 0x16, //  Card ID 最后一个字节计算获得4字节数据存入0x90C、0x90D、0x90E、0x90F
0x6D, 0x5B, 0x4A, 0x1B, // MFRC500 Serial ID
0xEA, 0x06, 0xF2, 0xAB, 0xA8, 0x30, 0x56, 0x24, 0xA7, 0x43, 0x28, 0xC4, 0xBD, 0x53, 0x43, 0xD3, // 0x936~0x945 0~15
0xAD, 0x66, 0x9F, 0x36, 0x5C, 0x1F, 0x6D, 0x31, 0x85, 0x98, 0x60, 0x73, 0xAD, 0x94, 0x4B, 0x55, // 0x946~0x955 16~31
0xD6, 0xD5, 0xF0, 0x60, 0x80, 0xCB, 0x19, 0x11, 0x3C, 0x70, 0xDF, 0xD8, 0xC4, 0x70, 0x53, 0x68, // 0x956~0x965 32~47
// --------------------------------------------------------------------------- Page1
0x9E, 0x8C, 0x3E, 0x2C, 0x12, 0x41, 0x3E, 0x14, 0xD9, 0xA3, 0x1E, 0x98, 0x20, 0x90, 0x60, 0xFE, // 0x966~0x975 48~63
0xE9, 0x04, 0x19, 0xD7, 0x4D, 0xC5, 0x03, 0xC9, 0xAB, 0x4D, 0xCC, 0x92, 0x1C, 0xDC, 0xB4, 0x4A, // 0x976~0x985 64~79
0xE4, 0xF3, 0x59, 0xE7, 0xB0, 0xE4, 0xC9, 0x07, 0x3E, 0xC2, 0xE1, 0xE7, 0x56, 0x80, 0xD7, 0xBA, // 0x986~0x995 80~95
0xC1, 0x56, 0x13, 0x1C, 0xF8, 0x66, 0x3B, 0xD7, 0x5E, 0x9F, 0x94, 0xF9, 0xAA, 0xE1, 0x8F, 0x03, // 0x996~0x9A5 96~111
// --------------------------------------------------------------------------- Page2
0xE8, 0x63, 0x99, 0x73, 0x23, 0x53, 0x39, 0x91, 0x19, 0xBB, 0x57, 0x69, 0x38, 0xAB, 0xDD, 0x12, // 0x9A6~0x9B5 112~127
0x0A, 0x04, 0x04, 0x00, 0x09, 0x04, 0x08, 0x01, 0x09, 0x0F, 0x0F, 0x05, 0x09, 0x05, 0x09, 0x09, // 0x4B~0x5A
0x01, 0x03, 0x07, 0x06, 0x0D, 0x02, 0x0F, 0x0D, 0x03, 0x07, 0x03, 0x04, 0x0C, 0x0D, 0x06, 0x08, // 0x5B~0x6A
0x0C, 0x07, 0x08, 0x05, 0x0A, 0x08, 0x08, 0x0F, 0x0E, 0x0C, 0x08, 0x01, 0x00, 0x07, 0x0F, 0x07, // 0x6B~0x7A
// --------------------------------------------------------------------------- Page3
0x07, 0x0D, 0x01, 0x0B, 0x0F, 0x0D, 0x02, 0x02, 0x09, 0x03, 0x00, 0x01, 0x01, 0x0B, 0x05, 0x0E, // 0x7B~0x8A
0x02, 0x0B, 0x08, 0x09, 0x03, 0x0A, 0x0C, 0x00, 0x06, 0x07, 0x00, 0x00, 0x0B, 0x04, 0x01, 0x02, // 0x8B~0x9A
0x04, 0x0A, 0x00, 0x04, 0x05, 0x09, 0x08, 0x0E, 0x0B, 0x0C, 0x06, 0x0A, 0x07, 0x0B, 0x0D, 0x01, // 0x9B~0xAA
0x01, 0x03, 0x07, 0x0D, 0x07, 0x00, 0x0E, 0x0D, 0x09, 0x02, 0x0E, 0x0C, 0x0B, 0x09, 0x0E, 0x04, // 0xAB~0xBA
// --------------------------------------------------------------------------- Page4
0x0C, 0x0C, 0x09, 0x0F, 0x00, 0x05, 0x0C, 0x05, 0x0B, 0x0F, 0x06, 0x06, 0x0E, 0x06, 0x08, 0x0C, // 0xBB~0xCA
0x0F, 0x09, 0x0D, 0x02, 0x08, 0x03, 0x00, 0x01, 0x02, 0x0A, 0x0B, 0x02, 0x06, 0x00, 0x04, 0x09, // 0xCB~0xDA
0x08, 0x0E, 0x07, 0x0A, 0x0D, 0x08, 0x02, 0x0A, 0x05, 0x01, 0x06, 0x0B, 0x00, 0x03, 0x05, 0x0F, // 0xDB~0xEA
0x0D, 0x06, 0x00, 0x0D, 0x05, 0x0F, 0x02, 0x0C, 0x0B, 0x0D, 0x05, 0x00, 0x05, 0x0A, 0x03, 0x02, // 0xEB~0xFA
// --------------------------------------------------------------------------- Page5
0x05, 0x01, 0x03, 0x0E, 0x08, 0x06, 0x0A, 0x04, 0x03, 0x0A, 0x0F, 0x01, 0x0B, 0x01, 0x01, 0x0F, // 0xFB~0x10A
0x04, 0x06, 0x0F, 0x08, 0x02, 0x06, 0x09, 0x0A, 0x0F, 0x02, 0x03, 0x06, 0x05, 0x09, 0x02, 0x00, // 0x10B~0x11A
0x0D, 0x04, 0x04, 0x0A, 0x07, 0x0A, 0x04, 0x0C, 0x0C, 0x0B, 0x0D, 0x0E, 0x05, 0x0B, 0x09, 0x02, // 0x11B~0x12A
0x04, 0x07, 0x07, 0x08, 0x03, 0x07, 0x05, 0x0E, 0x0C, 0x07, 0x0D, 0x01, 0x06, 0x0C, 0x0E, 0x0E, // 0x12B~0x13A
// --------------------------------------------------------------------------- Page6
0x0C, 0x08, 0x06, 0x04, 0x0F, 0x0E, 0x0A, 0x03, 0x03, 0x0E, 0x0B, 0x0E, 0x03, 0x0B, 0x0A, 0x00, // 0x13B~0x14A
0xB7,   // 0x15A
0x9B,   // 0x15B
0xF1,   // 0x15C
0x5B,   // 0x15D
0x29,   // 0x14B   
0x91,   // 0xAFC 
0xC7,   // 0x14C 
0x47,   // 0xAFD 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
// --------------------------------------------------------------------------- Page7
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   
};
      
// ---------------------------------------------------------------------------

uint8_t gucv_EEPolynomialArray[4];

uint8_t  gucv_WriteCardBuffer[1024]; 

uint8_t  ucvFlagesBuffer[64];
uint8_t  gucvDeviceIDArray[4];                //  [0x90C]、[0x90D]、[0x90E]、[0x90F]   
uint8_t  gucvHalfBlock_buffer[128]; 
uint8_t  gucvBlock_buffer[256]; 

uint8_t  ucvUartDataBuffer[1024];                //    

uint8_t  ucvOffsetMode1;                // [0xAF8]
uint8_t  ucvOffsetMode2;                // [0xAF9]
uint8_t  ucvOffsetMode3;                // [0xAFB]

uint8_t  gucv_CardIDArray[5];				// ID卡的序列号

uint8_t  gucv_XR159;
uint8_t  gucv_XR15F;

uint8_t  gucv_EEXorArray[2];
uint8_t  gucv_EESumArray[2];
   


uint8_t Fun_DeviceID_Produced(void);

uint8_t Fun_AnalyzeMode_Get(uint8_t mode);

uint8_t Fun_SelectMode_Analyze( void );

void Lab_46C2( uint8_t* buffer );

void Fun_FormatModeA_Analyze( void );

void Lab_4C9E( uint8_t* output );

void Lab_6241( uint8_t byte0, uint8_t byte1, uint8_t byte2, uint8_t byte3, uint8_t byte4, uint8_t* output );

uint8_t Lab_5623( uint8_t byte0, uint8_t byte1, uint8_t byte2, uint8_t byte3, uint8_t byte4, uint8_t byte5 );

void Fun_FormatModeB_Analyze( void );

void Lab_49CA( uint8_t* output );

void Lab_437B( uint8_t byte0, uint8_t byte1, uint8_t byte2, uint8_t byte3, uint8_t byte4, uint8_t* output  );
// ---------------------------------------------------------------------------

uint8_t Fun_EEPROM_Check( void )
{
    uint16_t i = 0;
    uint16_t uivTmpIndex = 16;
    uint8_t ucvTmpXorValue = 0;
    uint8_t ucvTmpSumValue = 0;
	

    for( i = 0; i < 128; i++ )
    {
        gucvHalfBlock_buffer[i] = EEPROM_Data_TableA[i + uivTmpIndex];
    }
    uivTmpIndex += 128;
 
    for( i = 0; i < 256; i++ )
    {
        gucvBlock_buffer[i] = EEPROM_Data_TableA[i+uivTmpIndex];
    }
    uivTmpIndex += 256;

    // 异或与和校验的多项式
    gucv_EEPolynomialArray[0] = EEPROM_Data_TableA[uivTmpIndex];
    gucv_EEPolynomialArray[1] = EEPROM_Data_TableA[uivTmpIndex+1];
    gucv_EEPolynomialArray[2] = EEPROM_Data_TableA[uivTmpIndex+2];
    gucv_EEPolynomialArray[3] = EEPROM_Data_TableA[uivTmpIndex+3];
    uivTmpIndex += 4;

    // 异或与和的校验值
    gucv_EEXorArray[0] = EEPROM_Data_TableA[uivTmpIndex];       // 0x14B
    gucv_EEXorArray[1] = EEPROM_Data_TableA[uivTmpIndex+2];     // 0x14C
    gucv_EESumArray[0] = EEPROM_Data_TableA[uivTmpIndex+1];     // 0xAFC
    gucv_EESumArray[1] = EEPROM_Data_TableA[uivTmpIndex+3];     // 0xAFD

    // Fun_EEPROM_Verify
    do{
        for( i = 0; i < 128; i++ )
        {
            ucvTmpXorValue ^= gucvHalfBlock_buffer[i];
            ucvTmpSumValue += gucvHalfBlock_buffer[i];
        }

        for( i = 0; i < 4; i++ )
        {
            ucvTmpXorValue ^= gucv_EEPolynomialArray[i];
            ucvTmpSumValue += gucv_EEPolynomialArray[i];
        }

        if( ( ucvTmpXorValue != gucv_EEXorArray[0] ) || ( ucvTmpSumValue != gucv_EESumArray[0] ) )
        {
            return 1;
        }
    }while(0);

    do{
        ucvTmpXorValue = 0;
        ucvTmpSumValue = 0;

        for( i = 0; i < 128; i++ )
        {
            ucvTmpXorValue ^= ( ( ( gucvBlock_buffer[i] << 4 ) + gucvBlock_buffer[i+128]) + i );
            ucvTmpSumValue += ( ( gucvBlock_buffer[i] << 4 ) + gucvBlock_buffer[i+128]);
        }

        if( ( ucvTmpXorValue != gucv_EEXorArray[1] ) || ( ucvTmpSumValue != gucv_EESumArray[1] ) )
        {
            return 1;
        }
    }while(0);

    return 0;
}

// 生成刷卡器序列号
uint8_t Fun_DeviceID_Produced( void )
{
    uint8_t ucvTmpProduct = 0;
    uint8_t ucvTmpResidue = 0;
    uint8_t ucvTmpCalData = 0;
    uint8_t ucvTmpValue = 0;
    uint8_t ucvTmpArray[8] = {0};

    if( EEPROM_Data_TableA[0] != 0x11 )
    {
        return 1;   
    }

    if( EEPROM_Data_TableA[1] != 0x22 )
    {
        return 1;   
    }

    if( EEPROM_Data_TableA[2] != 0x33 )
    {
        return 1;   
    }

    ucvTmpValue = EEPROM_Data_TableA[3];
    if( ucvTmpValue >= 100 )
    {
        return 1;   
    }

    do{
        ucvTmpProduct = ucvTmpValue / 10;
        ucvTmpResidue = ucvTmpValue % 10;
        ucvTmpCalData = ( ( ucvTmpProduct + ucvTmpResidue ) & 3 );
        ucvTmpCalData += ( ( ucvTmpResidue * 3 ) + 2 );

        ucvTmpValue = EEPROM_Data_TableA[4];
        ucvTmpArray[0] = ucvTmpValue - ucvTmpCalData;

        ucvTmpValue = EEPROM_Data_TableA[5];
        ucvTmpArray[1] = ucvTmpValue - ( ( ucvTmpCalData + 3 ) * 2 );

        ucvTmpValue = EEPROM_Data_TableA[6];
        ucvTmpArray[2] = ucvTmpValue - ( ucvTmpCalData* 5 );
        
        ucvTmpValue = EEPROM_Data_TableA[7];
        ucvTmpArray[3] = ucvTmpValue - ( ucvTmpCalData * 6 );
        
        ucvTmpValue = EEPROM_Data_TableA[8];
        ucvTmpArray[4] = ucvTmpValue - ( ucvTmpCalData * 3 );
        
        ucvTmpValue = EEPROM_Data_TableA[9];
        ucvTmpArray[5] = ucvTmpValue - ( ( ucvTmpCalData + 4 ) * 3 );
        
        ucvTmpValue = EEPROM_Data_TableA[10];
        ucvTmpArray[6] = ucvTmpValue - ( ucvTmpCalData * 4 );
        
        ucvTmpValue = EEPROM_Data_TableA[11];
        ucvTmpArray[7] = ucvTmpValue - ( ucvTmpCalData + 8 );

    }while(0);

    if( ( gucvDeviceIDArray[0] >= 100 ) || ( gucvDeviceIDArray[1] >= 100 ) || 
        ( gucvDeviceIDArray[2] >= 100 ) || ( gucvDeviceIDArray[3] >= 100 ) )
    {
        return 3;   
    }

    gucvDeviceIDArray[0] = ( (ucvTmpArray[0] * 10 ) + ucvTmpArray[1] );
    gucvDeviceIDArray[1] = ( (ucvTmpArray[2] * 10 ) + ucvTmpArray[3] );
    gucvDeviceIDArray[2] = ( (ucvTmpArray[4] * 10 ) + ucvTmpArray[5] );
    gucvDeviceIDArray[3] = ( (ucvTmpArray[6] * 10 ) + ucvTmpArray[7] );
	
    return 0; 
}




// 待验证
uint8_t Fun_SelectMode_Analyze( void )
{
    uint8_t  ucvTmpIndex = 0xFE;
    uint8_t  i,j;

    for(i = 0; i < 64; i++)
    {
        for(j = 0; j < 16; j++)
        {   
            // 清零 1K xram(0x48A~0x88B)
            gucv_WriteCardBuffer[ ( (i << 4 ) + j ) ] = 0; 
        }
        // 清零 64 xram(0x8AF~0x8EE)
        //XBYTE[ 0x8AF + i ] = 0;
    }
    
    // 数据段的长度
    // uivDataSegLenght = (ucvUartDataBuffer[25] << 8) | ucvUartDataBuffer[26];
    
    if( (ucvUartDataBuffer[25] | (ucvUartDataBuffer[26] ^ 0x08)) != 0)
        ucvTmpIndex = Fun_AnalyzeMode_Get( ucvUartDataBuffer[29] );
    

    switch( ucvTmpIndex )
    {
        case 0:
            //Lab_293C();                 // 写卡指令处理步骤 处理方式
            Fun_FormatModeA_Analyze();
            printf("Hello world!     - c.jsrun.net.");
            break;
        case 1:
            //Lab_4055();                 // 写卡指令处理步骤 处理方式
            Fun_FormatModeB_Analyze();
            break;
        case 2:
            //Lab_2421();
            break;
        case 3:
            //Lab_47FA();
            break;
        case 4:
            //Lab_2C99();
            break;
        case 5:
        case 9:                         // XBYTE[0x17E] == 0x9C    
            //Lab_2730();                         
            break;
        case 6:
            break;
        case 7:
            break;
        case 8:
            break;
        case 0xFE:
            //Lab_2842();
            break;
        default:
            break;
    }
    return 0;
}


// 已经验证
uint8_t Fun_AnalyzeMode_Get(uint8_t mode)
{
     if( (mode & 0xC0) == 0 )
     {
        return 0;
     }
     else if( (mode & 0xC0) == 0x40 )
     {
        return 1;
     } 
     else if( (mode & 0xC0) == 0x80 )
     {
        if( (mode & 0xC0) == 4 )
        {
            return 2;
        }
        else if( ( (mode & 0xC0) == 8 ) || ( (mode & 0xC0) == 0xC ) || ( (mode & 0xC0) == 0x10 ) )
        {
            return 3;
        }
        else if( (mode & 0xC0) == 0x14 )
        {
            return 4;
        }
        else if( (mode & 0xC0) == 0x18 )
        {
            return 5;
        }
        else if( (mode & 0xC0) == 0x1C )
        {
            return 9;
        }
        else if( (mode & 0xC0) == 0x23 )
        {
            return 6;
        }
        else if( (mode & 0xC0) == 0x24 )
        {
            return 7;
        }
        else if( (mode & 0xC0) == 0x28 )
        {
            return 8;
        }
     }
     return 0xFF;
}

// 已经验证
void Fun_FormatModeA_Analyze( void )
{  
    uint8_t  ucv_output[4];
    
    uint16_t  i = 0;
    uint16_t  j = 0;
    uint16_t  uivFrameLenght  = 0;         // 串口接收帧中数据的总个数
    uint8_t   ucvTmpColOffset = 0;         // 列偏移
    uint8_t   ucvTmpRowOffset = 0;         // 行偏移
    uint16_t  uivTmpDataIndex = 16 + 9;    // 从帧中取数据的索引
    uint16_t  uivTmpCaseSelect = 0;        // 数据段的分支选择    
    uint16_t  uivTmpSegLenght = 0;         // 当前数据段需要取出数据的个数

    uint8_t  ucvTmpOffset64  = (ucvOffsetMode1 * 4) * 0x10;  // 缓存取出数据的偏移
    uint8_t  ucvTmpOffset128 = (ucvOffsetMode2 * 4) * 0x10;    
    uint8_t  ucvTmpOffset192 = (ucvOffsetMode3 * 4) * 0x10;

    // 可能是卡ID的Key [0x4D5][0x4D6][0x4D7][0x4D8]                 
    gucv_WriteCardBuffer[ ucvTmpOffset64 + 0xB + 0 ] = gucvDeviceIDArray[0];  // [XRB0C]*10+[XRB0D]:76 0x4C
    gucv_WriteCardBuffer[ ucvTmpOffset64 + 0xB + 1 ] = gucvDeviceIDArray[1];  // [XRB0E]*10+[XRB0F]:13 0x0D
    gucv_WriteCardBuffer[ ucvTmpOffset64 + 0xB + 2 ] = gucvDeviceIDArray[2];  // [XRB10]*10+[XRB11]:61 0x3D
    gucv_WriteCardBuffer[ ucvTmpOffset64 + 0xB + 3 ] = gucvDeviceIDArray[3];  // [XRB12]*10+[XRB13]:53 0x35 V 

    // 获取串口接收帧中数据的总个数
    uivFrameLenght = (uint16_t)((ucvUartDataBuffer[4] << 8) | ucvUartDataBuffer[3]);


    while(uivTmpDataIndex < (uivFrameLenght - 5))                       // 是否所有的数据都取出来了             
    {       
        uivTmpCaseSelect = (uint16_t)((ucvUartDataBuffer[uivTmpDataIndex] << 8 ) | (ucvUartDataBuffer[uivTmpDataIndex + 1]));
        uivTmpSegLenght = (uint16_t)((ucvUartDataBuffer[uivTmpDataIndex+3] << 8 ) | (ucvUartDataBuffer[ uivTmpDataIndex+2]));  
        uivTmpDataIndex += 4;

        if( uivTmpCaseSelect < 256 )
        {
            switch( uivTmpCaseSelect )
            {
                case 3:
                    ucvTmpRowOffset = ( ucvOffsetMode1 * 4 );
                    ucvTmpColOffset = 0;
                    // [0x4CA:0x4CB]:EEPROM_Page1[0x40:0x41]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    }
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 4:
                    ucvTmpRowOffset = ( ucvOffsetMode1 * 4 );
                    ucvTmpColOffset = 2;
                    // [0x4CC:0x4CE]:EEPROM_Page1[0x42:0x44]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    }  
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 6:
                    ucvTmpRowOffset = ( ucvOffsetMode1 * 4 );
                    ucvTmpColOffset = 15;
                    // [0x4D9]:EEPROM_Page1[0x4F]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    }  
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 7:
                    ucvTmpRowOffset = ( ucvOffsetMode1 * 4 );
                    ucvTmpColOffset = 5;
                    // [0x4CF:0x4D0]:EEPROM_Page1[0x45:0x46]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    }  
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 8:
                    ucvTmpRowOffset = ( ucvOffsetMode1 * 4 ) + 2;
                    ucvTmpColOffset = 0;
                    // [0x4EA:0x4EC]:EEPROM_Page1[0x60:0x62]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    } 
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 9:
                    ucvTmpRowOffset = ( ucvOffsetMode1 * 4 ) + 2;
                    ucvTmpColOffset = 3;
                    // [0x4ED:0x4EE]:EEPROM_Page1[0x63:0x64]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    } 
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 0xA:
                    ucvTmpRowOffset = ( ucvOffsetMode1 * 4 );
                    ucvTmpColOffset = 7;
                    // [0x4D1]:EEPROM_Page1[0x47]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    }   
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 0xB:
                    ucvTmpRowOffset = ( ucvOffsetMode1 * 4 ) + 1;
                    ucvTmpColOffset = 0;
                    // [0x4DA:0x4DF]:EEPROM_Page1[0x50:0x55]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    }  
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 0xC:
                    ucvTmpRowOffset = 5;
                    ucvTmpColOffset = 8;
                    // [0x4E2:0x4E8]:EEPROM_Page1[0x58:0x5E]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    }  
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 0xD:
                    ucvTmpRowOffset = 5;
                    ucvTmpColOffset = 6;
                    // [0x4E0:0x4E1]:EEPROM_Page1[0x56:0x57]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    }  
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 0xE:
                    ucvTmpRowOffset = 5;
                    ucvTmpColOffset = 14;
                    // [0x4E8:0x4E9]:EEPROM_Page1[0x5E:0x5F]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    }  
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 0xF:
                    ucvTmpRowOffset = 4;
                    ucvTmpColOffset = 8;
                    // [0x4D2]:EEPROM_Page1[0x48]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    }  
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 0x10:
                    ucvTmpRowOffset = 4;
                    ucvTmpColOffset = 9;
                    // [0x4D3]:EEPROM_Page1[0x49]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    } 
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 0x11:
                    ucvTmpRowOffset = 4;
                    ucvTmpColOffset = 10;
                    // [0x4D4]:EEPROM_Page1[0x4A]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    } 
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 0x12:
                    ucvTmpRowOffset = 8;
                    ucvTmpColOffset = 0;
                    // [0x50A:0x511]:EEPROM_Page2[0x80:0x87]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    } 
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 0x13:
                    ucvTmpRowOffset = 9;
                    ucvTmpColOffset = 0;
                    // [0x51A:0x521]:EEPROM_Page2[0x90:0x97]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    } 
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 0x14:
                    ucvTmpRowOffset = 10;
                    ucvTmpColOffset = 0;
                    // [0x52A:0x531]:EEPROM_Page2[0xA0:0xA7]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    }  
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 0x15:
                    ucvTmpRowOffset = 14;
                    ucvTmpColOffset = 0;
                    // [0x56A:0x56F]:EEPROM_Page3[0xE0:0xE5]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    } 
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 0x16:
                    ucvTmpRowOffset = 13;
                    ucvTmpColOffset = 0;
                    // [0x55A:0x569]:EEPROM_Page3[0xD0:0xDF]
                    for( j = 16; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    } 

                    //  Lab_22D7();              
                    ucvTmpColOffset = 0;
                    gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 0 ) ] = 0;  // [0x55A] = 0
                    gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 1 ) ] = 0;  // [0x55B] = 0
                    gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 2 ) ] = 0;  // [0x55C] = 0
                    gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 3 ) ] = 0;  // [0x55D] = 0
                    gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 4 ) ] = 1;  // [0x55E] = 1
                    gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 5 ) ] = 2;  // [0x55F] = 2
                    // [0x560] = 2
                    gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 6 ) ] = Lab_5623( gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 0 ) ],
                                                                                     gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 1 ) ],
                                                                                     gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 2 ) ], 
                                                                                     gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 3 ) ],
                                                                                     gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 4 ) ], 
                                                                                     gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 5 ) ] );
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 0x79:
                    ucvTmpRowOffset = 14;
                    ucvTmpColOffset = 6;
                    // [0x570]:EEPROM_Page3[0xE6]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    } 
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 0x7A:
                    ucvTmpRowOffset = 14;
                    ucvTmpColOffset = 7;
                    // [0x571]:EEPROM_Page3[0xE7]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    }  
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 0x7B:
                    ucvTmpRowOffset = 14;
                    ucvTmpColOffset = 8;
                    // [0x572]:EEPROM_Page3[0xE8]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    } 
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 0x7C:
                    ucvTmpRowOffset = 8;
                    ucvTmpColOffset = 8;
                    // [0x512:0x519]:EEPROM_Page2[0x88:0x8F]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    }  
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 0x7D:
                    ucvTmpRowOffset = 9;
                    ucvTmpColOffset = 8;
                    // [0x522:0x519]:EEPROM_Page2[0x98:0x9F]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    }  
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                case 0x7E:
                    ucvTmpRowOffset = 10;
                    ucvTmpColOffset = 8;
                    // [0x532:0x539]:EEPROM_Page2[0xA8:0xAF]
                    for( j = 0; j < uivTmpSegLenght; j++ )
                    {
                        gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                        ucvTmpColOffset += 1;
                        uivTmpDataIndex += 1;
                    }   
                    ucvFlagesBuffer[ucvTmpRowOffset] = 1;
                    break;
                default:
                    break;
            }
        }
    }

    // Lab_2C49 

    Lab_6241( gucv_WriteCardBuffer[ (ucvTmpOffset64 + 32) ],   // [0x4EA]:88 
              gucv_WriteCardBuffer[ (ucvTmpOffset64 + 33) ],   // [0x4EB]:13 
              gucv_WriteCardBuffer[ (ucvTmpOffset64 + 34) ],   // [0x4EC]:00 
              gucv_WriteCardBuffer[ (ucvTmpOffset64 + 35) ],   // [0x4ED]:00 
              gucv_WriteCardBuffer[ (ucvTmpOffset64 + 36) ], ucv_output);  // [0x4EE]:00

    // Lab_1CCA
    gucv_WriteCardBuffer[ ucvTmpOffset64 + 37 ] = ucv_output[0];  // 0x4EF   
    gucv_WriteCardBuffer[ ucvTmpOffset64 + 38 ] = ucv_output[1];  // 0x4F0
    printf("扇区3地址[0x4EF/0x4F0]的数据:0x%X, 0x%X; \r\n", ucv_output[0], ucv_output[1]);
    
    gucv_WriteCardBuffer[ ucvTmpOffset192 + 0 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 32 ]; // [0x54A] = [0x4EA] = 88
    gucv_WriteCardBuffer[ ucvTmpOffset192 + 1 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 33 ]; // [0x54B] = [0x4EB] = 13 
    gucv_WriteCardBuffer[ ucvTmpOffset192 + 2 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 34 ]; // [0x54C] = [0x4EC] = 00
    gucv_WriteCardBuffer[ ucvTmpOffset192 + 3 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 35 ]; // [0x54D] = [0x4ED] = 00
    gucv_WriteCardBuffer[ ucvTmpOffset192 + 4 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 36 ]; // [0x54E] = [0x4EE] = 00 
    gucv_WriteCardBuffer[ ucvTmpOffset192 + 5 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 37 ]; // [0x54F] = [0x4EF] = 00  
    gucv_WriteCardBuffer[ ucvTmpOffset192 + 6 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 38 ]; // [0x550] = [0x4F0] = 00  
    

    // Lab_2EA3, Lab_4C9E, Lab_2EA6
    Lab_4C9E(ucv_output);
    
    gucv_WriteCardBuffer[ (ucvTmpOffset192 + 16) ] = ucv_output[0];     // [0x578] = 0x46
    gucv_WriteCardBuffer[ (ucvTmpOffset192 + 17) ] = ucv_output[1];     // [0x579] = 0x2D
    gucv_WriteCardBuffer[ (ucvTmpOffset192 + 14) ] = ucv_output[2];     // [0x576] = 0x46
    gucv_WriteCardBuffer[ (ucvTmpOffset192 + 15) ] = ucv_output[3];     // [0x577] = 0x80  
    printf("扇区3地址[0x576/0x577/0x578/0x579]的数据:0x%X, 0x%X, 0x%X, 0x%X; \r\n", ucv_output[2], ucv_output[3], ucv_output[0], ucv_output[1]); 
    
}


// 已经验证
uint8_t Lab_5623( uint8_t byte0, uint8_t byte1, uint8_t byte2, uint8_t byte3, uint8_t byte4, uint8_t byte5 )
{
    return (( ( ( ( byte1 * 3 ) + ( byte0 * 2 ) + byte2 + ( byte3 * 4 ) ) / 11 ) ^ byte4 ) ^ byte5);
}


// 已经验证
void Lab_4C9E( uint8_t* output )
{     
    uint8_t  i;
    uint8_t  ucvTmpOffset64  = (ucvOffsetMode1 * 4) * 0x10;  
    uint8_t  ucvTmpOffset128 = (ucvOffsetMode2 * 4) * 0x10;    
    uint8_t  ucvTmpOffset192 = (ucvOffsetMode3 * 4) * 0x10; 
    
    uint8_t  ucv_tmp_array[16];
    uint8_t  ucv_swap_array[16];
    uint8_t  ucv_swap_buffer[4];

    // [0xB11] = ( [0x936] ^ [0x4CD] ) + ( [0x939] ^ [0x570] ) = 0x95
    ucv_tmp_array[0] = ( EEPROM_Data_TableA[16] ^ gucv_WriteCardBuffer[ ( 3 + ucvTmpOffset64 ) ] ) +     // 0x4CD
                   ( EEPROM_Data_TableA[3+16] ^ gucv_WriteCardBuffer[ ( 38 + ucvTmpOffset192 ) ] );     // 0x570

    // [0xB12] = ( [0x937] ^ [0x4CE] ) + ( [0x93A] ^ [0x571] ) = 0xAE  
    ucv_tmp_array[1] = ( EEPROM_Data_TableA[1+16] ^ gucv_WriteCardBuffer[ ( 4 + ucvTmpOffset64 ) ] ) +     // 0x4CE
                   ( EEPROM_Data_TableA[4+16] ^ gucv_WriteCardBuffer[ ( 39 + ucvTmpOffset192 ) ] );     // 0x571

    // [0xB13] = ( [0x938] ^ [0x4CB] ) + ( [0x937] ^ [0x4D3] )
    ucv_tmp_array[2] = ( EEPROM_Data_TableA[2+16] ^ gucv_WriteCardBuffer[ ( 1 + ucvTmpOffset64 ) ] ) +     // 0x4CB
                   ( EEPROM_Data_TableA[1+16] ^ gucv_WriteCardBuffer[ ( 9 + ucvTmpOffset64 ) ] );      // 0x4D3
    
    // [0xB14] = ( [0x939] ^ [0x4CC] ) + (EEPROM_Data_TableA[5+16] ^ [0x572])
    ucv_tmp_array[3] = ( EEPROM_Data_TableA[3+16] ^ gucv_WriteCardBuffer[ ( 2 + ucvTmpOffset64 ) ] ) +     // 0x4CC
                   ( EEPROM_Data_TableA[5+16] ^ gucv_WriteCardBuffer[ ( 40 + ucvTmpOffset192 ) ] );     // 0x572
                   
    // [0xB15] = ( [0x93A] ^ [0x4CA] ) + ( [0x938] ^ [0x4D4] )
    ucv_tmp_array[4] = ( EEPROM_Data_TableA[4+16] ^ gucv_WriteCardBuffer[ ( 0 + ucvTmpOffset64 ) ] ) +     // 0x4CA
                   ( EEPROM_Data_TableA[2+16] ^ gucv_WriteCardBuffer[ ( 10 + ucvTmpOffset64 ) ] );      // 0x4D4
                   
    ucv_tmp_array[5] = ( EEPROM_Data_TableA[5+16] ) + ( gucv_WriteCardBuffer[ ( 14 + ucvTmpOffset64 ) ] );   // 0x4D8
    ucv_tmp_array[6] = ( EEPROM_Data_TableA[6+16] ) + ( gucv_WriteCardBuffer[ ( 13 + ucvTmpOffset64 ) ] );   // 0x4D7 
    ucv_tmp_array[7] = ( EEPROM_Data_TableA[7+16] ) + ( gucv_WriteCardBuffer[ ( 12 + ucvTmpOffset64 ) ] );   // 0x4D6 
    ucv_tmp_array[8] = ( EEPROM_Data_TableA[8+16] ) + ( gucv_WriteCardBuffer[ ( 11 + ucvTmpOffset64 ) ] );   // 0x4D5 
    ucv_tmp_array[9] = ( EEPROM_Data_TableA[9+16] ) + ( gucv_WriteCardBuffer[ ( 8 + ucvTmpOffset64 ) ] );   // 0x4D2 
    ucv_tmp_array[10] = ( EEPROM_Data_TableA[10+16] ) + ( gucv_WriteCardBuffer[ ( 26 + ucvTmpOffset64 ) ] );   // 0x4E4 
    ucv_tmp_array[11] = ( EEPROM_Data_TableA[11+16] ) + ( gucv_WriteCardBuffer[ ( 25 + ucvTmpOffset64 ) ] );   // 0x4E3 
    ucv_tmp_array[12] = ( EEPROM_Data_TableA[12+16] ) + ( gucv_WriteCardBuffer[ ( 29 + ucvTmpOffset64 ) ] );   // 0x4E7 
    ucv_tmp_array[13] = ( EEPROM_Data_TableA[13+16] ) + ( gucv_WriteCardBuffer[ ( 27 + ucvTmpOffset64 ) ] );   // 0x4E5 
    ucv_tmp_array[14] = ( EEPROM_Data_TableA[14+16] ) + ( gucv_WriteCardBuffer[ ( 28 + ucvTmpOffset64 ) ] );   // 0x4E6 
    ucv_tmp_array[15] = ( EEPROM_Data_TableA[15+16] ) + ( gucv_WriteCardBuffer[ ( 24 + ucvTmpOffset64 ) ] );   // 0x4E2 

    ucv_swap_buffer[0] = ( gucv_CardIDArray[3] ^ ( ucv_tmp_array[3] + ucv_tmp_array[5] ) ) +
                  ( ( ucv_tmp_array[1] ^ ucv_tmp_array[12] ) + ( ucv_tmp_array[7] ^ ucv_tmp_array[8] ) );

    ucv_swap_buffer[1] = ( gucv_CardIDArray[2] ^ ( ucv_tmp_array[0] + ucv_tmp_array[2] ) ) +
                  ( ( ucv_tmp_array[3] ^ ucv_tmp_array[13] ) + ( ucv_tmp_array[4] ^ ucv_tmp_array[9] ) );

    ucv_swap_buffer[2] = ( gucv_CardIDArray[0] ^ ( ucv_tmp_array[1] + ucv_tmp_array[3] ) ) +
                  ( ( ucv_tmp_array[0] ^ ucv_tmp_array[14] ) + ( ucv_tmp_array[5] ^ ucv_tmp_array[10] ) );

    ucv_swap_buffer[3] = ( gucv_CardIDArray[1] ^ ( ucv_tmp_array[9] + ucv_tmp_array[12] ) ) +
                  ( gucv_CardIDArray[4] ^ ( ucv_tmp_array[5] + ucv_tmp_array[7] ) ) +
                  ( ( ucv_tmp_array[2] ^ ucv_tmp_array[15] ) + ( ucv_tmp_array[6] ^ ucv_tmp_array[11] ) );

    Lab_46C2(ucv_swap_buffer); 

    // Lab_4DE7
    for( i = 0; i < 16; i++ )
    {
        // [0x4CA:0x4DB] ^ = 0x13
        ucv_swap_array[i] = gucv_WriteCardBuffer[( ( 0 + ucvTmpOffset64 ) + i )] ^            // 0x4CA
                                         ( EEPROM_Data_TableA[17+16] + EEPROM_Data_TableA[ ( 16 + 16 + i ) ] );
        // [0x4DA:0x4EB] ^ = 0x13
        ucv_swap_array[i] += gucv_WriteCardBuffer[( ( 16 + ucvTmpOffset64 ) + i )] ^           // 0x4DA
                                          ( EEPROM_Data_TableA[18+16] + EEPROM_Data_TableA[ ( 16 + 16 + i ) ] );
        // [0x50A:0x51B] ^ = 0x13
        ucv_swap_array[i] += gucv_WriteCardBuffer[( ( 0 + ucvTmpOffset128 ) + i )] ^          // 0x50A
                                          ( EEPROM_Data_TableA[19+16] + EEPROM_Data_TableA[ ( 16 + 16 + i ) ] );
        // [0x51A:0x52B] ^ = 0x13
        ucv_swap_array[i] += gucv_WriteCardBuffer[( ( 16 + ucvTmpOffset128 ) + i )] ^          // 0x51A
                                          ( EEPROM_Data_TableA[20+16] + EEPROM_Data_TableA[ ( 16 + 16 + i ) ] );
        // [0x52A:0x53B] ^ = 0x13
        ucv_swap_array[i] += gucv_WriteCardBuffer[( ( 32 + ucvTmpOffset128 ) + i )] ^          // 0x52A
                                          ( EEPROM_Data_TableA[21+16] + EEPROM_Data_TableA[ ( 16 + 16 + i ) ] );
    }

    // Lab_4E62  
    for( i = 0; i < 12; i++ )
    {
        // [0x56A:0x576] ^ = 0x13
        ucv_swap_array[i] += gucv_WriteCardBuffer[ ( ( 32 + ucvTmpOffset192 ) + i ) ] ^        // 0x56A
                                           ( EEPROM_Data_TableA[22+16] + EEPROM_Data_TableA[ ( 16 + 16 + i ) ] ) ;  
    }  

    // Lab_4E88   R6 = [0x15F], R5 = [0x159]
    ucv_swap_buffer[0] = ( ucv_swap_array[8] ^ ucv_swap_array[12] ) +
                  ( ( gucv_XR159 ^ gucv_XR15F ) + ( ucv_swap_array[1] ^ ucv_swap_array[4] ) );  
    // = 0x16
    ucv_swap_buffer[1] = ( ucv_swap_array[9] ^ ucv_swap_array[13] ) +
                  ( ( gucv_XR159 + gucv_XR15F ) + ( ucv_swap_array[0] ^ ucv_swap_array[5] ) );  
    // = 0x16
    ucv_swap_buffer[2] = ( ucv_swap_array[10] ^ ucv_swap_array[15] ) +
                  ( gucv_XR159 + ( ucv_swap_array[2] ^ ucv_swap_array[6] ) );   
    // = 0x16
    ucv_swap_buffer[3] = ( ucv_swap_array[11] ^ ucv_swap_array[14] ) +
                  ( gucv_XR15F + ( ucv_swap_array[3] ^ ucv_swap_array[7] ) );  
    Lab_46C2(ucv_swap_buffer);

    output[0] = ( gucv_XR159 + gucv_EEPolynomialArray[0] );
    output[1] = ( gucv_XR15F + gucv_EEPolynomialArray[1] );

    for( i = 0; i < 16; i++ )
    {  
        ucv_tmp_array[ i ] = ( gucv_WriteCardBuffer[ ( 0 + ucvTmpOffset64  + i ) ] ^           // 0x4CA
                                      ( EEPROM_Data_TableA[ ( 96 + 16 + i ) ] + EEPROM_Data_TableA[101+16]) ) + 
                             ( gucv_WriteCardBuffer[ ( 16 + ucvTmpOffset64  + i ) ] ^           // 0x4DA 
                                      ( EEPROM_Data_TableA[ ( 112 + 16 + i ) ] + EEPROM_Data_TableA[118+16] ) );
    }

    for( i = 0; i < 9; i++ )
    {
        ucv_tmp_array[ i ] += gucv_WriteCardBuffer[ ( 32 + ucvTmpOffset192  + i ) ] ^           // 0x56A
                              ( EEPROM_Data_TableA[102+16] + ( EEPROM_Data_TableA[ ( 96 + 16 + i ) ] + EEPROM_Data_TableA[103+16] ) );
    }

    ucv_swap_buffer[0] = ( ucv_tmp_array[3] ^ ucv_tmp_array[8] ) + ( ucv_tmp_array[6] ^ ucv_tmp_array[12] );
    ucv_swap_buffer[1] = ( ucv_tmp_array[0] ^ ucv_tmp_array[9] ) + ( ucv_tmp_array[7] ^ ucv_tmp_array[13] );
    ucv_swap_buffer[2] = ( ucv_tmp_array[2] ^ ucv_tmp_array[10] ) + ( ucv_tmp_array[4] ^ ucv_tmp_array[14] );
    ucv_swap_buffer[3] = ( ucv_tmp_array[1] ^ ucv_tmp_array[11] ) + ( ucv_tmp_array[5] ^ ucv_tmp_array[15] );

    Lab_46C2(ucv_swap_buffer);

    output[2] = ( gucv_XR159 + gucv_EEPolynomialArray[2] );
    output[3] = ( gucv_XR15F + gucv_EEPolynomialArray[3] );
}

// 已经验证
void Lab_6241( uint8_t byte0, uint8_t byte1, uint8_t byte2, uint8_t byte3, uint8_t byte4, uint8_t* output )
{
    uint8_t  i, ucvTmpOffset64, ucvTmpOffset128, ucvTmpOffset192;
    uint8_t  ucv_tmp_array[16];
    uint8_t  ucv_swap_array[16];
    uint8_t  ucv_swap_buffer[4];
    
    ucvTmpOffset64  = ( ( ucvOffsetMode1 * 4 ) * 0x10 );    // 0x40  
    ucvTmpOffset128 = ( ( ucvOffsetMode2 * 4 ) * 0x10 );    // 0x40   
    ucvTmpOffset192 = ( ( ucvOffsetMode3 * 4 ) * 0x10 );    // 0x40

// ---------------------------------------------------------------------------
    // XBYTE[0xB11<0x7C>] = ( [0x980<0xCC>] ^ RAM_9<88> ) + ( [0x976<0xE9>] ^ [0x4CE] ) + ( [0x97F<0x4D>] ^ [0x4D3] ) 
    ucv_tmp_array[0] = ( ( EEPROM_Data_TableA[74+16] ^ byte0 ) + 
                     ( ( EEPROM_Data_TableA[64+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 4 ) ] ) +         // 0x4CE
                       ( EEPROM_Data_TableA[73+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 9 ) ] ) ) );      // 0x4D3
                 
    // XBYTE[0xB12<0x2D>] = ( [0x981<0x92>] ^ RAM_A ) + ( [0x977<0x04>] ^ [0x4CD] ) + ( [0x97E<0xAB>] ^ [0x4D4] ) 
    ucv_tmp_array[1] = ( ( EEPROM_Data_TableA[75+16] ^ byte1 ) + 
                     ( ( EEPROM_Data_TableA[65+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 3 ) ] ) +         // 0x4CD
                       ( EEPROM_Data_TableA[72+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 10 ) ] ) ) );      // 0x4D4
                  
    // XBYTE[0xB13<0xF8>] = ( [0x982<0x1C>] ^ RAM_B ) + ( [0x978<0x19>] ^ [0x4CB] ) + ( [0x97B<0xC5>] ^ [0x570] ) 
    ucv_tmp_array[2] = ( ( EEPROM_Data_TableA[76+16] ^ byte2 ) + 
                     ( ( EEPROM_Data_TableA[66+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 1 ) ] ) +         // 0x4CB
                       ( EEPROM_Data_TableA[69+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset192 + 38 ) ] ) ) );     // 0x4F0
                  
    // XBYTE[0xB14<0xA2>] = ( [0x983<0xDC>] ^ RAM_C ) + ( [0x979<0xD7>] ^ [0x4CC] ) + ( [0x97C<0x06>] ^ [0x571] ) 
    ucv_tmp_array[3] = ( ( EEPROM_Data_TableA[77+16] ^ byte4 ) + 
                     ( ( EEPROM_Data_TableA[67+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 2 ) ] ) +         // 0x4CC 
                       ( EEPROM_Data_TableA[70+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset192 + 39 ) ] ) ) );     // 0x4F1
                  
    // XBYTE[0xB15<0xDE>] = ( [0x984<0xB4>] ^ RAM_D ) + ( [0x97A<0x4D>] ^ [0x4CA] ) + ( [0x97D<0xC9>] ^ [0x572] ) 
    ucv_tmp_array[4] = ( ( EEPROM_Data_TableA[78+16] ^ byte3 ) + 
                     ( ( EEPROM_Data_TableA[68+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 0 ) ] ) +         // 0x4CA 
                       ( EEPROM_Data_TableA[71+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset192 + 40 ) ] ) ) );     // 0x4F2 

// ---------------------------------------------------------------------------
    ucv_tmp_array[5] = EEPROM_Data_TableA[69+16] + byte0;  // <0x4D> <0xC5>
    ucv_tmp_array[6] = EEPROM_Data_TableA[70+16] + byte1;  // <0x16> <0x03>
    ucv_tmp_array[7] = EEPROM_Data_TableA[71+16] + byte2;  // <0xC9> <0xC9>
    ucv_tmp_array[8] = EEPROM_Data_TableA[72+16] + byte3;  // <0xAB> <0xAB>
    ucv_tmp_array[9] = EEPROM_Data_TableA[73+16] + byte4;  // <0x4D> <0x4D>

// ---------------------------------------------------------------------------
    // XBYTE[0xB1B<0xAF>] = ( [0x980<0xCC>] ^ [0x4E3] ) + ( [0x976<0xE9>] ^ [0x4D7] ) ) 
    ucv_tmp_array[10] = ( ( EEPROM_Data_TableA[74+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 25 ) ] ) +       // 0x4E3 
                     ( EEPROM_Data_TableA[64+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 13 ) ] ) );      // 0x4D7
                     
    // XBYTE[0xB1C<0xCC>] = ( [0x981] ^ [0x4E4] ) + ( [0x977] ^ [0x4D5] ) ) 
    ucv_tmp_array[11] = ( ( EEPROM_Data_TableA[75+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 26 ) ] ) +       // 0x4E4
                     ( EEPROM_Data_TableA[65+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 11 ) ] ) );      // 0x4D5
                     
    // XBYTE[0xB1D<0x2E>] = ( [0x982] ^ [0x4E5] ) + ( [0x978] ^ [0x4D6] ) ) 
    ucv_tmp_array[12] = ( ( EEPROM_Data_TableA[76+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 27 ) ] ) +       // 0x4E5
                     ( EEPROM_Data_TableA[66+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 12 ) ] ) );      // 0x4D6
                     
    // XBYTE[0xB1E<0xBD>] = ( [0x983] ^ [0x4E7] ) + ( [0x979] ^ [0x4D8] ) ) 
    ucv_tmp_array[13] = ( ( EEPROM_Data_TableA[77+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 29 ) ] ) +       // 0x4E7 
                     ( EEPROM_Data_TableA[67+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 14 ) ] ) );      // 0x4D8
                     
    // XBYTE[0xB1F<0xD2>] = ( [0x984] ^ [0x4E6] ) + ( [0x97A] ^ [0x4E2] ) ) 
    ucv_tmp_array[14] = ( ( EEPROM_Data_TableA[78+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 28 ) ] ) +       // 0x4E6
                     ( EEPROM_Data_TableA[68+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 24 ) ] ) );      // 0x4E2
                     
    // XBYTE[0xB20<0x4B>] = ( [0x985] + [0x4D2] ) 
    ucv_tmp_array[15] = ( EEPROM_Data_TableA[79+16] + gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 8 ) ] );          // 0x4D2

// ---------------------------------------------------------------------------
    // 与接收到的 5 字节卡数据计算
    // <0x61>
    ucv_swap_buffer[0] = ( ( ( ucv_tmp_array[3] + ucv_tmp_array[2] ) ^ gucv_CardIDArray[0] ) + 
                    ( ( ucv_tmp_array[4] ^ ucv_tmp_array[8] ) + ( ucv_tmp_array[0] ^ ucv_tmp_array[12] ) ) );
    // <0x25>                  
    ucv_swap_buffer[1] = ( ( ( ucv_tmp_array[7] + ucv_tmp_array[11] ) ^ gucv_CardIDArray[1] ) + 
                    ( ( ucv_tmp_array[5] ^ ucv_tmp_array[9] ) + ( ucv_tmp_array[1] ^ ucv_tmp_array[13] ) ) );
    // <0x59>                  
    ucv_swap_buffer[2] = ( ( ( ucv_tmp_array[0] + ucv_tmp_array[5] ) ^ gucv_CardIDArray[2] ) + 
                    ( ( ucv_tmp_array[7] ^ ucv_tmp_array[10] ) + ( ucv_tmp_array[2] ^ ucv_tmp_array[14] ) ) );
    // <0x36>                  
    ucv_swap_buffer[3] = ( ( gucv_CardIDArray[4] ^ ( ucv_tmp_array[8] + ucv_tmp_array[13] ) )+
                    ( ( ( ucv_tmp_array[4] + ucv_tmp_array[1] ) ^ gucv_CardIDArray[3] ) + 
                      ( ( ( EEPROM_Data_TableA[79+16] + gucv_WriteCardBuffer[( ucvTmpOffset64 + 8 )] ) ^ ucv_tmp_array[3] ) +          // 0x4D2
                        ( ucv_tmp_array[6] ^ ucv_tmp_array[11] ) ) ) );                  
    
    // 4 Bytes 隐藏后存入 gucv_XR159、gucv_XR15F
    Lab_46C2(ucv_swap_buffer);

// ---------------------------------------------------------------------------
    for( i = 0; i < 16; i++ )
    {   
        
        ucv_swap_array[ i ] =  ( ( EEPROM_Data_TableA[81+16] + EEPROM_Data_TableA[ ( i + 80 + 16 ) ] ) ^         
                                gucv_WriteCardBuffer[ ( ( ucvTmpOffset64 + 0 ) + i ) ] );      // [0x4CA + i]
                                           
        ucv_swap_array[ i ] += ( ( EEPROM_Data_TableA[82+16] + EEPROM_Data_TableA[ ( i + 80 + 16 ) ] ) ^ 
                                  gucv_WriteCardBuffer[ ( ( ucvTmpOffset64 + 16 ) + i ) ] );    // [0x4DA + i]  
                                            
        ucv_swap_array[ i ] += ( ( EEPROM_Data_TableA[83+16] + EEPROM_Data_TableA[ ( i + 80 + 16 ) ] ) ^ 
                                  gucv_WriteCardBuffer[ ( ( ucvTmpOffset128 + 0 ) + i ) ] );   // [0x50A + i]    
                                            
        ucv_swap_array[ i ] += ( ( EEPROM_Data_TableA[84+16] + EEPROM_Data_TableA[ ( i + 80 + 16 ) ] ) ^ 
                                  gucv_WriteCardBuffer[ ( ( ucvTmpOffset128 + 16 ) + i ) ] );   // [0x51A + i]     
                                            
        ucv_swap_array[ i ] += ( ( EEPROM_Data_TableA[85+16] + EEPROM_Data_TableA[ ( i + 80 + 16 ) ] ) ^ 
                                  gucv_WriteCardBuffer[ ( ( ucvTmpOffset128 + 32 ) + i ) ] );   // [0x52A + i]    
    }
    
    
    for( i = 0; i < 12; i++ )
    {
        ucv_swap_array[ i ] += ( ( EEPROM_Data_TableA[86+16] + EEPROM_Data_TableA[ ( i + 80 + 16 ) ] ) ^ 
                                  gucv_WriteCardBuffer[ ( ( ucvTmpOffset192 + 32 ) + i ) ] );   // [0x56A + i]   
    }

// ---------------------------------------------------------------------------
    ucv_swap_buffer[0] = ( ( ucv_swap_array[2] ^ ( ucv_swap_array[3] + byte0 ) ) + 
                    ( ( ucv_swap_array[12] ^ ucv_swap_array[8] ) + 
                      ( ( ucv_swap_array[4] ^ ucv_swap_array[0] ) + 
                        ( gucv_XR15F ^ gucv_XR159 ) ) ) );
    
    ucv_swap_buffer[1] = ( ( ucv_swap_array[10] ^ ( ucv_swap_array[11] + byte1) ) + 
                    ( ( ucv_swap_array[13] ^ ucv_swap_array[9] ) + ( ( ( ucv_swap_array[1] ^ ucv_swap_array[5] ) + gucv_XR159 ) + gucv_XR15F ) ) );
    
    ucv_swap_buffer[2] = ( ( ucv_swap_array[4] ^ ( ucv_swap_array[5] + byte2 ) ) + 
                    ( ( ucv_swap_array[10] ^ ucv_swap_array[14] ) + ( ( ucv_swap_array[2] ^ ucv_swap_array[6] ) + gucv_XR159 ) ) );
    
    ucv_swap_buffer[3] = ( ( ( ucv_swap_array[15] ^ ucv_swap_array[11] ) + ( ( ucv_swap_array[3] ^ ucv_swap_array[7] ) + gucv_XR15F) ) + 
                    ( ( ucv_swap_array[2] + byte4 ) ^ ( ucv_swap_array[12] ^ ( ucv_swap_array[13] + byte3 ))  ) );
    
    // 4 Bytes 隐藏后存入 gucv_XR159、gucv_XR15F
    Lab_46C2(ucv_swap_buffer);
    
    output[0]  = (gucv_EEPolynomialArray[0] + gucv_XR159);   // 8F
    output[1]  = (gucv_EEPolynomialArray[1] + gucv_XR15F);   // BA
}




// 已经验证
void Lab_46C2( uint8_t* buffer)
{
    uint8_t  ucv_tmp_array[4];
    uint8_t  ucv_tmp_buffer[4];
    
    ucv_tmp_array[0] = buffer[0]; 
    ucv_tmp_array[1] = buffer[1]; 
    ucv_tmp_array[2] = buffer[2]; 
    ucv_tmp_array[3] = buffer[3]; 
	
    ucv_tmp_buffer[0] = ( ( ucv_tmp_array[1] + ucv_tmp_array[0] ) ^ ( ucv_tmp_array[3] + ucv_tmp_array[2] ) );
    ucv_tmp_buffer[1] = ( ( ucv_tmp_array[0] ^ ucv_tmp_array[2] ) + ( ucv_tmp_array[1] ^ ucv_tmp_array[3] ) );
    
    ucv_tmp_buffer[2] = ( ( ucv_tmp_array[0] + ucv_tmp_array[2] ) ^ ( ucv_tmp_array[3] + ucv_tmp_array[1] ) );
    ucv_tmp_buffer[3] = ( ( ucv_tmp_array[0] ^ ucv_tmp_array[3] ) + ( ucv_tmp_array[1] ^ ucv_tmp_array[2] ) );

    // F0
    gucv_XR159 = ( EEPROM_Data_TableA[( ucv_tmp_buffer[1] + 144)] + ( EEPROM_Data_TableA[ ( ucv_tmp_buffer[0] + 144 ) ] << 4 ) );
    // 7A
    gucv_XR15F = ( EEPROM_Data_TableA[( ucv_tmp_buffer[3] + 144)] + ( EEPROM_Data_TableA[ ( ucv_tmp_buffer[2] + 144 ) ] << 4 ) );
}

// 已经验证
void Fun_FormatModeB_Analyze( void )
{
    uint8_t  ucv_output[4];
    uint16_t  i = 0;
    uint16_t  j = 0;
    uint16_t  uivFrameLenght  = 0;         // 串口接收帧中数据的总个数
    uint8_t   ucvTmpColOffset = 0;         // 列偏移
    uint8_t   ucvTmpRowOffset = 0;         // 行偏移
    uint16_t  uivTmpDataIndex = 9;         // 从帧中取数据的索引
    uint16_t  uivTmpCaseSelect = 0;        // 数据段的分支选择    
    uint16_t  uivTmpSegLenght = 0;         // 当前数据段需要取出数据的个数

    uint8_t  ucvTmpOffset64  = (ucvOffsetMode1 * 4) * 0x10;  // 缓存取出数据的偏移
    uint8_t  ucvTmpOffset128 = (ucvOffsetMode2 * 4) * 0x10;    
    uint8_t  ucvTmpOffset192 = (ucvOffsetMode3 * 4) * 0x10;

    // 可能是卡ID的Key [0x4D5][0x4D6][0x4D7][0x4D8]                 
    gucv_WriteCardBuffer[ ucvTmpOffset64 + 0xB + 0 ] = gucvDeviceIDArray[0];  // [XRB0C]*10+[XRB0D]:76 0x4C
    gucv_WriteCardBuffer[ ucvTmpOffset64 + 0xB + 1 ] = gucvDeviceIDArray[1];  // [XRB0E]*10+[XRB0F]:13 0x0D
    gucv_WriteCardBuffer[ ucvTmpOffset64 + 0xB + 2 ] = gucvDeviceIDArray[2];  // [XRB10]*10+[XRB11]:61 0x3D
    gucv_WriteCardBuffer[ ucvTmpOffset64 + 0xB + 3 ] = gucvDeviceIDArray[3];  // [XRB12]*10+[XRB13]:53 0x35

    // 获取串口接收帧中数据的总个数
    uivFrameLenght = (uint16_t)((ucvUartDataBuffer[4] << 8) | ucvUartDataBuffer[3]);

    //XBYTE[((ucvOffsetMode1 * 4) + 0x8AF)] = 1;  // [0x08B3] = 1

    uivTmpDataIndex += 16;

    while( uivTmpDataIndex < (uivFrameLenght - 5) )
    {
       // Lab_2F7C()
       uivTmpCaseSelect = (uint16_t)((ucvUartDataBuffer[uivTmpDataIndex] << 8 ) | (ucvUartDataBuffer[uivTmpDataIndex + 1]));
       uivTmpSegLenght = (uint16_t)((ucvUartDataBuffer[uivTmpDataIndex+3] << 8 ) | (ucvUartDataBuffer[ uivTmpDataIndex+2]));  
       uivTmpDataIndex += 4;
       
       if( uivTmpCaseSelect < 256 )
       {
           switch( uivTmpCaseSelect )
           {
               case 3:
               // Lab_40D7
                   ucvTmpRowOffset = ( ucvOffsetMode1 * 4 );  // Row Index:4
                   ucvTmpColOffset = 0;                       // Col Index:0
                   
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_416C_Next
                   // Lab_42B3_Next
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8B3] = 1
                   break;
               case 4:
               // Lab_40E6
                   ucvTmpRowOffset = ( ucvOffsetMode1 * 4 );  // Row Index:4
                   ucvTmpColOffset = 2;                    // Col Index:2
                   
                   // [0x4CC:0x4CE]:EEPROM_Page1[0x42:0x44]
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_416C_Next
                   // Lab_42B3_Next
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8B3] = 1
                   break;
               case 6:
               // Lab_40FB
                   ucvTmpRowOffset = ( ucvOffsetMode1 * 4 );  // Row Index:4
                   ucvTmpColOffset = 15;                   // Col Index:15
                   
                   // [0x4D9]:EEPROM_Page1[0x4F]
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_416C_Next
                   // Lab_42B3_Next
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8B3] = 1
                   break;
               case 9:
               // Lab_4112
                   ucvTmpRowOffset = ( ucvOffsetMode1 * 4 ) + 2;  // Row Index:6
                   ucvTmpColOffset = 3;                      // Col Index:3
                   
                   // Lab_411F
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       gucv_WriteCardBuffer[ ( ucvTmpOffset192 + 2 + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_42B3_Next
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8B5] = 1
                   break;
               case 0xA:
               // Lab_4157
                   ucvTmpRowOffset = ( ucvOffsetMode1 * 4 );  // Row Index:4
                   ucvTmpColOffset = 7;                    // Col Index:7
                   
                   // [0x4D1]:EEPROM_Page1[0x47]
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_42B3_Next
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8B3] = 1
                   break;
               case 0xB:
               // Lab_4172
                   ucvTmpRowOffset = ( ucvOffsetMode1 * 4 )+1;  // Row Index:5
                   ucvTmpColOffset = 0;                      // Col Index:0
                   
                   // [0x4DA:0x4DF]:EEPROM_Page1[0x50:0x55]
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_42B3_Next
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8B4] = 1
                   break;
               case 0xC:
               // Lab_4189
                   ucvTmpRowOffset = ( ucvOffsetMode1 * 4 )+1;  // Row Index:5
                   ucvTmpColOffset = 8;                      // Col Index:8
                   
                   // [0x4E2:0x4E8]:EEPROM_Page1[0x58:0x5E]
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_42B3_Next
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8B4] = 1
                   break;
               case 0xD:
               // Lab_41A5
                   ucvTmpRowOffset = ( ucvOffsetMode1 * 4 )+1;  // Row Index:5
                   ucvTmpColOffset = 6;                      // Col Index:6
                   
                   // [0x4E0:0x4E1]:EEPROM_Page1[0x56:0x57]
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_42B3_Next
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8B4] = 1
                   break;
               case 0xE:
               // Lab_41C1
                   ucvTmpRowOffset = ( ucvOffsetMode1 * 4 )+1;  // Row Index:5
                   ucvTmpColOffset = 14;                     // Col Index:14
                   
                   // [0x4E8:0x4E9]:EEPROM_Page1[0x5E:0x5F]
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_42B3_Next
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8B4] = 1
                   break;
               case 0xF:
               // Lab_41DD
                   ucvTmpRowOffset = ( ucvOffsetMode1 * 4 );  // Row Index:4
                   ucvTmpColOffset = 8;                    // Col Index:8
                   
                   // [0x4D2]:EEPROM_Page1[0x48]
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_42B3_Next
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8B3] = 1
                   break;
               case 0x10:
               // Lab_41F8
                   ucvTmpRowOffset = ( ucvOffsetMode1 * 4 );  // Row Index:4
                   ucvTmpColOffset = 9;                    // Col Index:9
                   
                   // [0x4D3]:EEPROM_Page1[0x49]
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_42B3_Next
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8B3] = 1
                   break;
               case 0x11:
               // Lab_4213
                   ucvTmpRowOffset = ( ucvOffsetMode1 * 4 );  // Row Index:4
                   ucvTmpColOffset = 10;                   // Col Index:10
                   
                   // [0x4D4]:EEPROM_Page1[0x4A]
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_42B3_Next
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8B3] = 1
                   break;
               case 0x12:
               // Lab_422E
                   ucvTmpRowOffset = ( ucvOffsetMode2 * 4 );  // Row Index:8
                   ucvTmpColOffset = 0;                    // Col Index:0
                   
                   // [0x50A:0x511]:EEPROM_Page2[0x80:0x87]
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_42B3_Next
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8B7] = 1
                   break;
               case 0x13:
               // Lab_4244
                   ucvTmpRowOffset = ( ucvOffsetMode2 * 4 )+1;  // Row Index:9
                   ucvTmpColOffset = 0;                      // Col Index:0
                   
                   // [0x51A:0x521]:EEPROM_Page2[0x90:0x97]
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_42B3_Next
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8B8] = 1
                   break;
               case 0x14:
               // Lab_425D
                   ucvTmpRowOffset = ( ucvOffsetMode2 * 4 )+2;  // Row Index:10
                   ucvTmpColOffset = 0;                      // Col Index:0
                   
                   // [0x52A:0x531]:EEPROM_Page2[0xA0:0xA7]
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_42B3_Next
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8B9] = 1
                   break;
               case 0x16:
               // Lab_4277
                   ucvTmpRowOffset = ( ucvOffsetMode3 * 4 )+1;  // Row Index:13
                   ucvTmpColOffset = 0;                      // Col Index:0
                   
                   // [0x55A:0x569]:EEPROM_Page3[0xD0:0xDF]
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   //  Lab_22D7();              
                   ucvTmpColOffset = 0;
                   gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 0 ) ] = 0;  // [0x55A] = 0
                   gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 1 ) ] = 0;  // [0x55B] = 0
                   gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 2 ) ] = 0;  // [0x55C] = 0
                   gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 3 ) ] = 0;  // [0x55D] = 0
                   gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 4 ) ] = 1;  // [0x55E] = 1
                   gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 5 ) ] = 2;  // [0x55F] = 2
                   // [0x560] = 2
                   gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 6 ) ] = Lab_5623( gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 0 ) ],
                                                                                   gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 1 ) ],
                                                                                   gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 2 ) ], 
                                                                                   gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 3 ) ],
                                                                                   gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 4 ) ], 
                                                                                   gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 5 ) ] );
                   
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8BC] = 1
                   break;
               case 0x79:
               // Lab_4298
                   ucvTmpRowOffset = ( ucvOffsetMode3 * 4 )+2;  // Row Index:14
                   ucvTmpColOffset = 6;                      // Col Index:6
                   
                   // [0x570]:EEPROM_Page3[0xE6]
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8BD] = 1
                   break;
               case 0x7A:
               // Lab_42B7
                   ucvTmpRowOffset = ( ucvOffsetMode3 * 4 )+2;  // Row Index:14
                   ucvTmpColOffset = 7;                      // Col Index:7
                   
                   // [0x571]:EEPROM_Page3[0xE7]
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8BD] = 1
                   break;
               case 0x7B:
               // Lab_42D6
                   ucvTmpRowOffset = ( ucvOffsetMode3 * 4 )+2;  // Row Index:14
                   ucvTmpColOffset = 8;                      // Col Index:8
                   
                   // [0x572]:EEPROM_Page3[0xE8]
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8BD] = 1
                   break;
               case 0x7C:
               // Lab_42F5
                   ucvTmpRowOffset = ( ucvOffsetMode2 * 4 );  // Row Index:8
                   ucvTmpColOffset = 8;                    // Col Index:8
                   
                   // [0x512:0x519]:EEPROM_Page2[0x88:0x8F]
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8B7] = 1
                   break;
               case 0x7D:
               // Lab_430F
                   ucvTmpRowOffset = ( ucvOffsetMode2 * 4 )+1;  // Row Index:9
                   ucvTmpColOffset = 8;                      // Col Index:8
                   
                   // [0x522:0x519]:EEPROM_Page2[0x98:0x9F]
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8B8] = 1
                   break;
               case 0x7E:
               // Lab_432F
                   ucvTmpRowOffset = ( ucvOffsetMode2 * 4 )+2;  // Row Index:10
                   ucvTmpColOffset = 8;                      // Col Index:8
                   
                   // [0x532:0x539]:EEPROM_Page2[0xA8:0xAF]
                   for( i = 0; i < uivTmpSegLenght; i++ )
                   {
                       // Lab_26CC();
                       gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
                       ucvTmpColOffset++;
                       uivTmpDataIndex++;
                   }
                   
                   // Lab_434E_Next
                   ucvFlagesBuffer[ ucvTmpRowOffset ] = 1;  // [0x8B9] = 1
                   break;
               default:
               // Lab_4081
                   break;
           }
           // Lab_4081
       }
    }
   
    // Lab_4353
    Lab_437B( gucv_WriteCardBuffer[ (ucvTmpOffset64 + 32) ],   // [0x4EA]: 
              gucv_WriteCardBuffer[ (ucvTmpOffset64 + 33) ],   // [0x4EB]:
              gucv_WriteCardBuffer[ (ucvTmpOffset64 + 34) ],   // [0x4EC]:
              gucv_WriteCardBuffer[ (ucvTmpOffset64 + 35) ],   // [0x4ED]:
              gucv_WriteCardBuffer[ (ucvTmpOffset64 + 36) ], ucv_output);  // [0x4EE]:
             
    // Lab_1CCA
    gucv_WriteCardBuffer[ ucvTmpOffset64 + 37 ] = ucv_output[0];  // 0x4EF   
    gucv_WriteCardBuffer[ ucvTmpOffset64 + 38 ] = ucv_output[1];  // 0x4F0
    printf("扇区3地址[0x4EF/0x4F0]的数据:0x%X, 0x%X; \r\n", ucv_output[0], ucv_output[1]);

    gucv_WriteCardBuffer[ ucvTmpOffset192 + 0 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 32 ]; // [0x54A] = [0x4EA] = 88
    gucv_WriteCardBuffer[ ucvTmpOffset192 + 1 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 33 ]; // [0x54B] = [0x4EB] = 13 
    gucv_WriteCardBuffer[ ucvTmpOffset192 + 2 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 34 ]; // [0x54C] = [0x4EC] = 00
    gucv_WriteCardBuffer[ ucvTmpOffset192 + 3 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 35 ]; // [0x54D] = [0x4ED] = 00
    gucv_WriteCardBuffer[ ucvTmpOffset192 + 4 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 36 ]; // [0x54E] = [0x4EE] = 00 
    gucv_WriteCardBuffer[ ucvTmpOffset192 + 5 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 37 ]; // [0x54F] = [0x4EF] = 00  
    gucv_WriteCardBuffer[ ucvTmpOffset192 + 6 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 38 ]; // [0x550] = [0x4F0] = 00  

    Lab_49CA(ucv_output);    
 
    gucv_WriteCardBuffer[ (ucvTmpOffset192 + 46) ] = ucv_output[0];     // [0x578] = 0x46
    gucv_WriteCardBuffer[ (ucvTmpOffset192 + 47) ] = ucv_output[1];     // [0x579] = 0x2D
    gucv_WriteCardBuffer[ (ucvTmpOffset192 + 44) ] = ucv_output[2];     // [0x576] = 0x46
    gucv_WriteCardBuffer[ (ucvTmpOffset192 + 45) ] = ucv_output[3];     // [0x577] = 0x80 
    printf("扇区3地址[0x576/0x577/0x578/0x579]的数据:0x%X, 0x%X, 0x%X, 0x%X; \r\n", ucv_output[2], ucv_output[3], ucv_output[0], ucv_output[1]); 
}

// 已经验证
void Lab_49CA( uint8_t* output )
{
    uint8_t i;
    uint8_t  ucvTmpOffset64  = (ucvOffsetMode1 * 4) * 0x10;  
    uint8_t  ucvTmpOffset128 = (ucvOffsetMode2 * 4) * 0x10;    
    uint8_t  ucvTmpOffset192 = (ucvOffsetMode3 * 4) * 0x10; 
    
    uint8_t  ucv_tmp_array[16];
    uint8_t  ucv_swap_array[16];
    uint8_t  ucv_swap_buffer[4];

    ucv_tmp_array[0] = ( ( EEPROM_Data_TableA[0+16] ^ gucv_WriteCardBuffer[ 4 + ucvTmpOffset64 ] ) + 
                    ( EEPROM_Data_TableA[6+16] ^ gucv_WriteCardBuffer[ 39 + ucvTmpOffset192 ] ) );
                      
    ucv_tmp_array[1] = ( ( EEPROM_Data_TableA[1+16] ^ gucv_WriteCardBuffer[ 3 + ucvTmpOffset64 ] ) + 
                    ( EEPROM_Data_TableA[7+16] ^ gucv_WriteCardBuffer[ 38 + ucvTmpOffset192 ] ) );
                      
    ucv_tmp_array[2] = ( ( EEPROM_Data_TableA[2+16] ^ gucv_WriteCardBuffer[ 2 + ucvTmpOffset64 ] ) + 
                    ( EEPROM_Data_TableA[8+16] ^ gucv_WriteCardBuffer[ 8 + ucvTmpOffset192 ] ) );
                      
    ucv_tmp_array[3] = ( ( EEPROM_Data_TableA[3+16] ^ gucv_WriteCardBuffer[ 0 + ucvTmpOffset64 ] ) + 
                    ( EEPROM_Data_TableA[9+16] ^ gucv_WriteCardBuffer[ 40 + ucvTmpOffset192 ] ) );
                      
    ucv_tmp_array[4] = ( ( EEPROM_Data_TableA[4+16] ^ gucv_WriteCardBuffer[ 1 + ucvTmpOffset64 ] ) + 
                    ( EEPROM_Data_TableA[10+16] ^ gucv_WriteCardBuffer[ 9 + ucvTmpOffset192 ] ) );
                                       
    ucv_tmp_array[5]  = ( EEPROM_Data_TableA[5+16]  + gucv_WriteCardBuffer[ ( 10 + ucvTmpOffset64 ) ] );
    ucv_tmp_array[6]  = ( EEPROM_Data_TableA[6+16]  + gucv_WriteCardBuffer[ ( 12 + ucvTmpOffset64 ) ] );
    ucv_tmp_array[7]  = ( EEPROM_Data_TableA[7+16]  + gucv_WriteCardBuffer[ ( 11 + ucvTmpOffset64 ) ] );
    ucv_tmp_array[8]  = ( EEPROM_Data_TableA[8+16]  + gucv_WriteCardBuffer[ ( 13 + ucvTmpOffset64 ) ] );
    ucv_tmp_array[9]  = ( EEPROM_Data_TableA[9+16]  + gucv_WriteCardBuffer[ ( 14 + ucvTmpOffset64 ) ] );
    ucv_tmp_array[10] = ( EEPROM_Data_TableA[10+16] + gucv_WriteCardBuffer[ ( 25 + ucvTmpOffset64 ) ] );
    ucv_tmp_array[11] = ( EEPROM_Data_TableA[11+16] + gucv_WriteCardBuffer[ ( 26 + ucvTmpOffset64 ) ] );
    ucv_tmp_array[12] = ( EEPROM_Data_TableA[12+16] + gucv_WriteCardBuffer[ ( 27 + ucvTmpOffset64 ) ] );
    ucv_tmp_array[13] = ( EEPROM_Data_TableA[13+16] + gucv_WriteCardBuffer[ ( 29 + ucvTmpOffset64 ) ] );
    ucv_tmp_array[14] = ( EEPROM_Data_TableA[14+16] + gucv_WriteCardBuffer[ ( 24 + ucvTmpOffset64 ) ] );
    ucv_tmp_array[15] = ( EEPROM_Data_TableA[15+16] + gucv_WriteCardBuffer[ ( 28 + ucvTmpOffset64 ) ] );

    ucv_swap_buffer[0] = ( gucv_CardIDArray[4] ^ ( ucv_tmp_array[1] + ucv_tmp_array[15] ) ) +
                 ( ( ucv_tmp_array[0] ^ ucv_tmp_array[12] ) + ( ucv_tmp_array[7] ^ ucv_tmp_array[8] ) );

    ucv_swap_buffer[1] = ( gucv_CardIDArray[2] ^ ( ucv_tmp_array[2] + ucv_tmp_array[5] ) ) +
                 ( ( ucv_tmp_array[3] ^ ucv_tmp_array[13] ) + ( ucv_tmp_array[6] ^ ucv_tmp_array[9] ) );

    ucv_swap_buffer[2] = ( gucv_CardIDArray[3] ^ ( ucv_tmp_array[0] + ucv_tmp_array[3] ) ) +
                 ( ( ucv_tmp_array[1] ^ ucv_tmp_array[14] ) + ( ucv_tmp_array[5] ^ ucv_tmp_array[10] ) );

    ucv_swap_buffer[3] = ( gucv_CardIDArray[0] ^ ( ucv_tmp_array[8] + ucv_tmp_array[13] ) ) +
                 ( gucv_CardIDArray[1] ^ ( ucv_tmp_array[6] + ucv_tmp_array[7] ) ) +
                 ( ( ucv_tmp_array[2] ^ ucv_tmp_array[15] ) + ( ucv_tmp_array[4] ^ ucv_tmp_array[11] ) );
                 
    Lab_46C2(ucv_swap_buffer);

    for( i = 0; i < 16; i++ )
    {
       ucv_swap_array[i] = ( ( EEPROM_Data_TableA[23+16] + EEPROM_Data_TableA[ (16+16 + i) ] ) ^ 
                                ( gucv_WriteCardBuffer[ ( 0 + ucvTmpOffset64 ) + i ] ) );      // 0x4CA

       ucv_swap_array[i] += ( ( EEPROM_Data_TableA[24+16] + EEPROM_Data_TableA[ (16+16 + i) ] ) ^ 
                                 ( gucv_WriteCardBuffer[ ( 16 + ucvTmpOffset64 ) + i ] ) );     // 0x4DA

       ucv_swap_array[i] += ( ( EEPROM_Data_TableA[25+16] + EEPROM_Data_TableA[ (16+16 + i) ] ) ^ 
                                 ( gucv_WriteCardBuffer[ ( 0 + ucvTmpOffset128 ) + i ] ) );    // 0x50A

       ucv_swap_array[i] += ( ( EEPROM_Data_TableA[26+16] + EEPROM_Data_TableA[ (16+16 + i) ] ) ^ 
                                 ( gucv_WriteCardBuffer[ ( 16 + ucvTmpOffset128 ) + i ] ) );    // 0x51A

       ucv_swap_array[i] += ( ( EEPROM_Data_TableA[27+16] + EEPROM_Data_TableA[ (16+16 + i) ] ) ^ 
                                 ( gucv_WriteCardBuffer[ ( 32 + ucvTmpOffset128 ) + i ] ) );    // 0x52A
    }

    for( i = 0; i < 12; i++ )
    {
       ucv_swap_array[i] += ( ( EEPROM_Data_TableA[28+16] + EEPROM_Data_TableA[ (16+16 + i) ] ) ^ 
                                 ( gucv_WriteCardBuffer[ ( 32 + ucvTmpOffset192 ) + i ] ) );    // 0x56A
    }

    // Lab_4BA1
    ucv_swap_buffer[0] = ( ucv_swap_array[8] ^ ucv_swap_array[13] ) +
                 ( ( gucv_XR159 ^ gucv_XR15F ) + ( ucv_swap_array[7] ^ ucv_swap_array[0] ) );  

    ucv_swap_buffer[1] = ( ucv_swap_array[9] ^ ucv_swap_array[14] ) +
                 ( ( gucv_XR159 + gucv_XR15F ) + ( ucv_swap_array[2] ^ ucv_swap_array[5] ) );  

    ucv_swap_buffer[2] = ( ucv_swap_array[11] ^ ucv_swap_array[12] ) +
                 ( gucv_XR159 + ( ucv_swap_array[3] ^ ucv_swap_array[6] ) );   
	
    ucv_swap_buffer[3] = ( ucv_swap_array[10] ^ ucv_swap_array[15] ) +
                 ( gucv_XR15F + ( ucv_swap_array[1] ^ ucv_swap_array[4] ) ); 
                 
    Lab_46C2(ucv_swap_buffer);
    
    output[0] = ( gucv_XR159 + gucv_EEPolynomialArray[0] );
    output[1] = ( gucv_XR15F + gucv_EEPolynomialArray[1] );

    for( i = 0; i < 16; i++ )
    {  
       ucv_tmp_array[i] =  ( gucv_WriteCardBuffer[ ( 0 + ucvTmpOffset64 + i ) ] ^           // 0x4CA 
                                        ( EEPROM_Data_TableA[ ( 112+16 + i ) ] + EEPROM_Data_TableA[113+16]) ) + 
                               ( gucv_WriteCardBuffer[ ( 16 + ucvTmpOffset64 + i ) ] ^           // 0x4DA
                                        ( EEPROM_Data_TableA[ ( 96+16 + i ) ] + EEPROM_Data_TableA[97+16] ) );
    }

    for( i = 0; i < 9; i++ )
    {
        ucv_tmp_array[i] += gucv_WriteCardBuffer[ ( 32 + ucvTmpOffset192  + i ) ] ^            // 0x56A
                             ( EEPROM_Data_TableA[115+16] + ( EEPROM_Data_TableA[ ( 112+16 + i ) ] + EEPROM_Data_TableA[116+16] ) );
    }

    ucv_swap_buffer[0] = ( ucv_tmp_array[0] ^ ucv_tmp_array[8] ) + ( ucv_tmp_array[6] ^ ucv_tmp_array[15] );
    ucv_swap_buffer[1] = ( ucv_tmp_array[3] ^ ucv_tmp_array[9] ) + ( ucv_tmp_array[4] ^ ucv_tmp_array[13] );
    ucv_swap_buffer[2] = ( ucv_tmp_array[2] ^ ucv_tmp_array[11] ) + ( ucv_tmp_array[7] ^ ucv_tmp_array[14] );
    ucv_swap_buffer[3] = ( ucv_tmp_array[1] ^ ucv_tmp_array[10] ) + ( ucv_tmp_array[5] ^ ucv_tmp_array[12] );

    Lab_46C2(ucv_swap_buffer);
    
    output[2] = ( gucv_XR159 + gucv_EEPolynomialArray[2] );
    output[3] = ( gucv_XR15F + gucv_EEPolynomialArray[3] );
}

// 已经验证
void Lab_437B( uint8_t byte0, uint8_t byte1, uint8_t byte2, uint8_t byte3, uint8_t byte4, uint8_t* output)
{
   uint8_t  i, ucvTmpOffset64, ucvTmpOffset128, ucvTmpOffset192;
   
   uint8_t  ucv_tmp_array[16];
   uint8_t  ucv_swap_array[16];
   uint8_t  ucv_swap_buffer[4];
   
   ucvTmpOffset64  = ( ( ucvOffsetMode1 * 4 ) * 0x10 );    // 0x40  
   ucvTmpOffset128 = ( ( ucvOffsetMode2 * 4 ) * 0x10 );    // 0x40   
   ucvTmpOffset192 = ( ( ucvOffsetMode3 * 4 ) * 0x10 );    // 0x40
// ---------------------------------------------------------------------------
   ucv_tmp_array[0] = ( ( EEPROM_Data_TableA[75+16] ^ byte0 ) + 
                    ( ( EEPROM_Data_TableA[68+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 4 ) ] ) +         // 0x4CE 
                      ( EEPROM_Data_TableA[70+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 8 ) ] ) ) );      // 0x4D3
                 
   ucv_tmp_array[1] = ( ( EEPROM_Data_TableA[76+16] ^ byte1 ) + 
                    ( ( EEPROM_Data_TableA[67+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 3 ) ] ) +         // 0x4CD 
                      ( EEPROM_Data_TableA[69+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 10 ) ] ) ) );      // 0x4D4              
       
   ucv_tmp_array[2] = ( ( EEPROM_Data_TableA[77+16] ^ byte2 ) + 
                    ( ( EEPROM_Data_TableA[65+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 1 ) ] ) +         // 0x4CB
                      ( EEPROM_Data_TableA[71+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 40 ) ] ) ) );      // 0x4F2 
                 
   ucv_tmp_array[3] = ( ( EEPROM_Data_TableA[78+16] ^ byte4 ) + 
                    ( ( EEPROM_Data_TableA[64+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 2 ) ] ) +         // 0x4CC
                      ( EEPROM_Data_TableA[73+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 38 ) ] ) ) );      // 0x4F0
                 
   ucv_tmp_array[4] = ( ( EEPROM_Data_TableA[79+16] ^ byte3 ) + 
                    ( ( EEPROM_Data_TableA[66+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 0 ) ] ) +         // 0x4CA 
                      ( EEPROM_Data_TableA[72+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 39 ) ] ) ) );      // 0x4F1 
// ---------------------------------------------------------------------------
   ucv_tmp_array[5] = EEPROM_Data_TableA[69+16] + byte4;
   ucv_tmp_array[6] = EEPROM_Data_TableA[70+16] + byte3;
   ucv_tmp_array[7] = EEPROM_Data_TableA[71+16] + byte2;
   ucv_tmp_array[8] = EEPROM_Data_TableA[72+16] + byte1;
   ucv_tmp_array[9] = EEPROM_Data_TableA[73+16] + byte0;
// ---------------------------------------------------------------------------
   ucv_tmp_array[10] = ( ( EEPROM_Data_TableA[77+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 26 ) ] ) +      // 0x4E4 
                    ( EEPROM_Data_TableA[67+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 13 ) ] ) );     // 0x4D7  
             
   ucv_tmp_array[11] = ( ( EEPROM_Data_TableA[76+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 25) ] ) +       // 0x4E3 
                    ( EEPROM_Data_TableA[66+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 11) ] ) );      // 0x4D5
             
   ucv_tmp_array[12] = ( ( EEPROM_Data_TableA[75+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 29) ] ) +       // 0x4E7 
                    ( EEPROM_Data_TableA[68+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 12) ] ) );      // 0x4D6
               
   ucv_tmp_array[13] = ( ( EEPROM_Data_TableA[74+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 27) ] ) +       // 0x4E5 
                    ( EEPROM_Data_TableA[65+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 14) ] ) );      // 0x4D8
               
   ucv_tmp_array[14] = ( ( EEPROM_Data_TableA[79+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 28) ] ) +       // 0x4E6 
                    ( EEPROM_Data_TableA[64+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 24) ] ) );      // 0x4E2
               
   ucv_tmp_array[15] = ( EEPROM_Data_TableA[78+16] + gucv_WriteCardBuffer[ ucvTmpOffset64 + 9] );                   // 0x4D2
// ---------------------------------------------------------------------------
   ucv_swap_buffer[0] = ( ( ( ucv_tmp_array[1] + ucv_tmp_array[2] ) ^ gucv_CardIDArray[2] ) + 
                   ( ( ucv_tmp_array[4] ^ ucv_tmp_array[11] ) + ( ucv_tmp_array[0] ^ ucv_tmp_array[12] ) ) );
              
   ucv_swap_buffer[1] = ( ( ( ucv_tmp_array[6] + ucv_tmp_array[7] ) ^ gucv_CardIDArray[0] ) + 
                   ( ( ucv_tmp_array[3] ^ ucv_tmp_array[13] ) + ( ucv_tmp_array[5] ^ ucv_tmp_array[9] ) ) );   
              
   ucv_swap_buffer[2] = ( ( ( ucv_tmp_array[0] + ucv_tmp_array[5] ) ^ gucv_CardIDArray[4] ) + 
                   ( ( ucv_tmp_array[1] ^ ucv_tmp_array[14] ) + ( ucv_tmp_array[7] ^ ucv_tmp_array[8]) ) );    

   ucv_swap_buffer[3] = ( ( ( ucv_tmp_array[9] + ucv_tmp_array[12] ) ^ gucv_CardIDArray[3] ) +
                   ( ( ( ucv_tmp_array[3] + ucv_tmp_array[4] ) ^ gucv_CardIDArray[1] ) + 
                       ( ucv_tmp_array[2] ^ ( EEPROM_Data_TableA[78+16] + gucv_WriteCardBuffer[ (ucvTmpOffset64 + 9) ] ) ) +         // 0x4D3 
                       ( ucv_tmp_array[6] ^ ucv_tmp_array[10] ) ) );    
                       
   Lab_46C2(ucv_swap_buffer);
// ---------------------------------------------------------------------------
   for( i = 0; i < 16; i++ )
   {
       ucv_swap_array[ i ] =  ( ( EEPROM_Data_TableA[ (i + 80+16) ] + EEPROM_Data_TableA[90+16] ) ^ 
                                 gucv_WriteCardBuffer[ ( ( ucvTmpOffset64 + 16 ) + i ) ] );      // [0x4DA + i]
                                 
       ucv_swap_array[ i ] += ( ( EEPROM_Data_TableA[ ( i + 80+16 ) ] + EEPROM_Data_TableA[91+16] ) ^ 
                                 gucv_WriteCardBuffer[ ( ( ucvTmpOffset64 + 0 ) + i  ) ] );     // [0x4CA + i]
                                 
       ucv_swap_array[ i ] += ( ( EEPROM_Data_TableA[ ( i + 80+16 ) ] + EEPROM_Data_TableA[92+16] ) ^ 
                                 gucv_WriteCardBuffer[ ( ( ucvTmpOffset128 + 16 ) + i ) ] );     // [0x51A + i]
                                 
       ucv_swap_array[ i ] += ( ( EEPROM_Data_TableA[ ( i + 80+16 ) ] + EEPROM_Data_TableA[93+16] ) ^ 
                                 gucv_WriteCardBuffer[ ( ( ucvTmpOffset128 + 32 ) + i ) ] );     // [0x52A + i]
                                 
       ucv_swap_array[ i ] += ( ( EEPROM_Data_TableA[ ( i + 80+16 ) ] + EEPROM_Data_TableA[94+16] ) ^ 
                                 gucv_WriteCardBuffer[ ( ( ucvTmpOffset128 + 0 ) + i ) ] );     // [0x50A + i]
   }
   
   for( i = 0; i < 12; i++ )
   {
       ucv_swap_array[ i ] += ( ( EEPROM_Data_TableA[ ( i + 80+16 ) ] + EEPROM_Data_TableA[95+16] ) ^ 
                                 gucv_WriteCardBuffer[ ( ( ucvTmpOffset192 + 32 ) + i ) ] );    // [0x56A + i]
   }
// ---------------------------------------------------------------------------
   ucv_swap_buffer[0] = ( ( ucv_swap_array[4] ^ ( ucv_swap_array[2] + byte0 ) ) + 
                   ( ( ( ucv_swap_array[14] ^ ucv_swap_array[8] ) + 
                       ( ( ucv_swap_array[5] ^ ucv_swap_array[0] ) + 
                         ( gucv_XR15F ^ gucv_XR159 ) ) ) ) );
                         
   ucv_swap_buffer[1] = ( ( ucv_swap_array[12] ^ ( ucv_swap_array[7] ^ byte1 ) ) + 
                   ( ( ( ucv_swap_array[9] ^ ucv_swap_array[15] ) + 
                     ( ( ( ucv_swap_array[1] ^ ucv_swap_array[4] ) + gucv_XR159 ) + gucv_XR15F ) ) ) );
                     
   ucv_swap_buffer[2] = ( ( ucv_swap_array[4] ^ ( ucv_swap_array[8] + byte2 ) ) + 
                   ( ( ucv_swap_array[10] ^ ucv_swap_array[12] ) + ( gucv_XR159 + ( ucv_swap_array[3] ^ ucv_swap_array[6] ) ) ) );
                   
   ucv_swap_buffer[3] = ( ( ( ucv_swap_array[5] ^ ( ucv_swap_array[9] + byte4) ) ^ 
                   ( ucv_swap_array[1] + byte3 ) ) +
                   ( ( ucv_swap_array[13] ^ ucv_swap_array[11] ) + ( ( ucv_swap_array[2] ^ ucv_swap_array[7] ) + gucv_XR15F ) ) );
   
   Lab_46C2(ucv_swap_buffer);
// ---------------------------------------------------------------------------
   
   output[0]  = ( gucv_EEPolynomialArray[0] + gucv_XR159 );
   output[1]  = ( gucv_EEPolynomialArray[1] + gucv_XR15F );
}




    










int main () {

    uint16_t  i;

    ucvOffsetMode1 = 1;                    // [0xAF8]
    ucvOffsetMode2 = 2;                    // [0xAF9]
    ucvOffsetMode3 = 3;                    // [0xAFB]


    for(i = 0; i < 256; i++)
    {
        ucvUartDataBuffer[i] = Uart_Cmd_Table[i];
    }
	
	// 刷卡器编号
	Fun_DeviceID_Produced();
	
	// 当前ID卡号
	gucv_CardIDArray[0] = 0xE6;
	gucv_CardIDArray[1] = 0x0E;
	gucv_CardIDArray[2] = 0xD6;
	gucv_CardIDArray[3] = 0x86;
	gucv_CardIDArray[4] = 0xB8;
	
    // 多项式
	gucv_EEPolynomialArray[0] = EEPROM_Data_TableA[400];   // 0x15A
	gucv_EEPolynomialArray[1] = EEPROM_Data_TableA[401];   // 0x15B
	gucv_EEPolynomialArray[2] = EEPROM_Data_TableA[402];   // 0x15C
	gucv_EEPolynomialArray[3] = EEPROM_Data_TableA[403];   // 0x15D

    // 异或校验、和校验
    gucv_EEXorArray[0] = EEPROM_Data_TableA[404];     // 0x14B
    gucv_EEXorArray[1] = EEPROM_Data_TableA[406];     // 0x14C
    gucv_EESumArray[0] = EEPROM_Data_TableA[405];     // 0xAFC
    gucv_EESumArray[1] = EEPROM_Data_TableA[407];     // 0xAFD
	

	
	Fun_SelectMode_Analyze();

    //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
    

    return 0;
}