aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md86
1 files changed, 86 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..93d7331
--- /dev/null
+++ b/README.md
@@ -0,0 +1,86 @@
+# NRF52 Dongle
+
+I'm using [OpenThread](https://openthread.io) to control my home automation
+devices. They are built around a [nRF52840
+SoC](https://www.nordicsemi.com/products/nrf52840), provided by a [Holyiot
+18010 module](http://www.holyiot.com/eacp_view.asp?id=278) with built-in
+antenna. For the OpenThread gateway, I've been using the [nRF52840
+Dongle](https://www.nordicsemi.com/Products/Development-hardware/nrf52840-dongle)
+from [Nordic Semiconductor](https://www.nordicsemi.com), running as a [Radio
+Co-Processor (RCP)](https://openthread.io/platforms/co-processor). While it's
+good for prototyping, I'm not completely happy with it for this purpose, as it
+doesn't fit securely in a USB port, and has a weak antenna.
+
+That's why I decided to make my own nRF52840 based dongle, with an SMA
+connector for an external antenna.
+
+
+## Photos
+
+[![NRF52 Dongle](images/nrf52-dongle-small.jpeg)](images/nrf52-dongle.jpeg)
+
+[![NRF52 Dongle with enclosure](images/nrf52-dongle-enclosure-small.jpeg)](images/nrf52-dongle-enclosure.jpeg)
+
+
+## Hardware
+
+Since I'm not experienced in designing RF PCBs, I decided to use an existing
+module with a nRF52840 SoC. Searching on the internet, I found the [NINA-B301
+module](https://www.u-blox.com/en/product/nina-b30-series-open-cpu-0) from
+[u-blox](https://www.u-blox.com), which is based on the nRF52840 SoC and has a
+pin for the RF output that can be connected to an SMA connector.
+
+The board was designed using [KiCad](https://www.kicad.org/) 6.0. The
+[schematic](images/schematic.png) is simple because most the work is done by
+the NINA-B301 module, which includes both 32 MHz and 32.768 kHz crystals. In
+addition there is an [ARM
+SWD](https://developer.arm.com/documentation/ihi0031/a/The-Serial-Wire-Debug-Port--SW-DP-/Introduction-to-the-ARM-Serial-Wire-Debug--SWD--protocol)
+connector for programming, a voltage regulator providing 3.3V from the 5V USB,
+and a USB connector with the corresponding ESD protection and power filtering.
+
+I used the same pin for the LED as the green LED on the Nordic nRF52840 dongle
+to be able to reuse the existing firmares. However, I chose not to include a
+RGB LED or a reset switch.
+
+The PCB is a two-layer design and can fit into a [Hammond
+1551USB2](https://www.hammfg.com/electronics/small-case/plastic/1551usb)
+enclosure that I'm using as a standard. The RF trace between the NINA-B301
+module and the SMA connector is kept as short as possible, with 50 ohm
+impedance matching making it wide given the 2-layer design. On the other hand,
+I didn't used differential impedance matching for the USB traces. This isn't
+really needed for full-speed devices and when the traces are kept short, and
+it's pretty tough to do a 2-layer PCB. I just made sure the two traces were
+the same length.
+
+All the components from the [bill of material](BOM.txt) should be easily
+available from many distributors. Soldering of the NINA-B301 module requires a
+hot air gun, but the LGA style pads are relatively large, so it's relatively
+easy to do. I personally didn't use a stencil.
+
+
+## Software
+
+I haven't developped any a custom software for this dongle. Instead, I am using
+the [ot-nrf528xx](https://github.com/openthread/ot-nrf528xx) repository to
+build an RCP firmware with a few commands:
+
+```
+ ./script/build nrf52840 USB_trans
+ cd ./build/bin
+ arm-none-eabi-objcopy -O ihex ot-rcp ot-rcp.hex
+```
+
+Then the resulting HEX file can be flashed with:
+
+```
+ pyocd flash -e chip -t nrf52 ot-rcp.hex
+```
+
+The nRF52840 SoC is quite powerful, so it can also be used as a Matter or BLE
+dongle, or for other purposes as well.
+
+
+## License
+
+The contents of this repository is released under the [Creative Commons
+Attribution-ShareAlike 4.0 International License (CC BY-SA 4.0)](LICENSE).