septentrio-gnss / mosaicHAT

Mosaichat: an open source Raspberry Pi HAT based on Septentrio's mosaic-X5
48 stars 15 forks source link

mosaicHAT

mosaicHAT: A GNSS HAT for Raspberry PI
Author: Jamal Sa'd
Maintainer: (Septentrio gnss github user) githubuser@septentrio.com
External website: https://github.com/septentrio-gnss/mosaicHAT
License: Creative Commons Attribution Share-Alike License. and Open Source HW
Available for purchase here: https://www.ardusimple.com/product/septentrio-mosaichat/

Click to watch this video introducing mosaicHAT

<img alt="Intro to mosaicHAT" src="doc_resources/yt_jamal.PNG" width=70%">

Table of contents

Introduction to mosaicHAT

What is mosaicHAT?

The mosaicHAT is an Open Source GPS/GNSS HW PCB HAT which integrates Septentrio's mosaic-X5 GNSS module (and other Septentrio pin compatible modules) with basic communications and which can be stacked into a Raspberry Pi system.

The goal of the design is to allow easy HW prototyping using the mosaic-X5 GNSS module taking the advantage of the computer ecosystem provided by the Raspberry Pi environment. The board however can also be used standalone since it can be powered either via USB or via power pins. This project and design can be used either produced with your local electronics assembly house or can also be used as a starting point for your own HW integrations.

A HAT for Raspberry Pi?

HAT stands for “Hardware Attached on Top”. It is a new hardware specification for add-one modules for the new Raspberry Pi model B+. HATs have several advantages compared to older add-on modules for the Raspberry Pi.

Robust mechanical design

With 4 mounting holes the connection between the Raspberry Pi and the add-on board is very robust.

Can I buy it?

Buy at Ardusimple now

Yes, the mosaicHAT can now be purchased from Ardusimple directly. Ardusimple is a company which produces easy to use GNSS RTK systems. They can sell the mosaicHAT directly as well as other mosaic based GNSS boards.
Website: https://www.ardusimple.com/product/septentrio-mosaichat/

<img alt="Ardusimple store" src="doc_resources/ardusimple-logo.png" width=50%">

Produce yourself

You can also use the reference design, layout and Bill Of Materials from this project and contact your local manufacturing company for producing it (no restrictions). Within this project we have used Eurocircuits who can be quite fast in producing a board for you (both PCB and assembly can be done by them). Section mosaicHAT Manufacturing and Assembly

Do I need to source special components for producing this board?

Not really, most of the components are generic enough. All components used are available on Digi-Key and clearly listed in the project's Bill Of Materials. The mosaic GNSS module can be obtained from Digikey or directly from Septentrio. Should your project be larger then we recommend you to contact Septentrio sales team directly at Septentrio Contact Page.

What is the mosaic module?

mosaic-X5

Septentrio's mosaic-X5, a multi-band, multi-constellation GNSS receiver in a low power surface mount module with a wide array of interfaces, designed for mass market applications like robotics and autonomous systems, capable of tracking all Global Navigation Satellite System (GNSS) constellations supporting current and future signals. With unique built-in AIM+ technology for interference mitigation, Septentrio is offering a performance benchmark in mass market GNSS positioning building blocks.

Other mosaic versions

Any other mosaic pin compatible products could also be used on this design, however you would need to take into consideration the functions or pins which would need to exposed and then modify the design for your own project. Surely feel free to spin of the project and refer to this one should you make other open source designs based on mosaicHAT.

Who is Septentrio?

Septentrio designs, manufactures and sells high-precision, multi-frequency, multi-constellation GPS/GNSS equipment for use in demanding applications. Septentrio products are used in a wide variety of industries including marine, construction, precision agriculture, logistics, machine control, rail, automotive, survey and mapping, geographic information systems (GIS), unmanned aerial vehicles (UAVs) and scientific. Septentrio receivers deliver consistently accurate and precise GNSS positioning scalable to centimeter-level and designed to perform solidly in the most challenging environments. Septentrio receivers are available as OEM boards, housed receivers and smart antennas.

The technology offers high accuracy and reliability thanks to GNSS+ algorithms as well as Septentrio's Advanced Interference Monitoring and Mitigation (AIM+) which protects against RF interference (jamming) and spoofing.

For more information about Septentrio products go to https://www.septentrio.com/.

Deliverables

