packages/chip/docs/board/th1520-procurement-test-plan.md
This plan selects three TH1520 development boards as physical software baselines for Eliza-AI-SoC: BeagleV-Ahead, Sipeed Lichee Pi 4A, and Milk-V Meles. The goal is not to claim phone-class performance. The goal is to get reproducible Linux and Android-adjacent boot, debug, log, and benchmark evidence on real quad-core C910 silicon with a TH1520 NPU/GPU/display stack.
| Board | Buy target | Why it is in scope | Procurement gate |
|---|---|---|---|
| BeagleV-Ahead | 2 units | BeagleBoard documentation, open hardware collateral, TH1520 JTAG/UART exposure, 4 GB LPDDR4 and 16 GB eMMC baseline. | Purchase only if the vendor listing names BeagleV-Ahead and includes antenna or clearly lists it separately. |
| Lichee Pi 4A | 2 units | Highest-memory TH1520 option, Sipeed image/debug docs, RevyOS and Android image paths, optional MIPI/camera accessories. | Prefer 16 GB RAM / 128 GB eMMC official version; record SOM QR code and baseboard QR code. |
| Milk-V Meles | 2 units | TH1520 board with eMMC socket, microSD, SPI NOR, documented 40-pin, JTAG, and UART paths. | Prefer 8 GB or 16 GB RAM with eMMC module; record printed hardware revision such as Meles V1.2. |
Buy two of each board: one clean reference unit and one destructive/recovery unit. Do not mix board revisions in a single result table unless the revision is part of the result key.
Minimum shared lab kit:
fastboot, adb, tio, picocom, minicom, screen,
git, gcc, make, fio, lmbench, stress-ng, perf, bc, jq,
usbutils, and pciutils where available.Board-specific accessories:
| Board | Must-have | Optional but useful |
|---|---|---|
| BeagleV-Ahead | 5 V / 2 A barrel supply, USB 3.0 micro-B data cable, UART adapter, mini-HDMI cable, Ethernet cable. | microSD cards for SD boot tests, camera/display flex accessories only after boot is stable. |
| Lichee Pi 4A | Active heatsink/fan, USB-C data cable, 12 V / 2 A supply if using external peripherals, UART/JTAG debugger. | 10.1 inch MIPI touch screen, OV5693 camera, PoE module, aluminum case for thermal repeatability. |
| Milk-V Meles | 5 V / 3 A USB-C supply, eMMC module, microSD card, UART adapter, Ethernet cable, HDMI cable. | PoE injector/module, fan, spare eMMC modules for image A/B testing. |
Record every image as artifacts/th1520/<board>/images/<image-name>/ with:
sha256sum * | tee SHA256SUMS
date -u +"%Y-%m-%dT%H:%M:%SZ" | tee FETCHED_AT
Expected Linux image path:
https://www.beagleboard.org/distros.u-boot-with-spl.bin,
boot.ext4, root.ext4, and fastboot_emmc.sh.sudo ./fastboot_emmc.sh 2>&1 | tee artifacts/th1520/beaglev-ahead/logs/flash-$(date -u +%Y%m%dT%H%M%SZ).log
Expected Android status: no product Android bring-up is assumed for BeagleV-Ahead. Treat the Beagle image as a Yocto/Linux baseline unless a current official distro explicitly ships Android artifacts.
Expected Linux image path:
16g suffix
for 16 GB.lsusb | tee artifacts/th1520/lichee-pi-4a/logs/lsusb-burning-mode.log
sudo ./fastboot flash ram ./images/u-boot-with-spl-lpi4a-16g.bin
sudo ./fastboot reboot
sleep 1
sudo ./fastboot flash uboot ./images/u-boot-with-spl-lpi4a-16g.bin
sudo ./fastboot flash boot ./images/boot_sing.ext4
sudo ./fastboot flash root ./images/rootfs-sing.ext4
Expected Android image path:
adb devices, logcat, and
surface/display proof are useful; CTS/VTS success is not expected for v0.fastboot flash ram u-boot-with-spl.bin
fastboot reboot
fastboot flash uboot u-boot-with-spl.bin
fastboot flash bootpart bootpart.ext4
fastboot flash boot boot.img
fastboot flash vendor_boot vendor_boot.img
fastboot flash super super.img
fastboot flash userdata userdata.img
fastboot flash vbmeta vbmeta.img
fastboot flash vbmeta_system vbmeta_system.img
fastboot erase metadata
fastboot erase misc
Expected Linux image path:
xzcat <meles-image>.img.xz | sudo dd of=/dev/sdX bs=4M conv=fsync status=progress
sync
Expected Android status: no Android result is assumed unless Milk-V publishes a board-specific Android image. Use Meles as a Linux/RevyOS comparison board.
Serial capture is mandatory before any benchmark is valid.
mkdir -p artifacts/th1520/<board>/logs
script -f artifacts/th1520/<board>/logs/serial-$(date -u +%Y%m%dT%H%M%SZ).typescript \
-c "tio /dev/ttyUSB0 -b 115200"
Required boot-log markers:
adb authorization state.uname -a, /proc/cpuinfo, /proc/meminfo, lsblk, ip addr, and
/proc/device-tree/model.JTAG policy:
sudo memtool mw 0xfffff4a404 0
DebugServerConsole
artifacts/th1520/<board>/logs/jtag-*.Android log capture, when Android boots:
adb wait-for-device
adb shell getprop | tee artifacts/th1520/<board>/logs/android-getprop.txt
adb logcat -b all -d | tee artifacts/th1520/<board>/logs/android-logcat.txt
adb shell dmesg | tee artifacts/th1520/<board>/logs/android-dmesg.txt
Linux log capture:
uname -a | tee artifacts/th1520/<board>/logs/uname.txt
cat /proc/cpuinfo | tee artifacts/th1520/<board>/logs/cpuinfo.txt
cat /proc/meminfo | tee artifacts/th1520/<board>/logs/meminfo.txt
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS | tee artifacts/th1520/<board>/logs/lsblk.txt
dmesg -T | tee artifacts/th1520/<board>/logs/dmesg.txt
Run benchmarks only after the board has a heatsink/fan installed, a stable power source, and an idle temperature log. For each benchmark, capture ambient temperature, cooling setup, power method, board revision, image SHA256, kernel, governor, and clock policy.
Preparation:
mkdir -p ~/bench && cd ~/bench
sudo sh -c 'echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor' || true
for z in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
sudo sh -c "echo performance > $z" || true
done
CPU smoke:
git clone https://github.com/eembc/coremark.git
cd coremark
make PORT_DIR=linux XCFLAGS="-O3 -DPERFORMANCE_RUN=1" run1.log
tee ~/bench/coremark-summary.txt < run1.log
Memory bandwidth:
git clone https://github.com/jeffhammond/STREAM.git
cd STREAM
gcc -O3 -fopenmp -DSTREAM_ARRAY_SIZE=80000000 -DNTIMES=20 stream.c -o stream
OMP_NUM_THREADS=$(nproc) ./stream | tee ~/bench/stream.txt
Memory latency:
lat_mem_rd 256M 64 2>&1 | tee ~/bench/lmbench-lat-mem-rd.txt
bw_mem 512M rd 2>&1 | tee ~/bench/lmbench-bw-mem-rd.txt
bw_mem 512M wr 2>&1 | tee ~/bench/lmbench-bw-mem-wr.txt
Storage:
fio --name=seqread --filename=~/bench/fio.test --size=1G --bs=1M --rw=read \
--direct=1 --iodepth=16 --runtime=60 --time_based --group_reporting \
| tee ~/bench/fio-seqread.txt
fio --name=randread --filename=~/bench/fio.test --size=1G --bs=4k --rw=randread \
--direct=1 --iodepth=32 --runtime=60 --time_based --group_reporting \
| tee ~/bench/fio-randread.txt
Network:
iperf3 -s
# from host:
iperf3 -c <board-ip> -P 4 -t 60 | tee artifacts/th1520/<board>/bench/iperf3-client.txt
NPU and Android-adjacent smoke:
# Linux NPU visibility
lsmod | tee ~/bench/lsmod.txt
find /dev /sys -iname '*npu*' -o -iname '*thead*' | tee ~/bench/npu-nodes.txt
# If TensorFlow Lite benchmark_model is available
benchmark_model --graph=mobilenet_v1_1.0_224_quant.tflite --num_threads=4 \
--warmup_runs=5 --num_runs=50 | tee ~/bench/tflite-cpu.txt
# If Android boots
adb shell cmd package list packages | tee artifacts/th1520/<board>/bench/android-packages.txt
adb shell am start -W com.android.settings/.Settings | tee artifacts/th1520/<board>/bench/android-settings-start.txt
Do not report NPU TOPS from marketing material as a measured project result. Report model name, delegate/runtime, precision, latency distribution, fallback rate, CPU utilization, memory bandwidth indicators, and power.
Procurement pass:
Boot pass:
Debug pass:
Linux board benchmark pass:
Android exploratory pass:
adb devices and produces getprop, dmesg, and
logcat.Fail conditions:
board:
revision:
serial_or_qr:
ram_emmc:
power_supply:
cooling:
image_url:
image_sha256:
kernel:
boot_media:
flash_method:
uart_adapter:
jtag_adapter:
logs:
benchmarks:
pass_fail:
waivers: