diff --git a/.gitignore b/.gitignore index e0be428..1d60c8c 100644 --- a/.gitignore +++ b/.gitignore @@ -5,5 +5,6 @@ /sdkconfig /sdkconfig.old *.bin +!/firmware/*.bin *.elf *.map diff --git a/README.md b/README.md index 1d9737e..d3ecc89 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,8 @@ J1 커넥터의 pin 1은 `BAT+`, pin 2는 `GND`입니다. 커넥터 규격만 ## 빌드와 설치 +직접 빌드하지 않고 바로 플래싱하려면 저장소의 [사전 빌드 펌웨어](firmware/)를 사용하십시오. 앱·부트로더·파티션 테이블과 Linux/macOS 및 Windows용 플래시 스크립트가 함께 들어 있습니다. + 권장 환경은 ESP-IDF **v5.3.4**입니다. 다른 ESP-IDF 버전은 RGB LCD와 I2S API 차이 때문에 빌드 결과가 달라질 수 있습니다. ### 1. 플래싱 준비 diff --git a/firmware/README.md b/firmware/README.md new file mode 100644 index 0000000..5118017 --- /dev/null +++ b/firmware/README.md @@ -0,0 +1,49 @@ +# Radick 사전 빌드 펌웨어 + +Basic CrowPanel 7.0 V3.0(`DIS08070H`, ESP32-S3 N4R8)용 펌웨어입니다. ESP-IDF v5.3.4로 소스 커밋 `edacf69`에서 클린 빌드했습니다. 다른 CrowPanel 버전이나 RD-03D V2에는 올리지 마십시오. + +## 포함 파일 + +| 파일 | 크기 | Flash 오프셋 | +|---|---:|---:| +| `bootloader.bin` | 14,736 bytes | `0x0` | +| `partition-table.bin` | 3,072 bytes | `0x8000` | +| `radick.bin` | 639,952 bytes | `0x10000` | + +세 바이너리를 모두 같은 빌드에서 만들었습니다. `radick.bin` 하나만 올리지 말고 세 파일을 모두 기록하십시오. + +## 빠른 플래싱 + +1. RD-03D에 공급하는 외부 5 V 전원을 끄거나 VCC를 분리합니다. +2. 데이터 USB-C 케이블로 CrowPanel을 PC에 연결합니다. +3. Python용 esptool 4.9.0을 준비합니다. + +```bash +python3 -m pip install esptool==4.9.0 +``` + +Linux/macOS: + +```bash +./firmware/flash.sh /dev/ttyUSB0 +``` + +Windows PowerShell: + +```powershell +powershell -ExecutionPolicy Bypass -File .\firmware\flash.ps1 COM5 +``` + +포트 이름은 실제 환경에 맞게 바꾸십시오. `Connecting...`에서 멈추면 `BOOT`을 누른 채 `RESET`을 짧게 누르고, `BOOT`을 놓은 뒤 다시 실행합니다. 완료 후 RD-03D의 5 V 전원을 켜고 CrowPanel을 리셋합니다. + +## 무결성 확인 + +Linux/macOS: + +```bash +(cd firmware && sha256sum -c SHA256SUMS) +``` + +자세한 포트 확인, ESP-IDF 빌드 및 문제 해결 방법은 루트 [README](../README.md#빌드와-설치)를 참고하십시오. + +> 이 펌웨어는 ESP-IDF 클린 빌드와 자동 테스트를 통과했지만 실제 CrowPanel에 직접 플래싱한 실기 검증은 아직 수행하지 않았습니다. diff --git a/firmware/SHA256SUMS b/firmware/SHA256SUMS new file mode 100644 index 0000000..effdf19 --- /dev/null +++ b/firmware/SHA256SUMS @@ -0,0 +1,3 @@ +cfc2b532f0a41d4e9b3af4c953e154780b328adc0f04e4cf91e452179244c0fa bootloader.bin +73c0b5c3e5fcba3a151cc70c453c93dd5f4798899e7f2f8cca76da1f32ffc501 partition-table.bin +73059503d1602322b045d8eac868b885b4a9946deba63a109d3fda930082d80c radick.bin diff --git a/firmware/bootloader.bin b/firmware/bootloader.bin new file mode 100644 index 0000000..f6a1dad Binary files /dev/null and b/firmware/bootloader.bin differ diff --git a/firmware/flash.ps1 b/firmware/flash.ps1 new file mode 100644 index 0000000..b200f07 --- /dev/null +++ b/firmware/flash.ps1 @@ -0,0 +1,30 @@ +param( + [Parameter(Mandatory = $true, Position = 0)] + [string]$Port +) + +$ErrorActionPreference = "Stop" +$FirmwareDir = Split-Path -Parent $MyInvocation.MyCommand.Path + +Write-Host "Keep the RD-03D external 5 V supply OFF while flashing." + +$EsptoolArgs = @( + "-m", "esptool", + "--chip", "esp32s3", + "--port", $Port, + "--baud", "460800", + "--before", "default_reset", + "--after", "hard_reset", + "write_flash", + "--flash_mode", "dio", + "--flash_freq", "80m", + "--flash_size", "4MB", + "0x0", (Join-Path $FirmwareDir "bootloader.bin"), + "0x8000", (Join-Path $FirmwareDir "partition-table.bin"), + "0x10000", (Join-Path $FirmwareDir "radick.bin") +) + +& python @EsptoolArgs +if ($LASTEXITCODE -ne 0) { + exit $LASTEXITCODE +} diff --git a/firmware/flash.sh b/firmware/flash.sh new file mode 100755 index 0000000..d92127b --- /dev/null +++ b/firmware/flash.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +set -euo pipefail + +if [ "$#" -ne 1 ]; then + echo "Usage: $0 /dev/ttyUSB0" >&2 + exit 2 +fi + +radick_port="$1" +firmware_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +echo "Keep the RD-03D external 5 V supply OFF while flashing." + +exec python3 -m esptool \ + --chip esp32s3 \ + --port "$radick_port" \ + --baud 460800 \ + --before default_reset \ + --after hard_reset \ + write_flash \ + --flash_mode dio \ + --flash_freq 80m \ + --flash_size 4MB \ + 0x0 "$firmware_dir/bootloader.bin" \ + 0x8000 "$firmware_dir/partition-table.bin" \ + 0x10000 "$firmware_dir/radick.bin" diff --git a/firmware/partition-table.bin b/firmware/partition-table.bin new file mode 100644 index 0000000..4dce102 Binary files /dev/null and b/firmware/partition-table.bin differ diff --git a/firmware/radick.bin b/firmware/radick.bin new file mode 100644 index 0000000..24220dd Binary files /dev/null and b/firmware/radick.bin differ