POOM CLI Console

Connect to the POOM command-line interface over USB with Minicom on Linux or macOS and explore the NFC CLI commands.

One of the most interesting parts of POOM is its CLI. I know many people enjoy working from a console—I am one of them. I often prefer typing commands instead of navigating through buttons.

When we began exploring the ESP32-C5 CLI, we found a few particular details related to its USB/JTAG interface. They are not complicated, but they are important enough to deserve this short guide.

The good news is that on Linux, most of this behavior can be avoided with one simple command before opening the terminal. Choose your operating system below and let's enter the POOM CLI.

Animated POOM menu navigation opening THE BEAST and selecting CLI.
On POOM, open THE BEAST and select CLI before entering console commands.
Choose your connection: use the embedded POOM Web CLI above for a quick browser connection, or follow this guide when you prefer the classic Minicom workflow.

Install Minicom

Ubuntu / Debian

sudo apt update
sudo apt install minicom

Fedora

sudo dnf install minicom

Arch Linux

sudo pacman -S minicom

macOS

Install Minicom with Homebrew:

brew install minicom

Linux

Connect POOM to your computer with a data-capable USB cable. POOM uses a USB CDC/ACM interface, so it will normally appear as:

/dev/ttyACM0

Check for it with:

ls /dev/ttyACM*

For example:

/dev/ttyACM0

Before opening Minicom

This is the important part. Run this command first:

stty -F /dev/ttyACM0 -hupcl

Then open Minicom:

minicom -o -D /dev/ttyACM0 -b 115200

Now open the CLI on POOM:

BEAST → CLI

The POOM CLI will appear in Minicom.

Why do we use -hupcl?

The ESP32-C5 has a particular USB/JTAG behavior that can make the device appear frozen while working with the serial port. On Linux, disabling HUPCL before opening Minicom helps avoid this problem during normal CLI use:

stty -F /dev/ttyACM0 -hupcl
Important: on Linux, do not open Minicom before running the stty command.

In practice, these are the two commands you need to remember:

stty -F /dev/ttyACM0 -hupcl
minicom -o -D /dev/ttyACM0 -b 115200

Then open BEAST → CLI on POOM.

macOS

Connect POOM through USB and list the available serial ports:

ls /dev/cu.*

POOM should appear with a name similar to:

/dev/cu.usbmodemXXXX

For example:

/dev/cu.usbmodem1101

Open Minicom with that port:

minicom -o -D /dev/cu.usbmodem1101 -b 115200

Then open the CLI on POOM:

BEAST → CLI

You can now begin using the console.

The Linux command stty -F ... -hupcl uses GNU/Linux syntax and is not used in the same way on macOS.

If you see Permission denied

On Linux, you may see an error similar to:

Permission denied: /dev/ttyACM0

Add your user to the dialout group:

sudo usermod -aG dialout $USER

Then sign out and sign back in. You can check the port permissions with:

ls -l /dev/ttyACM0

If the port is busy

If Minicom cannot open POOM, check whether another application is using the port:

sudo lsof /dev/ttyACM0

Applications that may leave the port open include:

  • Arduino Serial Monitor
  • ESP-IDF Monitor
  • PlatformIO Monitor
  • screen
  • Another Minicom instance

Close the application and run:

stty -F /dev/ttyACM0 -hupcl
minicom -o -D /dev/ttyACM0 -b 115200

If POOM appears frozen

In some situations, the ESP32-C5 may appear frozen because of behavior related to its USB/JTAG interface. If this happens:

  1. Turn POOM off.
  2. Turn POOM back on.
  3. Run the Linux setup commands again:
stty -F /dev/ttyACM0 -hupcl
minicom -o -D /dev/ttyACM0 -b 115200
  1. Open BEAST → CLI on POOM again.

After turning POOM off and on, it should work normally again.

This behavior is related to the ESP32-C5 USB/JTAG interface, not the POOM CLI.

Exit Minicom

To exit Minicom, press:

Ctrl + A

Then press:

X

Confirm when Minicom asks whether you want to exit.

Quick Start

If Minicom is already installed, these are the commands you need.

Linux

Find POOM:

ls /dev/ttyACM*

Configure the port and open Minicom:

stty -F /dev/ttyACM0 -hupcl
minicom -o -D /dev/ttyACM0 -b 115200

Then open BEAST → CLI on POOM.

macOS

Find POOM:

ls /dev/cu.*

Open Minicom:

minicom -o -D /dev/cu.usbmodemXXXX -b 115200

Then open BEAST → CLI on POOM.

You are now inside the POOM CLI.

NFC CLI Command Reference

This reference summarizes the current NFC commands available in the POOM CLI. Use it after opening a serial or Web CLI connection.

