
SeaTalk1
dotnet/iot
This repo includes .NET Core implementations for various IoT boards, chips, displays and PCBs.

6-channel USB logic analyzer on Raspberry Pi Pico with UART/SPI/I2C decoders
Logic Analyzer is an open-source printed circuit board by mdeepesh232-design, from the mdeepesh232-design/usb-logic-analyzer repository on GitHub. It is a 2-layer board of 75 × 80 mm with 24 parts on 72 nets, routed with 106 tracks and 2 vias.
Its parts include 21 resistors, 1 diode and 1 connector. It belongs with the sensors and measurement and interfaces and adapters boards and the RP2040 boards of this library.
A 6-channel USB logic analyzer built on the Raspberry Pi Pico H, using PIO + DMA for capture and a custom binary protocol over USB serial. Includes protocol decoders for UART, SPI, and I2C, each verified against real hardware.
A custom 2-layer PCB was designed in KiCad for this project (fab-ready gerbers included), but has not yet been manufactured. All functional testing and protocol verification below was done on breadboard, using the same firmware that targets the PCB -- fabbing the board is the natural next step once further validated on breadboard hardware.
| Protocol | Decoder | Verified against real hardware |
|---|---|---|
| UART | decode_uart.py | Yes -- ESP32 sending "Hi" at 115200 baud |
| SPI | decode_spi.py | Yes -- ESP32 VSPI master, "Hi" payload |
| I2C | decode_i2c.py | Yes -- ESP32 + MPU6050 (WHO_AM_I register read, repeated START) |
firmware/) -- A PIO state machine samples 6 GPIO
pins every cycle and pushes them into the RX FIFO. DMA moves samples from
the FIFO into a RAM buffer with no CPU involvement in the sampling loop
itself, so capture timing is not affected by anything else the Pico is
doing.SAMP magic marker, a 4-byte little-endian sample
count, then the raw packed samples (1 byte per sample, low 6 bits = the
6 channels). No text parsing, no ambiguity about where the data ends.host-tools/) -- Python scripts read that binary frame,
save it as .bin and .csv, and decode it according to the target
protocol.The I2C decoder initially looked broken -- captures came back completely flat, zero transitions on SDA/SCL, no transactions found. Chasing this down turned into a real debugging exercise worth documenting:
Wire.endTransmission() returning error code 4).setClock() (worked), added a single write()
byte (failed, error 4).This isolated the fault to a known regression in recent versions of the
arduino-esp32 core's rewritten I2C driver, not the hardware or the wiring
at all -- multi-byte Wire.write() calls were triggering spurious bus
timeouts on this core version. Once identified, testing continued on a
known-stable core version, and the bus began working correctly.
Separately, the very first "working" captures still came back flat because
the test sketch used delay(500) between transactions -- with such a low
duty cycle, a fixed-length trigger-based capture window had low odds of
landing inside the brief active period. Removing the delay (keeping the bus
continuously busy) fixed this immediately.
Both of these turned out to be more interesting than the decoder logic itself, which worked correctly the whole time.
firmware/ Pico C firmware (PIO capture + DMA + USB binary protocol)
host-tools/ Python capture + decode scripts
test-sketches/ ESP32 Arduino sketches used to generate known-good UART/SPI/I2C traffic
debug-tools/ spi_diag.py -- per-channel activity check, used to separate
wiring/mapping issues from decode logic bugs (same technique
used in the I2C bisection above)
hardware/ KiCad project (schematic, PCB layout, fab-ready gerbers)Requires the Pico SDK set up per the standard Raspberry Pi Pico C/C++ SDK instructions.
cd firmware
mkdir build && cd build
cmake ..
makeFlash the resulting .uf2 to the Pico in BOOTSEL mode.
cd host-tools
python capture_read_binary.py # triggers a capture, saves capture.bin / capture.csv
python decode_uart.py # or decode_spi.py / decode_i2c.pyEach decoder has its channel mapping documented at the top of the file --
update SDA_BIT/SCL_BIT (I2C), channel constants (SPI), or CHANNEL
(UART) to match your wiring.
hardware/gerbers/. All testing to date was done on
breadboard using the same firmware.| Qty | Value | Footprint | References |
|---|---|---|---|
| 6 | 10k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R1, R4, R7, R12, R15, R18 |
| 6 | 20k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R2, R6, R9, R10, R13, R16 |
| 6 | 470 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R3, R5, R8, R11, R14, R17 |
| 2 | 4.7k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R19, R20 |
| 1 | 330 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R21 |
| 1 | Conn_01x08 | Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical | J1 |
| 1 | LED | LED_THT:LED_D5.0mm | D1 |
| 1 | RaspberryPi_Pico | Module:RaspberryPi_Pico_Common_Unspecified | A1 |
It measures 75 × 80 mm and has 2 copper layers, 1.6 mm thick.
24 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the mdeepesh232-design/usb-logic-analyzer repository on GitHub, at the commit this page was made from: the board is hardware/Logic_Analyzer.kicad_pcb and its schematic hardware/Logic_Analyzer.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask mdeepesh232-design before reusing the design.

dotnet/iot
This repo includes .NET Core implementations for various IoT boards, chips, displays and PCBs.

pascallanger/DIY-Multiprotocol-TX-Module
Multiprotocol TX Module (or MULTI-Module) is a 2.4GHz transmitter module which controls many different receivers and models.


rusefi/rusefi
rusefi - GPL internal combustion engine control unit

DraftShift/StealthChanger
Tool changing system for Vorons and other front mount printer motion systems, not just stealthburner.

VoronDesign/Voron-Hardware
Cool Hardware designed by the Voron Design group

hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!
