evidence · 4.3 KiB

README.md

Committed at docs/evidence/keyboard-base/probe/README.md. This is what grounds the requirements that cite it.

Open raw source

Keyboard base read-only probe (tasks 1.2, 1.3)

Evidence class: board-read. Commands ran on the second T-Display K230 board, clipped into the LILYGO keyboard base, over the serial console while the host held flock /tmp/k230-board.lock.

Setup

Runs

FileTime (UTC)Notes
probe-2026-10-13T193433Z.log19:34:33First version; did not sample IO42/IO43 levels.
probe-2026-10-13T193545Z.log19:35:45Current script; samples IO42, IO43 and IO52, which were already inputs.

Between the runs only the GPIO section and the gauge temperature (0x06 and 0x28, 0x0c0b to 0x0c09) differ.

Results

Answering addresses on hardware I2C4 (IO46 SCL, IO47 SDA, function 3, 100 kHz, i2c-1):

AddressChip
0x20XL9555 expander
0x34TCA8418 keypad
0x38Not read. LILYGO reads an AHT20 at this address on these pads (sensor_aht20_iomux_value)
0x55BQ27220 gauge
0x6BBQ25896 charger

The charger (BQ25896) fields are decoded per the TI datasheet register map:

RegisterValueMeaning
REG040x0bICHG 11 × 64 mA = 704 mA charge current
REG050x13IPRECHG 64 + 1 × 64 = 128 mA; ITERM 64 + 3 × 64 = 256 mA termination
REG060x72VREG 3840 + 28 × 16 = 4288 mV; BATLOWV 3.0 V; VRECHG 100 mV
REG070x8dTermination enabled, watchdog disabled, safety timer on (12 h)
REG0B0x5eCHRG_STAT 11, charge termination done; power good
REG0E0x63BATV 2304 + 99 × 20 = 4284 mV
REG110x97VBUS good, VBUSV 2600 + 23 × 100 = 4900 mV

USB-C was connected to the base.

The gauge (BQ27220) reads, from standard commands:

QuantityValue
Voltage4202 mV
Current0 mA
Temperature308.3 K (35.2 °C)
Remaining capacity3000 mAh
Full-charge capacity3000 mAh
State of charge100 %
State of health100 %
Cycle count0
Design capacity3000 mAh

The keypad and expander read:

Limits