elemes/velxio-deployer-firmware
a2nr 50b06df49b chore(usb-deployer): downgrade per-attempt get_sync log to DEBUG after fix 2026-07-19 16:53:20 +07:00
..
main chore(usb-deployer): downgrade per-attempt get_sync log to DEBUG after fix 2026-07-19 16:53:20 +07:00
CMakeLists.txt fix: END ACK regression — readPoll pintar + INIT_ACK_INDEX 0xFFFE + binary_parser.c git track 2026-07-01 05:10:38 +07:00
README.md fix: END ACK regression — readPoll pintar + INIT_ACK_INDEX 0xFFFE + binary_parser.c git track 2026-07-01 05:10:38 +07:00
dependencies.lock fix: END ACK regression — readPoll pintar + INIT_ACK_INDEX 0xFFFE + binary_parser.c git track 2026-07-01 05:10:38 +07:00
partitions.csv fix: END ACK regression — readPoll pintar + INIT_ACK_INDEX 0xFFFE + binary_parser.c git track 2026-07-01 05:10:38 +07:00
sdkconfig feat(elemes): v3.1 checkpoint — BLE deployer enhancements before port to Velxio 2026-07-04 20:21:46 +07:00
sdkconfig.defaults feat(velxio-deployer): unique device name + WiFi AP setup mode 2026-07-18 06:50:10 +07:00

README.md

Velxio BLE Deployer — Firmware ESP32-S3

Firmware untuk ESP32-S3 N16R8 yang bertindak sebagai BLE-to-USB bridge untuk flashing Arduino Uno/Nano via Web Bluetooth.

Persyaratan

  • ESP-IDF v6.0
  • ESP32-S3 dev board (N16R8 — 16MB Flash + 8MB PSRAM)
  • Kabel USB-C (data) untuk menghubungkan ke Arduino (USB OTG GPIO19/20)
  • Debug log via UART0 (USB-to-UART bridge devkit)

Setup

# Export ESP-IDF environment
source /home/a2nr/Downloads/lms-c/esp-idf-v6/export.sh

# Build
idf.py build

# Flash (ganti /dev/ttyACM0 sesuai port)
idf.py -p /dev/ttyACM0 flash monitor

Konfigurasi

Variabel utama di sdkconfig.defaults:

Konfigurasi Nilai Keterangan
CONFIG_IDF_TARGET esp32s3 Target chip (WAJIB, bukan esp32)
CONFIG_BT_NIMBLE_SVC_GAP_DEVICE_NAME Velxio-Deployer Nama BLE yang tampil di browser
CONFIG_BT_NIMBLE_ATT_PREFERRED_MTU 255 Ukuran MTU BLE
CONFIG_SPIRAM y PSRAM enabled
CONFIG_SPIRAM_MODE_OCT y Octal mode (N16R8)
CONFIG_ESPTOOLPY_FLASHSIZE_16MB y Flash 16MB
CONFIG_CHERRYUSB_HOST_CDC_ACM y USB Host CDC (CherryUSB)
CONFIG_ESP_CONSOLE_UART_DEFAULT y Debug via UART0 (bukan USB-JTAG)

Partisi Flash

Partisi Ukuran Fungsi
ota_0 3 MB Firmware utama
ota_1 3 MB OTA update
storage ~10 MB SPIFFS untuk log/filesystem

Arsitektur Komponen

main.c
├── ble_service.c      # NimBLE peripheral (2 karakteristik)
├── binary_parser.c    # Parser payload binary (INIT/DATA/END)
├── checksum.c         # CRC32
├── usb_host.c         # CherryUSB Host (CDC) — belum lengkap
├── stk500v1.c         # STK500v1 flashing protocol — belum lengkap
├── state_machine.c    # Finite state machine
├── serial_bridge.c    # USB CDC ↔ BLE Notify bridge
└── led_button.c       # LED RGB + Retry button

Protokol BLE

Service:     56454c58-494f-0000-0000-000000000001
Flashing:    56454c58-494f-0000-0000-000000000002  (Write+Resp + Notify)
Serial:      56454c58-494f-0000-0000-000000000003  (WriteWO+Resp + Notify)

Payload format: [CMD:1][Index:2 LE][Len:1][Data:N ≤240][CRC32:4 LE]

Catatan UUID (PENTING)

UUID di firmware menggunakan BLE_UUID128_INIT dengan byte order little-endian:

// 56454C58-494F-0000-0000-000000000001
BLE_UUID128_INIT(
    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x4F, 0x49, 0x58, 0x4C, 0x45, 0x56
)

Testing (tanpa Web Bluetooth)

Gunakan nRF Connect Android untuk test BLE:

  1. Scan → pilih "Velxio-Deployer" (nama pendek "Velxio" di adv data)
  2. Connect → MTU otomatis ter-negosiasi ke 255
  3. Subscribe ke karakteristik Flashing (Notify)
  4. Kirim payload INIT: 01 00 00 04 [CRC-total(4)] [CRC-packet(4)]
  5. Kirim payload DATA: 02 [idx(2)] [len] [data...] [CRC(4)]
  6. Kirim payload END: 03 00 00 04 [CRC-total(4)] [CRC-packet(4)]

Status Development

Fase Status Keterangan
F0 Environment Selesai ESP-IDF v6.0 terinstall
F1 Project config Selesai Target esp32s3, PSRAM, CherryUSB
F2 BLE service Selesai UUID branded hex, adv data, MTU 255
F3 Protocol/ACK Selesai END ACK setelah flash, parse error fix
F4 STK500v1 Belum Implementasi lengkap
F5 USB Host Belum CherryUSB RX claim/unclaim
F6 Serial bridge Belum Throttle + LED polish
F7 Frontend Selesai UUID, chunk 240, requestMTU
F8 Dokumen Selesai Dokumen ini
F9 Testing Belum Progressive integration test