Enabling contactless Broadcom readers

Current status

Some Dell laptops have a Broadcom smart card reader. Some readers are for contact cards and some are for contactless cards. Contact readers should work fine with my CCID driver and are listed in the Should work but untested by me list.

However, none of the contactless readers are supported by my driver and are in the Unsupported or partly supported CCID readers.

Example with a Dell Latitude 7350

$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 002: ID 0bda:557e Realtek Semiconductor Corp. Integrated_Webcam_FHD
Bus 003 Device 003: ID 0a5c:5865 Broadcom Corp. 58200
Bus 003 Device 004: ID 8087:0036 Intel Corp. BE200 Bluetooth
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

The reader found is this Broadcom Corp. 58200 (USB idProduct = 0x5865).

My CCID driver web page indicates for this reader: The contactless interface is not supported.

$ pcsc_scan
PC/SC device scanner
V 1.7.5 (c) 2001-2026, Ludovic Rousseau <ludovic.rousseau@free.fr>
Using reader plug'n play mechanism
Scanning present readers...
0: Broadcom Corp 58200 [Contacted SmartCard] (0123456789ABCD) 00 00
1: Broadcom Corp 58200 [Contactless SmartCard] (0123456789ABCD) 01 00

Sat Jul  4 17:40:42 2026
 Reader 0: Broadcom Corp 58200 [Contacted SmartCard] (0123456789ABCD) 00 00
  Event number: 0
  Card state: Card removed,
 Reader 1: Broadcom Corp 58200 [Contactless SmartCard] (0123456789ABCD) 01 00
  Event number: 0
  Card state: Card removed,
Insert or remove a card or a reader...

My CCID driver finds and reports both readers/interfaces. However, only the contact reader reports card insertion and removal and can use a card.

The readers are a composite device with two CCID interfaces: "Contacted SmartCard" and "Contactless SmartCard". The device also has an interface labelled "Broadcom ControlVault 3+ w/FingerPrint" and another labelled "Broadcom NFP" (NFP stands for "Near Field Proximity").

Electromagnetic field

The contactless reader does not detect the presence of a card because its electromagnetic field is inactive.

I have a special detector that tells me when a contactless reader is, or isn't, emitting an electromagnetic field. And I see no activity at all.

Broadcom NFC service

Broadcom provides a (proprietary) program at https://packages.broadcom.com/artifactory/dell-controlvault-drivers/

The current version is brcm_linux_nfc_6.4.23.tgz.

$ tar tzvf brcm_linux_nfc_6.4.23.tgz
-rwxrwxr-x adminuser/adminuser 1427144 2026-05-01 00:48 usr/lib/broadcom-nfc/bcmnfcd.bin
-rw-rw-r-- adminuser/adminuser   26117 2026-05-01 00:48 usr/lib/broadcom-nfc/bcmnfcd.conf
-r-xr-xr-x adminuser/adminuser     155 2026-05-01 00:48 filelist
-r-xr-xr-x adminuser/adminuser     961 2026-05-01 00:48 install.sh
-r-xr-xr-x adminuser/adminuser      83 2026-05-01 00:48 rm.sh
-r-xr-xr-x adminuser/adminuser     249 2026-05-01 00:48 etc/systemd/system/broadcom-nfc.service
-r-xr-xr-x adminuser/adminuser     157 2026-05-01 00:48 lib/systemd/system-sleep/bcmnfcd-control.sh
-r-xr-xr-x adminuser/adminuser    2098 2026-05-01 00:48 readme.txt
-r-xr-xr-x adminuser/adminuser    4325 2026-05-01 00:48 LICENSE.broadcom

Readme

Extract from the readme.txt file:

===========================================================
                         Broadcom NFC Daemon for Linux
===========================================================


================
DESCRIPTION
================

This package is a Linux based package to install Broadcom NFC daemon.  The NFC
daemon runs and NFC stack needed to initialize and keep the state of the NFC
controller of the CV device.  The sole purpose of this NFC stack is to enable
the Contactless CCID interface.

