I have recently been working with the RAKwireless RAK5010 development board. It includes the popular Nordic nRF52840 MCU for running applications on its Cortex-M4 CPU that can leverage the integrated 2.4 GHz multiprotocol support, as well as the LTE and GNSS support offered by the on-board Quectel BG95-M3 module.

The micro-USB port on the board is connected to USB on the nRF52840, which allows for viewing serial output, but is not a mechanism for flashing new firmware. My coworker Mike Szczys wrote about how to program the RAK5010’s nRF52840 using a Segger J-Link debug probe over on the Golioth blog. However, I wanted to access the BG95-M3 module’s USB peripheral, which provides access to three serial ports on the underlying Qualcomm 9205 LTE modem.

The RAK5010 documentation states the following with respect to the micro-USB port:

It also can connect to BG95-M3 by reworking some resistors on the board. If this USB port is connected to the BG95-M3, BG95-M3 AT command port, GNSS port, and debug port can be accessed through this USB.

They conveniently omit the specific resistors that need to be reworked so it was time to break out the schematic. Fortunately, it didn’t take long to find the 4 resistors on the USB data lines (D+ / D-) that corresponded to the USB connections on the nRF52840 and the BG95-M3. As expected, R32 and R33 were marked as 0 (“zero ohm resistors”) and connected the USB data lines to the nRF52840, whereas R30 and R31 were marked NC (“not connected”) and connected to the BG95-M3.

modem-usb-rak5010-0

Note: this schematic is actually for an updated board the uses the BG96 module, but the connections are the same.

I set up the RAK5010 on my PCBite and was able to verify this placement with some magnification.

modem-usb-rak5010-1

Now it was time to get to work. Ideally I would have a hot air station or tweezer tips for one of my irons to desolder these tiny resistors, but all I had on hand was my Weller WE1010NA station and my USB-C powered Pinecil (the latter of which I have written about before). With minimal damage to the board, I was able to deploy the “chopsticks” approach to remove the two zero ohm resistors.

modem-usb-rak5010-2

Now it was time to move them to the R30 and R31 pads. This was simpler as I could hold a single resistor in place, soldering one side then the other. The first application went smoothly, but did I mention how small these are? While handling the second resistor with tweezers, it sprang out of my grasp and found a new home for itself somewhere in the carpet of my home office. Fortunately a zero ohm resistor can easily be replaced with a bodge wire or a simple solder bridge. I went with the latter, creating an unsightly, yet effective connection on the R30 pads.

modem-usb-rak5010-3

With the connections in place, it was time to reconnect the board the my laptop and hope that three serial ports appeared instead of the one when connected to the nRF52840.

$ ls -1 /dev/serial/by-id
usb-Quectel__Incorporated_Quectel_LPWA_Module_e3e6f540-if00-port0
usb-Quectel__Incorporated_Quectel_LPWA_Module_e3e6f540-if01-port0
usb-Quectel__Incorporated_Quectel_LPWA_Module_e3e6f540-if02-port0

So far so good. The third serial port should be the AT command port. I verified by reading from it and printing to standard output.

$ cat /dev/ttyUSB2

RDY



+CFUN: 1



+QSIMSTAT: 1,0



+CPIN: NOT INSERTED

AT
OK

APP RDY
AT
OK

Success! With just this little bit of rework, I was able to communicate directly with the modem from my local machine over USB. From there, I was off to the races.