FreeCalypso > hg > freecalypso-docs
view FCDEV3B-repackaging @ 22:9f9d2996c1ba
MCSI-apparent-bug outdated article removed:
see Calypso-digital-voice for up-to-date replacement
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 23 Oct 2019 00:26:36 +0000 |
parents | f57f29dcc6d6 |
children |
line wrap: on
line source
Repackaging FreeCalypso modem into different physical form factors ================================================================== [This document was originally written in 2018-10; subsequent updates are noted inline in the same bracketed form as this note.] As of this writing, our FreeCalypso Triband Modem Solution has reached the status of a finished product: it is no longer experimental or developmental, it is now fully fit for operational use on live public GSM networks in end user applications that need a standards-compliant GSM+GPRS modem. However, at the present moment it is only available in the physical form factor of a development board (FCDEV3B) that was originally designed to serve as a software/firmware development platform, and as such it is not ideally suited for use as an end product. For end use applications it would be highly desirable to take our proven FC Triband Modem Solution (FC-TMS) as realized on the FCDEV3B and repackage it into other physical form factors. This repackaging can be done in two ways: Approach 1 (strongly preferred): the party who desires to have our FC-TMS in a particular form factor gets in touch with FreeCalypso Central, engages in a discussion with us to arrive at the new form factor to be implemented (it needs to satisfy your requirements and be feasible for us to implement), then funds the cost of PCB layout labor to turn the new form factor modem into reality. More specifically, we would do the design at the schematics+BOM level while the the PCB layout step would have to be outsourced at cost. Approach 2 (NOT preferred, but can sometimes be agreed to in limited cases): someone else does the repackaging work under their own control. In the case of Approach 1 the new modem product will always be guaranteed to work flawlessly and be fully compatible with our FreeCalypso sw and fw architecture because in this case the hardware design is personally supervised by the Mother of FreeCalypso and must receive her approval prior to being released to layout and then to fabrication. In the case of Approach 2 this assurance is lacking. This document provides some technical guidelines that MUST be followed in order for a new modem hw product to stand a chance at being compatible with FreeCalypso; anyone who follows Approach 2 against our recommendation but still wishes to have a chance at receiving support from us MUST follow these design guidelines. LEGAL NOTICE: Following these technical guidelines does NOT by itself grant you a license to use our FreeCalypso trademark on your hardware products; this trademark is personally owned by Mychaela N. Falconia and only she has the authority to license its use at her sole discretion. Similarly our agreement with GSMA does NOT allow us to sublet any part of our IMEI number range to any other parties; any IMEI number ranges that may be allocated by GSMA to FreeCalypso products may ONLY be used for those products that are physically produced by Falconia Partners LLC from start to finish and not any others. Basic technical guidelines ========================== The purpose of these guidelines is to make it possible for the same firmware build configuration to support both our existing FCDEV3B and various repackagings of the underlying core modem solution (FC-TMS), i.e., to have the same official FC Magnetite firmware builds for target fcdev3b run not only on the original development board, but on all physical repackagings of the same core modem solution. To make such firmware reuse possible, the following hardware design constraints MUST be followed: * The flash+RAM chip must be the same Spansion S71PL129NC0HFW4B as used on our FCDEV3B, and it must be wired the same way: first flash chip select on Calypso nCS0, RAM on nCS1, second flash chip select on nCS2. The flash reset line needs to be wired the same way as on FCDEV3B V2, otherwise Calypso sleep modes will be broken. We realize that this flash and RAM capacity (16 MiB and 8 MiB, respectively) is extreme overkill for typical modem applications outside of development, but supporting multiple flash chip types would introduce a configuration management burden which we are not willing to take on. [2019-03 update: we now have working flash chip type autodetection, and commercial modem products can use a smaller flash+RAM chip, specifically Samsung K5A3240CTM or K5A3281CTM as used by Openmoko.] * Calypso's unused DSR_MODEM/LPG pin was left unconnected in Openmoko's version but on our FCDEV3B it is tied to GND on the board. Other boards seeking to be FreeCalypso-compatible need to have this pin tied to GND as well because our firmware leaves this pin in its default power-up config of DSR_MODEM input and does not change it to LPG output - leaving it unconnected would cause it to float. * Our firmware configures Calypso GPIO 3 as an input; GPIOs 0-2 and those multifunction pins which are unused and configured as GPIOs (TSPDI/IO4, BCLKX/IO6, MCUEN1/IO8 and MCUEN2/IO13) are configured as outputs. Board wiring must be compatible with these directions: those pins which our fw drives as outputs can be simply left unconnected, while GPIO 3 needs to be sensibly driven or tied off as explained below. * If someone needs a modem that produces an Openmoko-style application processor wakeup signal (asserted by the fw when the modem needs to send something to the host but is blocked by CTS being held high), this signal should be connected to GPIO 0. Openmoko used GPIO 1 for this purpose, but in FreeCalypso GPIO 1 is taken because we use it for the loudspeaker control signal like on TI's D-Sample and Leonardo boards, hence we are moving the AP wakeup signal to GPIO 0, to be implemented if and when anyone builds a modem based on FC-TMS that needs to provide such a signal. * If your product includes a loudspeaker amplifier like on our FCDEV3B, connect its on/off control input to GPIO 1, otherwise leave our GPIO 1 output unconnected. * Our fw produces a DCD modem control output on GPIO 2; if you are connecting the MODEM UART channel to an RS-232 port or to a USB-serial chip with a full set of modem control signals, connect DCD to GPIO 2. * Our fw treats GPIO 3 as a DTR modem control input following TI's C-Sample and D-Sample boards. If your product has a real DTR signal coming from an RS-232 interface or from a USB-serial chip, connect it to GPIO 3, otherwise GPIO 3 needs to be pulled down to GND like on Leonardo and FCDEV3B. * If you are connecting the MODEM UART channel to a full RS-232 port or to a USB-serial chip with a full set of modem control signals, you should connect DSR and RI to TSPDI/IO4 and MCUEN1/IO8, respectively. Right now our fw drives IO4 low and IO8 high, corresponding to DSR asserted and RI negated (normal quiescent state), and connecting the signals in this way allows the possibility of extending the fw to drive them in some more intelligent manner if need be. * Both Calypso UARTs need to be wired in an accessible way so that our standard FC Magnetite firmware can be used with the AT command interface on the MODEM UART and RVTMUX on the IrDA UART. * Our fw configures the MODEM UART with hardware flow control enabled; if your application lacks RTS/CTS signals, then Calypso's CTS_MODEM signal needs to be pulled down to GND so it is seen as asserted. * Our fw configures the 4 MCSI/GPIO pins as MCSI rather than GPIO. If your board does not use MCSI because you are tapping VSP instead or not using any digital voice interface at all, then you should put pull-down resistors on MCSI_RXD, MCSI_CLK and MCSI_FSYNCH, otherwise these signals will float. MCSI_RXD can be directly tied to GND without a resistor as it is always an input to the Calypso, but MCSI_CLK and MCSI_FSYNCH need to be pulled down with resistors: our fw can enable TI's "Bluetooth headset" and "Bluetooth cordless" modes, in which case these signals become outputs. If the signals are switched to being outputs by software command but are tied to GND on the board, the result will be a shorted output driver which could damage the chip, and it is clearly not acceptable to produce hardware that can be damaged by an AT command, even an obscure and non-standard one. Cost increment ============== If you don't need huge flash and XRAM capacity, don't have a DTR input and are not using MCSI, then the incremental cost of being firmware-compatible with FCDEV3B compared to Openmoko's approach of leaving all unused signals unconnected and using a smaller flash+RAM chip consists of: * A logic voltage level translating buffer to provide a reset to the flash chip that meets its timing requirements; [2019-03 update: the above is no longer required, you can now use one of the smaller flash chips which are compatible with TI's silly FDP scheme and thus don't need the extra translating buffer IC for reset.] * 3 pull-down resistors on GPIO3, MCSI_CLK and MCSI_FSYNCH; * Direct connections to GND on DSR_MODEM and MCSI_RXD pins. For parties other than the Mother, it is up to you to decide if being firmware- compatible is worth the cost increment or not, but all modem repackagings produced by us under the FreeCalypso brand will follow these software and firmware configuration management compatibility guidelines, and the same is required for anyone else who wishes for their hardware variant to be accepted into the FreeCalypso family. Tapping VSP for the digital voice interface =========================================== The Calypso+Iota chipset includes an interface called VSP for Voice Serial Port; per TI's design intent it is a strictly private interface between Calypso and Iota chips, but it is possible to tap into this interface to get an external digital voice channel. TI's official method for getting a digital voice channel out of a Calypso modem is to use MCSI in their so-called "Bluetooth headset" mode, however, our experiments on the FCDEV3B have revealed that this interface does not work the way one would naively expect. Unless we can convince TI to dig up and release the sources for the Calypso DSP ROM, which we obviously cannot count on, we won't be able to use MCSI reliably until and unless we undertake to fully reverse their DSP ROM code from disassembly, which would be an extremely major and very costly undertaking. Because of this unfortunate situation, the alternative way of tapping into VSP needs to be given consideration. [2019-03 update: we got MCSI working now, please read the Calypso-digital-voice article for more info about both MCSI and VSP options.] Tapping into VSP is absolutely not possible on our current FCDEV3B, as the signals in question are currently routed directly from one BGA to another and do not come up to the surface at any accessible point. The same situation holds on every other existing Calypso phone and modem known to us - after all, VSP was meant to be a private chip-to-chip interface. Instead we are presenting the idea of tapping VSP as a possibility for anyone who undertakes to repackage our FC-TMS into some new form factor and desires a digital voice channel while at it. In TI's standard solution VSP clock and frame sync signals are generated by the Iota ABB and are inputs to the Calypso DBB. Because they are inputs to the Calypso, it may be tempting to disconnect them from the ABB and have them originate from an external source instead - however, TI's DSP code in the ROM was most certainly written with the assumption that these signals will only ever be driven by their ABB and never by anyone else, hence having them come from a source whose timing does not come from the Calypso can cause all kinds of strangeness which we will never be able to debug properly because the DSP is a mysterious black box. Therefore, my (Mother Mychaela's) stance is that if you break the VSP connection between Calypso and Iota, then you are entirely on your own - don't expect any help from me. Instead my idea is to tap into VSP without breaking it, specifically: * Keep the clock and frame sync connection between Calypso and Iota, with Iota remaining the driver on these nets - but also bring these signals out externally, so external logic can sync itself to this interface as well. * Do likewise for the line that carries downlink voice from the DBB to the ABB: let the ABB receive it and use it to drive the analogue earpiece output (which would be unconnected in a digital voice application), but let external logic receive it too. * Break only the line that carries uplink voice from the ABB to the DBB: bring the Iota output side on one external interface pin and the Calypso input side on another external interface pin. Putting a jumper on these adjacent header pins would restore TI's original configuration and allow uplink voice to come from an analogue microphone connected to the ABB, and if a digital uplink voice source is desired, remove the jumper and have an external source provide the bits which would otherwise come from Iota's voice ADC. The above approach would provide a usable digital voice interface that would be completely transparent (invisible) to the Calypso DSP and even to the ARM-side firmware, hence it should work without any nasty surprises. Triband vs. quadband ==================== One shortcoming of our current FreeCalypso modem solution is that it is triband and not quadband; more specifically our standard hw build omits the GSM850 band, or we can build a different configuration that supports GSM850 but omits EGSM (the 900 MHz band). To the best of our knowledge the GSM850 band is used very little these days, but being only triband makes us look bad compared to the competition: all of the mainstream proprietary GSM modem modules are fully quadband these days. It *is* possible to make a Calypso-based quadband modem, as TI had one: their Leonardo reference board for the Calypso+Iota+Rita chipset existed in several versions some of which were quadband, and their E-Sample board (Calypso+) which used the same Rita RF block was also quadband. However, changing our current FC modem design from triband to quadband would involve a highly invasive PCB layout change: basically our entire modem PCB layout and particularly the GHz RF section would have to be ripped up and reshuffled into a different arrangement. Furthermore, if we as the FreeCalypso community do decide that we wish to produce a quadband modem, I (Mother Mychaela) would NOT be comfortable with entrusting the needed re-layout work to an "ordinary" PCB layout contractor who is not a cellphone RF design expert, instead we would need to get a consultation from an RF PCB design expert who has experience very specifically with GSM cellphone design and not any other applications. Finding such an expert would be a major task in itself, and that expert most certainly won't come cheap. Therefore, a quadband FreeCalypso modem probably won't happen unless we get someone with a lot of money to throw around. There is one exception, though: if anyone would like to see our FreeCalypso modem repackaged into the SMT module form factor copied from BenQ M32 and pays for that venture, the result would be naturally quadband as the layout of BenQ's module follows the same floorplan in the RF section as TI's quadband Leonardo and E-Sample layout. However, that approach would involve a step to reverse- engineer BenQ's layout by slicing their board and imaging its inner layers, hence anyone seeking this approach would need to be prepared to pay for that step. If anyone ever does pay for the creation of a quadband version of our FreeCalypso modem solution, be it in BenQ's physical form factor or some other, what about the firmware? For a long time I thought that a quadband modem would need a different firmware build configuration because of incompatible TSPACT signals. Our current triband modem (copied from Openmoko) has them wired like this: TSPACT2 = Tx high bands TSPACT1 = Rx PCS band TSPACT4 = Tx low bands But TI's original TSPACT wiring for the quadband RFFE on their Leonardo and E-Sample boards was different: TSPACT2 = Tx low bands TSPACT1 = Tx high bands TSPACT4 = Rx GSM850 band These two TSPACT signal assignments are mutually incompatible, hence if we make a quadband modem following TI's original Leonardo/E-Sample TSPACT wiring, it won't be able to share the same fw with our triband modems. But then I got an idea: what if we wire them up in our own creative way as follows: TSPACT2 = Tx high bands TSPACT4 = Tx low bands TSPACT5 = Rx GSM850 band Then we can have the same fw build configuration support both triband and quadband FreeCalypso modems by driving the signals as follows: TSPACT1 = Rx PCS band TSPACT2 = Tx high bands TSPACT4 = Tx low bands TSPACT5 = Rx GSM850 band TSPACT1 will be driven but unused on quadband modems, whereas TSPACT5 will be driven but unused on triband ones like our current FCDEV3B. To me (Mother Mychaela) being able to have the same fw among *all* FreeCalypso modem variants, both triband and quadband, is more valuable than the symbolic act of recreating TI's original RFFE wiring, hence I am now leaning toward this new approach.