107 lines
3.7 KiB
Markdown
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 |
|