FreeCalypso > hg > freecalypso-docs
comparison Tango-pinmux @ 70:3365d51773c5
Tango-pinmux: brought over from FC Magnetite repository
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Sat, 17 Jul 2021 17:01:39 +0000 |
| parents | |
| children | bf7a0c2b2b50 |
comparison
equal
deleted
inserted
replaced
| 69:c6dafe9f3ac2 | 70:3365d51773c5 |
|---|---|
| 1 FreeCalypso Tango is a Calypso core module with the special quality of having | |
| 2 many Calypso signals brought out on the user interface connector. Out of the | |
| 3 great many Calypso signals that are brought out, the following 8 pins are | |
| 4 subject to functional multiplexing concerns: | |
| 5 | |
| 6 GPIO1 | |
| 7 GPIO2 | |
| 8 GPIO3 | |
| 9 RESET_OUT/GPIO7 | |
| 10 MCSI_TXD/GPIO9 | |
| 11 MCSI_RXD/GPIO10 | |
| 12 MCSI_CLK/GPIO11 | |
| 13 MCSI_FSYNCH/GPIO12 | |
| 14 | |
| 15 All 8 are capable of functioning as GPIOs, meaning that a Tango-based custom | |
| 16 application board designer can use them for whatever purpose they like, but | |
| 17 some of them can also be configured as dedicated Calypso peripheral pins, | |
| 18 particularly MCSI. Others (GPIO1-3) have software-defined conventional | |
| 19 functions based on long-standing tradition. | |
| 20 | |
| 21 The special complication that arises for our firmware with regard to these GPIO | |
| 22 and multifunction pins is that it is not our place as the firmware vendor to | |
| 23 dictate to our potential customers how they should wire these pins on their | |
| 24 boards. Instead an FC Tango customer should be able to wire up their board as | |
| 25 their application calls for, subject to constraints imposed by hardware (not by | |
| 26 firmware!), and our standard fw needs to work with every reasonable possibility | |
| 27 for user wiring of our GPIO and multifunction pins. The following practical | |
| 28 cases need to be addressed: | |
| 29 | |
| 30 * If a customer chooses to use any of our GPIOs as an input, feeding some | |
| 31 external output to it, there needs to be a way to tell our fw to leave that GPIO | |
| 32 as an input and not switch it to an output. | |
| 33 | |
| 34 * Conversely, if a given GPIO or multifunction pin is unused or not needed in a | |
| 35 given application, the app board designer should have the freedom to either tie | |
| 36 it off or leave it unconnected. If some of our GPIO or multifunction pins are | |
| 37 left unconnected, this fact needs to be communicated to our fw so it can | |
| 38 configure them as dummy outputs, preventing floating inputs. | |
| 39 | |
| 40 * Some applications will use MCSI, while others won't. If a given application | |
| 41 does not use MCSI, the 4 pins (or any subset of them) can be used as GPIOs, | |
| 42 either inputs or outputs, or the unused pins may be left unconnected. | |
| 43 | |
| 44 * GPIO3 is traditionally defined (by conventions going back to TI) as DTR input | |
| 45 - but not every application will have a sensible DTR signal to feed to this pin. | |
| 46 If there is no DTR signal in a given application, the app board designer should | |
| 47 be able to either use GPIO3 for some unrelated purpose, or leave it unconnected. | |
| 48 | |
| 49 * GPIO2 is similarly defined as DCD output by the same traditional conventions. | |
| 50 Because it is an output from Calypso, it can be simply ignored and left | |
| 51 unconnected if it is not needed - but a user should also be able to use the GPIO | |
| 52 for unrelated purposes. | |
| 53 | |
| 54 * There exist several historical conventional functions for GPIO1 output: | |
| 55 loudspeaker control (D-Sample, Leonardo, FCDEV3B), Openmoko's application | |
| 56 processor wake-up signal, or RI modem control output. We allow any of these | |
| 57 options, plus other arbitrary uses. | |
| 58 | |
| 59 FreeCalypso solution | |
| 60 ==================== | |
| 61 | |
| 62 Our solution for firmware build target tangomdm (standard shipping fw for Tango | |
| 63 modems) is that our fw will look on boot for a file in FFS named | |
| 64 /etc/tango-pinmux; it will be a binary file of 4 bytes, defining pin | |
| 65 multiplexing configuration as follows: | |
| 66 | |
| 67 Byte 0: GPIO1 config | |
| 68 | |
| 69 The following values are defined: | |
| 70 | |
| 71 0x00: GPIO1 is left as an input from power-up | |
| 72 0x80: GPIO1 is switched to an output, initial value 0 | |
| 73 0x81: GPIO1 is switched to an output, initial value 1 | |
| 74 0x82: GPIO1 is wake-up output per Openmoko GTA01/02 convention | |
| 75 0x83: GPIO1 is RI output | |
| 76 | |
| 77 Byte 1: GPIO2 and GPIO3 config | |
| 78 | |
| 79 Bit 7: if 1, GPIO3 is DTR input, other bits in this nibble ignored | |
| 80 if 0, GPIO3 is a "generic" GPIO (undefined function) per bits 5 and 4 | |
| 81 Bit 5: if 1, GPIO3 is an output, otherwise it's an input | |
| 82 Bit 4: initial output value if GPIO3 is an output | |
| 83 | |
| 84 Bit 3: if 1, GPIO2 is DCD output, other bits in this nibble ignored | |
| 85 if 0, GPIO2 is a "generic" GPIO (undefined function) per bits 1 and 0 | |
| 86 Bit 1: if 1, GPIO2 is an output, otherwise it's an input | |
| 87 Bit 0: initial output value if GPIO2 is a generic (not DCD) output | |
| 88 | |
| 89 Byte 2: Peripheral pin mux config | |
| 90 | |
| 91 Bit 7: if 0, MCSI pins retain their default power-up functions | |
| 92 if 1, MCSI pins are switched to being GPIOs | |
| 93 | |
| 94 Bit 3: if 0, RESET_OUT pin retains its default power-up function | |
| 95 if 1, RESET_OUT pin is switched to being GPIO7 | |
| 96 Bit 1: if 1, GPIO7 is an output, otherwise it's an input | |
| 97 bit 0: initial output value of GPIO7 | |
| 98 | |
| 99 Byte 3: I/O config of MCSI pins turned into GPIOs | |
| 100 | |
| 101 This byte will be considered only if Byte 2 Bit 7 is set to 1, and will be | |
| 102 ignored otherwise. | |
| 103 | |
| 104 Bit 7: GPIO12 direction: 1 means output, 0 means input | |
| 105 Bit 6: GPIO11 direction: 1 means output, 0 means input | |
| 106 Bit 5: GPIO10 direction: 1 means output, 0 means input | |
| 107 Bit 4: GPIO9 direction: 1 means output, 0 means input | |
| 108 | |
| 109 Bit 3: GPIO12 initial output value | |
| 110 Bit 2: GPIO11 initial output value | |
| 111 Bit 1: GPIO10 initial output value | |
| 112 Bit 0: GPIO9 initial output value | |
| 113 | |
| 114 If the /etc/tango-pinmux file is missing, the effect will be the same as if all | |
| 115 four bytes are equal to zero: GPIO1-3 will be functionally-undefined inputs, | |
| 116 RESET_OUT/GPIO7 will be left as RESET_OUT from power-up, and all 4 MCSI pins | |
| 117 will be likewise left in their power-up default MCSI function. | |
| 118 | |
| 119 Any GPIO that is configured as an input can be read with AT+IOR, and any GPIO | |
| 120 that is configured as a generic (not built-in function) output can be set with | |
| 121 AT+IOW. | |
| 122 | |
| 123 Other GPIO pins | |
| 124 =============== | |
| 125 | |
| 126 Calypso pins GPIO0, TSPDI/GPIO4, BCLKX/GPIO6, MCUEN1/GPIO8 and MCUEN2/GPIO13 | |
| 127 are not brought out externally on Tango modules, thus they don't need to be | |
| 128 considered. Our fw configures them as dummy outputs to prevent floating inputs. |
