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.
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.
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.
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.
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.