Kode Dot

Overview

Everything inside a Kode Dot on one page: the two chips, the screen, the sensors, the radios and the ports, with the page that documents each one.

What it is

A Kode Dot is a pocket computer with the hardware already wired: a screen you touch, six buttons, sensors that know how it is moving, a microphone and a speaker, three short-range radios, a battery, a microSD slot and a header to plug your own hardware into. Two chips run it. The ESP32-P4 is the one your code runs on and the one every part below answers to; the ESP32-C5 beside it is the Wi-Fi and Bluetooth radio, and a few things that never reach the P4 hang off it too.

This section is one page per part. Each page says what the part does, how it is wired to the P4, what its numbers are, what goes wrong, and ends with a program you can paste and run.

How it is connected

flowchart LR
p4["ESP32-P4"]
p4 -- "I2C, GPIO4/5" --> i2c["Shared I2C bus"]
i2c --> imu["QMI8658A 0x6A"]
i2c --> mag["QMC5883P 0x2C"]
i2c --> codec["ES8311 0x18"]
i2c --> exp["TCA6408 0x20"]
i2c --> led["KTD2026 0x30"]
i2c --> pmic["BQ25896 0x6B"]
i2c --> gauge["CW2217 0x64"]
i2c --> hap["AW86233 0x5A"]
i2c --> touch["Touch 0x15 / 0x5A"]
p4 -- "MIPI-DSI" --> panel["AMOLED"]
p4 -- "SDIO" --> sd["microSD"]
p4 -- "SDIO + UART" --> c5["ESP32-C5"]
p4 -- "SPI" --> nfc["ST25R3916B"]
One shared I2C bus carries most of the board; the screen, the card and the radio have buses of their own

Most parts sit on one I2C bus, GPIO4 for data and GPIO5 for clock at 400 kHz, which kode_bsp_init brings up and owns. The screen has its own MIPI-DSI link, the microSD its own SDIO bus, the NFC reader an SPI bus, and the C5 a second SDIO bus plus a UART. The infrared pair and the 125 kHz RFID front end are plain GPIOs on the P4's RMT, LEDC and ADC.

Two boards make the device: the main board with the chips and most parts, and an antenna board behind the back of the case with NFC, RFID, the haptic driver and the magnetic connector, joined by a 20-way flex that carries SPI, I2C and power. That is why a part on the antenna board answers on the same bus as everything else.

The parts

PartWhat it isPage
Two chipsESP32-P4 for your code, ESP32-C5 for Wi-Fi and Bluetooth, and what each one ownsdevice/soc
ButtonsA four-way pad and two singles, five through an expander and one on a pindevice/input
Status LEDOne RGB LED behind a KTD2026 current driverdevice/led
microSD cardA slot on 4-bit SDIO, powered from the C5device/storage
DisplayA 2.06-inch AMOLED, 410 by 502, with capacitive touch, over MIPI-DSIdevice/display
MotionA QMI8658A accelerometer and gyroscope, and a QMC5883P compassdevice/motion/overview
AudioAn ES8311 codec, a microphone and a speaker behind an NS4150B amplifierdevice/audio/overview
Haptic motorA linear resonant actuator behind an AW86233 driverdevice/haptic
InfraredTwo emitters and a 38 kHz receiver on the RMT peripheraldevice/infrared
NFCAn ST25R3916B reader at 13.56 MHz on the antenna boarddevice/nfc
RFIDA 125 kHz front end with no reader chip: the P4 makes the fielddevice/rfid
Power and batteryA BQ25896 charger, a CW2217 fuel gauge, USB-C in and 5 V outdevice/power
ExpansionThe 20-pin header with 14 GPIOs, and the four magnetic pads that carry USBdevice/expansion

Specifications

The I2C addresses, which are what you write code against. They come from the production board's own design, revision V1.

PartAddress
BusSDA GPIO4, SCL GPIO5, 400 kHz. Expander interrupt on GPIO6
QMI8658A, accelerometer and gyroscope0x6A
QMC5883P, compass0x2C
ES8311, audio codec0x18
TCA6408, buttons and panel power0x20
KTD2026, LED driver0x30
BQ25896, charger0x6B
CW2217, fuel gauge0x64
AW86233, haptic driver0x5A
CST820 or CST916E, touch0x15 or 0x5A, by panel supplier

Gotchas

In the SDK