What is the most common protocol is used to communicate with a "smart card"? Have you ever written any software to communicate with a "smart card" in an embedded product?
The dominant standard for contact smart cards is ISO/IEC 7816. It defines the card's physical contacts, electrical signaling, the activation/reset sequence, and the transmission protocols. After power-up and reset, the card emits an ATR (Answer To Reset) describing its capabilities, and then communication proceeds with one of two link-layer protocols:
- T=0: a byte-oriented, half-duplex protocol (the original, widely used for SIM cards).
- T=1: a block-oriented protocol with framing and error detection.
At the application layer, the host (reader/terminal) and card exchange APDUs (Application Protocol Data Units) — a structured command APDU (with class, instruction, parameters, and data) and a response APDU (data plus a two-byte status word like 0x9000 for success). This APDU command/response model is the heart of smart-card software.
For contactless smart cards (NFC payment cards, transit cards, contactless EMV), the relevant standard is ISO/IEC 14443 (proximity cards) at 13.56 MHz, which carries the same APDU concept over an RF link rather than physical contacts.
From an embedded standpoint, "communicating with a smart card" typically means: driving an ISO 7816 reader interface (or NFC controller), performing card activation and reading the ATR, selecting an application (a SELECT APDU by AID), and then exchanging command/response APDUs — for example interacting with a SIM/UICC, a secure element, or an EMV payment applet. (SIM/eUICC communication in cellular devices is a common real-world instance of this, using 7816 APDUs to the card.)
