Skip to the content
PCBKitNew board
2 layers40 × 75 mmPhone pcb, the printed circuit board in 3D

This is a repository containing some code artifacts but mostly testing fragments for a project to develop a device to connect landline phones to other landline phones via a private VoIP network.

Size
40 × 75 mm
Copper layers
2
Thickness
1.6 mm
Parts
29
Nets
47
Pads
163
Tracks, vias
191, 17
Pours
2
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
15 Jun 2024
Updated
14 Dec 2025

Overview

Phone pcb is an open-source printed circuit board by kangp3, from the kangp3/phone repository on GitHub, published under the MIT licence. It is a 2-layer board of 40 × 75 mm with 29 parts on 47 nets, routed with 191 tracks and 17 vias.

It is built around the PCM1802DB and ASE-24.576MHZ-ET. Its parts include 13 capacitors, 2 resistors, 2 connectors, 1 IC and 1 crystal.

Main components

2

README

README.md

phone

This is a repository containing some code artifacts but mostly testing fragments for a project to develop a device to connect landline phones to other landline phones via a private VoIP network. At time of writing of this README (July 2024) efforts are mostly focused on the design of the hardware side of the project, but this repository may come to house more complete companion software as the project grows.

  1. Ring phone via software
  2. Play audio on phone speaker
  3. Receive audio from phone and convert to digital signal
  4. Parse DTMF signals for dialing
  5. Create system for initial phone setup
  6. Create web app for call routing and social networking

Development Utilities

SSH

The Pi is set up with the hostname peterpi.local and can be SSH'ed to using the username recurse.

text
ssh recurse@peterpi.local

SSH setup

text
sudo sed --in-place=.bak --expression='s/^#PermitEmptyPasswords no/PermitEmptyPasswords yes/g' /etc/ssh/sshd_config
sudo systemctl restart sshd
sudo passwd -d recurse

Dial tone generator

These commands are used to send sine wave signals to the speakers of the Pi. By correctly routing the output audio device of the Pi to "headphones" routed to pins, these signals can be sent to the phone. The following two sine waves are the frequencies used in a standard dial tone.

text
speaker-test -t sine -f 350 -l0
speaker-test -t sine -f 440 -l0

Cross-compile to Rasppi (old stinky cross-rs way)

text
cross build --target=arm-unknown-linux-gnueabihf

Device Tree compile

text
scp phoneodeo.dts recurse@peterpi.local:
scp bootconfig.txt recurse@peterpi.local:
text
dtc -@ -H epapr -O dtb -o phoneodeo.dtbo -Wno-unit_address_vs_reg phoneodeo.dts
sudo cp phoneodeo.dtbo /boot/overlays
sudo chown root:root bootconfig.txt
sudo chmod 755 bootconfig.txt
sudo cp bootconfig.txt /boot/firmware/config.txt

Install phreak.service

text
scp goertzel/phreak.service recurse@peterpi.local:
scp goertzel/phreak.timer recurse@peterpi.local:
scp goertzel/target/arm-unknown-linux-gnueabihf/release/goertzel recurse@peterpi.local:
text
sudo chown root:root ~/phreak.service
sudo chmod 777 ~/phreak.service
sudo mv ~/phreak.service /etc/systemd/system
sudo systemctl disable phreak.service
sudo systemctl enable phreak.service

sudo chown root:root ~/phreak.timer
sudo chmod 777 ~/phreak.timer
sudo mv ~/phreak.timer /etc/systemd/system
sudo systemctl enable phreak.timer
sudo systemctl start phreak.timer

Install .asoundrc

text
scp asoundrc recurse@peterpi.local:.asoundrc
text
sudo cp .asoundrc /root

Set volume

text
amixer sset PCM -M '40%'
sudo alsactl store

Take down Wi-Fi

text
sudo nmcli connection delete 'Recurse Center'; sudo reboot

Cross-compile

Install some cross-compilation dependencies

text
brew tap messense/macos-cross-toolchains
brew install arm-unknown-linux-gnueabihf
rustup target add arm-unknown-linux-gnueabihf
brew install cmake  # dependency of aws-lc-sys
cargo install --force --locked bindgen-cli  # dependency of aws-lc-sys

Need to pass the sysroot in order to get around this error:

text
  --- stderr
  /Users/peter/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/aws-lc-sys-0.30.0/aws-lc/include/openssl/base.h:61:10: fatal error: 'stdlib.h' file not found

  thread 'main' panicked at /Users/peter/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/aws-lc-sys-0.30.0/builder/sys_bindgen.rs:110:10:
  Unable to generate bindings.: ClangDiagnostic("/Users/peter/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/aws-lc-sys-0.30.0/aws-lc/include/openssl/base.h:61:10: fatal error: 'stdlib.h' file not found\n")
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Got some help from these sources:

text
BINDGEN_EXTRA_CLANG_ARGS=--sysroot="$(xcrun --sdk macosx --show-sdk-path)" cargo build --release --target=arm-unknown-linux-gnueabihf

Cross-compile dialbutton

Install some cross-compilation dependencies

text
brew tap messense/macos-cross-toolchains
brew install x86_64-unknown-linux-gnu
export CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=x86_64-linux-gnu-gcc

Helpful resources:

