有做过RC523芯片读取二代身份证卡号的朋友么?
本帖最后由 andy93762 于 2018-4-17 11:05 编辑最近这个项目需要读取二代身份证卡号,一般用RC523或者FM17550芯片都可以实现,因为同时支持TYPEB和TYPEA协议。
TYPEA协议的IC卡很简单,一下子就调试通了,但是身份证就是死活没法识别出来,应该哪里没有配置好。第一步寻卡函数RCRequestTypeB就没法返回成功状态
有做过的朋友麻烦帮忙下,万分感谢。
初始化配置如下:
ClearBitMask(Status2Reg, 0x08);
WriteRawRC(ModeReg, 0x3F); // For 0xFFFF crc
WriteRawRC(TReloadRegL, 30);
WriteRawRC(TReloadRegH, 0);
WriteRawRC(TModeReg, 0x8D);
WriteRawRC(TPrescalerReg, 0x3E);
WriteRawRC(TxAutoReg, 0); // Force 100ASK = 0
WriteRawRC(GsNReg, 0xFa);
WriteRawRC(CWGsPReg, 0x3F);
WriteRawRC(ModGsPReg, 0x2a);
//WriteReg(ModGsPReg, 0x1A);
WriteRawRC(TxModeReg, 0x83);
WriteRawRC(BitFramingReg, 0x00);
WriteRawRC(AutoTestReg, 0x00);
WriteRawRC(TypeBReg, 0xc0);
WriteRawRC(ModWidthReg,0x68);
WriteRawRC(DemodReg, 0x5D);
WriteRawRC(RFCfgReg, 0x70);// 0x59 RegRxControl1//73,
WriteRawRC(RxModeReg, 0x83);
WriteRawRC(RxThresholdReg, 0x65);//0x75);
ClearBitMask(RxSelReg,0x3F); // TR0
SetBitMask(RxSelReg, 0x08);
ClearBitMask(TxModeReg, 0x80); // ?CRC
ClearBitMask(RxModeReg, 0x80);
ClearBitMask(Status2Reg, 0x08); // MFCrypto1On =0
PcdAntennaOn();
uint8_t RCRequestTypeB(void)//寻卡
{
uint8_t status;
unsigned int len;
uint8_t buf = {0};
buf = 0x05;
buf = 0x00;
buf = 0x00;
buf = 0x71;
buf = 0xFF;
status = PcdComMF522(PCD_TRANSCEIVE, buf, 5, buf, &len);
return status;
}
uint8_t RCATTRIBTypeB(u8 *PSN)
{
uint8_t status;
unsigned int len;
uint8_t buf = {0};
buf[ 0] = 0x1D; // 1d 00 00 00 00 00 08 01 08
buf[ 1] = 0x00; // PUPI
buf[ 2] = 0x00;
buf[ 3] = 0x00;
buf[ 4] = 0x00;
buf[ 5] = 0x00;
buf[ 6] = 0x08;
buf[ 7] = 0x01;
buf[ 8] = 0x08;
buf[ 9] = 0xF3; // crc
buf = 0x10;
//RC_CalulateCRC(buf, 9, &buf);
status = PcdComMF522(PCD_TRANSCEIVE, buf, 11, PSN, &len);
return status;
}
uint8_t RCGetUIDTypeB(u8 *pUID)
{
uint8_t status;
unsigned int len;
uint8_t buf = {0};
buf = 0x00;
buf = 0x36;
buf = 0x00;
buf = 0x00;
buf = 0x08;
buf = 0x57; // crc
buf = 0x44;
//RC_CalulateCRC(buf, 5, &buf);
status = PcdComMF522(PCD_TRANSCEIVE, buf, 7, buf, &len); // ??????????UID "....9000"
if (status == 0)
{
//memcpy(pUID, buf, 10);
}
return status;
}
charRC522_ReadID_B(unsigned char *PSN) //读写二代身份证函数
{
char i,status;
status = RCRequestTypeB();
if (status == MI_OK)
{
status = RCATTRIBTypeB(PSN);
if (status == MI_OK)
{
status = RCGetUIDTypeB(PSN);
if (status == MI_OK)
{
i++;
}
}
}
return status;
}
读身份证的话,没有公安部那个蓝盒子,只能读出来身份证的UID号码吧?
我现在手里的RC632的模块,就只能读出来UID号码。 redworlf007 发表于 2018-4-17 18:54
读身份证的话,没有公安部那个蓝盒子,只能读出来身份证的UID号码吧?
我现在手里的RC632的模块,就只能读 ...
我只要能读出身份证的UID就可以了啊。你的RC632和RC523程序兼容么? andy93762 发表于 2018-4-17 19:41
我只要能读出身份证的UID就可以了啊。你的RC632和RC523程序兼容么?
我是买的模块,用别人的模块,我没自己搞。 看看硬件有没有问题,特别是蛋疼的天线,还有谐振电容 天线要调试好,B卡没A卡好弄的。 本帖最后由 eiglxl 于 2018-4-18 22:08 编辑
天线很关键,A卡能读的天线,B卡不一定能读。 throg 发表于 2018-4-18 21:36
天线要调试好,B卡没A卡好弄的。
用示波器可以调好天线么? eiglxl 发表于 2018-4-18 22:04
天线很关键,A卡能读的天线,B卡不一定能读。
需要注意什么呢? eiglxl 发表于 2018-4-18 22:04
天线很关键,A卡能读的天线,B卡不一定能读。
硬件可以一样的吧?主要软件设置不同的参数 andy93762 发表于 2018-4-19 12:06
需要注意什么呢?
在A卡下天线的匹配要调到最佳状态,读的距离最远时(>6cm)再读B卡。 eiglxl 发表于 2018-4-19 13:08
在A卡下天线的匹配要调到最佳状态,读的距离最远时(>6cm)再读B卡。
要求这么高啊,那这个参数B卡能达到几米? andy93762 发表于 2018-4-19 15:07
要求这么高啊,那这个参数B卡能达到几米?
0.02米。{:titter:} andy93762 发表于 2018-4-19 15:07
要求这么高啊,那这个参数B卡能达到几米?
距离起码减半。 印象中论坛里有人发过程序。 mysky 发表于 2018-4-19 16:13
印象中论坛里有人发过程序。
是的,但是别人的程序拿过来也用不了 andy93762 发表于 2018-4-19 12:05
用示波器可以调好天线么?
示波器不好调吧,有频谱仪会好调点吧,我调遥控器的时候是用频谱仪看发射强度的。 建议楼主多用几个身份证,记得以前调试过,不是所有的都能读出来。 XUEPENGBIN 发表于 2018-4-20 03:55
建议楼主多用几个身份证,记得以前调试过,不是所有的都能读出来。
(引用自18楼)
目前也有反馈有的身份证读不到UID,身边的身份证测试没有问题,请问哪里可以买到这种类型的卡片呢?方便测试,谢谢
页:
[1]