elemes/velxio-deployer-firmware/README.md

107 lines
3.7 KiB
Markdown

# 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](https://docs.espressif.com/projects/esp-idf/en/v6.0/esp32s3/get-started/index.html)
- 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
```bash
# 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**:
```c
// 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 |