Kaptin's Log

OK Weird Computer

Blog Projects Archive About
Hardware / Recovery

Ikoka Noir

Dead Ikoka, whatdunit.

The problem:

During our last AustinMesh meetup, I received a present of two dead ikokas, one Nano and one Stick. Let's start with the Nano, because it's cute. Ikoka Nano boots Meshtastic (v2.7.3). Attempting to send a message it reports "No Interface". On boot it reports it is unable to start the radio.

INFO  | ??:??:?? 3 S:B:255,2.7.4.d80dcd6af,seeed_xiao_nrf52840_e22_900m30s,vardas/meshtastic_firmware_mirror
...
INFO  | ??:??:?? 21 SX126x init result -2
WARN  | ??:??:?? 21 No SX1262 radio
ERROR | ??:??:?? 21 NOTE! Record critical error 3 at src/main.cpp:1412
...
DEBUG | ??:??:?? 3 SX126xInterface(cs=4, irq=1, rst=2, busy=3)
DEBUG | ??:??:?? 3 SX126X_DIO3_TCXO_VOLTAGE defined, using DIO3 as TCXO reference voltage at 1.800000 V

Check the obvious things first, radio (ebyte e22 900m30s) is getting power (5v) on pins 9 and 10. All grounds pins are attached to ground. No shorts between any of the pins and ground. Checked the main communication connections between Seeed nrf52 and the ebyte:

Starting to look like it might be either really dead or software related. The Meshtastic and Meshcore flashers do not have an ikoka nano specific firmware. The ikoka nano github points to a dead Meshtastic specific variant. The common seeed nrf variants pin mappings do not match our board. But what does match is XIAO_BLE_LEGACY_PINOUT. Meshcore community firmware for the Nano also matches (Thanks Bill from AustinMesh!) our pin out... It couldn't be a firmware mismatch, could it?

It was a firmware mismatch

D'oh. I've flashed the Nano with a dev build of meshcore using Bill's Nano variant firmware, seems to be holding steady. I've limited the tx power to 5dBm before the amp and will let it sit in the corner and repeat my local traffic as a test.

Is it still working?

Yep, 7 days and 22 hours of continuous running, should be able to send this patient home.

Why'd you keep it so long?

User reported instability as one of the symptoms when it worked. Likely a Meshtastic firmware issue, hopefully it's been resolved in a recent version. Generally you only see instability when the nodedb is corrupted.

SoapBox

What causes NodeDB corruption

Failed writes to the storage. Writing takes a non-zero amount of power from the battery, sometimes this causes a brownout. Node reboots during a write, causing corruption.

What can you do to avoid corruption

Write less. Have more battery capacity. Refuse to write after a cutoff voltage. You can attempt to solve this in software, but these are tiny devices with unstable power.

Into the breach

Our Ikoka Stick (ver 0.2.2 according to the silkscreen), looks very similar what was happening to our Nano, with the added bonus: the I-PEX/U.FL was in rough shape. Using a small flat headed screw driver, I sculpted it back roughly into I-PEX shape before attaching a Rak pcb antenna for testing. Meshtastic firmware reports the same radio issue. I did not save the output, because I am an idiot. But trust this idiot that it looked the same.

Ok, same plan, skip the electric fault testing, find the appropriate MeshCore repeater firmware matching our pin layout and flash and configure!

...

Wait, why is the usb serial not responding? Uh oh. So, I did build this myself off the dev branch, maybe try the latest official release? Yeah, still no dice. Ok, lets try a ble companion firmware... Not showing up via bluetooth either. So flashing "works", but we're probably bootlooping when trying to load the firmware. But meshtastic worked? Let's give that another shot before digging into this deeper.

INFO  | ??:??:?? 12 SX126x init result -2
WARN  | ??:??:?? 12 No SX1262 radio
ERROR | ??:??:?? 12 NOTE! Record critical error 3 at src/main.cpp:1466

Ah, there's our old friend. Who is the idiot now!

Maybe I should look for electrical faults... So the github page for the Stick claims that it should work with the "officially supported" Seeed Xiao NRF52840 kit pins. Thankfully ndoo added a nice table for me. Pinout looks correct, so we didn't end up with a weird variant (ignoring the display i2c pins...) and I don't see any faults. Validated the radio is getting power. Hmm.

This is where it comes in handy to have a clone. I have a personal Ikoka Stick, also ver 0.2.2 according to the silkscreen. It has not yet been flashed since I haven't figured out a use for it. But flashing it with the same MeshCore repeater firmware gives me a... working repeater. Now my NRF52 is socketed, while the dead Ikoka's NRF is soldered to the board, let's do one more round of poking before we attempt to transplant the working NRF into the dead ikoka.

Working ikoka:

UF2 Bootloader 0.6.1 lib/nrfx (v2.0.0) lib/tinyusb (0.10.1-293-gaf8e5a90) lib/uf2 (remotes/origin/configupdate-9-gadbb8c7)
Model: Seeed XIAO nRF52840
Board-ID: Seeed_XIAO_nRF52840_Sense
SoftDevice: S140 version 7.3.0
Date: Nov 12 2021

Woah, wtf. While in DFU (disk emu) mode the e22 radio got stupid hot. This was my working ikoka! Thankfully the radio seems to have survived and I am unable to recreate the heating scenario. Floating pins are not a fun RNG.

Dead ikoka:

UF2 Bootloader 0.9.2 lib/nrfx (v2.0.0) lib/tinyusb (0.12.0-145-g9775e7691) lib/uf2 (remotes/origin/configupdate-9-gadbb8c7)
Model: Seeed XIAO nRF52840
Board-ID: nRF52840-SeeedXiaoSense-v1
Date: Jul 19 2024
SoftDevice: S140 7.3.0

Bootloaders seem weird, is there actually a difference between my two nrf52s? If I unsocket my nrf52, I see the same behavior. Meshcore hangs before enabling the serial console and it would obviously fail at initializing the radio if it was running Meshtastic. NSS on the failed radio mesasures 1.5v, on the radio and at the MCU. Why is that not being brought high? NSS on the unsocketed working ikoka is HIGH... ok, so short? Not shorted. I think I'm ok with calling out this NRF and unsoldering it. There is potential that it's still the radio, but I'll need to isolate the two to be see what side the fault is on on.