The design below is based on the work described on the Arduino Playground (Arduino Playground)
The most basic problem I had with the above mentioned design was that it could only read RFID tags using Frequency Shift Keying modulation (FSK). I also wanted to read other types of tags, for example the very common EM4100 tags.
I had great difficulty with the FSK reader, on a hardware and firmware level. My problem was that the coil information was lacking and without a proper coil, the reader simply did not function correctly.
Secondly, without clear examples of what the signal should look like at the various key places on the circuit it was extremely difficult to fault find the circuit/firmware.
After doing a lot of additional research and fault finding, I manage to get my hardware to work. I have attached example signals at the various key points on the circuit.
Once the hardware was working (according to me), I had to get the sample firmware working. It was of great value, but unfortunately did not work for me. I still could not read HID tags. I used the debug mode option, to output the captured pulse information. I was able to manually decode the debug information into the correct card number. I could finally conclude that I had working hardware.
So the obviously problem was firmware related. I change the firmware, away from an interrupt based counter to a simple pulse length measure function. With FSK I was only interested in the HIGH’s so I ignored the lows.
After tweaking the pulse lengths/amounts to be consider to be “1” and “0” I finally got valid decoded data for 26-bit and 35-bit HID tags and extract the correct manufacture, facility and card numbers. At present it still has a bug related to the last parity bit, but I have tweaked the code to simply ignore the parity check for now.
At this stage I was able to only read and decode HID tags using FSK modulation, I still needed to do ASK/PSK so that I could decode EM4100 tags.
I had two types of EM4100 tags, the normal credit card size and the small round disk types. With a bit of shock I discovered that even thou these are both EM4100 tags, they used different modulation. The one was a ASK (amplitude) and the other PSK (phase) type. On a hardware level my circuit could easily read the ASK tag, but the PSK proofed more troublesome. I tried various tricks to make it work on a firmware level, but simply could not get it to work.
It turned out the circuit could read ASK modulated signals as is. I manage to write firmware to decode the ASM data, but it still could not handle PSK.
I eventually modified my circuit’s envelope detector based on the Microchip reference designs (microID ® 125 kHz RFID System Design Guide), after which nothing worked, not ASP/PSK or FSK. I had to add another comparator.
Luckily the chip had 2 spare opamps. The newly added comparator generated a clean DC logic signal which I could decode with more ease. It turned out that by using the 3rd comparator the circuit and same firmware could now decode ASM and PSK at the same time using the same code base.
The only thing missing was now to fix the circuit/firmware to again be able to read FSK (HID) tags. This I easily achieved by using the original output, before the 3rd opamp and the original code.
Below is the working circuit, along with example scope signals at the different key points on the circuit and for the different tag types.
I have compiled a separate write up (RFID Modulation and Encoding) explaining my interpretation of RFID modulation and encoding/decoding of the data streams
This design or parts of it is not allowed to be used in any form of commercial application without written permission from the author.
I used a rectangular coil using 0.2 mm copper wire, with 100 turns and dimensions of 7.5cm x 5 cm
The source code which is part of the design/manufacture packages can be purchased from Gizmoshop
This source code or circuit or any parts of it is not allowed to be used in any form of commercial application without written permission from the author.