The growing need for security and enhanced functionality in the banking, identification, and telecom markets has increased the use of smart cards worldwide, to the detriment of the low-security magnetic-stripe cards.
However, the development of the hardware and firmware needed for proper communications in a system based on a smart card poses new challenges to designers. Unfortunately, only some high-end microcontrollers have a dedicated UART (universal asynchronous receiver/transmitter) that can drive smart cards directly. The design described here, though, lets you drive a smart card using just the standard UART on a low-end 8-bit microcontroller, in this case an Atmel AVR ATmega 168.
Smart cards have just one communication path, labeled I/O, with the outside world, so it's used as a bidirectional signal to input and output data. This signal must line up with the UART's unidirectional reception and transmission signals RxD and TxD, respectively. Because RxD is an input signal and TxD is an output signal, a 1-kΩ resistor must be used to connect them to the smartcard I/O line to avoid line contention (see the figure).On the firmware side, the design must implement a specific procedure for the reception and transmission of data to and from the smart card ( see the code listing). On the one hand, to receive a byte from the smart card, the system must disable the UART's transmitter unit—again, to avoid line contention.
On the other hand, to transmit a byte to the smart card, the firmware must disable the UART's reception unit to avoid the reception of an echo character. Then it must wait until the end of the byte transmission to avoid false byte receptions. In this way, you can exchange information back and forth with the smart card using the T=0 protocol described in section 3 of the Smart Card Standard, ISO 7816-3, Electronic Signals and Transmission Protocols.
As an improvement—and to fully comply with the standard describing the smart-card communication protocols—the design must implement the parity error detection and re-transmission scheme defined in the ISO 7816-3 standard.