Compare commits

...

1 Commits

Author SHA1 Message Date
edacf69fb8 Document firmware build and flashing
Some checks failed
build / host-tests (push) Has been cancelled
build / esp-idf (push) Has been cancelled
2026-07-21 07:54:14 +00:00

View File

@@ -57,25 +57,99 @@ J1 커넥터의 pin 1은 `BAT+`, pin 2는 `GND`입니다. 커넥터 규격만
## 빌드와 설치 ## 빌드와 설치
권장 환경은 ESP-IDF **v5.3.4**입니다. 저장소 루트에서 다음을 실행합니다. 권장 환경은 ESP-IDF **v5.3.4**입니다. 다른 ESP-IDF 버전은 RGB LCD와 I2S API 차이 때문에 빌드 결과가 달라질 수 있습니다.
### 1. 플래싱 준비
1. RD-03D에 공급하는 외부 5 V 승압 전원을 끄거나 레이더 VCC를 분리합니다. UART 선은 그대로 두어도 됩니다.
2. 데이터 통신이 가능한 USB-C 케이블로 CrowPanel의 CH340C 프로그래밍 포트를 PC에 연결합니다. 첫 플래싱은 배터리를 분리하고 USB 전원만 사용하는 것을 권장합니다.
3. 새로 생긴 시리얼 포트를 확인합니다.
Linux에서는 보통 `/dev/ttyUSB0`입니다.
```bash
ls -l /dev/serial/by-id/ 2>/dev/null
ls /dev/ttyUSB* 2>/dev/null
```
Windows에서는 장치 관리자의 `포트(COM 및 LPT)`에서 `COM5` 같은 이름을 확인합니다. macOS에서는 `/dev/cu.usbserial-*` 또는 `/dev/cu.wchusbserial*` 형태입니다. 아래 명령의 `/dev/ttyUSB0`을 확인한 포트로 바꾸십시오.
### 2. ESP-IDF로 빌드하고 바로 올리기
ESP-IDF v5.3.4 환경을 활성화한 뒤 저장소 루트에서 실행합니다. `set-target`은 최초 한 번만 필요합니다.
```bash ```bash
. "$IDF_PATH/export.sh" . "$IDF_PATH/export.sh"
idf.py set-target esp32s3 idf.py set-target esp32s3
idf.py build idf.py -p /dev/ttyUSB0 build flash
idf.py -p /dev/ttyUSB0 flash
``` ```
첫 빌드에서 Component Manager가 LVGL 8.3.11을 받습니다. 애플리케이션 UART 콘솔은 레이더 핀과의 간섭을 피하려고 꺼 두었으므로 `monitor`에 런타임 로그가 표시되지 않는 것이 정상입니다. Windows의 ESP-IDF PowerShell에서는 환경이 이미 활성화되므로 저장소로 이동한 뒤 `idf.py set-target esp32s3``idf.py -p COM5 build flash`를 실행하면 됩니다.
첫 빌드에서 Component Manager가 LVGL 8.3.11을 받습니다. 성공하면 다음 세 파일이 생성되고 ESP-IDF가 올바른 오프셋에 모두 기록합니다.
| 파일 | Flash 오프셋 |
|---|---:|
| `build/bootloader/bootloader.bin` | `0x0` |
| `build/partition_table/partition-table.bin` | `0x8000` |
| `build/radick.bin` | `0x10000` |
애플리케이션 UART 콘솔은 레이더 핀과의 간섭을 피하려고 꺼 두었습니다. 따라서 `idf.py monitor`에 런타임 로그가 표시되지 않는 것은 정상이며, 플래싱 성공 메시지와 실제 화면으로 동작을 확인합니다.
### 3. 생성된 바이너리를 esptool로 다시 올리기
이미 한 번 빌드했다면 다시 컴파일하지 않고 아래 명령으로 세 바이너리를 직접 기록할 수 있습니다. `radick.bin` 하나만 기록하면 부트로더나 파티션 테이블이 없는 보드에서는 부팅되지 않을 수 있으므로 세 파일을 모두 지정합니다.
```bash
python3 -m esptool \
--chip esp32s3 \
--port /dev/ttyUSB0 \
--baud 460800 \
--before default_reset \
--after hard_reset \
write_flash \
--flash_mode dio \
--flash_freq 80m \
--flash_size 4MB \
0x0 build/bootloader/bootloader.bin \
0x8000 build/partition_table/partition-table.bin \
0x10000 build/radick.bin
```
`esptool`이 없다면 ESP-IDF 환경을 활성화하거나 별도 Python 환경에 `python3 -m pip install esptool==4.9.0`으로 설치할 수 있습니다.
### 4. Docker로 빌드하기
로컬 ESP-IDF 설치 없이 Docker로 빌드할 수도 있습니다. 로컬 ESP-IDF 설치 없이 Docker로 빌드할 수도 있습니다.
```bash ```bash
docker run --rm \ docker run --rm \
-v "$PWD:/project" -w /project \ -v "$PWD:/project" -w /project \
espressif/idf:v5.3.4 idf.py build espressif/idf:v5.3.4 \
idf.py -B build-docker build
``` ```
Linux에서는 시리얼 장치를 컨테이너에 전달해 빌드와 플래시를 한 번에 할 수도 있습니다.
```bash
docker run --rm \
--device=/dev/ttyUSB0 \
-v "$PWD:/project" -w /project \
espressif/idf:v5.3.4 \
idf.py -B build-docker -p /dev/ttyUSB0 build flash
```
Windows/macOS Docker Desktop은 USB 직렬 장치 전달이 복잡하므로 네이티브 ESP-IDF 또는 `esptool` 사용을 권장합니다.
### 5. 연결 문제 해결
- `Connecting...`에서 멈추면 `BOOT`을 누른 상태로 `RESET`을 짧게 누르고, `BOOT`을 놓은 뒤 플래시 명령을 다시 실행합니다.
- Linux에서 `Permission denied`가 나오면 `sudo usermod -aG dialout "$USER"`를 실행하고 로그아웃한 뒤 다시 로그인합니다.
- 포트가 보이지 않으면 충전 전용이 아닌 데이터 USB 케이블인지 확인하고 다른 USB 포트에 연결합니다.
- 직렬 모니터나 다른 프로그램이 포트를 잡고 있으면 종료한 후 다시 시도합니다.
- 설정까지 완전히 초기화해야 할 때만 `idf.py -p /dev/ttyUSB0 erase-flash`를 실행한 후 다시 플래싱합니다. 이 작업은 저장된 밝기와 음소거 설정도 삭제합니다.
- 플래싱이 끝나면 RD-03D의 외부 5 V 전원을 켜고 CrowPanel을 한 번 리셋합니다.
## 호스트 테스트 ## 호스트 테스트
레이더 프로토콜과 추적기는 ESP32 의존성 없이 테스트할 수 있습니다. 레이더 프로토콜과 추적기는 ESP32 의존성 없이 테스트할 수 있습니다.