Files
workflow-flash-with-uboot/firmware

Place firmware files here and serve this directory as the existing TFTP server root. Checkout alone does not publish files over TFTP.

Every transfer starts with sf probe 0:0. The reported total capacity must be exactly 16 or 32 MiB; an unknown or ambiguous result stops execution. The selected offsets and maximum sizes (hex bytes) are:

File 16 MiB offset / maximum 32 MiB offset / maximum
u-boot-sunxi-with-spl.bin 0 / 0x100000 0 / 0x200000
sun8i-v3s-licheepi-zero-dock.dtb 0x100000 / 0x10000 0x200000 / 0x110000
zImage 0x110000 / 0x500000 0x310000 / 0x500000
rootfs.squashfs 0x610000 / 0x900000 0x810000 / 0x17f0000

The 32 MiB layout allocates the remainder of flash to RootFS. These are selected project layouts, not partition tables read from the chip. DTB partitions and bootcmd must match the selected layout. A smaller actual RootFS region can be specified with --rootfs-size; larger overrides fail.

Transfers reset and verify filesize=0 before TFTP, require successful transfer output and status, and compare the hexadecimal filesize with the local file and transfer count. First 32 bytes (U-Boot/DTB) or 64 bytes (Kernel/RootFS) are compared with the local file. Writes are read back at 0x42800000 and compared in full. No automatic erase or retry is performed in transfer workflows. Flash must be erased before programming as needed.

The separate erase workflow detects capacity and erases the entire chip, including firmware and saved environment. It verifies only the first 256 bytes as FF, not every byte. No workflow automatically reboots the board.