GitHub

Fox Red Labs / Builds / Smart home and radio

A walkie-talkie over a 915 MHz radio

The Mac speaks a line and compresses it to 4-bit ADPCM. The CC1354P10-1 sends it over a 915 MHz radio, the CC1407P on an MSPM0 G5187 receives it, and the Mac plays it back.

HardWiring needed

Parts and steps

The BP-CC1407P-9-FE radio board with eight color-coded wires, each tagged with the LP-MSPM0G5187 pin it goes to
Radio pins 1 to 10 run down the left outer row and 11 to 20 up the right outer row (20 at the top). Pins 23 and 36 are in the inner rows: 23 is the third socket down the left inner row, 36 the fifth down the right inner row. J20 is the 2x4 header by the microSD slot, printed PB12 PB10 PB8 PB6 over PB13 PB11 PB9 PB7. PB10 and PB11 also reach the board's audio converter, so the board's microphone cannot be used while the radio is wired. Full size.
Pin table
Radio pinLaunchPad pinWhat it isNeeded
Radio pin 1 (3V3)J1 pin 1 (3V3)powerrequired
Radio pin 20 (GND)J3 pin 22 (GND)groundrequired
Radio pin 7 (SCLK)J20 PB9SPI clockrequired
Radio pin 15 (PICO)J20 PB8data into the radiorequired
Radio pin 14 (POCI)J20 PB7data out of the radiorequired
Radio pin 18 (CS_N)J20 PB6chip selectrequired
Radio pin 36 (RESET_N)J20 PB10radio resetrequired
Radio pin 23 (SPI_INT)J20 PB11radio says it has datarequired
  1. Wire the radio to the LaunchPad.BENCH

    With USB unplugged, screw the 915 MHz antenna onto the radio board's SMA socket and join the radio to the MSPM0 G5187's J20 header with the eight wires in the table. Plug the other LaunchPad into the Mac.

    You should see: Each wire's other end is on the pin in the table.

  2. Build the CC1407P side.TERMINAL

    Build radio_lab, which turns the MSPM0 G5187 into a radio driven by text commands on its serial port.

    RADIO_APP=radio_lab mspm0g5187/radio/build.sh

    You should see: The script ends with image: mspm0g5187/radio/out/radio_lab.out.

  3. Build the partner side on the CC1354P10.TERMINAL

    Follow the Build section of cc1354p10/radio-rx/README.md to get the F2 SDK libraries and the rfPacketRx example, then build partner.c as that README describes, with the Wi-SUN FSK mode 2b setting (phyType868, #define RX_ADV).

    You should see: The build leaves rfPacketRx.hex, about 29 kB.

  4. Flash both boards.TERMINAL

    Put each probe's serial in its .ccxml (xdsdfu -e lists them). Flash radio_lab.out to the MSPM0 G5187 and rfPacketRx.hex to the CC1354P10, then start the CC1354P10 with xds110reset.

    Replace <serial> before you run this.

    /Applications/ti/uniflash_9.6.0/dslite.sh --mode flash -c mspm0g5187/MSPM0G5187_<serial>.ccxml -e -f -v mspm0g5187/radio/out/radio_lab.out

    You should see: Both boards answer on their serial ports.

  5. Send a voice message.TERMINAL

    Set the two serial ports and run the demo. It speaks "Hi Mom! This is Fox Red Labs, talking over a nine hundred fifteen megahertz radio. Over.", sends it in 50 ms frames, receives it and writes both recordings. The result is added to site/data/radio-demos.json.

    Replace <G5187 serial> and <partner probe serial> before you run this.

    LAB_G=/dev/cu.usbmodem<G5187 serial>1 LAB_P=/dev/cu.usbmodem<partner probe serial>1 python3 mspm0g5187/radio/demos.py voice

    You should see: The run reports 122 frames received. site/media/radio-demos/voice-sent.wav and voice-received.wav play the same message.

Or hand it to a coding assistant

Paste this in a terminal. It hands off to an AI assistant, which says when to plug in each of the two boards.

git clone --depth 1 --filter=blob:none https://github.com/Fox-Red-Labs/fox-red-labs.git && cd fox-red-labs ./start.sh mspm0g5187 walkie-talkies --assistant claude

It runs the steps above and reports what it saw.

Not Claude Code? Copy this prompt instead.
Clone https://github.com/Fox-Red-Labs/fox-red-labs and read mspm0g5187/AGENTS.md first. Then run Walkie-talkie over a 915 MHz radio on my LP-MSPM0G5187 and LP-CC1354P10-1, following docs/builds/walkie-talkies.md. Tell me when to plug in a board and what you saw at each step.

If something goes wrong

The radio later answers with a checksum error on everything it receivesThe inner-row wires (pins 23 and 36) are the usual missing ones.
The SDK is not foundSet the paths the script prints.
The make cannot find SysConfigPoint SYSCONFIG_TOOL at sysconfig_cli.sh in the 1.28.0 folder, as the README shows.
DSLite fails with Error -242Unplug the board's USB for 3 seconds and flash again.
A frame is cut shortThe CC1354P10's serial input dropped characters while it was sending; run it again.

What to build next

Every build. The code for all of them is in the GitHub repository.

Evidence and limitsA spoken message crosses a 915 MHz radio link in 122 of 122 frames and plays back the same except for 40 ms. Ran on 2 boards. Results, sources, timing and limits.

Expected result: The received recording plays the same message as the sent one.

What this shows

  • Speech compressed to 32 kbps survives a 100 kbps radio link: 122 of 122 frames arrived with a good checksum.
  • A frame takes about 99 ms from computer to computer.
What this does not establish, and limits

What this does not establish

  • One way only. Two-way voice needs a speaker amplifier and a second CC1407P, and the board's microphone shares pins with the radio.
  • Range was not measured: both boards were on one desk.

Limits to keep in mind

  • One frame of 122 reached the radio already cut to 123 of its 205 bytes; the radio's checksum passed, so the air link did not corrupt it.

Sources

Versions, sizes and timing

Codec and radioIMA ADPCM, 4 bits, 8 kHz (32 kbps); Wi-SUN FSK mode 2b, 100 kbps, 915 MHzthe data
Frames122 of 50 ms, 205 bytes each; delay median 99.2 ms, maximum 135.0 msthe data

Evidence

  • On 2026-10-11 a 6.1 second message went over in 122 frames of 50 ms: 122 of 122 with a good checksum, 121 bit-exact against what the Mac sent, a median 99.2 ms and a maximum 135.0 ms from computer to computer. the data
  • The received recording matches the sent one sample for sample except 40 ms at 2.36 s, the one frame that reached the radio cut short by the CC1354P10's serial input. the data

Other boards

What the status words mean

Works ran here and did what it shouldCould work some of it ran; real porting effort is left; hover for whatNot for this chip the chip or its vendor software cannot; hover for why

Result grid

Project
LP-MSPM0G3507MSPM0G3507 chip
LP-MSPM0L1306MSPM0L1306 chip
LP-EM-CC2340R5CC2340R52 chip
LAUNCHXL-F2800137TMS320F2800137 chip
Walkie-talkie over a 915 MHz radio
LP-MSPM0G3507
LP-MSPM0L1306Not for this chipNo radio
LP-EM-CC2340R5Not for this chipNo sub-1 GHz radio on this chip; it is 2.4 GHz only
LAUNCHXL-F2800137Not for this chipNo radio on this chip

Works ran here and did what it shouldShould work it builds; only naming, packaging or build glue is in the way; hover for whichCould work some of it ran; real porting effort is left; hover for whatNot for this chip the chip or its vendor software cannot; hover for why

Experiments (1)

StatusWhat was triedResult
WorksCan one TI radio and an MSPM0 run family demos: walkie-talkie, fox hunt, key finder, smart house?
MSPM0 G5187, 2026-10-11
All five demos work as built. One-way voice passed 122 of 122 frames. Fox hunt heard 64 of 64 beacons, hot to cool. The key finder answered 10 of 10 in 21 ms. The house node sent mailbox, doorbell, panic, kid messages...

Source files

Get the code and tell us how it wentThe clone command, the board folder with its AGENTS.md, reports from others, and the three report forms.

Get the code

Clone the repository and open the board's folder below. AGENTS.md is a plain text file of notes for AI coding assistants, and llms.txt at the root indexes the site for one.

git clone https://github.com/Fox-Red-Labs/fox-red-labs.git

Code is BSD-3-Clause, writing is CC BY 4.0; third-party folders keep their own licenses.

Built it? Tell us

Built this, or got stuck? Report it on GitHub with a few short answers. Your report shows here in your words, marked as yours. A failure that repeats on the bench gets its fix here.