This project makes the following deliverables for both integrators and designers of systems around Septentrio's mosaic modules.

File Description
KiCAD_files/HATv1.0.pro KiCAD project
KiCAD_files/HATv1.0.kicad_pcb KiCAD layout
KiCAD_files/HATv1.0.sch KiCAD schematic
KiCAD_files/mosaicHAT_library.lib Project schematic library
mosaic_design_components/mosaic_X5.mosaic-X5.lib mosaic symbol
mosaic_design_components/mosaic_X5.kicad_mod mosaic footprint
mosaic_design_components/mosaic3D.stp mosaic 3D object
BOM/mosaicHAT_BOM.xlsx mosaicHAT Bill of Materials
Fritzing/mosaicHAT.fzpz mosaicHAT Fritzing part
Fritzing/mosaicHAT_Graphic.svg mosaicHAT SVG

Is the project open source?

Yes, as it allows easy adaptations and thus enables the robotics and autonomous community to create their own spin off projects. As such this can be also a starting reference point for integrators when in need of GNSS integration.

With open source it means that the following is provided: -Editable source files -Modifications and spin off projects allowed -You are allowed to sell your version. No -NC limitations. -May require attribution -We encourage you to stand on our shoulders and even make money at it!

More info about licensing can be found here: Creative Commons Attribution Share-Alike License. and Open Source HW

mosaicHAT News

Survey-grade GNSS receiver based on mosaicHAT, by Chiba Institue of Technologyy.

Low-cost survey-grade GNSS mosaicHAT Station built by Prof. Suzuki from Chiba Institute Of Technology, Japan. The receiver comes with touch display to use the webUI of Septentrio mosaic-X5 GNSS module receiver. Click to visit the project's github repo.

<img alt="mosaicHAT station" src="doc_resources/mosaicHAT_station.gif" width=50%">

Drive test to Dead Sea with RTK corrections

mosaicHAT has been taken in a GNSS/RTK drive to the lowest point on earth's land - The Dead Sea (-400m Sea Level). Click to watch the journey on Youtube:

<img alt="mosaicHAT's jounrney to the Dead Sea" src="doc_resources/deadsea_yt.png" width=70%">

Disclaimer

This project is PROVIDED AS IS and while the general interfaces have been tested, the project has not been fully validated nor by the author nor by Septentrio. It remains your responsibility when producing or using this design for your own purposes. We recommend you to contact Septentrio should you have questions on how to integrate Septentrio's GNSS mosaic modules.

Their support web site is http://www.septentrio.com/support
.

Documentation sections

This project contains two important sections for documentation. The first one which is a user documentation (see section mosaicHAT user documentation) and the second one (see section mosaicHAT Design documentation) which is a documentation for designers wanting to modify the reference design of this project.

mosaicHAT user documentation

mosaicHAT Manufacturing and Assembly

You can use the reference design, layout and Bill Of Materials files from this project and contact your local manufacturing company for producing it. Within this project we have used Eurocircuits who can be quite fast in producing a board (both PCB and assembly can be done by them).

Elements to provide when manufacturing the board

If you decided to make the board through a PCB manufacturing service, they will ask for the following parts:

For manufacturing the board:

For assembly:

Ordering mosaic

You can order the mosaic-X5 from Digikey or you can contact Septentrio at for direct purchasing or for other mosaic models.

Organization part number
Digikey part number 2771-410322-ND
Septentrio part number 410322

General interfaces of mosaicHAT

The board exposes the following interfaces:

Connecting to Raspberry Pi

mosaicHAT could be easily attached on Raspberry Pi as shown here:

If the direct headers' connections were expanded for illustration, they will look like:

Power connections:

Wires Type
Red +5V
Black GND

Communication connections

Wires Type
Blue Serial UART
Orange General LEDs
Purple Reset

Preparing Raspberry Pi

To enable communication between mosaicHAT and Raspberry Pi (RPi), you should make sure needed communication permissions are set. We've tested mosaicHAT with both Raspbian OS and Ubuntu OS on RPi and found the following points needed.

Raspbian OS
Ubuntu OS

Connecting an antenna

In order to benefit from the multiple signals and constellations that the mosaicHAT board has it is recommended to purchase a capable multiband antenna. There are several GNSS antenna manufacturers in the market (e.g. Maxtenna, Tallysman, etc). For more information you can also contact Septentrio.

