comparison doc/CP2102-EEPROM-tools @ 102:4f72e09fb698

doc/CP2102-EEPROM-tools: complete for now
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 28 Sep 2023 21:13:33 +0000
parents ba741a1af0e3
children
comparison
equal deleted inserted replaced
101:ba741a1af0e3 102:4f72e09fb698
48 48
49 cp2102-update-eeprom -b std 49 cp2102-update-eeprom -b std
50 50
51 After this programming operation, unplug and replug the USB device - see 51 After this programming operation, unplug and replug the USB device - see
52 Replug-after-EEPROM-write article for more info. 52 Replug-after-EEPROM-write article for more info.
53
54 More detailed theory
55 ====================
56
57 FreeCalypso CP2102 EEPROM tools are built on a different principle than our FTDI
58 EEPROM tools. In the case of FTDI chips, our tools are designed to generate
59 EEPROM images de novo - this approach is necessary because in the case of
60 FT2232x and other FTDI chips that use external EEPROMs, those EEPROMs start out
61 blank. The internal EEPROM of CP2102 is different - this EEPROM already holds
62 a valid image as the chip leaves Silabs, and valid EEPROM content is required
63 for this chip to function - thus there is no use case for constructing CP2102
64 EEPROM images de novo. Instead we provide the following tools for CP2102:
65
66 * cp2102-read-eeprom reads the full EEPROM content out of the chip and saves it
67 in an Intel HEX file. The file format has been copied from Python-language
68 cp210x-program-1.0 and is suspected (without certain proof) of also being the
69 format used by Silabs' own tools.
70
71 * cp2102-write-eeprom programs the chip's EEPROM with a new image read from an
72 Intel HEX file.
73
74 * cp2102-decode-baudtab and cp2102-decode-ee-desc read Intel HEX images of
75 EEPROMs and decode portions of interest: the baud rate table and USB
76 descriptors, respectively.
77
78 * cp2102-patch-ee-image reads an Intel HEX EEPROM image, applies a set of
79 patches to it, and writes out a new Intel HEX EEPROM image.
80
81 * cp2102-update-eeprom applies a set of EEPROM patches directly in place: reads
82 current EEPROM content from a physical chip, applies the desired patches and
83 writes the new EEPROM image into the hardware. This utility replaces the
84 cumbersome sequence of cp2102-read-eeprom, cp2102-patch-ee-image and
85 cp2102-write-eeprom for most common workflows.
86
87 * cp2102-read-baudtab combines the steps of cp2102-read-eeprom and
88 cp2102-decode-baudtab into a single command that works without intermediate
89 files - an easy utility for the common use case of checking the current baud
90 rate table programming.
91
92 Selecting the device to operate on
93 ==================================
94
95 By default our CP2102 tools look for USB ID 10C4:EA60, which is the default ID
96 code for CP2102; if there is more than one USB device with this ID, the tool
97 hits the first matching device it finds. If you need to operate on a CP2102
98 chip whose ID code has been changed away from the default, or if you need to
99 select one of several USB devices with the same ID code, you can pass a device
100 selector string (see FTDI-EEPROM-tools article - we've implemented the same
101 mechanism for CP2102, even though it originates from libftdi) with -d option.
102 For example, to read the baud rate table from the CP2102 inside a Pirelli DP-L10
103 phone, run this command:
104
105 cp2102-read-baudtab -d i:0x0489:0xE003
106
107 EEPROM patch language
108 =====================
109
110 The "canonical" use case for patching CP2102 EEPROM config would be designing a
111 new custom hw gadget that contains a CP2102 chip and configuring that USB
112 interface chip with custom ID strings, or perhaps a custom VID:PID code or other
113 USB descriptor changes. However, it is now 2023, and we (FreeCalypso) are not
114 planning on building any new hw with CP2102 chips - thus in the present time
115 the only real use case for CP2102 EEPROM manipulation is programming the baud
116 rate table on already existing CP2102-based cables and adapters (particularly
117 those sold by Sysmocom) to switch between 230400/460800/921600 baud and
118 203125/406250/812500 baud configs, or perhaps configure other non-standard baud
119 rates for various hacking applications.
120
121 Nonetheless and for the sake of completeness, our cp2102-update-eeprom and
122 cp2102-patch-ee-image tools allow any part of the EEPROM structure to be
123 patched: the baud rate table can be replaced in whole or in part, any bytes in
124 any of the USB descriptors can be patched, and new textual ID strings can be
125 set.
126
127 Given the lack of real-life use cases beyond switching between two possible baud
128 rate tables of interest as described earlier in this article, the full EEPROM
129 patching mechanism is not currently documented in detail - read the source code
130 if you are interested.
131
132 Checking CP2102 chip version
133 ============================
134
135 To check if your CP2102 adapter is really classic CP2102 or CP2102N or some
136 other CP210x, run this command:
137
138 cp2102-read-partno
139
140 The result should be 0x02 on classic CP2102 or various codes (0x20, 0x21 or 0x22
141 depending on QFN package variant) on CP2102N. Note that at least on classic
142 CP2102 this byte is stored in the EEPROM and can be modified - but hopefully no
143 sane person will patch the EEPROM on a classic CP2102 to make it pretend to be
144 CP2102N.