Introduction

This is an ongoing project to develop very inexpensive hardware and software to help amateur radio folks with D-Star.

It started with goal of developing a really, really inexpensive GMSK DV Adapter to use with the Raspberryt Pi and the Arduino boards. There are already many different DV Adapters available, but all of them are in the $100+ range. When looking at the basic Bill of Materials (BOM) it looked like the cost could be brought down dramatically. Next it was the development of new GMSK hardware for the Pi to work around the bugs in the Broadcom drivers. And finally it was the development of a board to allow the inexpensive radio module from Analog Devices to be used for a Pi hotspot.

All these web pages detail the design and building of all these boards. All the designs are released as open source. All the hardware CAD files, the firmware and software are made available.

1-2 1-2
1-1 1-1
1-2

RasPi DV AVR

This board is the more advanced version of the RasPi DV board. In includes an onboard ATMega328 chip to take care of all the interrupts and bit managing from the CMX589 chip. Go to the RasPi DV AVR page for more information.
raspi dv avr

DV for Arduino

This board is a GMSK adapter designed as an Arduino shield and the software is designed to make the board appear to be a DV-RPTR. This would allow for the board to be supported in existing D-Star programs with very minor software changes. It has a Bill of Materials cost of about $8. Go to the DV for Arduino page for more information.
Arduino shield

RasPi ADF7021

This board is the adapter board to go between the Raspberry Pi and the ADF7021 evaluation radio board. Go to the RasPi ADF7021 page for more information.
raspi adf7021

RasPi DV

This board is a GMSK adapter designed as a Raspberry Pi daughter board to plug into the GPIO conector. It has a Bill of Materials cost of about $8. Go to the RasPi DV page for more information.
Raspberry Pi board

It is a great little design except for one big problem - lost interrupts on the Pi. The GMSK board generates two clock signals that are sent to the Pi, one for transmit data and one for receive data. The software on the Pi receives an interrupt for every rising edge of the clocks. The problem has to do with the Broadcom device drivers that handle the GPIO pins. There is a well known bug in the driver that only allows one interrupt to be in progress at the same time. This means that if the transmit or receive clocks are aligned, the software will not get one of the two interrupts. In practice this means that about 1 out of every 50 clock edges is lost. The D-Star error correction built into the AMBE codec cannot handle lost bits very well and a 2% loss rate is much too high for it to handle.

We've been in contact with Broadcom asking for help to fix the problem. Unfortunately they declined our request. We've also seen posts describing the same problem in the Pi forums, but so far none of the suggested fixes solves the problem.

Narrowing down the problem took a lot of time and effort. A rather large kernel driver had to be written and debugged. We got the kernel driver working well enough for a very specific set of conditions. If the board is used for only recording, or only playback, AND all the data is written to/read from a single kernel buffer, AND there is NO user mode interaction with the driver, THEN it will work pretty well. It isn't a set of conditions that would allow anyone to create a hotspot. The source code to the kernel driver is available via the downloads page.

RasPi DV I/F

This board is the adapter board to go between the Raspberry Pi and the RasPi DV board and adds the functionality of the Arduino to control the CMX589 chip. Go to the RasPi DV page for more information.
raspi dv i/f

Images of these boards plugged into the Raspberry Pi and Arduino

The image below is the RasPi DV AVR board plugged into a Raspberry Pi.
Raspberry Pi DV AVR board

The image below is the ADF7021 radio module plugged into the RasPi ADF7021 board plugged into a Raspberry Pi.
Raspberry Pi 7021 board

The image below is the RasPi DV GMSK board plugged into a Raspberry Pi.
Raspberry Pi DV board

The image below is the RasPi DV GMSK board plugged into RasPi DV I/F adapter board plugged into a Raspberry Pi.
Raspberry Pi DV I/F board

The image below is the DV for Arduino adapter plugged into the Arduino UNO board.
DV for Arduino board

Raspberry Pi

What is a Raspberry Pi? To borrow from the: Raspberry Pi wiki page:
"The Raspberry Pi is a credit-card-sized single-board computer developed in the UK by the Raspberry Pi Foundation with the intention of promoting the teaching of basic computer science in schools." For more information, visit the Raspberry Pi Foundation website

The image below is a Raspberry Pi ver 2 board used in the development the Pi software and driver.
Raspberry Pi board

Arduino

What is an Arduino? To borrow from the: Arduino Wiki page:
"Arduino is a single-board microcontroller designed to make the process of using electronics in multidisciplinary projects more accessible. The hardware consists of a simple open source hardware board designed around an 8-bit Atmel AVR microcontroller, though a new model has been designed around a 32-bit Atmel ARM. The software consists of a standard programming language compiler and a boot loader that executes on the microcontroller." For more information, visit the Arduino website

The image below is an Arduino Mega1280 used in the development the Arduino firmware.
arduino mega1280 board

The image below is an Arduino UNO used in the development the Arduino firmware.
arduino mega1280 board

Block diagram

The GMSK board consists of a small number of parts thanks to the number of functions that are packed into the CMX589 chip. There is a control interface with the CPU and an analog input/output. The analog circuity includes an op-amp to allow signal level adjustment as well as bandpass filtering.
GMSK DV adapter block diagram

Raspberry Pi Mechanical/Electical

The PCB were designed with a number of factors in mind, including:

Arduino Mechanical/Electical design

The PCB was designed with a number of factors in mind, including: The design of Arduino shields allow for more board space as it has to be large enough to fit all 4 connectors. This means almost 4 square inches are available. With this much extra space, the design was done with through-hole components. The CMX589 chip is almost impossible to find in the PDIP package. Because of this, the footprints for both the PDIP and TSSOP packages are included on the board so either one can be easily used.

First prototype

The first step in the project was to build a prototype of the core parts of the hardware on a solderless breadboard. It was then hooked up to an Arduino board from Seeed Studio.
alt text
Some simple code written on the Arduino showed that we could likely support the 4800 receive and 4800 transmit interrupts per second. It also gave some data on the relative timing of the signals on the CMX589.

All text and images on ki6zum.com are copyright (c) 2010-2014 and may not be reproduced in any form without written permission.
ki6zum