There are also different antenna types each of them suitable for different applications (e.g. robotics, larger machines, etc). Surely the larger the antenna the better performance you might get, however it is not all about size but also quality of antenna elements themselves.

Please make sure you get the right jumper so you can also set the right voltage depending on the chosen GNSS antenna.

Note: mosaicHAT board contains only one voltage regulator (3.3V). The 5V line is directly connected to power sources. As both RPi and USB supply 5V, using them for powering should not impose any threat. However, powering through external power headers should be done carefully. The VANT (Antenna voltage) pad of mosaic module is directly connected to the external +5V pin. IT IS NOT PROTECTED AGAINST HIGHER VOLTAGES. According to mosaic hardware manual, VANT accepts 3V to 5.5V supply.

When using the external power supply, make sure it is not more than 5V. If more than 5V source is desired, make sure the two PWR jumpers are connected to 3V3 pin, or removed. Supplying higher voltages to VANT could DAMAGE the module.

In the following photo, a Tallysman antenna has been connected to mosaicHAT. Jumper has been placed to supply 5V to antenna.

Note: A second antenna connector is added in the mosaicHAT design but the second antenna or heading are not supported with the mosaic-x5 or mosaic-Sx modules. The second antenna connector is only preliminary included for possible future support of heading mosaic modules. It is however important to know that the design with the second antenna connector does not cause any problems when used with the mosaic-x5 or mosaic-Sx modules as long as the main antenna is used (as shown on the picture). Contact Septentrio for more information on dual antenna GNSS receivers.

USB Communication

Connecting RPi, as well as any other PC, to mosaic via USB provides:

The Windows USB driver provided with mosaicHAT emulates two virtual serial ports, which can be used as standard COM ports to access the receiver. The Windows USB diver can be installed through the RxTools software suite.

Septentrio's RxTools is a SW which can be used to communicate to the mosaicHAT and can be downloaded free of charge from the Septentrio support site.

On Linux, the standard Linux CDC-ACM driver is suitable. Most terminal emulation programs will make no distinction between virtual and native COM ports. Note that the port settings (baud rate, etc) for virtual serial ports are not relevant, and can be left in their default configuration in the terminal emulation program. When connecting the USB cable to a Windows PC, a new drive appears in the file manager. This drive contains an installer for the USB driver. Running this installer is not needed if you have already installed the RxTools suite.

