For more information, please visit the following repositories on Github:

Main Controller Firmware:

Trunk Card:

Dual Line Card:

Hardware description:

The project consists of several boards designed in KICad. These boards are:

1. Dual Line Card

2. E&M Trunk card

3. Tone plant and DTMF decoder card.

4. Crosspoint switch card.

The following off the shelf PCB modules were also used in this project:

1. STM32F767ZI Nucleo board.

2. PCA9548  I2C bus expander

3. SPI SD Card

The dual line cards contain the necessary electronics for 2 subscriber lines. There is an STM32F103C8T6 microcontroller on each dual line card. This contains firmware which uses I2C to talk to the main microcontroller. The Subscriber line card has an Attention signal it can use to signal the STM32F767 that it needs service.

The trunk cards contain the necessary electronics to create a 4 wire Type 2 E&M trunk. There is an StM32F103C8T6 microcontroller on the E&M trunk card. This contains firmware which uses I2C to talkto the main microconroller. The Subscriber line card has an Attention signal it can use to signal the STM32F767 that it needs service.

The Tone Plant and DTMF controller card contains 2 Texas instruments PCM5102A I2C audio DAC's. These provide 4 channels of tone plant so that 4 connections can be doing different things with the tone plant. The tone plant  board also contains 2 MT88L70 DTMF decoders to support 2 simultaneous subscribers dialing DTMF digits.

The Crosspoint switch card contains two Zarlink MT8016 8X16 crosspoint switches configured as 8X32. All audio paths through the crosspoint switch are 4 wire (Separate RX and TX audio paths).

The I2C bus expander  expands one I2C bus from the STM32F767ZI into 8 separate I2C "channels". One I2C channel goes to each subscriber line and trunk card.

SPI SD Card. The SPI SD Card stores audio samples and configuration information. It  is connected to the STM32F767ZI on the Nucleo Development board.

Main Firmware:

The Main firmware runs on the STM32F767ZI. Here are its attributes:

1. FreeRTOS operating system using the CMSIS V2 interface

2. IDE: STM32 Cube IDE MX

3. Supports 2 channels of Multifrequency (MF) decoding using the Goertzel Algorithm (70mS min tone on and tone off times).

4. Supports 4 tone plant channels. These can be used to send call progress tones, DTMF and MF tones, and audio samples and loops.

5. Manages the connections using the 8X32 crosspoint switch.

6. Communicates with the line and trunk cards to get status, and send state change requests.

7. The firmware is written in C++, but only uses static classes, default arguments, templates, and namespaces. This means that everything which does happen is visible in the source code and not hidden behind some high level construct.