It is assumed higher level software such as PCSC Lite will be used in
conjunction with the NFC daemon.

[...]

Installation

After installation, the process bcmnfcd.bin is running:

$ systemctl status broadcom-nfc.service
● broadcom-nfc.service - Broadcom NFC service
         Loaded: loaded (/etc/systemd/system/broadcom-nfc.service; enabled; preset: enabled)
         Active: active (running) since Sat 2026-07-04 13:19:07 CEST; 1min 19s ago
 Invocation: 45b58a953ed54891a3b7d3c167502c39
   Main PID: 9271 (bcmnfcd.bin)
          Tasks: 6 (limit: 18475)
         Memory: 2.5M (peak: 3.5M)
                CPU: 48ms
         CGroup: /system.slice/broadcom-nfc.service
                         └─9271 /usr/lib/broadcom-nfc/bcmnfcd.bin -d -f -c /usr/lib/broadcom-nfc/

Use

And it is now possible to detect and use contactless smart cards.

$ pcsc_scan
PC/SC device scanner
V 1.7.3 (c) 2001-2024, Ludovic Rousseau <ludovic.rousseau@free.fr>
Using reader plug'n play mechanism
Scanning present readers...
0: Broadcom Corp 58200 [Contacted SmartCard] (0123456789ABCD) 00 00
1: Broadcom Corp 58200 [Contactless SmartCard] (0123456789ABCD) 01 00

Sat Jul  4 13:21:48 2026
 Reader 0: Broadcom Corp 58200 [Contacted SmartCard] (0123456789ABCD) 00 00
  Event number: 0
  Card state: Card removed,
 Reader 1: Broadcom Corp 58200 [Contactless SmartCard] (0123456789ABCD) 01 00
  Event number: 4
  Card state: Card removed,

Sat Jul  4 13:21:50 2026
 Reader 1: Broadcom Corp 58200 [Contactless SmartCard] (0123456789ABCD) 01 00
  Event number: 5
  Card state: Card inserted,
  ATR: 3B 8F 80 01 80 91 00 31 80 65 B0 84 05 00 25 83 01 90 00 CD

ATR: 3B 8F 80 01 80 91 00 31 80 65 B0 84 05 00 25 83 01 90 00 CD
+ TS = 3B --> Direct Convention
+ T0 = 8F, Y(1): 1000, K: 15 (historical bytes)
  TD(1) = 80 --> Y(i+1) = 1000, Protocol T = 0
-----
  TD(2) = 01 --> Y(i+1) = 0000, Protocol T = 1
-----
+ Historical bytes: 80 91 00 31 80 65 B0 84 05 00 25 83 01 90 00
  Category indicator byte: 80 (compact TLV data object)
        Tag: 9, len: 1 (unknown)
          Value: 00
        Tag: 3, len: 1 (card service data byte)
          Card service data byte: 80
                - Application selection: by full DF name
                - EF.DIR and EF.ATR access services: by GET RECORD(s) command
                - Card with MF
        Tag: 6, len: 5 (pre-issuing data)
          Data: B0 84 05 00 25
        Tag: 8, len: 3 (status indicator)
          LCS (life card cycle): 01 (Creation state)
          SW: 9000 (Normal processing.)
+ TCK = CD (correct checksum)

Possibly identified card (using /home/ludovic/.cache/smartcard_list.txt):
3B 8F 80 01 80 91 00 31 80 65 B0 84 05 00 25 83 01 90 00 CD
        Contactless IDCore3230 build 6.8, test APDU applet (JavaCard)

If you stop the /usr/lib/broadcom-nfc/bcmnfcd.bin process then the contactless reader is disabled again.

The process does more than just initialise the contactless reader.

License

Extract from the LICENSE.broadcom file:

Copyright: Copyright © 2005-2023 Broadcom. All Rights Reserved.
The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
License: Proprietary
[...]