Before using any NFC command

  1. On POOM, open THE BEAST from the main menu, then select CLI.
  2. Start the NFC core with nfc-core-start.
  3. Select the technology filter you need, then scan or connect to your tag.
nfc-core-start
nfc-tech-set-a
nfc-scan-run
nfc-card-connect
Authorized use only: test only cards, tags, and systems that you own or have explicit permission to examine.

1. Core workflow

CommandWhat it does
nfc-core-startInitializes the NFC core, including I2C, IRQ, RFAL, and the reader's base state.
nfc-core-stopStops the NFC core, turns off the RF field, and clears its state.
nfc-scan-runRuns a one-shot scan using the current technology filter.
nfc-scan-run-loop <period_ms> <count> [timeout_ms]Repeats the scan a fixed number of times at the requested interval.
nfc-card-connectActivates a nearby card so POOM can interact with it.
nfc-card-send <hex...>Sends hexadecimal bytes to the active card. It uses APDUs with ISO-DEP and may use raw transfers with other technologies.

2. Technology filter

CommandWhat it does
nfc-tech-showShows the currently selected technology filter.
nfc-tech-set-allEnables every technology supported by the scanner.
nfc-tech-set-aSelects NFC-A / ISO14443-A only.
nfc-tech-set-bSelects NFC-B / ISO14443-B only.
nfc-tech-set-fSelects NFC-F / FeliCa only.
nfc-tech-set-vSelects NFC-V / ISO15693 only.
nfc-tech-set-st25tbSelects ST25TB only.

3. Saved cards, profiles, and dumps

CommandWhat it does
nfc-cards-listLists card identifiers saved in the nfc_cards store.
nfc-cards-save [timeout_ms]Scans and saves detected card identifiers in nfc_cards.
nfc-cards-del <index>Deletes a saved card by index.
nfc-cards-clearDeletes every card saved in nfc_cards.
nfc-card-save-current [name]Saves the last profile captured by nfc-card-connect in nfc_profiles.
nfc-profiles-listLists complete profiles saved in nfc_profiles.
nfc-profiles-del <index>Deletes a saved profile by index.
nfc-profiles-clearDeletes every saved profile.
nfc-dump-save-sd [timeout_ms]Saves a structured card dump to the microSD card.
nfc-mful-save [timeout_ms]Saves an .nfc dump of an MF Ultralight / Type 2 card for emulation.
nfc-isodep-dump-save-sdConnects to an ISO-DEP card and saves an APDU capture to the microSD card.
nfc-clipper-history-readAttempts to read and display history from a compatible Clipper / DESFire card.

4. Emulation

CommandWhat it does
nfc-emul-showShows the current NFC emulation configuration.
nfc-emul-resetRestores the default emulation configuration.
nfc-emul-set <field> <value>Changes an emulation field such as mode, uid, sak, atqa, ats, uri, or image.
nfc-emul-load-last-connectCopies the most recent nfc-card-connect snapshot into the emulator configuration.
nfc-emul-start-last-connectLoads the most recent connection snapshot and starts emulation.
nfc-emul-start [stored_index]Starts the current emulation configuration or loads a stored profile first.
nfc-emul-stopStops NFC emulation.

5. Reader and ISO-DEP debugging

CommandWhat it does
nfc-reader-verbose-set <0|1>Enables or disables detailed reader TX/RX traces.
nfc-isodep-chunk-set <1..250>Changes the maximum fragment size used for ISO-DEP chaining.
nfc-rf-turn-onForces the RF field on for debugging.
nfc-rf-turn-offForces the RF field off for debugging.
nfc-mode-getShows the current RFAL mode and TX/RX bitrates.
nfc-mode-set <mode> <tx_br> <rx_br>Changes the RFAL mode and bitrates using numeric RFAL values.
nfc-obsv-getShows the current observation-mode configuration.
nfc-obsv-set <0|1> [tx] [rx]Enables or disables observation mode and its TX/RX mux settings.
nfc-reqa-sendSends an ISO14443-A REQA and displays the ATQA response.
nfc-wupa-sendSends an ISO14443-A WUPA and displays its response or error.
nfc-raw-transceive [--crc-manual] <hex...>Runs a raw transceive directly against the front end or card.
nfc-regs-dumpPrints a detailed ST25R3916 register dump.

6. Antenna tuning

CommandWhat it does
nfc-tune-auto-runRuns automatic antenna tuning and displays the result.
nfc-tune-getReads the current AAT_A, AAT_B, phase, and amplitude values.
nfc-tune-set <aat_a> <aat_b>Writes AAT_A and AAT_B, then displays the resulting measurement.