WiFi is an excellent protocol, but it certainly has its weaknesses. Its range in even a normal home is relatively limited, so you could imagine the sort of performance you’d expect through the hundred meters of dense woodland that [DO3RB] is trying to penetrate. So naturally the solution was to develop a new wireless transceiver for the ISM band.
Of course, getting reliable packet transmission is tough. In a building with brick walls, WiFi will get around five to ten percent packet loss. For TCP to remain reliable, one percent packet loss is the maximum designed loss of this wireless protocol. In reality, the transceiver achieves 0.075% packet loss real world.
The crux of the magic behind this excellent reliability is the extended binary Golay code. By halving the bitrate, the Golay code is able to correct for up to four errors per codeword. While a more complicated scheme could have been used, the Golay code allowed for easy porting to an MCU thus simplifying the project. All this is encoded with frequency shift keying in the ISM band.
This magic is tied up inside an tiny SAMD21 paired with a RFM12BP wireless front end. Using TinyUSB, the interface shows up to the host as a USB Ethernet adapter making for seamless networking setups. With reliable bi-directional communication, you could theoretically use this as a home networking solution. However, this is realistically best for IoT devices as the speeds are around 56 kbit/s.
While this is an incredibly simple system, harking back to 90s networking, it certainly gets the job done in a neat and tidy manner. And if you too wish hark back to 90s radio communications, make sure to check out this satellite imagery hack next!
Thanks [Bernerd] for the tip!
I remember using a modified Golay code for a wireless instrument system prototype for my final year project. The prototype worked OK (ish), but what impressed me was how good that forward error correction could be, especially when you interleave it, so it can correct small burst errors. Crammed it into an old lattice CPLD
Same here. I have my own experimental FSK + interleaving + DC removal + extended golay radio protocol that is surprisingly good. And I still run it on small STM32L031 ARM Cortex-M0 micros (as well as on ESP32s and I think I even tried ATmega, but long time ago).
The current repo where I experiment with the protocol is https://github.com/MarSik/laso-packet-rs (this is the third or fourth implementation.. C, C++, Rust) in case someone is interested. Recently I updated the DC removal to play nice (not multiply errors) with the golay decoder.
LoRa is nice (and proprietary), but I started playing with this when it was hard to get and more expensive and my goal was similar to Sigfox back then (more than a decade ago) – short fixed messages from sensors. FSK radios were easy to get and I still have a heap of RFM12Bs and RFM69s.
It’s a nice hack, but didn’t they invent wifi halow for these circumstances?
Hardly anything uses it. For IoT stuff, you’re probably better off using LoRa unless you need high data rates. The radio modules are cheap, readily available and easy to integrate with your microcontroller projects.
The github page claims that:
Great article :-)