Mod boards

From ZeroPhone
Revision as of 05:12, 27 January 2019 by Admin (talk | contribs)
Jump to: navigation, search

ZeroPhone has expansion ports with GPIOs accessible on them, and those ports also expose various interfaces - I2C, I2S and SPI. I've developed different boards for those expansion ports, those boards allow to add hardware to ZeroPhone in order to increase its functionality.

GitHub repository with official mod boards described here

ZeroPhone parts' replacement boards

While ZeroPhone can be assembled from easily accessible parts, some of them can be replaced in order to add some useful functions to a ZeroPhone, or just in case the original board is not available.

TP4056+UART board

Status Working
Current version v1.1
Category Parts' replacements
Socket Charging board socket (back board)
Interfaces used UART (in parallel with the GSM modem)
Needs soldering Yes (to attach the board)
Software support Not necessary
Interrupt pin needed No
KiCad board name tp4056_usb_board

This board is a replacement for the TP4056-based charging+protection board (for LiIon batteries). In addition to charging and protection, it also allows you to connect to the Raspberry Pi UART through USB, as it has a USB-UART chip on it (CP2102N). The board has the same MicroUSB connector, + there are RX and TX LEDs. It has to be soldered in place of the original charging+protection board. This board was tested and works with ZeroPhone Delta/Delta-B.

Previous revisions


SH1106 OLED 1.3" breakout board

Status Working
Current version v1.2
Category Parts' replacements
Socket Display socket (front board)
Interfaces used SPI0-0 (same as the original display)
Needs soldering Yes (to attach the board)
Software support luma.oled (display library used by ZPUI)
Interrupt pin needed No
KiCad board name sh1106_1.3_spi_breakout

This board is mostly identical to the OLED breakout that's the suggested one for ZeroPhone (made by Heltec) - actually, it's a reverse-engineered and improved copy of the Heltec 1.3" SPI OLED breakout, in case Heltec breakouts will be hard to obtain. They have the same pinout, too (with the CS line and no RST, as these breakouts have autoreset). It also has reverse polarity protection, unlike the Heltec breakout - in case the SMD jumper header is accidentally miswired. This board was designed and tested - the reverse polarity protection might not work, though, needs to be tested better.

Previous revisions


SIM5300 breakout

Status Designed but not yet tested
Current version v1.0
Category Parts' replacements
Socket GSM modem socket (back board)
Interfaces used UART (same as 2G modem), USB
Needs soldering Yes (to attach the board)
Software support Linux drivers work, ofono driver not yet tested
Interrupt pin needed No
KiCad board name sim5300ea_breakout

This board is the often requested 3G addon for ZeroPhone. It's soldered in place of the 2G modem breakout. The PCB was designed but hasn't yet been assembled due to lack of modems. However, the schematic was tested with another 3G modem (SIM5320), which turned out to be too bulky, so the switch to SIM5300 was made, Once it's ready and tested, it'll be available during crowdfunding.

Keypad with scrollwheel

