📄 trh031v1.c
字号:
rf_write(0x1A, 0x08); // Reset Zero After Coll
}
else
{
anti_col =0;
for(i=byte_cnt; i<5; i++)
{
cid[i] += rf_read(0x02);
}
rf_write(0x0F, 0x00); // Reset Rx Align
rf_write(0x1A, 0x08); // Reset Zero After Coll
}
}
//for(i=0;i<5;i++) Tx(CID[i]);
rf_write(0x22, 0x0F); // RxCRCEn,TxCRCEn,ParityOdd,ParityEn
rf_write(0x09, 0x01); // Clear FIFO
rf_write(0x02, 0x93); // 93 -> FIFO
rf_write(0x02, 0x70); // 70 -> FIFO
for(i=0;i<5;i++)
{
rf_write(0x02, cid[i]); // Card ID -> FIFO
}
rf_write(0x01, 0x1E); // command =tranceive
delay_ms(100); // delay timer =1000us
}
// ***********************************************
// rf halt process
// if halt =return 1
// ***********************************************
void func_halt(void)
{
//rf_halt_process(); // command for halt
rf_write(0x09, 0x01); // control =fluash fifo
rf_write(0x02, 0x50); // tx data =0x50
rf_write(0x02, 0x00); // tx data =0x00
rf_write(0x22, 0x0F); // redundance =rxCRC,txCRC,ParityOdd,ParytyEn
rf_write(0x01, 0x1A); // command =transmit only
delay_10us(t_rec); // delay time =500us
//if (rf_read(0x04) == 0x00) tx_buf[0]=MI_OK;
//else tx_buf[0]=MI_HALT_ERR;
rf_write(0x01, 0x00); // command =idle
//return 1;
}
// ***********************************************
// rf select acknoledge
// if good =return 1
// if error =return 0
// ***********************************************
char func_sak(void)
{
// SAK(Select Acknowledge) 犬牢, Err Check
if ((rf_read(0x04) ==0x01) & !(rf_read(0x0A) & 0x3F))
{
uart_puts("Select ACK = ");
uart_hex(rf_read(0x02));
uart_cr();
rf_write(0x22, 0x0F); // redundance =rxCRC,txCRC,ParityOdd
func_halt(); // stop transmit
return 1; // good
}
else
{
uart_fail("Anti collision");
rf_write(0x01, 0x00); // command =idle
return 0; // error
}
}
// ***********************************************
// ISO 14443B setup
// ***********************************************
void rf_14443b_set(void)
{
rf_write(0x26, 0x02); // test_out pin =Manchester coded signal
rf_write(0x11, 0x4B);
rf_write(0x12, 0x3f);
rf_write(0x13, 0x03);
rf_write(0x19, 0x03); //Gain
rf_write(0x14, 0x20); // Coder B Set
rf_write(0x1A, 0x18); // Decoder B Set.
rf_write(0x22, 0x2c); // CRC Enable
rf_write(0x07, 0x3f); // IRQ Clear
rf_write(0x0a, 0x00); // Error Clear
rf_write(0x09, 0x01); // Error Clear
rf_write(0x17, 0x27); // SOF, EOF Width Change
rf_write(0x21, 0x0B); // RXWait Change
rf_write(0x0A, 0x00); // RXWait Change
rf_write(0x1C, 0x18); //
if (auto_mode != 0xAF)
{
uart_puts("14443B register set !!");
uart_cr();
}
}
// ***********************************************
// ISO 14443B execute
// ***********************************************
void rf_reqb_exec(void)
{
char len;
char i;
rf_write(0x09, 0x01);
rf_write(0x02, 0x05);
rf_write(0x02, 0x00);
rf_write(0x02, 0x00);
rf_write(0x01, 0x1E);
delay_10us(t_rec); // delay time =500us
//Display_SFR();
len = rf_read(0x04);
if ((len ==0x0C) && ((rf_read(0x0A) & 0x08) !=0x08))
{
suma = 0x00;
for(i=0; i<0x05; i++)
{
cid_buf[i] = rf_read(0x02);
suma = suma | cid_buf[i];
};
if (suma ==0x00)
{
return;
}
if (cid_buf[1] ==0xFF && cid_buf[2] ==0xFF
&& cid_buf[3] ==0xFF && cid_buf[4] ==0xFF)
{
return;
}
uart_puts("14443B ");
uart_cid5();
rf_write(0x01, 0x00);
return;
}
else // UID Read Fail
{
uart_fail("14443B ID");
rf_write(0x01, 0x00);
return;
}
}
// ***********************************************
// ISO 14443B auto execute
// ***********************************************
void rf_reqb_auto(void)
{
char len;
char i;
rf_write(0x09, 0x01);
rf_write(0x02, 0x05);
rf_write(0x02, 0x00);
rf_write(0x02, 0x00);
rf_write(0x01, 0x1E);
delay_10us(t_rec); // delay time =500us
//Display_SFR();
len = rf_read(0x04);
if (rf_read(0x0A) !=0x00)
{
rf_write(0x01, 0x00);
return;
}
else if ((len ==0x0C) && ((rf_read(0x0A) & 0x08) !=0x08))
{
suma =0x00;
for(i=0; i<0x05; i++)
{
cid_buf[i] = rf_read(0x02);
suma = suma | cid_buf[i];
}
if (suma ==0x00)
{
return;
}
if (cid_buf[1] ==0xFF && cid_buf[2] ==0xFF
&& cid_buf[3] ==0xFF && cid_buf[4] ==0xFF)
{
return;
}
uart_puts("14443B ");
uart_cid5();
rf_write(0x01, 0x00);
return;
}
else // UID Read Fail
{
uart_fail("14443B ID");
rf_write(0x01, 0x00);
return;
}
}
// ***********************************************
// ISO 15693 setup
// ***********************************************
void rf_15693_set(void)
{
rf_write(0x26, 0x02); // test_out pin =Manchester coded signal
rf_write(0x11, 0x5B); // TXCONTROL
rf_write(0x12, 0x3F);
rf_write(0x19, 0x03); // rxcontrol1
rf_write(0x1C, 0x18); // rxthreshold, for analog
rf_write(0x22, 0x6C); // 2C -> 6C Change
rf_write(0x0a, 0x00); // Error Clear
rf_write(0x21, 0x08); // RXWait Change
rf_write(0x14, 0x2F);
rf_write(0x1A, 0x10);
rf_write(0x09, 0x01);
rf_write(0x07, 0x3f); // IRQ Clear
rf_write(0x0a, 0x00); // Error Clear
if (auto_mode != 0xAF)
{
uart_puts("15693 register set !!");
uart_cr();
}
}
// ***********************************************
// ISO 15693 execute
// ***********************************************
void rf_15693_exec(void)
{
char i;
char t;
rf_write(0x09, 0x01);
rf_write(0x02, 0x36);
rf_write(0x02, 0x01);
rf_write(0x02, 0x00);
rf_write(0x02, 0x00);
rf_write(0x01, 0x1E);
delay_10us(t_rec); // delay time =500us
length =rf_read(0x04);
//**************************** For Error State Escape
t =rf_read(0x01);
if (t == 0x1E)
{
rf_write(0x01, 0x00);
return;
}
t =rf_read(0x07);
if (t ==0x31)
{
return;
}
//**************************** For Error State Escape
if (rf_read(0x0A) !=0x00)
{
uart_fail("15693 ");
rf_write(0x01, 0x00);
return;
}
else if(length ==0x0C)
{
suma =0x00;
for(i=0; i<0x05; i++)
{
cid_buf[i] =rf_read(0x02); //SUMA = SUMA | CIDBuf[i];
}
uart_puts("15693 ");
uart_cid5();
rf_write(0x01, 0x00);
return;
}
else // UID Read Fail
{
uart_fail("15693 ID");
rf_write(0x01, 0x00);
return;
}
}
// ***********************************************
//
// ***********************************************
void rf_15693_mask2(void)
{
char i;
char t;
rf_write(0x09, 0x01);
rf_write(0x02, 0x36);
rf_write(0x02, 0x01);
rf_write(0x02, 0x00);
rf_write(0x02, 0x08);
rf_write(0x02, bbb);
rf_write(0x01, 0x1E);
// printf("B = %02X \n ", (int)BBB);
delay_10us(t_rec); // delay time =500us
rf_write(0x01, 0x00);
t =rf_read(0x01);
if (t == 0x1E)
{
rf_write(0x01, 0x00);
return;
}
t = rf_read(0x07);
if (t ==0x31)
{
return;
}
length =rf_read(0x04);
if(length ==0x0C)
{
for(i=0; i<0x05; i++)
{
cid_buf[i] =rf_read(0x02);
}
uart_puts("15693 ");
uart_cid5();
return;
}
else if (length ==0x00) // UID Read Fail
{
uart_fail("15693 ID"); // Fail Indicator
return;
}
else if (length ==0x02) // Collision Detected// Collision Detected
{
uart_puts("3rd collision error detected $$$$$ = ");
uart_cr();
// ========================================
return;
}
}
// ***********************************************
//
// ***********************************************
void rf_second_collision(void)
{
char j;
//b = mask1;
for (j=0; j<16; j=j+1)
{
//Slot = i;
mask2 = j;
//printf("B = %02X \n ", (int)BBB);
mask2 = (mask2 << 4);
b =(mask1 | mask2);
//Send_EOF();
bbb =b;
//printf("Mask = %02X j = %02X Mask2 = %02X B = %02X \n ", (int)Mask, (int)j, (int)Mask2, (int)BBB);
rf_15693_mask2();
}
//printf("======================================= \n ");
}
// ***********************************************
//
// ***********************************************
void rf_15693_mask(void)
{
char i;
char t;
rf_write(0x09, 0x01);
rf_write(0x02, 0x36);
rf_write(0x02, 0x01);
rf_write(0x02, 0x00);
rf_write(0x02, 0x04);
rf_write(0x02, mask1);
rf_write(0x01, 0x1E);
delay_10us(t_rec); // delay time =500us
//**************************** For Error State Escape
t =rf_read(0x01);
if (t ==0x1E)
{
rf_write(0x01, 0x00);
return;
}
t =rf_read(0x07);
if (t == 0x31)
{
return;
}
//**************************** For Error State Escape
if (rf_read(0x0A) != 0x00)
{
rf_write(0x01, 0x00);
//printf("15693 Error = \n ");
return;
}
length =rf_read(0x04);
if (length ==0x0C)
{
for(i=0; i <0x05; i++)
{
cid_buf[i] = rf_read(0x02);
}
uart_puts("15693 ");
uart_cid5();
return;
}
else if (length ==0x00) // UID Read Fail
{
return;
}
else if (length ==0x02 || length ==0x03) // Collision Detected
{
uart_puts("Collision error detected !!");
uart_cr();
rf_second_collision();
return;
}
}
// ***********************************************
//
// ***********************************************
void rf_15693_auto(void)
{
char i;
mask1 =0;
for (i=0; i<16; i=i+1)
{
mask1 = i;
rf_15693_mask();
}
//printf("======================================= \n ");
}
// ***********************************************
//
// ***********************************************
void rf_send_eof(void)
{
rf_write(0x09, 0x01);
rf_write(0x01, 0x1E);
delay_10us(t_idl); // delay time =100us
rf_write(0x01, 0x00);
}
// ***********************************************
//
// ***********************************************
void rf_fifo_check(void)
{
char len;
char i;
len =rf_read(0x04);
if (rf_read(0x0A) !=0x00)
{
rf_write(0x01, 0x00);
return;
}
else if(len ==0x0A)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -