|
現(xiàn)在的情況是:
4字節(jié)的卡能正確尋到卡并能讀取到UID,7字節(jié)能讀取到前3字節(jié),利用二級(jí)防沖撞讀取后四字節(jié)出錯(cuò)。具體表現(xiàn)為:讀取RC522寄存器超時(shí),說明RC522沒有響應(yīng)這個(gè)命令。
想請教有沒有這方面經(jīng)驗(yàn)的壇友可以解答下?我的做法是二級(jí)防沖撞和一級(jí)防沖撞的操作一樣,包括寄存器的配置與發(fā)送的字節(jié),唯一的改變就是將防沖撞命令從0x93改為0x95.- char PcdAnticoll(unsigned char *pSnr)
- {
- char status;
- unsigned char i,snr_check=0;
- unsigned int unLen;
- unsigned char ucComMF522Buf[MAXRLEN];
-
- ClearBitMask(Status2Reg,0x08); //清MFCryptol On位 只有成功執(zhí)行MFAuthent命令后,該位才能置位
- WriteRawRC(BitFramingReg,0x00); //清理寄存器 停止收發(fā)
- ClearBitMask(CollReg,0x80); //清ValuesAfterColl所有接收的位在沖突后被清除
-
- ucComMF522Buf[0] = PICC_ANTICOLL1; //卡片防沖突命令
- ucComMF522Buf[1] = 0x20;
- status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen);//與卡片通信
- if (status == MI_OK) //通信成功,讀出卡的UID
- {
- for (i=0; i<4; i++)
- {
- *(pSnr+i) = ucComMF522Buf[i];
- snr_check ^= ucComMF522Buf[i];
- }
- if (snr_check != ucComMF522Buf[i])
- { status = MI_ERR; }
- }
-
- SetBitMask(CollReg,0x80);
- return status;
- }
復(fù)制代碼
|
|