ACS ACR39U-N1
Most PopularACS·USB
Overview
The ACS ACR39U-N1 is a pocket-sized USB contact smart card reader that has become the de-facto standard for high-volume field deployments across West Africa. It supports T=0 and T=1 protocols with a compact dongle form factor that plugs directly into a USB port with no cable. The reader is CCID-compliant, requires no proprietary drivers, and is certified for DREWQ BAC authentication. Its low cost and wide availability have made it the most popular option for kiosk and mobile deployments.
Requirements
- USB-A port (the ACR39U is a direct plug-in dongle — no cable)
- PC/SC daemon (pcscd on Linux/macOS, built-in on Windows 10+)
- Python 3.9+ with pyscard
- Sufficient USB port clearance for the dongle form factor
Setup Guide
Connect the Reader
Plug the ACR39U-N1 dongle directly into a USB-A port (no cable needed).
The green LED on the dongle illuminates when power is received.
The OS loads the CCID driver automatically within a few seconds.
Insert a DREWQ into the card slot (chip-side up, contacts down) until it clicks.
Configure PC/SC
macOS: `brew install pcsc-lite && brew services start pcsc-lite`
Ubuntu/Debian: `sudo apt-get install -y pcscd pcsc-tools && sudo systemctl enable --now pcscd`
Install pyscard: `pip install pyscard`
ACS also provides an optional SDK at acs.com.hk but it is not required for CCID operation.
Verify Detection
Run `pcsc_scan` — the reader appears as `ACS ACR39U`.
Verify the card is detected: LED changes when a card is inserted.
Python check: `python -c "from smartcard.System import readers; print(readers())"`
The API endpoint `GET /card/status` should return `card_present: true`.
Test with the API
Start the server: `uvicorn main:app --reload`
POST to `/card/scan` with the required BAC fields.
The ACR39U is fast — expect sub-second response times.
Use `GET /scans` to confirm the scan was recorded.
Troubleshooting
Dongle not recognized on some USB 3.0 ports
Some USB 3.0 controllers have power management issues with low-power CCID devices. Try a USB 2.0 port or use a powered USB hub. On Linux, disable USB autosuspend: `echo -1 > /sys/bus/usb/devices/<id>/power/autosuspend`.
Card insertion difficult or reader not accepting card
Ensure the card is inserted chip-side up with the gold contacts facing down toward the reader. The card should click into place. Avoid forcing — a partial insertion will not make electrical contact.
API returns reader name as 'ACS ACR3901U' instead of 'ACR39U'
Both names refer to the same device family. The OS may report slightly different strings depending on firmware. The API matches by presence of any reader — the name difference is cosmetic.
Need more help?
Check the full documentation or the reader compatibility guide for additional context.