RFID
These commands are available three ways — in the FREE-WILi GUI app, in a serial terminal, and on the device itself. See Connecting it to a computer for how to reach them.
125 kHz proximity cards: read EM4100 and Indala tags, stream tags, dump the raw envelope and bit pages, tune the demodulator live, and write T5577 blocks. Shares the NFC plug-in board.
Enable Reader
Starts or stops the 125 kHz carrier and demodulator.
r 1
Enabling claims GPIO46 (envelope) and GPIO34 (carrier). GPIO34 shares PWM slice 9 with the haptic, and clkdiv is per-slice, so a buzz while the reader runs disturbs the carrier.
How to use it — press r. At the prompt, enter: 1 to enable, 0 to disable.
What you enter — enable.
Get Status
Reader state, measured carrier, live envelope window and the frame/tag counters.
A large frames with a near-zero tags means the front end produces edges no decoder accepts, which points at bit timing rather than coupling.
How to use it — press g.
Read Tag
Waits for one tag and returns its format, modulation and id.
t 2000
An unknown format still returns what was assembled, so an unrecognised tag is visible rather than dropped. Use b for its raw bits.
How to use it — press t. At the prompt, enter: timeout in milliseconds (default 2000).
What you enter — timeout_ms.
Stream Tags
Emits each decoded tag as an event instead of requiring a poll.
Tags drain a few per pass rather than in a burst: the event FIFO is 24 slots and a busy field produces tags faster than the host drains them.
How to use it — press s. At the prompt, enter: 1 to stream tags as events, 0 to stop.
What you enter — enable.
Clear Stats
Zero the frame and tag counters
How to use it — press c.
Tune Constant
Sets one demodulator constant at runtime, without a reflash.
u <param> <value>
0ASK bit period us (512 = RF/64)1ASK minimum pulse us2ASK swing divisor3ASK minimum hysteresis4PSK tolerance percent5PSK carrier cycles per bit
Values survive r 0/r 1 and reset on power cycle.
How to use it — press u. At the prompt, enter: parameter index and value.
What you enter — param, value.
Raw Bits
Returns the last 64-bit frame as assembled, before any decoder ran.
Useful when a tag is present and framing succeeds but nothing claims it: the raw bits separate a wrong format from a bit-timing error.
How to use it — press b.
Write Tag
Writes one 32-bit block to a T5577/T5557 held in the field.
w <block 1-7> <hex>
The reader must be running. The write is blind: the tag never acknowledges, so success means the frame was transmitted, not accepted. Verify by reading it back.
Block 0 is the configuration block and is refused: a wrong value there is not recoverable by writing again.
How to use it — press w. At the prompt, enter: block number (0-7) and a 32-bit value in hex.
What you enter — block, value.
Carrier Info
Measured carrier, clk_sys, envelope sample count and capture overruns.
Needs no tag. A climbing env_samples proves the ADC was claimed and the front end is being sampled. frames staying at zero against a bare carrier is correct.
How to use it — press i.
Enroll ID
Encodes a 40-bit EM4100 id and writes it into blocks 1 and 2.
n A1 B2 C3 D4 E5
Five space-separated bytes, most significant first. The card must already be EM4100-configured (block 0 = 00148040); this firmware cannot write block 0, so it cannot convert a blank card.
Blind write. Verify with t.
How to use it — press n. At the prompt, enter: a 10-hex-digit EM4100 ID as five space-separated bytes.
What you enter — id.
Clone Capture
Reads the card on the coil and holds its id for j.
Held separately from the last-tag latch, so the reads j performs on the target card cannot overwrite it.
How to use it — press k. At the prompt, enter: timeout in milliseconds (default 3000).
What you enter — timeout_ms.
Clone Write
Writes the id captured by k onto the card now on the coil.
Refuses unless the target is currently reading as EM4100, since block 0 cannot be written and a non-EM4100 card would never broadcast the frame. Nothing is transmitted when refused.
Blind write. Verify with t.
How to use it — press j.