Вот чем пользуюсь последние 2 года. Это всё чужое, сейчас даже ссылку не вспомню.
PICC_ANTICOLL -> 0х93.
Всегда было нормально, после этого я исправно получал свои 4 байта сер.номера.
И сейчас с 7-байтной картой получаю, но первый байт - 0х88.
Любые мои попытки чего там добавлять не приводят к чтению. Мне возврат status=2;
TM_MFRC522_Status_t TM_MFRC522_Anticoll(uint8_t* serNum)
{
TM_MFRC522_Status_t status;
uint8_t i;
uint8_t serNumCheck = 0;
uint16_t unLen;
TM_MFRC522_ClearBitMask(MFRC522_REG_STATUS2, 0x08);
TM_MFRC522_ClearBitMask(MFRC522_REG_COLL, 0x80);
TM_MFRC522_WriteRegister(MFRC522_REG_BIT_FRAMING, 0x00); //TxLastBists = BitFramingReg[2..0]
serNum[0] = PICC_ANTICOLL;
serNum[1] = 0x20;
status = TM_MFRC522_ToCard(PCD_TRANSCEIVE, serNum, 2, serNum, &unLen);
if (status == MI_OK)
{
//Check card serial number
for (i = 0; i < 4; i++)
{
serNumCheck ^= serNum[i];
}
if (serNumCheck != serNum[i])
{
status = MI_ERR;
}
}
return status;
}