Tunisia Travelogue

Six months after traveling there, I finally made the time to do a proper long-form write-up of my trip to Tunisia:

https://vilimpoc.org/travel/tunisia-2019/

I had a chance to expand on the things I noticed there and talk a bit about how to get there and get around, what to see, and most importantly what to eat!

It’s a great place to travel and a fine introduction to North Africa, and I was surprised how fast it was by airplane to get there.

Noisefloor Firmware

A couple of weeks ago, I started working on another of my infinite small projects.

This time, I needed a tool that could show me what was going on with another piece of firmware I was working on that was transmitting data regularly in the unlicensed 2.4 GHz frequency band.

The problem is this: I have multiple transmitters using the same frequency to send data to a single receiver. When the data rate starts to creep upward and the interval between transmissions decreases, you start getting serious resource contention.

It’s a classic multi-user situation, which is solved in other wired and wireless standards using things like Carrier Sense Multiple Access / Collision Detection (CSMA/CD). (In Ethernet or Wi-Fi, example.)

I don’t have access to the specialized off-the-shelf tooling needed to monitor the radio spectrum (it’s pretty expensive). So I decided to build my own, very limited, very specific tool.

That tool is Noisefloor, a small tool to help me visualize and debug a Time Division Multiple Access multiplex scheme by sampling the TDMA timeslot and plotting out when the various nodes are transmitting.

It runs on Nordic Semiconductor nRF5 Series chips using a single firmware executable.

Specifically: the nRF51422, nRF52832, and nRF52840.

That’s right, there’s a single binary file to load, compiled to the ARM v6-M specification, that runs on the off-the-shelf nRF51-DK, nRF52-DK, and nRF52840 Dongle development boards.

Part of the fun of developing this firmware was figuring out how to do write-once, run-anywhere code that dynamically adapts to the underlying microcontroller.

Anyways, thus far, I’ve pushed three posts out on the topic, and am documenting it as I go, including Requirements and Architecture specs. The code is almost feature-complete, and I’ll be slowly writing that up, too.

For more info, please check out the project. Any feedback or questions would be welcome.