Status Partially working
Current version v1.0
Category Parts' replacements
Socket Keypad board socket (front board)
Interfaces used GPIO5 (needs an OLED display that doesn't use the RST pin)
Needs soldering Yes (to attach the board)
Software support Not yet tested (but there's a suitable ZPUI driver)
Interrupt pin needed No
KiCad board name keypad_with_scrollwheel

This is a replacement ZeroPhone keypad, modified to have a scrollwheel instead of volume up&down buttons. It has to be soldered in place of the original keypad, but it's not too hard to swap the original keypad with a modded one - only soldering iron, solder and a solder pump are necessary. This board has three directions on the scrollwheel - up, down and press; up and down work (mapped as VOLUME_UP and VOLUME_DOWN by default), but press doesn't yet work as it needs some additional hardware.

Keypad with joystick

Status Designed but not yet tested
Current version v1.0
Category Parts' replacements
Socket Keypad board socket (front board)
Interfaces used None
Needs soldering Yes (to attach the board)
Software support Needs modified ZPUI driver, not yet done
Interrupt pin needed No
KiCad board name keypad_with_joystick

This is a replacement ZeroPhone keypad, modified to have a joystick instead of the center 5 buttons. It has to be soldered in place of the original keypad, but it's not too hard to swap the original keypad with a modded one - only soldering iron, solder and a solder pump are necessary. This board has five directions on the joystick - up, down, left, right and press; mapped as KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT and KEY_ENTER respectively.

Ease-of-use

Dock board

Status Working
Current version v1.1
Category Ease-of-use
Socket 5-pin I2C socket, 3-pin charging+DCDC+analog socket, USB socket
Interfaces used I2C (can be used with other I2C boards as it extends the header), USB
Needs soldering Yes (to make your own connections)
Software support None so far
KiCad board name dock_connection_board

This is a board that allows you to "dock" a ZeroPhone - connecting charging, I2C and USB signals to your ZeroPhone in a single plug. It's designed mainly for dock stations of some kind (from simplest charging docks to more involved ones, with USB and I2C devices), but it can also allow you to connect some kind of devices - i.e. powered speakers, or your robot's debugging port. Each dock contains a small user-writable EEPROM where you can write a dock identificator string for use with software - so that you can distinguish between different docks in your apps.

Audio boards

Out of the box, ZeroPhone doesn't have lots of audio-related features - one audio output from the Pi Zero (on the 3.5mm jack), and speaker+microphone connected to the GSM modem - those are two separate audio systems that aren't interconnected in any way. Mod boards in this category are either adding new audio sources/sinks/interconnects, or improving the existing ones.

Audio buffer board

Status Working
Current version v1.1
Category Audio boards
Socket Audio filtering socket (front board)
Interfaces used None
Needs soldering Yes (to attach the board)
Software support Not necessary
Interrupt pin needed No
KiCad board name audio_buffer

This mod board is copied from the Raspberry Pi B+ schematic and filters the PWM signal from the Raspberry Pi before it gets converted into audio, making the resulting audio cleaner. It also breaks out the microphone pin from the 3.5mm jack, along with a ground pin. The mod board has to be soldered onto the ZeroPhone front board - but first, two jumpers on the front board have to be cut.

I2S microphone board (SPH0645)

Status Designed but not yet tested
Current version v1.0
Category Audio boards
Socket 12-pin socket
Interfaces used I2S (can be used with other I2S boards, but not those that add audio input through I2S)
Needs soldering Yes (to attach the board)
Software support Linux kernel driver
Interrupt pin needed No
KiCad board name sph0645_breakout

This mod board adds a mono microphone (a SPH0645) to the I2S connection of the Raspberry Pi. The microphone is front-facing, but, due to the way the SPH0645 microphone has to be placed, the mod board sticks out the ZeroPhone outline a little bit. The board has to be soldered onto the back board, on the 12-pin expansion socket.

Hardware tinkering boards

Gadget power adapter

Status Designed but not yet tested
Current version v1.0
Category Hardware hacking
Socket 5-pin IR socket (on top of back board)
Interfaces used GPIO4 and GPIO17
Needs soldering No (might need soldering for attaching your own power leads)
Software support Not necessary
Interrupt pin needed No
KiCad board name gadget_power_adapter

This board allows powering your gadgets while keeping your ZeroPhone safe (and allowing power control using GPIOs and a slide switch). By flipping the board, you can make it output either 3.3V or LiIon voltage from the ZP battery (from 3.6V to 4.2V). It uses the MAX40200 ideal diode IC to prevent backpowering (and allow for power control). It has both THT and SMD connection points for your own wires.

8-pin SPI flash socket adapter

Status Working
Current version v1.1
Category Hardware hacking
Socket 12-pin socket
Interfaces used SPI0-1 (can't be used with other SPI0-1 boards)
Needs soldering No (might need hot air to detach chip from the original board)
Software support Linux command-line (flashrom)
Interrupt pin needed No
KiCad board name spi_soicw8_programming

This board allows reading and writing popular SPI flash chips - for example, 25xxx series (Winbond 25Q32B, 25Q64B, SST25VF080B etc.). Those are used as BIOS chips on PC motherboards, and OS storage on routers or other embedded devices (for example, ESP8266 modules with 4MByte flash use those chips). So, for instance, this mod board can be used to unbrick a laptop with BIOS problems, flash coreboot/libreboot on your laptop (or a BIOS with the Intel ME disabled), or re-flash a router if the firmware update process was interrupted because of a power outage. In general, it allows you to easily dump firmware from a device for reverse-engineering purposes, provided the device in question uses a 8-pin SPI ROM (many do).

16-pin SPI flash socket adapter

Status Working
Current version v1.0
Category Hardware hacking
Socket 12-pin socket
Interfaces used SPI0-1 (can't be used with other SPI0-1 boards)
Needs soldering No (might need hot air to detach chip from the original board)
Software support Linux command-line (flashrom)
Interrupt pin needed No
KiCad board name spi_soicw16_programming

This board was developed specifically for BIOS chips used on some Thinkpads (like MX25L1605, MX25L3205 and MX25L6405), so that it's easier to flash Coreboot/Libreboot firmware on them. Other than that, the purpose and functionality is pretty much the same as for the 8-pin SPI flash chip board.

24xx EEPROM SO8 chip adapter board

Status Working
Current version v1.0
Category Hardware hacking
Socket 5-pin I2C socket
Interfaces used I2C (can be used with other I2C boards)
Needs soldering Yes (to connect the flash chip to the board)
Software support Linux command-line
Interrupt pin needed No
KiCad board name 24xx_i2c_so8_programming

This board allows to read and write popular I2C EEPROMs - mostly, the 24xxx family, like 24С01/24C02/24C04 etc. Those EEPROMS are mostly used for configuration data storage - in wired/wireless network cards, USB/Bluetooth devices, computer monitors/LCD panels and many more other types of consumer electronics. The package used is SO8 - one of the most popular packages for these EEPROM chips, though it's not the smallest, it's relatively easy to solder.

24xx EEPROM TSSOP8 chip adapter board

Status Working
Current version v1.0
Category Hardware hacking
Socket 5-pin I2C socket
Interfaces used I2C (can be used with other I2C boards)
Needs soldering Yes (to connect the flash chip to the board)
Software support Linux command-line
Interrupt pin needed No
KiCad board name 24xx_i2c_tssop8_programming

This board allows to read and write popular I2C EEPROMs - mostly, the 24xxx family, like 24С01/24C02/24C04 etc. Those EEPROMS are mostly used for configuration data storage - in wired/wireless network cards, USB/Bluetooth devices, computer monitors/LCD panels and many more other types of consumer electronics. The package used is TSSOP8 - a moderately popular package for these EEPROM chips, it's smaller than SO8, but it's harder to solder (you might want to use solder wick when soldering it, or even try hot air).

24xx EEPROM DFN8 chip adapter board

Status Working
Current version v1.0
Category Hardware hacking
Socket 5-pin I2C socket
Interfaces used I2C (can be used with other I2C boards)
Needs soldering Yes (to connect the flash chip to the board)
Software support Linux command-line
Interrupt pin needed No
KiCad board name 24xx_i2c_dfn8_programming

This board allows to read and write popular I2C EEPROMs - mostly, the 24xxx family, like 24С01/24C02/24C04 etc. Those EEPROMS are mostly used for configuration data storage - in wired/wireless network cards, USB/Bluetooth devices, computer monitors/LCD panels and many more other types of consumer electronics. The package used is DFN8 - a not-so-popular package for these EEPROM chips, it's smaller than both SO8 and TSSOP8, and can only be reasonably soldered using hot air.

Networking/communications boards

It's also possible to add more ways to communicate to ZeroPhone - to be able to transmit/receive on radio frequencies, work with infrared signals and connect to wired networks, like RS485 or Ethernet networks.

ENC28J60 breakout board

Status Designed but not yet tested
Current version v1.0
Category Networking
Socket 12-pin socket
Interfaces used SPI0-1 (can't be used with other SPI0-1 boards)
Needs soldering No
Software support Linux driver
Interrupt pin needed Yes
KiCad board name enc28j60_breakout_adapter

This is a small board that accepts commonly used 10-pin ENC28J60 breakouts in order to add an Ethernet port to a ZeroPhone. There's a driver in the Linux kernel that already supports these, so the board only matches the breakout pins to the 12-pin expansion port pins. It needs one interrupt pin. So far, it couldn't be made to work - there seems to be some kind of problem with the breakout that I have, it keeps destroying the ENC28J60 ICs.

Infrared RX&TX board

Status Designed but not yet tested
Current version v1.0
Category Networking
Socket 5-pin IR socket (on top of back board)
Interfaces used GPIO4 and GPIO17
Needs soldering Yes (to enable the board)
Software support Linux command-line
Interrupt pin needed No
KiCad board name simple_ir_tx_rx

This is a simple board for the 5-pin header on the top of ZeroPhone, it adds infrared receiver and transmitter hardware, which is supported by LIRC. In order to use the 5-pin header GPIOs and, as a result, the IR mod board, two solder jumpers on back board have to be shorted with solder (TODO: add pics and directions).

RFM-12/RFM-01 addon

Status Designed but not yet tested
Current version v1.0
Category Networking
Socket 12-pin socket
Interfaces used SPI0-1 (can't be used with other SPI0-1 boards)
Needs soldering No
Software support Not researched yet (but no problems expected)
Interrupt pin needed Yes
KiCad board name rfm12_rfm01_breakout

This is a small board that works with RFM-12 (ISM FSK transmitter/receiver) and RFM-01 (ISM FSK receiver) boards from HopeRF. It allows ZeroPhone to transmit, receive and intercept communications on 315/433/868/915MHz, depending on which frequency RFM module is tuned for by the factory. It needs one interrupt pin.

Adapters

Triple QWIIC adapter

Status Working
Current version v1.0
Category Adapters
Socket 5-pin I2C socket
Interfaces used I2C (can be used with other I2C boards)
Needs soldering No
Software support Not necessary
Interrupt pin needed No
KiCad board name triple_qwiic_adapter

This is an adapter for Sparkfun QWIIC system that allows you to easily connect I2C sensors to your projects - with this adapter, you can connect multiple different sensors from the QWIIC system to your ZeroPhone. It has three QWIIC sockets wired in parallel, in case one or two would not be enough - QWIIC peripherals typically have a passthrough socket on them, but sometimes you need to wire things in different directions.

GY sensor adapter

Status Working
Current version v1.0
Category Adapters
Socket 5-pin I2C socket
Interfaces used I2C (can be used with other I2C boards)
Needs soldering No
Software support Not necessary
Interrupt pin needed No
KiCad board name gy_sensor_adapter

This is an adapter for Chinese GY series I2C sensors - they typically have GND-VCC-SCL-SDA-INT-... pinouts, as opposed to VCC-SDA_SCL-INT-GND ZeroPhone Delta series. With this adapter, you can connect GY sensors to your ZeroPhone directly, without using wires. You can also solder this adapter to your GY sensors permanently, so that it's easy to plug them in.

3.5" display adapter

Status Working
Current version v1.0
Category Adapters
Socket 12-pin SPI socket
Interfaces used SPI, 4 GPIOs, 5V
Needs soldering No
Software support Linux kernel driver
Interrupt pin needed Yes (for touchscreen)
KiCad board name 3.5_display_adapter

This is an adapter for cheap Raspberry Pi-compatible 3.5" 320x480 color touchscreen displays that are available on eBay/Aliexpress/others. It allows you to hotplug these displays (to a certain extent) into a ZeroPhone and show Linux console/X on it. The touchscreen function currently wasn't tested to work - the CS pin has to be a software CS (from a non-hardware-CS GPIO) and therefore the software support for it is a little bit more involved.

Cryptography-related boards

ATSHA204 board

Status Working
Current version v1.0
Category Cryptography
Socket 5-pin I2C socket (needs to be soldered on the opposite side of the socket)
Interfaces used I2C (can be used with other I2C boards)
Needs soldering Yes (to attach the board)
Software support None so far
Interrupt pin needed No
KiCad board name crypto_eeprom

This is an Atmel CryptoAuthentification addon with protected hardware-based key storage, based on ATSHA204A IC, for any purposes the user might want to use it for. This chip can cryptographically sign data, ensuring that messages sent from a certain ZeroPhone can be tied to that ZeroPhone hardware by the user, even if the SD card is copied and inserted into another ZeroPhone. This board is for the I2C socket and is actually meant to be sandwiched between the back board and the Pi Zero, during the assembly (so it's both easy to install and hard to remove, as Pi Zero is attached to the back board with 40 hard-to-remove solder connections).

ESP12 socket boards

The ESP12 socket on the front board will be unoccupied if you use the Raspberry Pi Zero W. when building your ZeroPhone. This socket has whole 7 GPIOs available - the SDIO GPIOs (that can't be mapped as SDIO anymore because RPi WiFi uses the SDIO peripheral) and the ESP_RST GPIO (GPIO0). There are some boards that you can solder in the ESP12 socket to make use of these GPIOs:

ESP 6x LED + switch board

Status Designed but not yet tested
Current version v1.0
Category ESP12 socket boards
Socket ESP12 socket
Interfaces used GPIO
Needs soldering Yes (to attach the board)
Software support RPi GPIO drivers
KiCad board name esp12_1button_6leds

This board gives you 6pcs LEDs and one SMD side button in place of the ESP12. You can use all these with some kind of software, i.e. a Python script that controls these LEDs and reads that button.

ESP ATMega board

Status Designed but not yet tested
Current version v1.0
Category ESP12 socket boards
Socket ESP12 socket
Interfaces used GPIO
Needs soldering Yes (to attach the board)
Software support None yet
KiCad board name esp12_atmega_addon

This board has an ATMega328P in QFN package. It breaks out most of the ATMega pins onto the ESP12 pads. It doesn't have an oscillator footprint, therefore, it's supposed to run using the internal RC oscillator. It has the ATMega SPI interface (with CS and RST pins available) connected to the RPi GPIOs, so if you use some kind of bitbanging driver for SPI, you can communicate with this ATMega using SPI (and likely reprogram it in-circuit).

ESP MicroSD board

Status Designed but not yet tested
Current version v1.0
Category ESP12 socket boards
Socket ESP12 socket
Interfaces used GPIO
Needs soldering Yes (to attach the board)
Software support None yet
KiCad board name esp12_microsd_slot

This board simply has a MicroSD slot connected to the GPIO pins. Using some kind of bitbanging SD card driver, you likely can make it work to have yourself a (slow) SD card reader slot. Alternatively, you could try somehow disabling the Pi Zero W's onboard WiFi and drive the SD card in SDIO mode - do check the schematic to see if that's possible, IIRC I designed the board so that it would be.