Fetching several UIDs issue: SELECT command no working? (RFID, ISO 14443A)

G'day all

I'm working on a small project where I'm using an RDM880, MFRC500 chip, from Seeed Studios which utilizes the ISO 14443-A standard.

I'm fairly new to it and am trying to figure out how to fetch several UIDs. In my understanding of the anticollision loop, it should go like this:

  1. Request
  2. Anticollision
  3. Select a card, (the UID I recieved from the anticollision)
  4. HALT that UID
  5. Repeat from step 2

All the commands are working, except for the SELECT command. I'm following the documentation provided by http://neophob.com/files/rfid/PROTOCOL-821-880%20_2_.pdf
I've also tried the high level commands but can't figure out how to use them to my ends.

My select commands look as follow: 0xAA 0x00 0x05 0x05 UID0 UID1 UID2 UID3 BCC 0xBB, in accordance with the documentation. When I send it, the reply says the card does not exist.
Any guesses to what I'm doing wrong? Have I skipped/missed something fundamental? If possible, could someone tell me which commands, with which arguements, I need?

Thanks in advance

My select commands look as follow: 0xAA 0x00 0x05 0x05 UID0 UID1 UID2 UID3 BCC 0xBB, in accordance with the documentation.

The way I read it, you should be sending 7 bytes of UID data, following the first byte. What are those other values?

Where are you getting the UID data? What is it you are trying to select?

I read it as I should be sending four bytes of UID data.
I use the UID of one of my tags, which I've gotten as response to the anticollision message (as well as the high level MF_GET_SNR message).
I'm trying to select one of the tags, which in result allows for me to send messages to that tag only. By selecting a tag I can send HALT messages to it without affecting other tags in the vicinity.

As for the message:
0xAA - Start message
0x00 - Station ID (00 for any station)
0x05 - Length of data + command
0x05 - Command (0x05 for SELECT command)
UID1..4 - Data field, in this case the UID of the tag I want to select
BCC - Checksum
0xBB - End message

UPDATE:

I seem to have solved my problem. What I wasn't aware of was that the tags I was testing with appears to be of type MIFARE Ultralight, which have UID of 7 byte in length, instead of the assumed 4. I still only recieve four bytes from the reader when I request it, so I'm still trying to figure out exactly how to send the correct UID in order to select them.

Luckily I found some MIFARE 1ks lying around and could test with them, and now everything seems to work as it should. It's even easier than I thought, with the help of the high-level commands.

As I feared, the problem had to do with my lack of knowledge in the whole system.

The system sounds interesting. When you get it all working, posting a playground article would be a great public service.

I have same problem. i'm using arduino duemilanove and RFID 13.56 MHz..
I'm using serial communication to pc. I just want to read the id card but there's no respond in rfid.
Here's my program

#include <SoftwareSerial.h>

SoftwareSerial rfid(5, 4);

//Prototypes
void mifare_request(void);
void mifare_anticollision(void);
void parse(void);

//Global var
int Str1[15];

//INIT
void setup()
{
Serial.begin(19200);
Serial.println("Start");
// set the data rate for the SofwaretSerial ports
rfid.begin(19200);
delay(100);

}

//MAIN
void loop()
{
read_serial();
}

}
void mifare_request()
{ rfid.write((uint8_t)170);
rfid.write((uint8_t)187);
rfid.write((uint8_t)6);
rfid.write((uint8_t)0);
rfid.write((uint8_t)0);
rfid.write((uint8_t)0);
rfid.write((uint8_t)1);
rfid.write((uint8_t)2);
rfid.write((uint8_t)82);
rfid.write((uint8_t)81);
delay (10);
}

void mifare_anticollision()
{rfid.write(0xAA);
rfid.write(0xBB);
rfid.write(0x05);
rfid.write((uint8_t)0);
rfid.write((uint8_t)0);
rfid.write((uint8_t)0);
rfid.write(0x02);
rfid.write(0x02);
rfid.write((uint8_t)0);
delay (10);
}

void parse()
{
while(rfid.available()>0 )

{ for(int i=1;i<15;i++){
Str1*= rfid.read();*

  • }*
    }
    void print_serial()
  • {//print to serial port*
    _ Serial.println(Str1*,HEX);*_

* }*
void read_serial()
{
* mifare_request();
_
delay(100);_
mifare_anticollision();
_
parse ();_
print_serial();
delay(100);
_
}*_
help me please...

help me please...

Post your code correctly, first. Use the icon with the # on it.