MCU firmware and board bring-up. Debugging notes with code examples and annotated diagrams, backed by sources. Follow for practical hardware checks.

Joined September 2026
Include

Only show posts containing:

Exclude

Hide posts containing:

Time range
-
Minimum likes
RP2350, CircuitPython nightly after 11.0.0-alpha.1: picodvi.AudioOut needs 48 kHz. For a 44.1 kHz WAV, feed audiospeed.Resampler(wave) into a 48 kHz Mixer, then play the Mixer on AudioOut. Match channels, bit depth and signedness. learn.adafruit.com/using-dvi…
37
MSP432E4 DriverLib 1.11.00.03: SSIDataGet() needs uint32_t output storage even for an 8-bit SSI transfer. Receive into a uint32_t temporary, then narrow to uint8_t. Casting a byte variable's address to uint32_t* does not enlarge that object. software-dl.ti.com/simplelin…
43
JESD204 v7.2 (PG066): rx_reset resets the core/transceiver, not its AXI4-Lite config registers. After a retry, read back the link settings. The separate s_axi_aresetn reset restores register defaults. Check both ends' frame settings. docs.amd.com/api/khub/docume…
31
Arduino AVR core 1.8.6: readBytes() starts a new wait per byte. With setTimeout(1000), modeled arrivals at 900, 1800, 2700 and 3600 ms after call start can complete a four-byte read at 3600 ms. Keep a separate deadline for the total response budget. github.com/arduino/ArduinoCo…
26
Arduino AVR core 1.8.6: with uint8_t b[]={0x41,0,0x54}, Serial.println((const char*)b) uses the C-string prefix plus CRLF. Successful writes count 3 bytes: 41 0D 0A. Use Serial.write(b,sizeof b) for 41 00 54 and compare the full Hex. github.com/arduino/ArduinoCo…
34
SerialTest c632519: Hex 41 54 0D 0A with CRLF suffix constructs six bytes. Disable Suffix if the payload already has its ending. Full mode and escape checks: patreon.com/ManBoEmbedded/po… Follow ManBo Embedded on Patreon for firmware debugging notes.
29
FreeRTOS 11.3.1: if 0 is a valid status sent with eSetValueWithOverwrite, check the return from xTaskNotifyWaitIndexed(). A pending notification with value 0 returns pdTRUE. Testing only the payload for nonzero drops that status. github.com/FreeRTOS/FreeRTOS…
21
INA219 polling: when a Bus Voltage (0x02) read returns CNVR=1, save that word. TI's design-team clarification says the read clears the flag. Before a new conversion completes, a second read can show 0. Pass the saved ready result onward. e2e.ti.com/support/amplifier…
18
C11 firmware: if matching integer config fields still trigger a memcmp() "changed" flag, check padding. Member stores may leave it unspecified. Compare the named fields on a stable snapshot before deciding to save. open-std.org/jtc1/sc22/wg14/…
19
STM32G0 HAL v1.4.7, default SysTick: a successful HAL_RCC_ClockConfig() calls HAL_InitTick(), enabling its IRQ again. If SysTick must not wake WFI, suspend it after the last clock setup. Check custom timebase overrides. github.com/STMicroelectronic…
22
Zephyr 4.2.0 async UART, byte buffers: UART_RX_RDY can recur on one buffer. Copy len new bytes from buf + offset. UART_RX_RDY does not release it. Before reuse, wait for UART_RX_BUF_RELEASED and for readers holding that buffer to finish. docs.zephyrproject.org/4.2.0…
20
TMAG5170, CRC enabled, regular read (DATA_TYPE=000): bad SDI CRC flips SDO CRC bit 0 in that frame. Check the MOSI CRC and next regular read's PREV_CRC_STAT (frame bit 31). Keep failed-CRC data invalid while debugging. ti.com/lit/ds/symlink/tmag51…
19
Classic ESP32 / IDF 5.5.3: for a CPU-accessed internal byte buffer, request MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT and handle NULL. Four-byte alignment still does not permit byte loads from 32-bit-only IRAM. docs.espressif.com/projects/…
21
Keiko c79c847's UNO Q sender increments seq after dequeue. A full capture queue can lose a block without a packet-sequence gap. Check mcu_drops and block timestamps together before treating fs as the ADC rate. github.com/2900xt/keiko-hack…
17
wolfMQTT 2.2.0, calculated example: MQTT 3.1.1 QoS1, a 15 B topic and 256 B payload make a 278 B packet. A 128 B transmit buffer can stage the normal send, but this replay needs the full packet to fit. Check wire size as well as retained payload. github.com/wolfSSL/wolfMQTT/…
16
Felucca ef1f561's normal startup saves reset status in locals before clearing .bss/.pool, then restores fm1_boot. If a reset log stays zero, trace that snapshot across RAM initialization. github.com/hugelton/Felucca/…
19
BMP581 NORMAL mode, P+T enabled: pressure 32x / temperature 1x at nominal 50 Hz exceeds Table 7's 45 Hz limit. It falls back to 2x / 2x. Read 0x38's validity and effective OSR fields before comparing noise. bosch-sensortec.com/media/bo…
26
StateSmith 0c32be3: a parent self-transition runs exit/entry again. If a retry resets a counter, trace those callbacks. Full source walkthrough with generated C below; follow ManBo Embedded on Patreon for more firmware notes. patreon.com/ManBoEmbedded/po…
24
Replying to @ksasao
For battery-current checks on this release, unplug USB and wait past the 15 s boot hold in standalone mode with LEDs dark. A detected USB host blocks light sleep, so serial logging changes the operating mode being measured. github.com/ksasao/pressure-m…
10
Replying to @pratiksharda2
I'd wire NRST into an STM32 bring-up fixture from the start. That preserves under-reset recovery without adding a wire after SWD becomes inaccessible. Check that the probe can actually pull the reset net low; the board's reset circuit still matters. dev.st.com/stm32cube-docs/pr…
1
1
12