Beyond BLE: Cracking Open the Black-Box of RF Microcontrollers [video]
media.ccc.de
media.ccc.de
https://github.com/astuder/Inside-EZRadioPRO
There are basically four main OEMs for SubGHz radios (hobby projects): - Analog Devices (ADF7xxx) - SiLabs (Si4xxxx) - Semtech (SX1xxx) - Texas Instruments (CCxxxx)
If i remember correctly the Analog Devices and the Semtech radios share the same internal core (blackfin?). Please correct me if i am wrong. For the Semtech and ADF702x there are firmware patches and/or ROMs available. The most interesting part would be to unlock the internal test mode which some of those chips have…
I'm also curious, of all the available BLE chips, which one has the "most sane" development environment? I had the misfortune of using the SiLabs BLE chips, and it seems like the Dev Environment was meant for Web dudes or something -- it seemed very foreign to me, an embedded guy. It was like 5 layers to go from their SDK down to the machine instruction that would set the value of a GPIO pin hi or lo. Confused documentation, spread out over dozens of not-related sections, weird configuration wizards, etc. Now, the Hardware seemed just fine, but gosh, the Dev Environment?
I've heard good things about Nordic's environment, but haven't used it. I also know nothing about TI's or AD's.
Opinions appreciated!
However, they've deprecated the old SDK [0] in favour of Zephyr [1] and quite a number of people struggle with it (check the forums and general internet). I have less experience with Zephyr, but both of them use a lot of python support tools which seem to suffer from versioning amd compatibility problems (even trying to keep a stable platform has been difficult here, what works one time doesn't work a few months later). YMMV.
[0] https://docs.nordicsemi.com/bundle/sdk_nrf5_v17.1.0/page/ind...
Previously if there was a project that came up that didn’t strictly need BLE, I’d recommend the nrf5 sdk because it was reliable and stable. Now with the new sdk they are encouraging people to write firmware that’s much easier to port to other mcus (with zephyr) and the development experience has much higher cognitive load.
I'd recommend the EFR32xG23 if you would like to give it a go.
That's some amazing detective work! Congratulations on pulling it off.
For example, NimBLE (the Apache BLE implementation for Nordic) interfaces with the radio using a high-level, documented register interface to the PHY. It basically constructs a BLE frame and passes a pointer to it into some registers (which trigger DMA). Then a magic black box modulates and transmits that frame.
This talk goes one level deeper, into the magic black box. These are sometimes traditional fixed-function hardware but usually they are some kind of obscure DSP architecture which is ROM-coded with a patch capability (or just has blob firmware).
This is how those proprietary rf protocols work for mice and such.
In my experience these usually use Cypress/TI chips and FSK, rather than going all the way down to IQ.
> No, I mean rf mcus that let you do all the way down to IQ sampling or pulse shaping.
Do Nordic chips let you do this? I've never seen it documented.
That's not the same as full control since you have to trigger it using gfsk anyway but there's other MCUs with granular radio control (RSL15 for example) that do allow for direct iq manipulation at the cost of skipping the hardware MAC which apparently everyone buys from CEVA as far as I can tell.
Having said that, the radio peripheral on the chip is dead simple to drive bare-metal. Create a packet (with the convenience function), put its address in a register and hit the 'send' bit (more or less, glossing over waiting for ready bits here). Receiving is as easy - point to where you want packets to land, go into RX mode and wait for the "packet received" bit to be set.
[0] https://docs.nordicsemi.com/bundle/sdk_nrf5_v17.1.0/page/exa...
NimBLE is the only sane stack I found that can handle multiple threads and periodic advertising.
I use PA in my machine sensors to avoid having to use high advertising rates on primary channels and still get usable latency from turning the machine off and the dust collection system noticing