text
PATH="$PATH:/opt/homebrew/Cellar/x86_64-unknown-linux-gnu/13.3.0/bin" cargo build --release --target x86_64-unknown-linux-gnu --features http --bin dialbutton

PBX

text
wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz
tar -xzvf asterisk-20-current.tar.gz
cd asterisk-20.9.3
./contrib/scripts/install_prereq install &&
./configure &&
make &&
make install

Update users

Edit pjsip.conf on the remote

text
asterisk -x 'module reload'

Certbot

text
sudo apt-get update
sudo apt-get install -y snapd
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot -d pbx.frandline.com --manual --preferred-challenges dns certonly --manual-auth-hook /home/ubuntu/renew.sh
sudo su
text
curl -LsSf https://astral.sh/uv/install.sh | sh

Test:

text
sudo certbot renew --dry-run

socat wiring on Windows

Cygwin:

text
socat -t30 -T30 UDP4-RECVFROM:5060,fork UDP4:"$(wsl hostname -I | tr -d ' ')":5062 &
socat -t30 -T30 UDP4-RECVFROM:5061,fork UDP4:"$(wsl hostname -I | tr -d ' ')":5063 &

ssh wiring on Windows:

PowerShell (administrator):

text
netsh interface portproxy add v4tov4 listenaddress=x.x.x.x listenport=22 connectaddress=$($(wsl hostname -I).Trim()) connectport=22
netsh advfirewall firewall add rule name=”Open Port 22 for WSL2” dir=in action=allow protocol=TCP localport=22

Helpful links

Relevant Material

Parts

29
QtyValueFootprintReferences
5100nCapacitor_SMD:C_0402_1005MetricC5, C7, C9, C11, C13
410uCapacitor_Tantalum_SMD:CP_EIA-3216-18_Kemet-AC4, C6, C8, C10
21uFCapacitor_SMD:C_0402_1005MetricC2, C3
110nCapacitor_SMD:C_0402_1005MetricC1
11kResistor_SMD:R_0402_1005MetricR1
120kResistor_SMD:R_0805_2012MetricR2
1470uCapacitor_SMD:C_Elec_8x10.2C12
1ADC_{IN}TestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mmTP8
1ASE-24.576MHzOscillator:Oscillator_SMD_Abracon_ASE-4Pin_3.2x2.5mmX1
1Ag1171SConnector_PinHeader_2.54mm:PinHeader_1x7+7_P2.54mm_VerticalU1
1FRTestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mmTP5
1GNDTestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mmTP9
1PCM1802Package_SO:SSOP-20_5.3x7.2mm_P0.65mmPCM1
1PCM_{CLK}TestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mmTP1
1PCM_{DIN}TestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mmTP3
1PCM_{FS}TestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mmTP2
1PhonesTestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mmTP7
1RJ11Connector_RJ:RJ11_Ckmtw_A800_HorizontalJ2
1RMTestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mmTP4
1Raspberry_Pi_2_3Connector_Samtec_HLE_SMD:Liansheng_FH-00369_2x20_P2.54mm_HorizontalJ1
1SHKTestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mmTP6

Questions

How big is the Phone pcb PCB?

It measures 40 × 75 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Phone pcb use?

29 parts, built around the PCM1802DB and ASE-24.576MHZ-ET. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Phone pcb KiCad files?

From the kangp3/phone repository on GitHub, at the commit this page was made from: the board is phone/phone_pcb/phone_pcb.kicad_pcb and its schematic phone/phone.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Phone pcb design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 4 layers177 × 110 mmFloater, the printed circuit board in 3D

    Floater

    danfoisy/vdatp

    Volumetric Display using an Acoustically Trapped Particle

    638 parts524
  • 6 layers51 × 65 mmOwo, the printed circuit board in 3D

    Owo

    hydrastro/owo

    uwu

    135 parts3
  • 2 layers101.6 × 137.4 mmOpenxcvr, the printed circuit board in 3D

    Openxcvr

    dawsonjon/OpenXcvr

    Cost Effective HF transceiver based on max1000 FPGA module

    155 parts38MIT
  • 2 layers70 × 64.5 mmClockgen main board, the printed circuit board in 3D

    Clockgen main board

    GDH-Technologies/cx-clockgen

    Essentially a fork of Rene Wolf's `cxadc-clock-generator-audio-adc` gitlab project

    17 parts1
  • 4 layers50 × 90 mmTuner pedal, the printed circuit board in 3D

    Tuner pedal

    kulovac/tuner-pedal

    Source for my tuner pedal project from algorithm design to PCB implementation

    108 parts
  • 2 layers52.3 × 10.5 mmStackLink, the printed circuit board in 3D

    StackLink

    gusmanb/logicanalyzer

    24 channel, 100Msps logic analyzer hardware and software

    29 parts5.1kGPL-3.0
  • 2 layers56 × 20 mmHallEffectXY Endstop, the printed circuit board in 3D

    HallEffectXY Endstop

    VoronDesign/Voron-Hardware

    Cool Hardware designed by the Voron Design group

    29 parts1.1kGPL-3.0
  • 2 layers50 × 23.2 mmAnalog, the printed circuit board in 3D

    Analog

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    29 parts1kGPL-3.0