The program is proprietary. The source code is not provided.

I understand this can be problematic. A Free Software solution would be preferable.

If you want to use a contactless reader that works without a non-free "driver" you can use one from the supported list or check the contactless support if you use a reader from the should work list.

I note that, in order to use the Wi-Fi card on this laptop, I need to install the package firmware-iwlwifi which comes from the Debian non-free-firmware repository. This is a similar issue, except that for the non-free program for the contactless reader runs on the main CPU rather than the Wi-Fi card CPU.

Conclusion

Broadcom provides a program that enables the use of the contactless readers.

It is not perfect, since the license is NOT Free Software. However, it does allow you to use the contactless reader if you really need to.

New version of libccid: 1.8.2

I have just released version 1.8.2 of libccid the Free Software CCID class smart card reader driver.

This version resolves an issue that was introduced in version 1.8.1, which was released three days ago. Composite devices (devices with both a CCID interface and also another interface, such as HID) were not being handled correctly. Yubico Yubikey tokens, for example, are often composite devices.

Thank you

Less than three days after the release of version 1.8.1, I received three bug reports concerning an issue with Yubikey tokens.

The bug reports either contain the problematic Git commit or a proposed patch to solve the problem. That was surprising.

I realise that bug reports are the main way of finding out whether people are using my software. Perhaps I should introduce more bugs to prompt a reaction? 😏

You can also email me to let me know that everything is working fine and that you are happy. My contact details can be found on the About me page.

Changes:

1.8.2 - 13 June 2026, Ludovic Rousseau

  • Fix initialisation of composite devices (like Yubico tokens)

  • Correctly close the slots of a multi-slots reader (serial)

New version of libccid: 1.8.1

I just released version 1.8.1 of libccid the Free Software CCID class smart card reader driver.

This version fixes an issue with multi-slots readers.

Changes:

1.8.1 - 10 June 2026, Ludovic Rousseau

  • Correctly close the slots of a multi-slots reader

  • Fix 3 minor issues "Found by AISLE in partnership with Red Hat"

  • Some other minor improvements

New version of pcsc-lite: 2.5.1

I have just released a new version of pcsc-lite 2.5.1.

pcsc-lite is a Free Software implementation of the PC/SC (also known as WinSCard) API for Unix systems. It provides an API for using smart cards and smart card readers.

This version contains a bug fix for multi-slots readers. The bug was introduced in the previous version 2.5.0 released 2 weeks ago.

Changes:

2.5.1: Ludovic Rousseau

10 June 2026

  • Fix a bug (introduced in 2.5.0) with multi-slots readers

  • Add support of Haiku Operating System

New version of pcsc-tools: 1.7.5

I just released a new version of pcsc-tools, a suite of tools for PC/SC.

Changes:

1.7.5 - 3 June 2026, Ludovic ROUSSEAU

  • 102 new ATRs

  • pcsc_scan:

    • fix an infinite loop

    • do not crash if SCardEstablishContext() fails

    • do not wait for an non-started thread

    • handle the case of an error during SCardGetStatusChange

  • meson: use -DATRparser="" to disable the ATR parser

  • gscriptor: Add Georgian translation

  • minor fixes and improvements

No more limited to 16 readers

pcsc-lite and my CCID driver are no longer limited to 16 readers. See New version of pcsc-lite: 2.5.0 and New version of libccid: 1.8.0.

History

Since the first version of pcsc-lite (in 2002 according to git history) the maximum number of readers has been set to 16. This number is defined by the PCSCLITE_MAX_READERS_CONTEXTS constant.

Since pcsc-lite was limited to 16 readers it was obvious to also limit the number of devices supported by the CCID driver to 16.

This limitation is problematic for some use cases. While it is possible to change the value of PCSCLITE_MAX_READERS_CONTEXTS and rebuild both pcsc-lite and the driver, this has side effects. See Fedora, flatpak and pcsc-lite for more information.

Changes