When the USB cable is connected, the receiver supports Ethernet-over-USB. The IP address allocated to the Ethernet-over-USB interface is 192.168.3.1. The Web user interface of the receiver can then be accessed using (http://192.168.3.1).

USB communication with mosaicHAT could be tested using tools like PuTTY. For example, here USB1 serial port is accessed to stream NMEA GGA messages:

TCP/IP ports could be also tested using PuTTY, or directly from terminal. Note that 28784 is the default TCP command port:

telnet 192.168.3.1 28784

More information on how to configure or access the web interface, USB serial and USB TCP can be found in the mosaic-X5 reference guide. You can download this one from Septentrio support site.

Serial Communication

A simple way to communicate with the mosaicHAT receiver is to connect one of its COM-ports. The mosaicHAT offers 2 COM port connectors:

default COM-port settings are: Parameter Value
baud rate 115200
data bits 8
parity no
stop bits 1
flow control none

The baud rate can be modified at any time by using the setCOMSettings command.

Serial connection between RPi and mosaicHAT could be tested using PuTTY:

Septentrio's RxTools is a SW which can be used to communicate to the mosaicHAT and can be downloaded free of charge from the Septentrio support site. Once you have downloaded it you can use Septentrio's RxControl and Data Link which can communicate with the receiver over a COM-port connection: select Serial Connection option when opening the connection to the receiver.

Note that currently there's no RxTools release for RPi (ARM architecture). Thus, RxTools should be used on a regular PC.

FTDI Connector

As mentioned an extra serial port is made available and can be used as an FTDI. The pins are aligned with standard FTDI conformity thus you can add support for converting the TTL to an RS-232 or USB signals. FTDI can also be used with some Bluetooth devices. There is a large variety of FTDI devices which can help in communicating with the mosaicHAT.

Example of an FTDI (USB cable)

In the following example, the common Bluetooth module (HC-06) has been used to control mosaicHAT from Android mobile phone. Note that most modules have a default 9600 baud rate while mosaic's default is 115200. Both devices should be set to the same baud rate for proper communication.

mosaicHAT-HC-06 connections:

FTDI connector could be used to convert TTL to RS-232. A more detailed schematic could be found in mosaic Hardware Manual.

TTL to USB connections:

Indicator LEDs

The following LEDs are defined on the mosaicHAT:

LED Description
PWR Device State (ON/OFF)
PPS Pulse Per Second
GL1 Connected to RPi (GPIO 6)
GL2 Connected to RPi (GPIO 26)
PVT PVT Available

PPSO clock could be tuned using setPPSParameters command. While GPLED default mode is PVTLED, it could be configured to work in different modes (PVTLED, DIFFCORLED and TRACKLED) using setLEDMode command. Refer to the Hardware Manual for blinking behaviour of each mode. Both General Purpose LEDs (GL1 and GL2) could be directly controlled by Raspberry Pi GPIO.

Just for illustration, the following python script runs GL1 and GL2 in alternate blinking mode. It is up to users to customize those LEDs as convenient for their applications.

import RPi.GPIO as GPIO # Import Raspberry Pi GPIO library
from time import sleep # Import the sleep function from the time module

GPIO.setwarnings(False) # Ignore warning for now
GPIO.setmode(GPIO.BCM) # Use BCM pin numbering

# Set pins 6 &26 to be output pins and set their initial values to low (off)
GPIO.setup(26, GPIO.OUT, initial=GPIO.LOW) 
GPIO.setup(6, GPIO.OUT, initial=GPIO.LOW) 

while True: # Run forever
 GPIO.output(26, GPIO.HIGH) # Turn 26 on
 GPIO.output(6, GPIO.LOW) # Turn 26 off
 sleep(1) # Sleep for 1 second
 GPIO.output(26, GPIO.LOW) # Turn 26 off
 GPIO.output(6, GPIO.HIGH) # Turn 6 on
 sleep(1) # Sleep for 1 second

Reset mosaic

mosaic-X5 could be forced to reset from Raspberry Pi. The nRST_IN pin of mosaic is directly connected to RPi GPIO 5 (Pin 29 in physical header).

The nRST_IN pin is active negative, which means mosaic will be in RESET mode when nRST_IN is low (GND). The pin is internally debounced (pull-up) so if pin is left unconnected (floating) the module will not enter RESET mode.

Initially, the RPi GPIO pins are set to INPUT mode. As the RPi input line have high impedance, nRST_IN will be floating. This means mosaicHAT board could run without issues initially even if GPIO 5 is not set to HIGH (while kept in input mode). However, it is not recommended to rely on the GPIO initial state. Users should drive HIGH to GPIO 5 for the stability of their applications.

To reset module, a LOW pulse, not shorter than 1 microsecond, should be driven to GPIO 5.

PPS Output

PPS signals are used for precise timekeeping and time measurement. One increasingly common use is in time synchronization with other sensors (e.g. Lidars or IMUs).

The receiver is able to generate an x-pulse-per-second (xPPS) signal aligned with either GPS, Galileo or GLONASS system time, or with UTC, or with the internal receiver time (RxClock). RxClock could be used to test PPS if no antenna or PVT available.

Polarity, frequency and pulse width of PPSO could be configured by setPPSParameters command.

PPS Output runs on 3.3V level. PPSO is directly connected to an indicator LED. While most PPS applications require a short pulse width, you may need to increase the pulse width to notice LED blinking.

More information on the definition of PPS output or on how to configure the PPS parameters can be found in the mosaic-X5 reference guide. You can download this one from Septentrio support site.

Events

The receiver can time-tag electrical level transitions on its Event input with an accuracy of 20ns. By default, the receiver reacts on low-to-high transitions but can also be configured on the receiver using setEventParameters command. Upon detection of a transition, the receiver can output the time and/or the position at the instant of the event. This will be output in the Septentrio Binary Format.

Events can be used as an example for UAV Photogrammetry (tagging the pictures taken either by a UAV or a robot).

EVENTs could be tested directly on mosaicHAT board by connecting PPS Output to one of the EVENTs pins. Note that this works with a single wire because they share the same GND. Here EVENTA is connected to PPSO, with PPS interval set to 1 sec.

To monitor EVENTs through web interface, go to PPS/Timing from GNSS menu:

EVENTs run on 3.3V level.

More information on the Events input of mosaic-X5 can be found in the mosaic-X5 reference guide. You can download this one from Septentrio support site.

Python Script

Following is a sample python script that could run on RPi to read coordinates from mosaicHAT. The script streams NMEA GGA messages from mosaic via serial, parse them and prints out coordinates.

import serial
import time

# Establish serial connection
ser = serial.Serial('/dev/ttyS0', 115200)
# /dev/ttyS0 is the RPi UART, 115200 is mosaic default baud rate
# For USB Serial, this could be (/dev/ttyACM0),the number is not fixed, to check your ports run: dmesg | grep tty
# Your application may not have access to USB serial, if you got an error run: sudo chmod 666 /dev/ttyACM0
time.sleep(1) # Wait for connection
ser.write(b'SSSSSSSSSSSSS\n') # Push mosaic to run in command mode
time.sleep(0.1) 
ser.write(b'sno, Stream1, COM1, GGA, sec1\n') # starting NMEA GGA stream command, for USB replace COM1 with USB1 or USB2
time.sleep(0.1)

while True:
    nmea_bytes = ser.readline()        
    nmea_string = str(nmea_bytes.decode())  
    nmea_string = nmea_string.rstrip()
    if (nmea_string.startswith('$GPGGA')):

        nmea_array = [element.strip() for element in nmea_string.split(',')]
        Quality_Indicator = int(nmea_array[6])
        if Quality_Indicator==0:
            print("No GPS Fix Available!") # NMEA GGA Quality indicator = 0 means no fix available
        else:
            # Parse NMEA GGA message
            UTC_Time= float(nmea_array[1])
            Latitude= float(nmea_array[2])*0.01
            Latitude_direction = nmea_array[3]
            Longitude = float(nmea_array[4])*0.01
            Longitude_direction = nmea_array[5]
            Height = float(nmea_array[9])
            Height_unit = nmea_array[10]
            # Print coordinates
            print('UTC Time: ' + str(UTC_Time))
            print(' Latitude: ' + str(Latitude) + Latitude_direction)
            print(' Longitude: ' + str(Longitude) + Longitude_direction)
            print(' Height: ' + str(Height) + Height_unit)  
        time.sleep(0.1)
    else:
        continue         

ser.close()

ROS support with ROSaic

The mosaic-X5 but also mosaicHAT are supported by ROSaic. ROSaic is a ROS driver for the mosaic modules and allows you to do integrations for robotic applications. ROSaic is also an open source project and can be found here:

Arduino support for mosaicHAT

The mosaicHAT can also work with Arduino. Take a look at the following project at Instructables. mosaicHAT Arduino is also an open source project and can be found here:

Using the Fritzing Schematics

Fritzing is an open-source hardware initiative that makes electronics accessible as a creative material for anyone. They offer a software tool, a community website and services in the spirit of using among others Arduino and to facilitate the layout and manufacturing of professional pcbs.

mosaicHAT fritzing part could be downloaded from here. Drag and drop the .fzpz file into fritzing interface or import through File>Open from the Menu Bar. With breadboard, schematic, and layout views designers can have a clear intuition on how the project will work and look like.

mosaicHAT Design documentation

This section is intended for people who want to understand more about the design of the mosaicHAT.

Design Overview

mosaicHAT is a 4-Layer Printed Circuit Board (PCB) designed to stack on top of Raspberry Pi. Both Top and Back layers are used for power and signals. The first inner layer is a GND plane whereas the second inner layer functions as a 3.3V power plane with a slight use of other connections.

Other than the female Raspberry Pi connecter, all components are placed on the Top layer. All components are Surface Mount Devices (SMD) except for connectors.

mosaicHAT was designed using KiCAD, an open source suite for Electric Design Automation. KiCAD provides a beautiful 3D viewer besides its design capabilities.

Following is the schematic plan, for higher quality check PDF schematic.

The board layout, hiding filled areas in zones.

Following is the layout layers description:

Layer Description
Layer 1 Red traces, trace free zones are filled with GND copper pour
Layer 2 Full GND plane
Layer 3 Pink traces, trace free zones make a 3.3V power plane
Layer 4 Green traces, trace free zones are filled with GND copper pour

A top 3D view of mosaicHAT, featuring main electronic components.

The following sections provide more details on mosaicHAT design.

mosaic Pinout

Septentrio mosaic-X5 is the base of mosaicHAT board. mosaic is a 31x31mm LGA module with 239 pins. All needed information on mosaic connections could be found in the Hardware Manual

KiCAD symbol, footprint and a 3D model of mosaic could be found in folder mosaic Design Components.

Following the manual instructions:

Note that a second un-assembled capacitor place has been left for debugging and testing. The second capacitor is not necessary for the function of mosaicHAT.

Power Sources

mosaicHAT could be powered through three options; Raspberry Pi, Micro USB and external power pin headers. mosaic module itself runs on 3.3V, thus a voltage regulator is used (LD1117AS33TR). According to its datasheet, the regulator's maximum input is 15V. Raspberry Pi and Micro USB already provide 5V. User should be careful when connecting higher voltage to external power pin headers. Though 5V is preferable, user can input up to 15V only if both VANT and FTDI PWR SRC jumpers are unconnected or connected to 3.3V. Pin headers of 5V in the jumpers are connected directly to input sources as it's presumed to be 5V.

Note: It is recommended to isolate external power sources from mosaic pads. Adding a dedicated 5V regulator is a safer option if 5V antenna supply is needed. Supplying higher voltages to VANT could DAMAGE the module.

Schottky diodes (MBRX120LF-TP) are used to insure one-way current direction. Decoupling capacitors (100nF and 10uF) are used according to regulator’s datasheet. Following is the power part of schematic.

In the figure above:

  1. Voltage Regulator (LD1117AS33TR).

  2. Raspberry Pi power source (5V pins).

  3. External power source headers.

  4. Micro USB power source.

Antennas

As mentioned before, mosaic-X5 is a single antenna module. Second antenna is preliminary included for possible future modules. Only first antenna (ANT1) is needed for the function of mosaicHAT.

Following is the antennas part in schematic.

First Antenna

The first antenna SMA connector is directly connected to ANT1 pad. ANT1 is ESD-protected within the module and carries DC voltage. The DC voltage of ANT1 is supplied from mosaic's VANT pad. mosaicHAT user could choose between 3.3V and 5V supply to VANT using 2.00 mm header jumpers.

The nominal input impedance of the RF line is 50 Ohms. Thus, antenna trace should have a characteristic impedance (Zo) of 50 Ohms. Line impedance could be measured by different tools, such as the freeware Saturn PCB toolkit.

Right characteristic impedance (~50 Ohms) could be reached by adjusting the width of RF line (Conductor Width) having PCB specifications fixed. Frequency is set to 1575 MHz as the GPS L1 Frequency. Conductor Hight is the thickness of the dielectric material between Top layer and the next copper layer which depends on manufacturing service and board specifications, in mosaicHAT case it's 0.36 mm.

Having right characteristic impedance insures reduced reflections in the opposite direction thus higher quality of signals. For uniform lines, characteristic impedance is not dependent on trace length.

It is also important to stich vias every few millimeters around the RF line for good ground coherence. Stitching GND vias help to protect line from interference.

For more details on antennas and interference please refer to mosaic's Hardware Manual.

Following is the first antenna part of board layout. The center of SMA connector is copper freed to prevent undesired capacitance due to high copper density.

Second Antenna

Note: A second antenna connector is added in the mosaicHAT design but the second antenna or heading are not supported with the mosaic-x5 or mosaic-Sx modules. The second antenna connector is only preliminary included for possible future support of heading mosaic modules. It is however important to know that the design with the second antenna connector does not cause any problems when used with the mosaic-x5 or mosaic-Sx modules as long as the main antenna is used. Contact Septentrio for more information on dual antenna GNSS receivers. The design below is preliminary but is subject to change upon release of future Septentrio mosaic dual antenna modules.

The second antenna is similar to first antenna except that ANT2 pad in mosaic is not internally ESD-protected and does not carry DC voltage by itself. Wherefore, both protection and DC biasing are needed.

For ESD protection, TVS diode (SESD0402X1BN-0010-098) is used. TVS diode protects the module against sudden removal of the antenna. As any stubs branching out of the RF line could cause undesired reflections, TVS diode should be placed exactly on top of the RF trace.

Biasing inductors are used to supply the ANT2 with DC voltage from ANT1 trace. Two inductors, one for each RF line, are used to avoid stubs and provide single tracks for RF signals. The inductor value is best to be around 33 nH with self-resonant frequency of 1.4 GHz. A 100 nF bypass capacitor has been placed between inductors to filter out any AC noise.

In the figure above:

  1. ANT1 RF trace.

  2. DC biasing circuit.

  3. ANT2 RF trace.

  4. VANT source jumper 2.00 mm headers.

  5. TVS diode.

    6 &7. SMA female connectors (Amphenol 132136).

Raspberry Pi Serial

Serial communication with Raspberry Pi is conducted by connecting COM1 of mosaic to Raspberry Pi UART pins: TX (GPIO 14) and RX (GPIO 15). GPIO 14 is pin 8 on the GPIO header whereas GPIO 15 is pin 10. Raspberry Pi's TX is connected to mosaic's RX1 while RX is connected to mosaic's TX1.

According to the hardware manual, non-zero voltage should not be driven to mosaic's input pads while in standby mode.

Thus, MosaicRX1 signal has been tri-stated by MODULE_RDY using tri-state buffer (SN74LVC1G126DRLR).

Reset Input

The nRST_IN pin of mosaic is directly connected to RPi GPIO 5 (Pin 29 in physical header). Refer to Reset mosaic in user documentation for more details.

Micro USB

To use mosaic as a USB device, the following pins of the module should be connected to a USB connector.

A common mode filter with ESD protection for USB 2.0 (ECMF02-2AMX6) is used with USB_DEV_P (D+) and USB_DEV_N (D-) for protection. The filter suppresses the noise of electromagnetic interference (EMI) on high speed differential USB lines.

As USB uses a differential pair, differential pair impedance (Zdifferential) should be tuned to avoid reflections. Zdifferential needs to be around 90 Ohms. Zdifferential could be calculated using Saturn's PCB toolkit. For mosaicHAT USB, traces width was set to 0.35 mm with 0.15 mm spacing.

Following board figure shows USB parts highlighted. GND vias were stitched around the USB connector and lines to insure good ground coherence.

  1. Micro USB connector (Molex 1050170001).

  2. Common mode filter.

  3. USB D+/D- lines.

  4. USB_V.

Events and PPSO

mosaic offers two event inputs which could be used to time tag external events. Both input pads of mosaic, EVENTA and EVENTB, use 1.8V level. For better integration with external applications, a level shifter (SN74AVC4T245PWR) is used to transform signals into 3.3V level.

Pulse Per Second Output (PPSO) is a mosaic clock output. Polarity, frequency and pulse width of PPSO could be configured by setPPSParameters command. As PPSO uses 1.8V level as well, same level shifter is used to get 3.3V level signals.

Both EVENTS and PPSO 3.3V levels are connected to 2.54 mm pin headers.

Port A tracks 1.8V while port B tracks 3.3V level. Direction could be set for two channels, each provides two connections. (1DIR) is set to low for mosaic input direction while (2DIR) is set to high for output direction. Both (O̅E̅) pins are set to low to enable low impedance state. VCCB is connected to +3.3V while VCCA is connected to +1.8V, which is supplied by 1V8_OUT pin of mosaic. Bypass capacitors are used on power supplies according to datasheet.

  1. EVENTS, PPSO and 1V8_OUT vias, connected to level shifter via Back layer.

  2. Level shifter.

  3. 3.3V level pin headers.

FTDI

Second serial connection to mosaic (COM2) is exposed through 2.54 mm pin headers. The FTDI connection could be used to communicate with other devices through serial (e.g. HC-06 Bluetooth module).

If the device needs power supply from mosaicHAT, like HC-06, VCC pin of FTDI could be used. 5V or 3.3V could be provided by moving The FTDI PWR SRC jumpers.

LEDs

mosaicHAT comes with five blue indicator LEDs.

  1. Raspberry Pi's (GPIO 6) which is pin 31 in header, connected to GL1 LED.

  2. Raspberry Pi's (GPIO 26) which is pin 37 in header, connected to GL2 LED.

  3. PPSO 3.3V level, connected to PPS LED.

  4. Trace to mosaic's GPLED pin, connected to PVT LED.

  5. Indicator LEDs, PWR LED is directly connected to 3.3V power plane.

Clock Frequency Reference

mosaic module embeds an internal Temperature Compensated Crystal Oscillator (TCXO) for frequency reference. The module can either use its internal TCXO frequency reference or an external frequency reference. In mosiacHAT's case, internal reference is used.

Following are Hardware Manual instructions for using internal TCXO.

Layout connections for REF and 2V8.

Further improvements

Further improvements or recommendations on this project are welcome either here or on spinoff projects. Here some possible improvements to the current design.