Skip to main content

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 enterenable.

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 entertimeout_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 enterenable.

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>
  • 0 ASK bit period us (512 = RF/64)
  • 1 ASK minimum pulse us
  • 2 ASK swing divisor
  • 3 ASK minimum hysteresis
  • 4 PSK tolerance percent
  • 5 PSK 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 enterparam, 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 enterblock, 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 enterid.

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 entertimeout_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.