Note
Most of the following information on this page pilfered from https://github.com/OpenEPaperLink/Tag_FW_EFR32xG22/issues/13
Debugger
A J-Link compatible debug adapter is required to flash the firmware using Simplicity Commander.
The cheapest officially compatible debugger known is this one at $35, but note that it will only program Silicon Labs parts.
If you want a J-Link that can do 'all' ARM-based MCUs, the cheapest would be a mini edu at around $70, e.g. here.
J-Link clones exist on AliExpress etc, but we can't vouch for them - they might be incompatible, have weird quirks, or otherwise not be fit for purpose. It is known that some of them are being touted as 'J-Link' while in reality they are ST-Link clones and will thus only work with ST parts. If you feel confident that you've found an actual J-Link clone and want to give that a shot, feel free to report back with your experience.
Software for flashing
Of course Silicon Labs Simplicity Studio or Segger's Ozone debugger can also be used to flash tags.
Note
Neither Simplicity Studio nor Ozone are lightweight installs. Only install them if you are planning on doing development.
Debugger connections
The programming test point layout on M3 Displays are the same for ZBS, NRF and EFR32xG22 based displays so the same you can 3D print a universal pogo pin jig.
Various pogo pin programming jigs available here to choose from. E.g. the handheld universal one here.
Of course wires can also be soldered directly to the test points, the pads are relatively large and easy to solder to.
Pinout connections for Silicon Labs debugger, see sections 2.3.2/2.3.3 in the user guide:
| Tag | Debugger | Note |
|---|---|---|
| VDD | VTARGET | make sure either the debugger (see section 4 in the user manual) or another power source is providing 3.3V to the tag |
| GND | GND | |
| SWDIO (DIO) | SWDIO | |
| SWDCLK (CLK) | SWCLK | |
| nReset (RST) | RST | |
| P0.25 (TX) | VCOM_RX | serial debug output (optional) |
| P0.26 (RX) | VCOM_TX | serial input (not used currently) |
| P0.27 (MP) | - | |
| P0.22 (D/L> | - |
Connections for Segger J-Link with 20 Pin Header
*On later J-Link products like the J-Link ULTRA+, these pins are reserved for firmware extension purposes
| Tag | Debugger | Suggested Color for flying wires |
Note |
|---|---|---|---|
| VCC | 1 | Red | Input only does not provide power to Tag |
| GND | 4,6,8,10 | Black | Pick one |
| SWDIO | 7 | White | |
| SWDCLK | 9 | Blue | |
| nRESET | 15 | Green |
Debug-locked devices
Some EFR32xG22 devices are debug-locked by their manufacturer to prevent unauthorised reading of their (trade secret) firmware. As long as 'unauthenticated debug unlock' is not disabled on the chip, it is possible to unlock the chip for reflashing. The side- effect of this is that the original firmware is erased before gaining access to the chip (as this function intended).
Unlocking is best done using Simplicity Commander (works with any J-Link based probe).
Use 'unlock debug access' in the 'flash' tab in the GUI, or issue the command
commander device unlock.
User Data
The user data portion of flash contains tag configuration information that is used by the universal software to determine how to drive the display.
If the doesn't work the contents of the user data is needed to add support. For this reason it is recommended that user data be read and saved when a new tag is flashed.
This script can be used on Linux to automate the complete flashing process for a fresh tag, including dumping the user data.
#!/bin/bash
log=flash.log
device=EFR32BG22C222F352GM40
commander=~/.local/bin/commander/commander
version=41
image=full_binaries/v${version}/SOLUM_AUTODETECT_FULL_v${version}.s37
echo "----" >> ${log}
${commander} device unlock -d ${device} 2>&1 | tee -a ${log}
${commander} device info -d ${device} 2>&1 | tee -a ${log}
${commander} readmem -d ${device} --region "@userdata" 2>&1 | tee -a ${log}
${commander} flash -d ${device} ${image} 2>&1 | tee -a ${log}
Universal M2/M3 Pad Layout for ZBS/nRF/EFR32
| ZBS2 | nRF | EFR32 | Note |
|---|---|---|---|
| GND | GND | GND | |
| Reset | Reset | Reset | |
| Rxd | Rxd | P0.26 / VCOM_TX | serial input (not used currently) |
| Test | - | P0.27 | |
| Clk | SWDCLK | SWDCLK | |
| MISO | SWDIO | SWDIO | |
| VCC | VCC | VCC | |
| MOSI | - | No Pad | |
| CS | - | P0.22 | |
| Txd | Txd | P0.25 / VCOM_RX | serial debug output |