2016-08-05 10 views
0

私のmifareカードの認証に問題があります。データシートにデフォルトキーは0xFFFFFFFFFFFFと書かれていますが、動作しません。誰かが私を助けることができれば、何が間違っているのか分かりません。RC522デフォルトキー

ここに私のコードがあります。私はそのカードが正しいことを付け加えて、うまくいきます。

のmain.c:

#include "spi.h" 
    #include <stdio.h> 
    #include "oldrc522.h" 


    int main(void) { 

    uint8_t CARD_ID[5]; 

    uint8_t KEY[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; 
    uint8_t MY_CARD[5]={0x19,0x5a,0xcc,0xac,0x23}; 

    TM_MFRC522_Init(); 
    printf("INIT\n\n\n"); 

    while(1){ 

    if (TM_MFRC522_Check(CARD_ID) == MI_OK) { 
       //CardID is valid 

       //Check if this is my card 
       if (TM_MFRC522_Compare(CARD_ID, MY_CARD) == MI_OK) { 
        printf("HELLO!\n\n"); 

        if((TM_MFRC522_Auth(PICC_AUTHENT1A,7,KEY,MY_CARD) == MI_OK)) 
         printf("OK"); 
        else printf("FAILED\n\n"); 



       } else 
        printf("INVALID CARD\n\n"); 


      } else { 
       //Some printing to delete content 
      } 

    } 
} 

TM_MFRC522_Auth機能:

TM_MFRC522_Status_t TM_MFRC522_Auth(uint8_t authMode, uint8_t BlockAddr, uint8_t* Sectorkey, uint8_t* serNum) { 
    TM_MFRC522_Status_t status; 
    uint16_t recvBits; 
    uint8_t i; 
    uint8_t buff[12]; 

    //Verify the command block address + sector + password + card serial number 
    buff[0] = authMode; 
    buff[1] = BlockAddr; 
    for (i = 0; i < 6; i++) { 
     buff[i+2] = Sectorkey[i]; 
    } 
    for (i=0; i<4; i++) { 
     buff[i+8] = serNum[i]; 
    } 
    status = TM_MFRC522_ToCard(PCD_AUTHENT, buff, 12, buff, &recvBits); 

    if ((status != MI_OK) || (!(TM_MFRC522_ReadRegister(MFRC522_REG_STATUS2) & 0x08))) { 
     status = MI_ERR; 
    } 

    return status; 
} 
+0

"動作しません。より具体的にできますか?どの機能が失敗しましたか? – purplepsycho

答えて

0

RFIDカードの生産者は、製品のデフォルトのキーとしての0xFF又は0x00での6つのバイトを使用するのが一般的です。

Iはrc522と同様に、これらのライブラリを使用したが、この

チャーKEYA [6] = {0xFFで、0XFF、0xFFで、0xFFで、0xFFで、0xFFで、}を通過しようとしていません。 を認証します。

パスセクタに何か他のものを書き込むと、カードが破損していることに注意してください。

関連する問題