RC523读身份证UID问题
录入:edatop.com 阅读:
我读身份证id第一步就不能通过,
寄存器配置如下:
ClearBitMask(Status2Reg, 0x08);
//write_reg(ControlReg, 0x10);
write_reg(ModeReg, 0x3F); //0x3f // For 0xFFFF crc
write_reg(TReloadRegL, 30);
write_reg(TReloadRegH, 0);
write_reg(TModeReg, 0x8D);
write_reg(TPrescalerReg, 0x3E);
write_reg(TxASKReg, 0); // Force 100ASK = 0
// ------------------------- 发送部分设置 ------------------------------
write_reg(GsNReg, 0xF8); // TX输出电导设置
write_reg(CWGsCfgReg, 0x3F);
write_reg(ModGsCfgReg, 0x08); //0x0F // 调制指数设置RegModGsp,, TYPEB ModConductance 0x1A
write_reg(TxModeReg, 0x03); // 编码器设置,106kbps,14443B
write_reg(BitFramingReg, 0x00); // 调制脉宽,0x13->2.95us RegTypeBFraming ,,TYPEB
write_reg(AutoTestReg, 0x00);
// ------------------------- 接收部分设置 ------------------------------
// 低二位为接收增益,
// 00,10,20,30,40,50,60,70
// 18,23,18,23,33,38,43,48dB
write_reg(RFCfgReg, 0x70); //0x73 // 0x59 RegRxControl1//73,
write_reg(RxModeReg, 0x03); // 解码器设置,,106kbps,14443B
write_reg(RxThresholdReg, 0x75); //0x75 // 高四位->最小信号强度,低三位->冲突最小信号强度,最大0xF7
// ------------------------- TYPEB特征参数设定 -------------------------
ClearBitMask(RxSelReg,0x3F); // TR0
SetBitMask(RxSelReg, 0x08);
ClearBitMask(TxModeReg, 0x80); // 无CRC,无奇偶校验
ClearBitMask(RxModeReg, 0x80);
ClearBitMask(Status2Reg, 0x08); // MFCrypto1On =0
// ------------------------- 天线开关设置 ------------------------------
Antenna(RC_ANTENNA_OFF);
Delay(10);
Antenna(RC_ANTENNA_ON);
寻卡过程如下:
buf[0] = 0x05;
buf[1] = 0x00;
buf[2] = 0x00;
buf[3] = 0x71; // crc
buf[4] = 0xFF;
// CalulateCRC(buf, 3, &buf[3]);
status = PcdComMF522(PCD_TRANSCEIVE, buf, 5, buf, &len);
//******************************************************************/
//功 能:通过RC522和ISO14443卡通讯
//参数说明:Command[IN]:RC522命令字
// pInData[IN]:通过RC522发送到卡片的数据
// InLenByte[IN]:发送数据的字节长度
// pOutData[OUT]:接收到的卡片返回数据
// *pOutLenBit[OUT]:返回数据的位长度
//******************************************************************/
char PcdComMF522(unsigned char Command ,unsigned char *pInData ,
unsigned char InLenByte,unsigned char *pOutData,
unsigned int *pOutLenBit )
{
char status = MI_ERR ;
unsigned char irqEn = 0x00 ;
unsigned char waitFor = 0x00 ;
unsigned char lastBits ;
unsigned char n ;
unsigned int i ;
u8 errreg=0;
switch (Command)
{
case PCD_AUTHENT:
irqEn = 0x12 ;
waitFor = 0x10 ;
break ;
case PCD_TRANSCEIVE:
irqEn = 0x77 ;
waitFor = 0x30 ;
break ;
default:
break ;
}
write_reg(ComIEnReg,irqEn|0x80) ; //
ClearBitMask(ComIrqReg,0x80) ;
write_reg(CommandReg,PCD_IDLE) ;
SetBitMask(FIFOLevelReg,0x80) ; // 清空FIFO
for(i=0; i<InLenByte; i++)
write_reg(FIFODataReg,pInData) ; // 数据写入FIFO
write_reg(CommandReg, Command) ; // 命令写入命令寄存器
if(Command == PCD_TRANSCEIVE)
SetBitMask(BitFramingReg,0x80) ; // 开始发送
i = 6000 ; //根据时钟频率调整,操作M1卡最大等待时间25ms
do
{
n = read_reg(ComIrqReg) ;
i-- ;
}
while((i!=0)&&!(n&0x01)&&!(n&waitFor)) ;
ClearBitMask(BitFramingReg,0x80) ;
if(i!=0)
{
errreg = read_reg(ErrorReg);
printf("read_reg(ErrorReg):0x%x\r\n",errreg);
if(!(errreg&0x1B))
{
status = MI_OK ;
if (n&irqEn&0x01)
status = MI_NOTAGERR ;
if(Command==PCD_TRANSCEIVE)
{
n = read_reg(FIFOLevelReg) ;
lastBits = read_reg(ControlReg)&0x07 ;
if(lastBits)
*pOutLenBit = (n-1)*8 + lastBits ;
else
*pOutLenBit = n*8 ;
if(n==0)
n = 1 ;
if(n>MAXRLEN)
n = MAXRLEN ;
for (i=0; i<n; i++)
pOutData = read_reg(FIFODataReg) ;
}
}
else
status = MI_ERR ;
}
SetBitMask(ControlReg,0x80) ;// stop timer now
write_reg(CommandReg,PCD_IDLE) ;
return status;
}
一直无法识别身份证,有没有哪位大神可以指导下,谢谢
寄存器配置如下:
ClearBitMask(Status2Reg, 0x08);
//write_reg(ControlReg, 0x10);
write_reg(ModeReg, 0x3F); //0x3f // For 0xFFFF crc
write_reg(TReloadRegL, 30);
write_reg(TReloadRegH, 0);
write_reg(TModeReg, 0x8D);
write_reg(TPrescalerReg, 0x3E);
write_reg(TxASKReg, 0); // Force 100ASK = 0
// ------------------------- 发送部分设置 ------------------------------
write_reg(GsNReg, 0xF8); // TX输出电导设置
write_reg(CWGsCfgReg, 0x3F);
write_reg(ModGsCfgReg, 0x08); //0x0F // 调制指数设置RegModGsp,, TYPEB ModConductance 0x1A
write_reg(TxModeReg, 0x03); // 编码器设置,106kbps,14443B
write_reg(BitFramingReg, 0x00); // 调制脉宽,0x13->2.95us RegTypeBFraming ,,TYPEB
write_reg(AutoTestReg, 0x00);
// ------------------------- 接收部分设置 ------------------------------
// 低二位为接收增益,
// 00,10,20,30,40,50,60,70
// 18,23,18,23,33,38,43,48dB
write_reg(RFCfgReg, 0x70); //0x73 // 0x59 RegRxControl1//73,
write_reg(RxModeReg, 0x03); // 解码器设置,,106kbps,14443B
write_reg(RxThresholdReg, 0x75); //0x75 // 高四位->最小信号强度,低三位->冲突最小信号强度,最大0xF7
// ------------------------- TYPEB特征参数设定 -------------------------
ClearBitMask(RxSelReg,0x3F); // TR0
SetBitMask(RxSelReg, 0x08);
ClearBitMask(TxModeReg, 0x80); // 无CRC,无奇偶校验
ClearBitMask(RxModeReg, 0x80);
ClearBitMask(Status2Reg, 0x08); // MFCrypto1On =0
// ------------------------- 天线开关设置 ------------------------------
Antenna(RC_ANTENNA_OFF);
Delay(10);
Antenna(RC_ANTENNA_ON);
寻卡过程如下:
buf[0] = 0x05;
buf[1] = 0x00;
buf[2] = 0x00;
buf[3] = 0x71; // crc
buf[4] = 0xFF;
// CalulateCRC(buf, 3, &buf[3]);
status = PcdComMF522(PCD_TRANSCEIVE, buf, 5, buf, &len);
//******************************************************************/
//功 能:通过RC522和ISO14443卡通讯
//参数说明:Command[IN]:RC522命令字
// pInData[IN]:通过RC522发送到卡片的数据
// InLenByte[IN]:发送数据的字节长度
// pOutData[OUT]:接收到的卡片返回数据
// *pOutLenBit[OUT]:返回数据的位长度
//******************************************************************/
char PcdComMF522(unsigned char Command ,unsigned char *pInData ,
unsigned char InLenByte,unsigned char *pOutData,
unsigned int *pOutLenBit )
{
char status = MI_ERR ;
unsigned char irqEn = 0x00 ;
unsigned char waitFor = 0x00 ;
unsigned char lastBits ;
unsigned char n ;
unsigned int i ;
u8 errreg=0;
switch (Command)
{
case PCD_AUTHENT:
irqEn = 0x12 ;
waitFor = 0x10 ;
break ;
case PCD_TRANSCEIVE:
irqEn = 0x77 ;
waitFor = 0x30 ;
break ;
default:
break ;
}
write_reg(ComIEnReg,irqEn|0x80) ; //
ClearBitMask(ComIrqReg,0x80) ;
write_reg(CommandReg,PCD_IDLE) ;
SetBitMask(FIFOLevelReg,0x80) ; // 清空FIFO
for(i=0; i<InLenByte; i++)
write_reg(FIFODataReg,pInData) ; // 数据写入FIFO
write_reg(CommandReg, Command) ; // 命令写入命令寄存器
if(Command == PCD_TRANSCEIVE)
SetBitMask(BitFramingReg,0x80) ; // 开始发送
i = 6000 ; //根据时钟频率调整,操作M1卡最大等待时间25ms
do
{
n = read_reg(ComIrqReg) ;
i-- ;
}
while((i!=0)&&!(n&0x01)&&!(n&waitFor)) ;
ClearBitMask(BitFramingReg,0x80) ;
if(i!=0)
{
errreg = read_reg(ErrorReg);
printf("read_reg(ErrorReg):0x%x\r\n",errreg);
if(!(errreg&0x1B))
{
status = MI_OK ;
if (n&irqEn&0x01)
status = MI_NOTAGERR ;
if(Command==PCD_TRANSCEIVE)
{
n = read_reg(FIFOLevelReg) ;
lastBits = read_reg(ControlReg)&0x07 ;
if(lastBits)
*pOutLenBit = (n-1)*8 + lastBits ;
else
*pOutLenBit = n*8 ;
if(n==0)
n = 1 ;
if(n>MAXRLEN)
n = MAXRLEN ;
for (i=0; i<n; i++)
pOutData = read_reg(FIFODataReg) ;
}
}
else
status = MI_ERR ;
}
SetBitMask(ControlReg,0x80) ;// stop timer now
write_reg(CommandReg,PCD_IDLE) ;
return status;
}
一直无法识别身份证,有没有哪位大神可以指导下,谢谢
读s50卡倒是没问题
我也是 ,返回值不对,你解决了吗
申明:网友回复良莠不齐,仅供参考。如需专业解答,请学习本站推出的微波射频专业培训课程。
上一篇:天线的增益从何而来
下一篇:si4463同步字配置问题
闂傚倸鍊搁崐宄懊归崶顒夋晪鐟滃繘骞戦姀銈呯疀妞ゆ棁妫勬惔濠囨⒑瑜版帒浜伴柛鐘冲浮瀹曟垿骞橀幇浣瑰兊濡炪倖鍔戦崹鍦矈椤曗偓濮婃椽妫冨☉娆樻闂佺ǹ锕ら…鐑界嵁閹达箑绀嬫い鎺戝€婚幊婵嗩渻閵堝棛澧痪鏉跨Т閳诲秵绻濋崶銊㈡嫽婵炴挻鍩冮崑鎾寸箾娴e啿娲﹂弲顒勭叓閸ャ劎鈽夐柣鎺戠仛閵囧嫰骞掗幋婵愪患闂佽棄鍟伴崰鏍蓟閺囥垹閱囨繝鍨姈鏁堥梻浣呵归鍐礉瀹ュ桅闁告洦鍨伴崘鈧梺闈涒康婵″洤鈻撻妶鍡欑瘈闁冲皝鍋撻柛鏇ㄥ墰椤︿即姊洪崫鍕効缂傚秳绶氶悰顔嘉熼崗鐓庢瀭闂佸憡娲﹂崢褰掑焵椤掆偓閿曨亜顫忓ú顏呭仭闁哄瀵т簺婵$偑鍊栭崹鐢杆囬悽绋课ュù锝呭濞笺劑鏌嶈閸撶喖鐛崘顔碱潊闁靛牆鎳庣粣娑欑節閻㈤潧孝閻庢凹鍘奸埢鎾活敊閸撗咃紳闂佺ǹ鏈懝楣冨焵椤掑嫷妫戠紒顔肩墛缁楃喖鍩€椤掑嫨鈧線寮介鐐殿吅闂佹寧娲嶉崑鎾剁磼閻欌偓閸ㄥ爼寮婚妸鈺傚亞闁稿本绋戦锟� | More...
闂傚倸鍊搁崐宄懊归崶顒夋晪鐟滃繘骞戦姀銈呯疀妞ゆ棁妫勬惔濠囨⒑瑜版帒浜伴柛鐘冲浮瀹曟垿骞橀幇浣瑰兊濡炪倖鍔戦崹鍦矈椤曗偓濮婃椽妫冨☉娆樻闂佺ǹ锕ら…鐑界嵁閹达箑绀嬫い鎺戝€婚幊婵嗩渻閵堝棛澧痪鏉跨Т閳诲秵绻濋崶銊㈡嫽婵炴挻鍩冮崑鎾寸箾娴e啿娲﹂弲顒勭叓閸ャ劎鈽夐柣鎺戠仛閵囧嫰骞掗幋婵愪患闂佽棄鍟伴崰鏍蓟閺囥垹閱囨繝鍨姈鏁堥梻浣呵归鍐礉瀹ュ桅闁告洦鍨伴崘鈧梺闈涱槶閸庮噣宕戦幘璇插唨妞ゆ劗鍠庢禍鐐叏濡厧浜鹃悗姘炬嫹濠电姷鏁告慨鐑藉极閹间礁纾婚柣鎰惈閸ㄥ倿鏌涢锝嗙缂佺姴缍婇弻宥夊传閸曨剙娅i梺绋胯閸旀垿寮婚敐澶婄疀闂傚牊绋戦埛鎺戔攽閻愯尙澧旂紒顔界懇瀵濡搁埡鍌氫簽闂佺ǹ鏈粙鎴︻敂閿燂拷闂傚倸鍊搁崐鎼佸磹閻戣姤鍤勯柛鎾茬劍閸忔粓鏌涢锝嗙闁汇倗鍋撶换婵嬫濞戝崬鍓梺閫炲苯鍘搁柣鎺炲閹广垹鈹戠€n亞鍊為梺鑲┣归悘姘枍閹剧粯鈷掑ù锝呮啞閸熺偞绻涚拠褏鐣电€规洘绮岄埥澶愬閳锯偓閹稿啴姊洪崨濠冨闁稿繑绋撻幑銏ゅ幢濞戞瑧鍘梺鍓插亝缁诲啴宕崇憴鍕╀簻闊洦鎸鹃幗鐘睬庨崶褝韬い銏℃礋椤㈡鎷呴崜韫处
闂傚倸鍊搁崐宄懊归崶顒夋晪鐟滃繘骞戦姀銈呯疀妞ゆ棁妫勬惔濠囨⒑瑜版帒浜伴柛鐘冲浮瀹曟垿骞橀幇浣瑰兊濡炪倖鍔戦崹鍦矈椤曗偓濮婃椽妫冨☉娆樻闂佺ǹ锕ら悘婵嬫偩闁垮闄勭紒瀣仢瀹撳棝姊虹紒妯哄妞ゆ梹鐗曞嵄婵炲樊浜濋悡鐔兼煟閺傛寧鎲搁柣顓炶嫰椤儻顦虫い銊ョ墦瀵偊顢氶埀顒勭嵁閹烘绫嶉柍褜鍓熷鍐测堪閸喓鍘甸梺璇″灡濠㈡ǹ顣块梻浣虹帛閹搁箖宕伴幇鏉课﹂柛鏇ㄥ灱閺佸啯銇勯幇鈺佺仼缂佺姾宕电槐鎾存媴閻ゎ垰鍘¢梺绋跨箲閿曘垹顕f繝姘櫜濠㈣埖蓱閺咃綁姊虹紒妯哄缂佷焦鎸抽獮鎰板礃椤旇В鎷洪梺鑽ゅ枑濠㈡ê危缂佹ǜ浜滈柟瀛樼箥濡偓闂佺粯渚楅崳锝夌嵁鐎n喗鏅濋柍褜鍓涚划璇测槈閵忊檧鎷婚梺鍓插亞閸犳捇鍩婇弴銏$厱濠电姴鍊块崣鍕叏婵犲嫮甯涢柟宄版嚇閹煎綊鐛惔鎾充壕濠电姴娲﹂悡娑㈡煕濞戝崬鏋ょ紒鐘靛仱閺屾洟宕遍弴鐘插缂備胶绮换鍫濈暦閸洘鍤嬮柛顭戝亝閻濓箓姊婚崒娆戭槮闁规祴鈧秮娲晝閸屾艾鍋嶉梺浼欑到婢跺洭宕戦幘鎰佹僵妞ゆ挾鍋涢幗鐢告⒑閸濆嫭婀伴柣鈺婂灦閻涱喖螣娓氼垱瀵岄柣鐘叉穿瀵挻绔熼弴銏♀拻濞达絽鎲¢幆鍫ユ煟椤撶儐妯€妤犵偛绻橀弫鎾绘晸閿燂拷
闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗ù锝堟缁€濠傗攽閻樻彃鈧绱撳杈ㄥ枑闁哄啫鐗勯埀顑跨窔瀵粙顢橀悙鑼垛偓鍨攽閿涘嫬浠х紒顕呭灦瀵偊鎮╃紒妯锋嫼闂備緡鍋嗛崑娑㈡嚐椤栨稒娅犳い鏂款潟娴滄粍銇勯幘璺轰沪闁稿鍎抽埀顒冾潐濞叉粓骞婇幘璇茬叀濠㈣泛艌閺嬪酣鏌熼柇锕€鏋涚紒鎻掓健濮婂宕掑▎鎴濆闂佽鍠栭悥鐓庣暦閹版澘鍗抽柣蹇氼嚙缂嶅﹪骞冨⿰鍫熷癄濠㈣泛鐭堥崬鐢告⒑鐠囨彃鍤辩紓宥呮瀹曚即寮介銈勭瑝闂佸搫琚崕鏌ユ偂濞嗗緷褰掓偂鎼达絾鎲煎┑鐐村毆閸ャ劎鍘靛銈嗘瀹曠數绮i弮鈧幈銊︾節閸涱噮浠╅梺鍛婄墬閻楃姴顕i幘顔藉亜闁告縿鍎辩徊鍨攽閿涘嫬浜奸柛濠冨灴瀹曠銇愰幒鎾存珖濡炪倕绻愰悧鍕焵椤戣法顦﹂柍璇查叄楠炴ê鐣烽崶鑸敌у┑锛勫亼閸婃牠骞愭ィ鍐ㄧ獥閹兼番鍔嶉崑鐔访归悡搴f憼闁抽攱鍨块弻娑樷槈濮楀牊鏁鹃柣搴$仛閻熲晠寮诲鍫闂佸憡鎸鹃崰搴敋閿濆棛绡€婵﹩鍘藉▍銏ゆ⒑鐠恒劌娅愰柟鍑ゆ嫹
濠电姷鏁告慨鐑藉极閸涘﹥鍙忓ù鍏兼綑閸ㄥ倻鎲搁悧鍫濈瑲闁稿﹤鐖奸弻娑㈩敃閻樻彃濮庨梺姹囧€楅崑鎾舵崲濠靛顥堟繛鎴濆船閸撲即姊洪崨濠呭缂傚秴锕悰顕€寮介妸锔剧Ф闂佸憡鎸嗛崥閿嬪灦缁绘繂鈻撻崹顔句哗闂侀潧鐗婇幃鍌氼嚕婵犳碍鍋勯柣鎴灻弸鍌炴⒑閸涘﹥澶勯柛瀣椤ゅ倿姊婚崒娆戭槮闁硅绻濆畷娲礃椤旇偐锛涢梺鐟板⒔缁垶鎮¢悢鐓庣婵烇綆鍓欓埀顑惧€曞玻鍧楀箛閻楀牏鍘靛銈嗘閸嬫劙宕洪敐鍥e亾鐟欏嫭绀冩繛鑼枛閻涱喗鎯旈妸锕€鐧勬繝銏f硾閼活垶鐛幒妤佲拻濞达絿枪閹垹绱掓担瑙勫唉鐎殿喗褰冮オ浼村醇濠靛洩绶㈡繝鐢靛Т閿曘倝鎮ф繝鍥ㄥ亗闁哄洨鍠嗘禍婊堟煙閺夊灝顣抽柟顔垮亹缁辨帡鎮╃粵纭呪偓鍧楁煛鐏炲墽鈽夋い顐g箞椤㈡﹢鎮╅崘鍙夌彴闂傚倷娴囬鏍窗濞戭澁缍栧璺虹灱缁犳棃鏌i弮鍌氬付闁绘劕锕﹂幉绋款吋閸モ晙绗夐梺鑽ゅ枛閸嬪﹤銆掓繝姘厪闁割偅绻傞弳娆忊攽閿涘嫭娅曠紒杈ㄥ浮椤㈡瑦绺界粙鍨強婵°倗濮烽崑娑⑺囬婵堜簷闂備礁鎲℃笟妤呭窗濡も偓閳诲秹濮€閵堝棌鎷洪柣鐘充航閸斿苯鈻嶉幇鐗堢厵闁告垯鍊栫€氾拷