FreeCalypso > hg > freecalypso-tools
comparison doc/DUART28-boot-control @ 737:6d97866bad79
first round of documentation for DUART28C boot control addition
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 16 Sep 2020 06:10:39 +0000 |
parents | |
children | 26daa2720bda |
comparison
equal
deleted
inserted
replaced
736:7d1df6d831e4 | 737:6d97866bad79 |
---|---|
1 FreeCalypso DUART28 adapter is a new piece of hardware that became available in | |
2 2020-09. In principal terms it is a drop-in replacement for the PLDkit FT2232D | |
3 adapter we've been using previously, but made specifically for working with | |
4 Calypso targets, rather than generic. However, in addition to providing this | |
5 drop-in replacement for our previous solution, our DUART28 also provides one | |
6 new optional feature: target boot control. | |
7 | |
8 The target boot control feature of FreeCalypso DUART28 consists of CTL1 and CTL2 | |
9 open drain outputs driven by FT2232D Channel B RTS and DTR, respectively, and | |
10 this feature is optional in that you don't have to connect these signals: if you | |
11 leave them unconnected, they won't do anything, and you can completely ignore | |
12 the existence of this additional feature. However, if you find this new feature | |
13 useful, you can make the necessary wire connections, apply the necessary patch | |
14 to your Linux kernel ftdi_sio driver and reprogram the EEPROM to the DUART28C | |
15 configuration - and then you will gain the ability to control your Calypso | |
16 board's PWON and RESET from your host computer. | |
17 | |
18 Hardware connections | |
19 ==================== | |
20 | |
21 The official FreeCalypso convention is that DUART28 CTL1 output should be | |
22 connected to PWON on the Calypso board, and CTL2 should be connected to RESET. | |
23 However, these wire connections can be made ONLY if you are going to also apply | |
24 the necessary patch to your Linux kernel ftdi_sio driver and reprogram the | |
25 EEPROM to the DUART28C configuration - if you connect CTL1 and CTL2 to Calypso | |
26 PWON and RESET without doing the other necessary steps, your setup won't work | |
27 at all: the Calypso+Iota chipset will be held down in test reset and thus | |
28 inoperable whenever you open Channel B ttyUSB device for regular serial | |
29 communication. | |
30 | |
31 Linux kernel driver patch | |
32 ========================= | |
33 | |
34 FreeCalypso DUART28 adapter is based on the FT2232D chip from FTDI, and all | |
35 FTDI-based USB-serial adapters are supported by the ftdi_sio kernel driver | |
36 under Linux. This driver contains a table of all supported USB IDs, and this | |
37 table needs to be extended (meaning that the driver needs to be patched) | |
38 whenever a new (previously unknown) USB ID needs to be supported. The internal | |
39 architecture of this driver and its USB ID table also allows various quirks to | |
40 be associated with specific USB IDs, meaning that the standard behaviour of the | |
41 driver can be modified in special ways for specific ID-distinguishable USB | |
42 devices. | |
43 | |
44 The way in which we have creatively repurposed otherwise unused Channel B RTS | |
45 and DTR outputs into PWON and RESET controls is not compatible with the standard | |
46 unpatched ftdi_sio driver, or rather with the standard unpatched Linux tty | |
47 serial port subsystem in general: the standard Linux tty behaviour (apparently | |
48 stipulated by POSIX) is that whenever any given ttyUSB device is opened, its | |
49 DTR and RTS outputs are immediately asserted, and userspace is not given any | |
50 opportunity to intervene prior to this automatic assertion of DTR & RTS. On our | |
51 non-standard hardware this standard Linux behaviour would cause an unstoppable | |
52 superdeep reset to be triggered whenever the second serial channel is opened for | |
53 regular communication, which is clearly not acceptable. | |
54 | |
55 Our solution to this problem consists of a custom USB ID that makes the standard | |
56 unpatched ftdi_sio driver not recognize our DUART28C adapter (DUART28 hardware | |
57 with DUART28C EEPROM config) at all, and a custom patch to the ftdi_sio driver | |
58 that teaches it to recognize our custom USB ID *and* apply a special quirk for | |
59 it. The quirk suppresses automatic assertion of DTR & RTS on ttyUSB device | |
60 open, thereby giving userspace applications full control of these UART outputs | |
61 via TIOCMBIS and TIOCMBIC ioctls. | |
62 | |
63 The patch has been submitted to the ftdi_sio maintainer for inclusion in | |
64 mainline Linux, but we should not set our hopes too high: while the patch should | |
65 be non-controversial given that it adds support for an entirely new USB ID (one | |
66 that was officially allocated to Falconia Partners LLC by FTDI, mind you) and | |
67 does not disrupt anything pre-existing in any way whatsoever, getting ANY kind | |
68 of patch accepted into mainline is generally tantamount to the Seven Circles of | |
69 Hell. And even if we do get our patch accepted into bleeding-edge mainline | |
70 Linux, it does not help Slackware users running older kernels without updates - | |
71 thus serious FreeCalypso users should be prepared to apply our ftdi_sio driver | |
72 patch locally on their own systems. | |
73 | |
74 The official Slackware-applicable version of the needed ftdi_sio driver patch | |
75 can be found in our freecalypso-hwlab Hg repository. | |
76 | |
77 EEPROM configuration | |
78 ==================== | |
79 | |
80 In order to make our DUART28 adapter an acceptable replacement for generic "raw" | |
81 FT2232x adapters (or CP2105-based Sysmocom mv-uart) which are supported out of | |
82 the box by standard unpatched ftdi_sio and cp210x drivers, we ship our DUART28 | |
83 boards with DUART28S configuration in the EEPROM, rather than DUART28C. The S | |
84 configuration sets the USB ID to FT2232x default of 0x0403:0x6010, which the | |
85 standard unpatched ftdi_sio driver recognizes as a completely vanilla USB to | |
86 dual UART adapter - but CTL outputs must be left unconnected in this | |
87 configuration, as they cannot function correctly with this unpatched driver. | |
88 | |
89 If you have applied our DUART28C support patch to your ftdi_sio driver, then | |
90 you can reprogram the EEPROM on your board into the C configuration and start | |
91 using CTL outputs. The necessary EEPROM config files and tools can be found in | |
92 our freecalypso-hwlab Hg repository. | |
93 | |
94 Support in FC host tools | |
95 ======================== | |
96 | |
97 If you have gone through all of the above, you get the following Calypso target | |
98 boot control capabilities with FC host tools: | |
99 | |
100 * If you run any of our loadtools programs (fc-loadtool, fc-iram, fc-xram etc) | |
101 or rvinterf on the ttyUSB device corresponding to DUART28 Channel B, which | |
102 will normally be connected to Calypso IrDA UART, adding a -Prts option will | |
103 make the tool pulse RTS, triggering PWON, or adding a -Pdtr option will make | |
104 the tool pulse DTR, triggering RESET. | |
105 | |
106 * Standalone fc-pulse-dtr and fc-pulse-rts utilities are also provided, doing | |
107 the obvious. | |
108 | |
109 Note the -P option: prior to this DUART28C support addition, the string argument | |
110 to the -P option (boot control name) was an arbitrary user-defined short name | |
111 to be looked up in /opt/freecalypso/bootctrl.conf, a user-created configuration | |
112 file directing our tools to run a user-provided external boot control command. | |
113 The new logic is that -Pdtr and -Prts are special reserved names for the | |
114 built-in DUART28C boot control function, whereas any other name will be looked | |
115 up in the configuration file and the associated user-provided external command | |
116 will be executed. |