The request has been around since at least 2018. See https://salsa.debian.org/rousseau/CCID/-/work_items/4 and https://salsa.debian.org/rousseau/PCSC/-/work_items/4.

I had already calculated the amount of RAM that could be saved by using a list instead of a fixed-size array:

You can now use as many readers as you want.

In fact, no. There is still a limit of 256 readers due to the naming scheme used by pcsc-lite for readers. Readers will go from 00 to FF. See What is in a PC/SC reader name?.

Backward compatibility

In version 2.4.1 of pcsc-lite I introduced the ability to mix different versions of the internal communication protocol between the PC/SC daemon (pcscd) and the PC/SC library (libpcsclite). See pcsc-lite backward & forward compatible with itself.

In order to remove the limitation of the reader number, I had to update this internal communication protocol again. However, I tried to make it smart so that an old libpcsclite can communicate with a recent pcscd or vice versa. The application will still only recognise up to 16 readers, but at least it should work.

Conclusion

I hope you will benefit from this change:

  • Less RAM consumed when only 1 reader is used.

  • The possibility of using more than 16 readers.

New version of pcsc-lite: 2.5.0

I have just released a new version of pcsc-lite 2.5.0.

pcsc-lite is a Free Software implementation of the PC/SC (also known as WinSCard) API for Unix systems. It provides an API for using smart cards and smart card readers.

The major change in this version is: no more limited to 16 smart card readers.

Changes:

2.5.0: Ludovic Rousseau

27 May 2026

  • Do not limit to 16 readers only

  • Remove support of autotools

  • Fix a crash when rescanning serial configs

  • Fix a memory leak in Polkit

  • tokenparser: avoid a crash with corrupted Info.plist files

  • Some other minor improvements

New version of libccid: 1.8.0

I just released version 1.8.0 of libccid the Free Software CCID class smart card reader driver.

The major changes in this version are:

  • no more limited to 16 smart card readers

  • ./configure script is no more provided. Only meson configuration is provided.

Changes:

1.8.0 - 27 May 2026, Ludovic Rousseau

  • Add support of

    • GLSolutions NM61 PC/SC

    • Identiv uTrust FIDO2 Security Key

    • Kensington VeriMark NFC+ USB-C Security Key

    • MARX CryptoTech LP Tokey 3 FIDO

    • mCore Contact-Reader

    • mCore Contactless-Reader

    • mCore DualSlot-Reader

    • Pol Henarejos Pico Fido

    • Pol Henarejos Pico HSM

    • Pol Henarejos Pico OpenPGP

    • Richmond Technologies CO. LLC AEGIS PRO4 Smart Card Reader

    • SCR Prime

  • Remove the limitation to 16 readers

  • udev: Update rules file to comply with systemd documentation (and fix permissions issue)

  • meson: install serial config file in correct dir

  • Remove support of autotools

  • Fix crash in multi slots readers code

  • Fix some race conditions

  • Some other minor improvements

Laptops and smart card readers

Which smart card reader is present in a particular laptop model? It can be difficult to find out the exact model of smart card reader included in a laptop before buying it.

However, thanks to the Hardware for Linux project, you can submit your own hardware configuration and also consult the configurations of many laptops and desktops to find out what hardware is included.

The website also provides aggregated results for a specific categories such as CPU Vendors.

One interesting result is the Chipcard Vendor aggregation.

Chipard Vendors market shares

The results do not represent exact market shares. They only include systems that:

However, they should reflect reality.

