meminoglu
Posts: 31
Joined: Sun Mar 05, 2017 3:15 pm

RC522 Module Can't Select Multiple Tags

Wed Oct 02, 2019 8:16 pm

Hi, i have a problem with RC522 modules, i use MFRC522-python.

if i put 1 card on the reader module i have no problem. it reads and authenticates.

if i put multiple cards (3 or more) randomly things happens; First case, everything ok, it chooses right card and it authenticates, Second case i wait 5 or 7 seconds, and it choose right card (after choose other cards), third case is worst case, it never see my right card. And, in most case this happens.

What i want? Even i put 5 Tags on reader, (for example different purpose rfid cards should be in my wallet) if true tag in read range, my reader should see right card. Even it reads 4 card, eventually must see right card. but some times it never happens. I share my default code;

Can you help me, how can i read and try authenticate multiple tags in while loop? is there a way?

Code: Select all

import RPi.GPIO as GPIO
import MFRC522
import signal

continue_reading = True

# Capture SIGINT for cleanup when the script is aborted
def end_read(signal,frame):
    global continue_reading
    print "Ctrl+C captured, ending read."
    continue_reading = False
    GPIO.cleanup()

# Hook the SIGINT
signal.signal(signal.SIGINT, end_read)

# Create an object of the class MFRC522
MIFAREReader = MFRC522.MFRC522()

# Welcome message
print "Welcome to the MFRC522 data read example"
print "Press Ctrl-C to stop."

# This loop keeps checking for chips. If one is near it will get the UID and authenticate
while continue_reading:
    
    # Scan for cards    
    (status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)

    # If a card is found
    if status == MIFAREReader.MI_OK:
        print "Card detected"
    
    # Get the UID of the card
    (status,uid) = MIFAREReader.MFRC522_Anticoll()

    # If we have the UID, continue
    if status == MIFAREReader.MI_OK:

        # Print UID
        print "Card read UID: %s,%s,%s,%s" % (uid[0], uid[1], uid[2], uid[3])
    
        # This is the default key for authentication
        key = [0xFF,0xFF,0xFF,0xFF,0xFF,0xFF]
        
        # Select the scanned tag
        MIFAREReader.MFRC522_SelectTag(uid)

        # Authenticate
        status = MIFAREReader.MFRC522_Auth(MIFAREReader.PICC_AUTHENT1A, 8, key, uid)

        # Check if authenticated
        if status == MIFAREReader.MI_OK:
            MIFAREReader.MFRC522_Read(8)
            MIFAREReader.MFRC522_StopCrypto1()
        else:
            print "Authentication error"

User avatar
topguy
Posts: 5885
Joined: Tue Oct 09, 2012 11:46 am
Location: Trondheim, Norway

Re: RC522 Module Can't Select Multiple Tags

Thu Oct 03, 2019 9:22 am

A couple of points..
- All the cards are passive cards, they are powered by the antenna on the RC522, there is definitely a limit to how many cards it can power at the same time. I dont know what that limit should/could be for your reader.

- After you are done with one card, there should be a "halt" command you should send. If the card gets this command is should "shut up" and not reply to any more (unless it looses power because it was removed from the antenna or you turn antenna field off and on again ). I see that "PICC_HALT = 0x50" is defined in the library you might be using but could not where it was used.

Return to “Troubleshooting”