📄 iso14443a.c
字号:
/***********************************************************
* Company : 3ALOGICS *
************************************************************/
#include <stdio.h>
#include "common.h"
#include "base.h"
void AREG_Set(void)
{
Write(0x31, 0x00); //CWConduct
Write(0x11, 0x5B); //CWConduct
Write(0x12, 0x3F); //CWConduct
Write(0x19, 0x01); //rxcontrol1 0111_0011
Write(0x1C, 0x18); //rxthreshold, for analog
Write(0x15, 0x10); //Modwidth(AType, Default : 13)
Write(0x14, 0x01); // Coder A Set.
Write(0x1A, 0x08); // DeCoder A Set.
Write(0x21, 0x06); // RxWait Set.
if (AutoMode != 0xAF) {
printf("A Type Register Set !! \n " );
}
Write(0x1E, 0x81);
// Write(0x1F, 0x85); // AThresh high/ Athersh low
// Write(0x22, 0x03); //ChannelRedundancy |0|0|CRC3309|CRC8|RxCRCEn|TxCRCEn|ParityOdd|ParityEn|
Write(0x0a, 0x00); //Error Clear
}
void Exec_REQA(void)
{
BYTE i;
//Write(0x31, 0x01); //Option Select A/B Type
Write(0x0F, 0x07); //BITFRAME |0| RxAlign | 0 | TxLastBits |
Write(0x22, 0x03); //ChannelRedundancy |0|0|CRC3309|CRC8|RxCRCEn|TxCRCEn|ParityOdd|ParityEn|
Write(0x09, 0x01); //Control |0|0|StandBy|PowerDown|Crypto1On|TStopNow|TStartNow|FlushFIFO|
Write(0x02, 0x26); //transmit data
Write(0x01, 0x1E); //Transceive
DelayIdleTime(4);
if( Read(0x04) == 0x02 ) // ATQA Response O.K
{
for(i=0; i<2; i++) CIDBuf[i] = Read(0x02);
printf("REQA O.K!! = %02X %02X \n ", (int)CIDBuf[0], (int)CIDBuf[1] );
LCDType = 1;
DisplayLCD();
}
else { // No ATQA Response
printf("No Response !! \n " );
Write(0x01, 0x00);
return;
}
}
void Exec_RDID(void)
{
BYTE i;
//Write(0x31, 0x01); //Option Select A/B Type
Write(0x1A, 0x28); // ZeroAfterColl activation
Write(0x09, 0x01); // Clear FIFO
Write(0x02, 0x93); // 93 -> FIFO
Write(0x02, 0x20); // NVB -> FIFO
Write(0x01, 0x1E); // Transceive
DelayIdleTime(5);
//Display_SFR();
if( Read(0x04) == 0x05 ) { // UID Read O.K
//printf("ERR = %02X \n ", (int)Read(0x0A));
SUMA = 0x00;
for(i=0; i<0x05; i++) {
CIDBuf[i] = Read(0x02);
SUMA = SUMA | CIDBuf[i];
};
if (SUMA == 0x00) { return; };
printf("A Type ID = %02X %02X %02X %02X %02X \n ",
(int)CIDBuf[0], (int)CIDBuf[1], (int)CIDBuf[2], (int)CIDBuf[3], (int)CIDBuf[4]);
LCDType = 2;
DisplayLCD();
Write(0x01, 0x00);
return;
}
else { // UID Read Fail
printf("ID Read Fail !! \n " ) ; // Fail Indicator
Write(0x01, 0x00);
return;
}
}
void Exec_REQA_RDID(void)
{
BYTE i;
Write(0x0F, 0x07); //BITFRAME |0| RxAlign | 0 | TxLastBits |
Write(0x22, 0x03); //ChannelRedundancy |0|0|CRC3309|CRC8|RxCRCEn|TxCRCEn|ParityOdd|ParityEn|
Write(0x09, 0x01); //Control |0|0|StandBy|PowerDown|Crypto1On|TStopNow|TStartNow|FlushFIFO|
Write(0x02, 0x26); //transmit data
Write(0x01, 0x1E); //Transceive
DelayIdleTime(1);
if( Read(0x04) == 0x02 ) // ATQA Response O.K
{
Write(0x1A, 0x28); // ZeroAfterColl activation
Write(0x09, 0x01); // Clear FIFO
Write(0x02, 0x93); // 93 -> FIFO
Write(0x02, 0x20); // NVB -> FIFO
Write(0x01, 0x1E); // Transceive
DelayIdleTime(2);
if( Read(0x04) == 0x05 ) { // UID Read O.K
for(i=0; i<5; i++) CIDBuf[i] = Read(0x02);
printf("A Type ID = %02X %02X %02X %02X %02X \n " ,
(int)CIDBuf[0], (int)CIDBuf[1], (int)CIDBuf[2], (int)CIDBuf[3], (int)CIDBuf[4]);
LCDType = 2;
DisplayLCD();
//printf("ERR = %02X \n ", (int)Read(0x0A));
Write(0x01, 0x00);
return;
}
else { // UID Read Fail
printf("ID Read Fail !! \n " ) ; // Fail Indicator
Write(0x01, 0x00);
return;
}
}
else { // No ATQA Response
printf("No Response !! \n " );
Write(0x01, 0x00);
return;
}
}
void Exec_REQA_RDID_Auto(void)
{
BYTE i;
Write(0x0F, 0x07); //BITFRAME |0| RxAlign | 0 | TxLastBits |
Write(0x22, 0x03); //ChannelRedundancy |0|0|CRC3309|CRC8|RxCRCEn|TxCRCEn|ParityOdd|ParityEn|
Write(0x09, 0x01); //Control |0|0|StandBy|PowerDown|Crypto1On|TStopNow|TStartNow|FlushFIFO|
Write(0x02, 0x26); //transmit data
Write(0x01, 0x1E); //Transceive
DelayIdleTime(1);
if( Read(0x04) == 0x02 ) // ATQA Response O.K
{
Write(0x1A, 0x28); // ZeroAfterColl activation
Write(0x09, 0x01); // Clear FIFO
Write(0x02, 0x93); // 93 -> FIFO
Write(0x02, 0x20); // NVB -> FIFO
Write(0x01, 0x1E); // Transceive
DelayIdleTime(2);
if (Read(0x0A) != 0x00)
{
Write(0x01, 0x00);
return;
}
else if( Read(0x04) == 0x05 ) { // UID Read O.K
for(i=0; i<5; i++) CIDBuf[i] = Read(0x02);
printf("A Type ID = %02X %02X %02X %02X %02X \n " ,
(int)CIDBuf[0], (int)CIDBuf[1], (int)CIDBuf[2], (int)CIDBuf[3], (int)CIDBuf[4]);
LCDType = 2;
DisplayLCD();
Write(0x01, 0x00);
return;
}
else { // UID Read Fail
//printf("ID Read Fail !! \n " ) ; // Fail Indicator
Write(0x01, 0x00);
return;
}
}
else { // No ATQA Response
//printf("No Response !! \n " );
Write(0x01, 0x00);
return;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -