Back
Loading views...RFID
RFID
Category: Wireless
Overview
RFID (Radio Frequency Identification) uses electromagnetic fields to automatically identify and track tags attached to objects. Tags contain a microchip and antenna; readers interrogate tags wirelessly. Used in access control, supply chain, animal tracking, and contactless payments.
1. Theory & Fundamentals
- Frequencies: LF (125/134 kHz), HF (13.56 MHz), UHF (860–960 MHz), Microwave (2.45 GHz)
- Tag types: Passive (no battery, powered by reader), Active (battery), Semi-passive
- LF: Short range (10cm), penetrates metal/water, used in animal tags, older access cards
- HF (13.56 MHz): ISO 14443 (MIFARE/NFC), ISO 15693 (vicinity); 10–100cm range
- UHF: ISO 18000-6C (EPC Gen2); 1–12m range; supply chain, retail
- EPC (Electronic Product Code): Standard for UHF RFID in supply chain
2. Frame / Packet Structure
ISO 18000-6C (EPC Gen2) UHF frame:
Preamble | Command | Data | CRC-16
Commands: Query, QueryRep, ACK, NAK, Read, Write, Kill, Lock
Tag response to Query:
RN16 (random 16-bit number, used for singulation)
Read response:
Header | PC (Protocol Control, 16b) | EPC (96b) | CRC-16
ISO 15693 frame (HF vicinity):
SOF | Flags(8b) | Command(8b) | Data | CRC-16 | EOF
3. Protocol Mechanics
- Anticollision: Multiple tags in field simultaneously; singulation protocol selects one
- Gen2 Q-algorithm: Probabilistic slotted ALOHA for anticollision
- Memory: EPC, TID (unique), User memory banks; write-protected with kill/lock commands
- Energy harvesting: Passive tag derives power from reader's RF field
4. Hardware Implementation
- LF reader: 125kHz oscillator, coil antenna, ASK demodulator (EM4100 decode)
- HF reader: MFRC522 (SPI), PN532 (I2C/SPI/UART) for ISO 14443/15693
- UHF reader: Impinj R420, ThingMagic M6 module; SPI/UART/USB to host
- Antenna: Coil (LF/HF) or patch (UHF); impedance match to 50Ω
- Power: Reader 5V/500mA; tags passive (zero power)
5. Register-Level / Configuration
// MFRC522 SPI-based HF RFID reader
void MFRC522_Init(void) {
SPI_Write(MFRC522_REG_COMMAND, 0x0F); // Soft reset
delay_ms(50);
SPI_Write(MFRC522_REG_T_MODE, 0x8D); // Timer auto + prescaler
SPI_Write(MFRC522_REG_T_PRESCALER, 0x3E);
SPI_Write(MFRC522_REG_T_RELOAD_H, 0x00);
SPI_Write(MFRC522_REG_T_RELOAD_L, 0x1E);
SPI_Write(MFRC522_REG_TX_ASK, 0x40); // 100% ASK
SPI_Write(MFRC522_REG_MODE, 0x3D); // CRC preset 6363
// Turn on antenna
SPI_Write(MFRC522_REG_TX_CONTROL,
SPI_Read(MFRC522_REG_TX_CONTROL) | 0x03);
}
// Read card UID
uint8_t uid[4];
MFRC522_RequestA(); // Send REQA
MFRC522_Anticollision(uid); // Get UID
6. Driver / Software Development
// Full MFRC522 MIFARE read block
uint8_t MIFARE_ReadBlock(uint8_t block, uint8_t *data) {
uint8_t cmd[4] = {0x30, block, 0, 0}; // Read command
// Calculate CRC and append
MFRC522_CalcCRC(cmd, 2, &cmd[2]);
MFRC522_Transceive(cmd, 4, data, 18); // 16 bytes + 2 CRC
return data[16] == calc_crc[0] && data[17] == calc_crc[1];
}
7. Debugging & Testing
- RFID protocol analyzer: Feig, Profilic RFID test tools
- Logic analyzer on SPI to MFRC522 for register verification
- Common issues: Antenna detuning by metal; tag in null field area; anticollision timeout
- Check SPI timing (MFRC522 max 10 MHz SPI)
8. Real-World Applications
- Access control (HF ISO 14443 MIFARE cards)
- Supply chain and inventory (UHF EPC Gen2)
- Animal tracking and livestock ID (LF 134.2 kHz ISO 11784)
- Retail loss prevention and checkout (UHF)
- Library management (HF ISO 15693)
9. Advanced Topics & Edge Cases
- Near-field reader coil design: Tuning for maximum read range
- Privacy: Killing tags, locking memory; EPC Gen2 access/kill passwords
- Anti-clone: MIFARE DESFire with AES; cryptographic authentication
- Passive tag: Energy harvested from 13.56 MHz field; must exceed activation threshold
10. Standards & Variants
| Standard | Freq | Range | Notes |
|---|---|---|---|
| ISO 11784/85 | 134.2 kHz | <10cm | Animal RFID |
| ISO 14443 | 13.56 MHz | <10cm | NFC/MIFARE |
| ISO 15693 | 13.56 MHz | 1m | Vicinity |
| ISO 18000-6C | 860-960 MHz | 12m | EPC Gen2 UHF |
💡 Practical Examples
Example 1: Read MIFARE UID
MFRC522_Init();
while(1) {
if(MFRC522_RequestA() == 0) { // Card detected
MFRC522_Anticollision(uid);
printf("Card UID: %02X%02X%02X%02X\n", uid[0],uid[1],uid[2],uid[3]);
}
delay_ms(500);
}
Example 2: Write UHF EPC tag
Use Impinj reader SDK to write new EPC value to Gen2 tag.
Example 3: Multi-tag inventory
UHF reader Q-algorithm reads 100+ tags in <1 second; export EPC list.
🧪 Practice Questions
Beginner
- What are the 3 main RFID frequency bands?
- What is a passive RFID tag?
- What is EPC in UHF RFID?
- What standard does MIFARE use?
- How does RFID anticollision work?
Intermediate
- Implement MFRC522-based access control with UID whitelist.
- How does ISO 14443 anticollision singulation work?
- Implement MIFARE Classic block read/write with authentication.
- What limits UHF RFID read range near metal?
- How does EPC Gen2 Q-algorithm avoid tag collisions?
Advanced
- Design a UHF RFID warehouse inventory system.
- Implement AES authentication with MIFARE DESFire EV1.
- Build an RFID reader antenna for 1m range at 13.56 MHz.
- Implement ISO 15693 multi-tag inventory in embedded C.
- Design anti-cloning protection for access control tokens.
Hands-on Projects
- Access Control: MFRC522 + relay, authorized UID list in EEPROM.
- Inventory System: UHF RFID + database, track 1000 items.
- Animal Tracker: LF 134.2 kHz reader for livestock ID tags.
Checklist
- [ ] Understand RFID frequency bands and their characteristics
- [ ] Initialize MFRC522 via SPI
- [ ] Read MIFARE card UID
- [ ] Authenticate and read/write MIFARE Classic block
- [ ] Implement UID-based access control
- [ ] Interface with UHF reader
- [ ] Design antenna for target frequency
- [ ] Handle anticollision for multiple tags
- [ ] Implement AES-based secure tag authentication
- [ ] Build complete RFID application