Chipcard Vendor Alcor Micro (26.2%) Broadcom (55.6%) O2 Micro (6.5%) Upek (4.7%) Lenovo (3.4%) Yubico.com (0.8%) Gemalto (was ... (0.6%) SCM Microsystems (0.5%) Advanced Card... (0.4%) Aktiv (0.2%) Others (1.0%)
Chipcard Vendors

#

Vendor

Percent

1

Broadcom

55.61%

2

Alcor Micro

26.17%

3

O2 Micro

6.53%

4

Upek

4.69%

5

Lenovo

3.45%

6

Yubico.com

0.83%

7

Gemalto (was Gemplus)

0.6%

8

SCM Microsystems

0.51%

9

Advanced Card Systems

0.37%

10

Activ

0.23%

An important point to note is that the first five on the list should be correct, as they correspond to the manufacturers of embedded smart card readers. However, the next five in the list are often (if not always) external smart card readers that are connected via a USB port and not integrated into the laptop. For instance, I am not aware of any Yubico readers that are embedded in laptops. These readers are listed on https://linux-hardware.org/ because they were plugged in when the user ran the hw-probe program to scan and report the hardware configuration.

Which laptop manufacturers use which smart card reader?

You can click on a specific slice of the Chipcard Vendor pie chart to see which laptop manuifacturers uses this smart card reader brand.

Broadcom

Notebook Vendors Dell (100.0%)

All Broadcom readers are used by Dell.

Alcor Micro

Notebook Vendors Lenovo (82.4%) Hewlett-Packard (8.6%) Fujitsu (6.5%) Acer (0.7%) ASUSTek (0.4%) Dell (0.4%) Durabook (0.2%) Getac (0.2%) Google (0.2%) Notebook (0.2%) Others (0.4%)

#

Vendor

Percent

1

Lenovo

82.4%

2

Hewlett-Packard

8.6%

3

Fujitsu

6.5%

4

Acer

0.7%

5

ASUSTek Computer

0.4%

O2 Micro

Notebook Vendors Fujitsu (37.3%) Toshiba (19.7%) Fujitsu Siemens (2.1%) Dell (40.8%)

#

Vendor

Percent

1

Dell

40.8%

2

Fujitsu

37.3%

3

Toshiba

19.7%

4

Fujitsu Siemens

2.1%

Upek

Notebook Vendors Lenovo (100.0%)

All of Upek readers are used by Lenovo.

It looks like the Upek devices are "TouchChip Fingerprint Coprocessor" and not an "Integrated Smart Card Reader". I don't know why they are listed as "Chipcard Vendor". Perhaps it is a bug or limitation of https://linux-hardware.org/.

Lenovo

Notebook Vendors Lenovo (100.0%)

Unsurprisingly, all of Lenovo readers are used by... Lenovo.

Corresponding CCID devices

It is possible to list the CCID devices of each manufacturer that I know of:

Conclusion

Only three main vendors of smart card readers are used in laptops: Broadcom, Alcor Micro and O2 Micro.

Do they produce good products? Are their products supported by my CCID driver? These are both very good questions, but for other blog articles. To be continued...

pcsc_scan improved user interface

Version 1.7.4 of pcsc-tools provides an enhanced version of the pcsc_scan tool.

Problem

The program waits for card and reader events and reports any smart card events. If no reader or card is inserted or removed, nothing happens.

Since version 1.6.0 (New version of pcsc-tools: 1.6.0) the program has included an animation (cycling \|/- characters) to indicate that it is waiting. However, this was not obvious to users who did not know how to stop the program or what to do.

Solution

Now when the program is waiting for an event it displays a message such as:

Waiting for the first reader...   \  (use Ctrl-C to exit)

or

Insert or remove a card or a reader... /  (use Ctrl-C to exit)

I hope this makes it clearer what the user is expected to do.

Demo

The animation was recorded and played using asciinema.

The sequence in the animation below correspons to:

  1. Connect a reader

  2. Insert a card

  3. Remove the card

  4. Disconnect the reader

  5. Exit pcsc_scan

Windows

The program is also available for Windows. You can download the Windows binary from the project page https://pcsc-tools.apdu.fr/#windows

https://pcsc-tools.apdu.fr/pcsc_scan_windows.gif

Conclusion

I hope you find pcsc_scan usefull for you. This tool is intended for initial debugging purposes. For example see Level 1 smart card support on GNU/Linux.