FreeCalypso > hg > fc-sim-tools
comparison doc/Serial-SIM-readers @ 47:b0cf75d0bb2d
doc/Serial-SIM-readers article written
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 21 Mar 2021 04:32:18 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
46:e2ef4b8e4136 | 47:b0cf75d0bb2d |
---|---|
1 A serial SIM reader is a very simple hardware gadget consisting of just the | |
2 following: | |
3 | |
4 * An always-on power supply (voltage determined by hw design) connected to SIM | |
5 VCC contact; | |
6 | |
7 * An always-on fixed-frequency clock fed to SIM CLK contact; | |
8 | |
9 * SIM I/O line connected to both TxD and RxD of a general-purpose UART, with | |
10 UART TxD driving SIM I/O by way of an open collector or open drain buffer; | |
11 | |
12 * SIM RST line controlled by one of the modem control lines, either DTR or RTS. | |
13 | |
14 In order to successfully communicate with the SIM, the UART baud rate needs to | |
15 be set to clock_freq/372, where clock_freq is the clock frequency fed to SIM CLK | |
16 contact, determined by the crystal oscillator used in the design of the serial | |
17 SIM reader gadget. This baud rate must be used initially for receiving ATR and | |
18 performing PTS, and it can also be used for the entire card session if the user | |
19 is content with the default slow speed - however, if the SIM card supports speed | |
20 enhancement (almost all cards do), this speed enhancement feature can be | |
21 supported with serial SIM readers if the UART baud rate can be switched under | |
22 software control from clock_freq/372 to clock_freq/64. | |
23 | |
24 I (Mother Mychaela) am a very late comer to this game, thus I am not able to | |
25 speak with authority regarding the history of how serial SIM readers came about. | |
26 However, my understanding of this history is that early serial SIM readers were | |
27 RS-232 serial rather than USB-serial, thus they were constrained to use only | |
28 standard RS-232 baud rates like 9600 bps. And even when "serial" SIM readers | |
29 are really USB-serial, with a USB UART chip built directly into the custom | |
30 gadget, most people are still used to standard RS-232 baud rates (and the most | |
31 important OSes still make it unreasonably difficult to use non-standard baud | |
32 rates on USB-serial and other ports that are capable of such), thus the classic | |
33 baud rate of 9600 bps has stuck. | |
34 | |
35 When a serial SIM reader gadget is designed to operate at 9600 baud, the crystal | |
36 oscillator frequency should ideally be 3.571200 MHz: 9600 * 372 = 3571200. | |
37 However, most real-life serial SIM readers out there have been built in a "race | |
38 to the bottom" fashion in terms of cost, and they typically feature crystals of | |
39 some frequency that is close to the ideal one, but not exactly - apparently | |
40 crystals of other nearby frequencies are cheaper than getting one for the ideal | |
41 frequency of 3.571200 MHz. (As a practical example, the USB-serial SIM reader | |
42 I bought on ebay in 2021-03 features a 3.579545 MHz crystal.) These serial SIM | |
43 readers with slightly-off crystals exploit the baud rate error tolerance that is | |
44 inherent in all UART interfaces. | |
45 | |
46 The use of 3.571200 MHz (or close to this frequency) clocks in USB-serial SIM | |
47 reader designs is a case of conservative thinking, as opposed to maximizing | |
48 speed. The highest clock frequency allowed by SIM card specs is 5 MHz for | |
49 class A (5.0 V) or 4 MHz for classes B and C (3.0 V and 1.8 V), thus if someone | |
50 sought maximum SIM communication speed, they could use a higher frequency clock | |
51 (for example, the same 4.8 MHz clock that is used in the USB CCID reader on | |
52 which I measured it with an oscilloscope, HID Omnikey 3121), use a high-quality | |
53 USB-serial chip with good support for non-standard baud rates, and design the | |
54 software around the resulting non-standard baud rates, including baud rate | |
55 switching for SIM speed enhancement. If anyone has ever made such a USB-serial | |
56 SIM reader, our tools are ready to support it - but I don't know if anyone has | |
57 ever built such a gadget. | |
58 | |
59 In case of serial SIM readers with 3.571200 MHz (or nearby) clocks, it is my | |
60 (Mychaela's) guess that their designers probably never considered the | |
61 possibility of using SIM speed enhancement, and that most programmers who write | |
62 software tools for such readers don't consider it either, resigning themselves | |
63 to just the default slow speed mode of F=372 D=1. However, if the SIM card | |
64 supports F=512 D=8 speed enhancement (almost all cards do) and this mode is | |
65 activated via PTS procedure, the baud rate becomes 55800 bps. This baud rate | |
66 is non-standard - however, the USB-serial chip in the SIM reader gadget I got | |
67 from ebay supports it just fine. (The USB-serial chip in this particular reader | |
68 is a PL2303, so I initially thought that it wouldn't support non-standard baud | |
69 rates - however, a closer investigation revealed that the popular notion of | |
70 these chips not supporting non-standard baud rates is actually a myth: PL2303 | |
71 chips support non-standard baud rates just fine, instead this support was | |
72 lacking in earlier versions of the Linux kernel pl2303 driver.) | |
73 | |
74 Our FC SIM tools back end for serial SIM readers supports 55800 baud speed | |
75 enhancement mode whenever the UART and its Linux kernel driver support it, and | |
76 we also support even higher speed enhancement modes: if the UART can handle | |
77 111600 baud, we can use F=512 D=16 mode, and if the UART can handle 223200 baud, | |
78 we can use F=512 D=32 mode which most newer SIM cards support. And yes, the | |
79 PL2303 USB-serial chip in the SIM reader I got from ebay supports this fastest | |
80 223200 baud mode just fine. | |
81 | |
82 Using fc-simtool with serial SIM readers | |
83 ======================================== | |
84 | |
85 The most basic usage is as follows: | |
86 | |
87 fc-simtool -d /dev/ttyXXX | |
88 | |
89 If the serial SIM reader uses a 3.571200 MHz (or nearby frequency) crystal and | |
90 you are not going for speed enhancement (i.e., if you are sticking with 9600 | |
91 baud for the entire card session), then no further options are needed. | |
92 | |
93 If the clock frequency stays at 3.571200 MHz (or nearby) but you do wish to use | |
94 speed enhancement, add one of the following options: | |
95 | |
96 -e1 if your UART can handle 55800 bps; | |
97 -e2 if your UART can handle 55800 and 111600 bps; | |
98 -e4 if your UART can handle 55800, 111600 and 223200 bps. | |
99 | |
100 The actual selected mode will be based both on the UART capabilities declared | |
101 with the -e option and on the SIM card capabilities indicated in the ATR TA1 | |
102 byte. | |
103 | |
104 If your serial SIM reader uses a different clock frequency such that you need to | |
105 use baud rates other than 9600 and 55800 bps for standard and speed-enhanced | |
106 modes, respectively, then you need to use the more general -b option instead of | |
107 -e, taking one of the following forms: | |
108 | |
109 -b base_baud | |
110 -b base_baud,spenh_baud | |
111 -b base_baud,spenh_baud,spenh_max | |
112 | |
113 base_baud is the initial baud rate to use for receiving ATR; if no further | |
114 comma-separated parameters are specified, then this initial baud rate persists | |
115 for the entire card session without any speed enhancement modes. spenh_baud is | |
116 the baud rate to use for F=512 D=8 speed enhancement mode. spenh_max must be | |
117 1, 2, 4 or 8 (the default is 1); it is the maximum further multiplier that can | |
118 be applied to spenh_baud, if any. |