test rfid

Dependencies:   Arducam_OV5642 mbed

Fork of RFID-RC522 by Thomas Kirchner

Committer:
vkaminsk
Date:
Wed Nov 01 08:46:58 2017 +0000
Revision:
3:c1fb0b6871ef
Parent:
2:a0c7513fb634
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kirchnet 2:a0c7513fb634 1 //Test of cheap 13.56 Mhz RFID-RC522 module from eBay
kirchnet 2:a0c7513fb634 2 //This code is based on Martin Olejar's MFRC522 library. Minimal changes
kirchnet 2:a0c7513fb634 3 //Adapted for Nucleo STM32 F401RE. Should work on other Nucleos too
kirchnet 2:a0c7513fb634 4
kirchnet 2:a0c7513fb634 5 //Connect as follows:
kirchnet 2:a0c7513fb634 6 //RFID pins -> Nucleo header CN5 (Arduino-compatible header)
kirchnet 2:a0c7513fb634 7 //----------------------------------------
kirchnet 2:a0c7513fb634 8 //RFID IRQ=pin5 -> Not used. Leave open
kirchnet 2:a0c7513fb634 9 //RFID MISO=pin4 -> Nucleo SPI_MISO=PA_6=D12
kirchnet 2:a0c7513fb634 10 //RFID MOSI=pin3 -> Nucleo SPI_MOSI=PA_7=D11
kirchnet 2:a0c7513fb634 11 //RFID SCK=pin2 -> Nucleo SPI_SCK =PA_5=D13
kirchnet 2:a0c7513fb634 12 //RFID SDA=pin1 -> Nucleo SPI_CS =PB_6=D10
kirchnet 2:a0c7513fb634 13 //RFID RST=pin7 -> Nucleo =PA_9=D8
kirchnet 2:a0c7513fb634 14 //3.3V and Gnd to the respective pins
kirchnet 2:a0c7513fb634 15
kirchnet 2:a0c7513fb634 16 #include "mbed.h"
kirchnet 2:a0c7513fb634 17 #include "MFRC522.h"
kirchnet 2:a0c7513fb634 18
kirchnet 2:a0c7513fb634 19 // Nucleo Pin for MFRC522 reset (pick another D pin if you need D8)
vkaminsk 3:c1fb0b6871ef 20 #define MF_RESET PC_7
kirchnet 2:a0c7513fb634 21
kirchnet 2:a0c7513fb634 22 DigitalOut LedGreen(LED1);
kirchnet 2:a0c7513fb634 23
kirchnet 2:a0c7513fb634 24 //Serial connection to PC for output
kirchnet 2:a0c7513fb634 25 Serial pc(SERIAL_TX, SERIAL_RX);
kirchnet 2:a0c7513fb634 26
kirchnet 2:a0c7513fb634 27 MFRC522 RfChip (SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, MF_RESET);
kirchnet 2:a0c7513fb634 28
kirchnet 2:a0c7513fb634 29 int main(void) {
kirchnet 2:a0c7513fb634 30 pc.printf("starting...\n");
kirchnet 2:a0c7513fb634 31
kirchnet 2:a0c7513fb634 32 // Init. RC522 Chip
kirchnet 2:a0c7513fb634 33 RfChip.PCD_Init();
kirchnet 2:a0c7513fb634 34
vkaminsk 3:c1fb0b6871ef 35 //Ініціалізація для зчитування
vkaminsk 3:c1fb0b6871ef 36 uint8_t status;
vkaminsk 3:c1fb0b6871ef 37 MFRC522::MIFARE_Key key;
vkaminsk 3:c1fb0b6871ef 38 uint8_t buffer[18];
vkaminsk 3:c1fb0b6871ef 39 uint8_t num_buffer = 1; //номер буфера (0-63)
vkaminsk 3:c1fb0b6871ef 40 uint8_t size = sizeof(buffer);
vkaminsk 3:c1fb0b6871ef 41 //Кінець ініціалізації
vkaminsk 3:c1fb0b6871ef 42
kirchnet 2:a0c7513fb634 43 while (true) {
kirchnet 2:a0c7513fb634 44 LedGreen = 1;
kirchnet 2:a0c7513fb634 45
kirchnet 2:a0c7513fb634 46 // Look for new cards
kirchnet 2:a0c7513fb634 47 if ( ! RfChip.PICC_IsNewCardPresent())
kirchnet 2:a0c7513fb634 48 {
kirchnet 2:a0c7513fb634 49 wait_ms(500);
kirchnet 2:a0c7513fb634 50 continue;
kirchnet 2:a0c7513fb634 51 }
kirchnet 2:a0c7513fb634 52
kirchnet 2:a0c7513fb634 53 // Select one of the cards
kirchnet 2:a0c7513fb634 54 if ( ! RfChip.PICC_ReadCardSerial())
kirchnet 2:a0c7513fb634 55 {
kirchnet 2:a0c7513fb634 56 wait_ms(500);
kirchnet 2:a0c7513fb634 57 continue;
kirchnet 2:a0c7513fb634 58 }
kirchnet 2:a0c7513fb634 59
kirchnet 2:a0c7513fb634 60 LedGreen = 0;
vkaminsk 3:c1fb0b6871ef 61 //
vkaminsk 3:c1fb0b6871ef 62 // // Print Card UID
vkaminsk 3:c1fb0b6871ef 63 // pc.printf("Card UID: ");
vkaminsk 3:c1fb0b6871ef 64 // for (uint8_t i = 0; i < RfChip.uid.size; i++)
vkaminsk 3:c1fb0b6871ef 65 // {
vkaminsk 3:c1fb0b6871ef 66 // pc.printf(" %X02", RfChip.uid.uidByte[i]);
vkaminsk 3:c1fb0b6871ef 67 // }
vkaminsk 3:c1fb0b6871ef 68 // pc.printf("\n\r");
kirchnet 2:a0c7513fb634 69
kirchnet 2:a0c7513fb634 70 // Print Card type
vkaminsk 3:c1fb0b6871ef 71 // uint8_t piccType = RfChip.PICC_GetType(RfChip.uid.sak);
vkaminsk 3:c1fb0b6871ef 72 // pc.printf("PICC Type: %s \n\r", RfChip.PICC_GetTypeName(piccType));
vkaminsk 3:c1fb0b6871ef 73
vkaminsk 3:c1fb0b6871ef 74
vkaminsk 3:c1fb0b6871ef 75 //Ключ, він завжди FFFFFFFFFF
vkaminsk 3:c1fb0b6871ef 76 for (uint8_t i = 0; i < MFRC522::MF_KEY_SIZE; ++i) {
vkaminsk 3:c1fb0b6871ef 77 key.keyByte[i] = 0xFF;
vkaminsk 3:c1fb0b6871ef 78 }
vkaminsk 3:c1fb0b6871ef 79 //Аутентифікація для доступу до даних (без неї не працює)
vkaminsk 3:c1fb0b6871ef 80 status = RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, num_buffer, &key, &(RfChip.uid));
vkaminsk 3:c1fb0b6871ef 81
vkaminsk 3:c1fb0b6871ef 82 if (status == MFRC522::STATUS_OK) {
vkaminsk 3:c1fb0b6871ef 83 status = RfChip.MIFARE_Read(num_buffer, buffer, &size); //Зчитування
vkaminsk 3:c1fb0b6871ef 84 //**Для запису в буффер
vkaminsk 3:c1fb0b6871ef 85 //buffer[1] = 1;
vkaminsk 3:c1fb0b6871ef 86 //buffer[2] = 2;
vkaminsk 3:c1fb0b6871ef 87
vkaminsk 3:c1fb0b6871ef 88 //status = RfChip.MIFARE_Write(num_buffer, buffer, 16);
vkaminsk 3:c1fb0b6871ef 89 //**
vkaminsk 3:c1fb0b6871ef 90 if (status == MFRC522::STATUS_OK) {
vkaminsk 3:c1fb0b6871ef 91 pc.printf("Data (block = %i): ", num_buffer);
vkaminsk 3:c1fb0b6871ef 92 for (uint8_t i = 0; i < 16; i++)
vkaminsk 3:c1fb0b6871ef 93 {
vkaminsk 3:c1fb0b6871ef 94 pc.printf("%X ", buffer[i]);
vkaminsk 3:c1fb0b6871ef 95 }
vkaminsk 3:c1fb0b6871ef 96 pc.printf("\n\r");
vkaminsk 3:c1fb0b6871ef 97 }
vkaminsk 3:c1fb0b6871ef 98 }
vkaminsk 3:c1fb0b6871ef 99 RfChip.PCD_StopCrypto1(); //Закриття аутентифікації(для повторного використання)
kirchnet 2:a0c7513fb634 100 wait_ms(1000);
kirchnet 2:a0c7513fb634 101 }
kirchnet 2:a0c7513fb634 102 }