Use of SP_RFID

The FM17510 used in this module is a highly integrated non-contact reader/writer chip working at 13.56MHz. It supports the non-contact reader/writer mode conforming to the ISO/IEC 14443 TypeA protocol, and the program is compatible with MFRC522.

Parameters

  • Support ISO/IEC 14443 TypeA reader mode
  • Reader mode supports M1 encryption algorithm
  • ISO14443 TYPEA supports communication rate 106kbps, 212kbps, 424kbps
  • Support SPI serial interface, up to 10Mbps
  • Voltage range 2.2V~3.6V
  • 64Byte transmit and receive buffer FIFO
  • Multiple low power consumption modes: Soft powerdown mode Hard powerdown mode
  • Built-in CRC coprocessor
  • Support low-power external card detection function
  • Working voltage: 2.2V~3.6V
  • Working temperature: -40°C~85°C

For detailed module information, please refer to RFID Specification and Data Manual

Instructions

  1. Preparation: The development board with the latest firmware, sp_rfid module, M1 card.

  2. Run: Connect the module, modify the configuration surrounded by config in Sample Code, and put the card close to the module antenna after running. See the card reading information printed by the terminal.

The procedure is as follows:

# Init module
MIFAREReader = MFRC522(spi1, cs)
# Scan for cards
(status, ataq) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQALL)
# Get uid
(status, uid) = MIFAREReader.MFRC522_Anticoll()
if status == MIFAREReader.MI_OK:
    # Bind card by uid
    MIFAREReader.MFRC522_SelectTag(uid)
    # Authenticate block 0x11 by key
    status = MIFAREReader.MFRC522_Auth(MIFAREReader.PICC_AUTHENT1A, 0x11, key, uid)
    if status == MIFAREReader.MI_OK:
        # Write 16 bytes from block 0x11
        MIFAREReader.MFRC522_Write(0x11, data)
        # Read 16 bytes from block 0x11
        MIFAREReader.MFRC522_Read(0x11)

'''output
>>> [Warning] function is used by fm.fpioa.GPIOHS20(pin:36)
Welcome to the MFRC522 data read/write example
Card detected type: 0x400
Card read UID: 110,159,46,15
Size: 8
Sector 11 will now be filled with 1~16:
4 backdata &0x0F == 0x0A 10
Data written
start to read
Sector 18 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
Card detected type: 0x400
Card read UID: 110,159,46,15
Size: 8
Sector 11 will now be filled with 1~16:
4 backdata &0x0F == 0x0A 10
Error while writing
Data written
'''

It is mainly divided into several steps:

  • Create MFRC522 object (parameters: SPI object, chip selection pin).

  • Scan the card and get ATQA (i.e. card type code), ATQA corresponding card types are as follows:

    | ATQA | Type |
    | :----: | :----------------- |
    | 0x4400 | Mifare_UltraLight |
    | 0x0400 | Mifare_One(M1 S50) |
    | 0x0200 | Mifare_One(M1 S70) |
    | 0x0800 | Mifare_Pro(X) |
    | 0x4403 | Mifare_DESFire |

  • Get card UID

  • Binding the card through UID (anti-collision, to ensure that the selected card can execute the transaction correctly, and is not affected by another card on site)

  • Authenticate a certain sector in the card (M1 (S50) default password is 16 0xff)

  • Read/write card information (take one block (16 bytes) as the basic read and write unit)