README 수정
This commit is contained in:
@@ -18,29 +18,45 @@ VesiScan-Basic_Zephyr/
|
|||||||
│ ├── hci_ipc.conf
|
│ ├── hci_ipc.conf
|
||||||
│ └── mcuboot_power_hold_module/
|
│ └── mcuboot_power_hold_module/
|
||||||
├── src/
|
├── src/
|
||||||
│ ├── main.c / main.h # 전원, 버튼, 부팅, work queue
|
│ ├── main.c / main.h # 부팅, 초기화, main loop
|
||||||
│ ├── app_nvs.c / app_nvs.h # settings/NVS 저장소
|
│ ├── debug_print.h # DBG_PRINTF/DBG_CORE/DBG_ERR 매크로
|
||||||
│ ├── power_control.c / power_control.h
|
|
||||||
│ ├── ble
|
│ ├── ble
|
||||||
│ │ ├── ble_service.c / ble_service.h # BLE NUS, 광고, 보안, DFU 광고 전환
|
│ │ ├── ble_service.c / ble_service.h # BLE NUS, 광고, 보안, DFU 광고 전환
|
||||||
|
│ │ └── ble_tx_power.c / ble_tx_power.h # BLE TX Power 동적 제어
|
||||||
│ ├── command/
|
│ ├── command/
|
||||||
│ │ ├── handlers
|
│ │ ├── handlers/
|
||||||
│ │ ├── cmd_common.c / cmd_common.h
|
│ │ │ ├── cmd_device.c / cmd_device.h # 전원, 재부팅, DFU, 생산 완료 명령
|
||||||
│ │ ├── cmd_table.c / cmd_table.h
|
│ │ │ ├── cmd_info.c / cmd_info.h # FW/HW/SN/Passkey 정보 명령
|
||||||
│ │ └── parser.c / parser.h # BLE 명령 파서와 응답 생성
|
│ │ │ ├── cmd_piezo.c / cmd_piezo.h # Piezo/echo 측정 명령
|
||||||
|
│ │ │ └── cmd_sensor.c / cmd_sensor.h # 배터리, IMU, LED 명령
|
||||||
|
│ │ ├── ble_cmd_queue.c / ble_cmd_queue.h # BLE RX 명령 work queue
|
||||||
|
│ │ ├── cmd_common.c / cmd_common.h # 응답 패킷 생성 공통 함수
|
||||||
|
│ │ ├── cmd_table.c / cmd_table.h # 명령 dispatch table
|
||||||
|
│ │ └── parser.c / parser.h # BLE 명령 파서
|
||||||
|
│ ├── dfu/
|
||||||
|
│ │ └── dfu_manager.c / dfu_manager.h # MCUboot image 확인, DFU 상태 관리
|
||||||
│ ├── drivers/
|
│ ├── drivers/
|
||||||
│ │ ├── battery/ # 배터리 ADC
|
│ │ ├── battery/ # 배터리 ADC
|
||||||
│ │ ├── echo_adc/ # ADC121S051 SPIM capture
|
│ │ ├── echo_adc/ # ADC121S051 SPIM capture
|
||||||
│ │ ├── imu/ # ICM42670P I2C/FIFO
|
│ │ ├── imu/ # ICM42670P I2C/FIFO
|
||||||
│ │ ├── led/ # LED 패턴
|
│ │ ├── led/ # LED 패턴
|
||||||
│ │ └── piezo/ # Piezo TX/MUX 제어
|
│ │ └── piezo/ # Piezo TX/MUX 제어
|
||||||
│ └── measurement/
|
│ ├── measurement/
|
||||||
│ └── piezo_measurement.c / piezo_measurement.h # Piezo burst ~ capture
|
│ │ └── piezo_measure.c / piezo_measure.h # Piezo burst ~ capture
|
||||||
|
│ ├── nvs/
|
||||||
|
│ │ └── app_nvs.c / app_nvs.h # settings/NVS 저장소
|
||||||
|
│ ├── power/
|
||||||
|
│ │ └── power_control.c / power_control.h # 전원 유지, 버튼, sleep 처리
|
||||||
|
│ └── system/ # 시스템 공통 모듈용 디렉터리
|
||||||
|
├── release/ # 배포용 펌웨어 산출물
|
||||||
|
│ ├── dfu_application_VBTFW0100_1.0.0+0.zip # BLE DFU 업데이트용 패키지
|
||||||
|
│ └── VesiScan-Basic_VBTFW0100_1.0.0+0.hex # 생산/전체 플래싱용 통합 HEX
|
||||||
├── tools/
|
├── tools/
|
||||||
├── manual/
|
├── manual/
|
||||||
└── curcuit/
|
└── curcuit/
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## 빌드
|
## 빌드
|
||||||
|
|
||||||
nRF Connect SDK / west 사용:
|
nRF Connect SDK / west 사용:
|
||||||
@@ -52,7 +68,7 @@ west flash
|
|||||||
|
|
||||||
또는 로컬에 맞춘 기존 `tools/` 스크립트 또는 VS Code Task를 사용 (`tools/flash_*.ps1`).
|
또는 로컬에 맞춘 기존 `tools/` 스크립트 또는 VS Code Task를 사용 (`tools/flash_*.ps1`).
|
||||||
|
|
||||||
빌드 결과로 `zephyr.elf`, `merged.hex` 및 versioned DFU zip 생성됨
|
빌드 결과로 `zephyr.elf`, `merged.hex` 및 `release/` 아래 versioned HEX/DFU zip 생성됨
|
||||||
|
|
||||||
아래 파일을 변경한 경우에는 pristine build 필요:
|
아래 파일을 변경한 경우에는 pristine build 필요:
|
||||||
|
|
||||||
@@ -60,31 +76,6 @@ west flash
|
|||||||
- `boards/*.overlay` 또는 보드 설정
|
- `boards/*.overlay` 또는 보드 설정
|
||||||
- `CMakeLists.txt` / sysbuild 설정
|
- `CMakeLists.txt` / sysbuild 설정
|
||||||
|
|
||||||
## 주요 핀 매핑
|
|
||||||
|
|
||||||
| 이름 | 핀 | 역할 |
|
|
||||||
|---|---|---|
|
|
||||||
| `PWR_HOLD` | P0.08 | 전원 래치, active high |
|
|
||||||
| `BUTTON_CHECK` | P1.08 | 전원 버튼 |
|
|
||||||
| `LED_BLE` | P0.12 | 녹색 LED, active low |
|
|
||||||
| `FUNCTION_LED` | P0.29 | 주황 LED, active low |
|
|
||||||
| Battery ADC | P0.04 / AIN2 | 배터리 전압 측정 |
|
|
||||||
| I2C0 SCL | P1.14 | ICM42670P SCL |
|
|
||||||
| I2C0 SDA | P1.15 | ICM42670P SDA |
|
|
||||||
| `PIEZO_PWR` | P1.09 | 피에조 전원 enable |
|
|
||||||
| `PIEZO_PE` | P0.25 | 피에조 pulse enable |
|
|
||||||
| `PIEZO_P_OUT` | P1.07 | 피에조 P 출력 |
|
|
||||||
| `PIEZO_N_OUT` | P1.06 | 피에조 N 출력 |
|
|
||||||
| `PIEZO_DMP` | P1.00 | 피에조 dump |
|
|
||||||
| `MUX_EN_A` | P0.21 | MUX enable A |
|
|
||||||
| `MUX_EN_B` | P0.23 | MUX enable B |
|
|
||||||
| `MUX_SEL0` | P1.10 | MUX select 0 |
|
|
||||||
| `MUX_SEL1` | P0.28 | MUX select 1 |
|
|
||||||
| `ECHO_SCLK` | P0.14 | ADC121S051 SCLK |
|
|
||||||
| `ECHO_MISO` | P0.15 | ADC121S051 MISO |
|
|
||||||
| `ECHO_CS` | P0.19 | ADC121S051 CS |
|
|
||||||
|
|
||||||
`CONFIG_SERIAL=n`으로 UART0를 비활성화하여 P0.08 충돌 회피
|
|
||||||
|
|
||||||
## 전원 동작
|
## 전원 동작
|
||||||
|
|
||||||
@@ -96,17 +87,6 @@ west flash
|
|||||||
| BLE 10분 광고 만료 | 최초 부팅 광고 또는 정상 disconnect 후 광고 | 광고 중지, 전원 OFF 예약 |
|
| BLE 10분 광고 만료 | 최초 부팅 광고 또는 정상 disconnect 후 광고 | 광고 중지, 전원 OFF 예약 |
|
||||||
| DFU/soft reset 복귀 | DFU 확인/리셋 플래그 감지 | 버튼 없이 전원 유지 및 광고 복귀 |
|
| DFU/soft reset 복귀 | DFU 확인/리셋 플래그 감지 | 버튼 없이 전원 유지 및 광고 복귀 |
|
||||||
|
|
||||||
## BLE 기능
|
|
||||||
|
|
||||||
- Device name: `SERIAL_NO` 기반
|
|
||||||
- Advertising interval: 40ms
|
|
||||||
- Normal advertising timeout: 10분
|
|
||||||
- DFU advertising: SMP UUID, timeout 미적용
|
|
||||||
- NUS UUID 광고 포함
|
|
||||||
- 연결 파라미터 선호값: 15ms / latency 0 / supervision timeout 10s
|
|
||||||
- NUS TX는 mutex + completion semaphore로 순차 전송
|
|
||||||
- BLE RX는 별도 work queue에서 명령 처리
|
|
||||||
- 보안 설정: fixed passkey, MITM, Secure Connections only
|
|
||||||
|
|
||||||
## BLE 명령 포맷
|
## BLE 명령 포맷
|
||||||
|
|
||||||
@@ -119,36 +99,6 @@ west flash
|
|||||||
- CRC16: CRC-CCITT, initial `0xFFFF`
|
- CRC16: CRC-CCITT, initial `0xFFFF`
|
||||||
- 응답 TAG: 보통 요청의 `m`을 `r`로 바꾼 형태, 예: `msn?` -> `rsn:`
|
- 응답 TAG: 보통 요청의 `m`을 `r`로 바꾼 형태, 예: `msn?` -> `rsn:`
|
||||||
|
|
||||||
## 구현된 명령
|
|
||||||
|
|
||||||
| 명령 | 응답 | 기능 | 상태/비고 |
|
|
||||||
|---|---|---|---|
|
|
||||||
| `msq?` | `rsq:` | 전원 OFF | 구현 완료 |
|
|
||||||
| `mss?` | `rss:` | 재부팅 | 구현 완료 |
|
|
||||||
| `msr?` | `rsr:` | 본딩 삭제 후 재부팅 | 구현 완료, SMP enabled 기준 |
|
|
||||||
| `mdf?` | `rdf:` | DFU 광고 모드 진입 | 구현 완료, NUS -> SMP UUID 전환 |
|
|
||||||
| `msn?` | `rsn:` | 배터리 전압 측정 | 구현 완료 |
|
|
||||||
| `mls?` | `rls:` | LED 상태 변경 | 구현 완료 |
|
|
||||||
| `msp?` | `rsp:` | IMU accel/gyro 단발 측정 | 구현 완료 |
|
|
||||||
| `mst?` | `rst:` | IMU internal temperature | 구현 완료 |
|
|
||||||
| `mpa?` | `rpa:` | Piezo 전원 ON | 구현 완료, 테스트용 |
|
|
||||||
| `mpb?` | `rpb:` | Piezo 전원 OFF | 구현 완료, 테스트용 |
|
|
||||||
| `mpc?` | `rpc:` | Piezo burst only | 구현 완료, 테스트용 |
|
|
||||||
| `mec?` | `reb:` -> `raa:` | 단일 채널 burst + echo capture | 구현 완료, 테스트용 |
|
|
||||||
| `mad?` | `reb:` -> `raa:` | ADC only capture | 구현 완료, 테스트용 |
|
|
||||||
| `maa?` | `reb:` x6 -> `raa:` | 6채널 echo sweep | 구현 완료, 테스트용 |
|
|
||||||
| `mbb?` | `rbb:` -> `reb:` x6 -> `raa:` | 배터리 + IMU + 온도 + 6채널 echo | 구현 완료 |
|
|
||||||
| `mtb?` | `reb:` x6 + `rim:` -> `raa:` | Piezo sweep + IMU FIFO | 구현 완료 |
|
|
||||||
| `mcf?` | `rcf:` | 측정 파라미터 읽기 | 구현 완료 |
|
|
||||||
| `mcs?` | `rcs:` | 측정 파라미터 쓰기 | 구현 완료, NVS 저장 |
|
|
||||||
| `mid?` | `rid:` | HW/SN/FW identity 읽기 | 구현 완료 |
|
|
||||||
| `mfv?` | `rfv:` | FW version 읽기 | 구현 완료 |
|
|
||||||
| `mwh?` | `rwh:` | HW version 쓰기 | 구현 완료, NVS 저장 |
|
|
||||||
| `mrh?` | `rrh:` | HW version 읽기 | 구현 완료 |
|
|
||||||
| `mws?` | `rws:` | Serial number 쓰기 | 구현 완료, NVS 저장 |
|
|
||||||
| `mrs?` | `rrs:` | Serial number 읽기 | 구현 완료 |
|
|
||||||
| `mpz?` | `rpz:` | Passkey 쓰기 | 성공 시 `0x0000`, 생산 완료 후 `rxd:` 차단 |
|
|
||||||
| `mim?` | `rim:` | IMU FIFO | 구현 완료 |
|
|
||||||
|
|
||||||
## 저장되는 설정
|
## 저장되는 설정
|
||||||
|
|
||||||
@@ -158,9 +108,68 @@ west flash
|
|||||||
| HW version | `vesiscan/hw` | `mwh?` | 고정 길이 ASCII |
|
| HW version | `vesiscan/hw` | `mwh?` | 고정 길이 ASCII |
|
||||||
| Serial number | `vesiscan/serial` | `mws?` | 광고 name에도 사용 |
|
| Serial number | `vesiscan/serial` | `mws?` | 광고 name에도 사용 |
|
||||||
| Passkey | `vesiscan/passkey` | `mpz?` | 고정 길이 6자리 |
|
| Passkey | `vesiscan/passkey` | `mpz?` | 고정 길이 6자리 |
|
||||||
| 생산 완료 플래그 | `vesiscan/production_done` | `msr?` | 1이면 생산용 Write 명령 차단 |
|
| 생산 완료 플래그 | `vesiscan/production_done` | `mpd?` | 1이면 생산용 Write 명령 차단 |
|
||||||
| BLE bonding/settings | Zephyr `bt` subtree | BLE stack | `CONFIG_BT_SETTINGS=y` |
|
| BLE bonding/settings | Zephyr `bt` subtree | BLE stack | `CONFIG_BT_SETTINGS=y` |
|
||||||
|
|
||||||
|
|
||||||
|
## 생산 플로우
|
||||||
|
|
||||||
|
```text
|
||||||
|
mwh? -> mws? -> mpz? -> mid? 확인 -> mpd?
|
||||||
|
```
|
||||||
|
|
||||||
|
- `mwh?`: HW version 저장
|
||||||
|
- `mws?`: Serial number 저장
|
||||||
|
- `mpz?`: Passkey 저장
|
||||||
|
- `mid?`: FW/HW/SN 정보 확인
|
||||||
|
- `mpd?`: 생산 완료 플래그 저장 후 본딩 삭제 및 재부팅
|
||||||
|
|
||||||
|
|
||||||
|
## BLE 기능
|
||||||
|
|
||||||
|
- Device name: `SERIAL_NO` 기반
|
||||||
|
- Advertising interval: 40ms
|
||||||
|
- Normal advertising timeout: 10분
|
||||||
|
- DFU advertising: SMP UUID, 미연결 상태 10분 timeout 적용
|
||||||
|
- NUS UUID 광고 포함
|
||||||
|
- 연결 파라미터 선호값: Connection Interval 30~60ms / latency 0 / supervision timeout 10s
|
||||||
|
- NUS TX는 mutex + completion semaphore로 순차 전송
|
||||||
|
- BLE RX는 별도 work queue에서 명령 처리
|
||||||
|
- 보안 설정: fixed passkey, MITM, Secure Connections only
|
||||||
|
|
||||||
|
|
||||||
|
## BLE 명령
|
||||||
|
|
||||||
|
| 명령 | 응답 | 기능 | 비고 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `msq?` | `rsq:` | 전원 OFF | |
|
||||||
|
| `mss?` | `rss:` | 재부팅 | |
|
||||||
|
| `msr?` | `rsr:` | 본딩 삭제 후 재부팅 | |
|
||||||
|
| `mpd?` | `rpd:` | 생산 완료 처리 | 생산 완료 플래그 저장 후 본딩 삭제 및 재부팅 |
|
||||||
|
| `mdf?` | `rdf:` | DFU 광고 모드 진입 | NUS -> SMP UUID 전환 |
|
||||||
|
| `mls?` | `rls:` | LED 상태 변경 | |
|
||||||
|
| `msn?` | `rsn:` | 배터리 전압 측정 | |
|
||||||
|
| `mim?` | `rim:` | IMU FIFO 측정 | |
|
||||||
|
| `mst?` | `rst:` | 온도 측정 | IMU 내부 온도 |
|
||||||
|
| `mbb?` | `rbb:` -> `reb:` x6 -> `raa:` | 배터리 + IMU + 온도 + 6채널 echo | 주기 측정(자동 측정) |
|
||||||
|
| `mtb?` | `reb:` x6 + `raa:` -> `rim:` | Piezo sweep + IMU FIFO | 정렬모드 |
|
||||||
|
| `mcf?` | `rcf:` | 측정 파라미터 읽기 | |
|
||||||
|
| `mcs?` | `rcs:` | 측정 파라미터 쓰기 | NVS 저장 |
|
||||||
|
| `mid?` | `rid:` | 기기 정보 일괄 읽기 | FW version, HW version, Serial number |
|
||||||
|
| `mfv?` | `rfv:` | FW version 읽기 | |
|
||||||
|
| `mrh?` | `rrh:` | HW version 읽기 | |
|
||||||
|
| `mrs?` | `rrs:` | Serial number 읽기 | |
|
||||||
|
| `mwh?` | `rwh:` | HW version 쓰기 | 생산용, NVS 저장 |
|
||||||
|
| `mws?` | `rws:` | Serial number 쓰기 | 생산용, NVS 저장 |
|
||||||
|
| `mpz?` | `rpz:` | Passkey 쓰기 | 생산용, NVS 저장, 생산 완료 후 `rxd:` 차단 |
|
||||||
|
| `mpa?` | `rpa:` | Piezo 전원 ON | 테스트용 |
|
||||||
|
| `mpb?` | `rpb:` | Piezo 전원 OFF | 테스트용 |
|
||||||
|
| `mpc?` | `rpc:` | Piezo burst only | 테스트용 |
|
||||||
|
| `mec?` | `reb:` -> `raa:` | 단일 채널 burst + echo capture | 테스트용 |
|
||||||
|
| `mad?` | `reb:` -> `raa:` | ADC only capture | 테스트용 |
|
||||||
|
| `maa?` | `reb:` x6 -> `raa:` | 6채널 echo sweep | 테스트용 |
|
||||||
|
|
||||||
|
|
||||||
## 주요 prj.conf 설정
|
## 주요 prj.conf 설정
|
||||||
|
|
||||||
| 설정 | 값 | 역할 |
|
| 설정 | 값 | 역할 |
|
||||||
@@ -181,3 +190,28 @@ west flash
|
|||||||
| `CONFIG_NVS` | `y` | NVS 저장소 |
|
| `CONFIG_NVS` | `y` | NVS 저장소 |
|
||||||
| `CONFIG_SETTINGS` | `y` | Zephyr settings subsystem |
|
| `CONFIG_SETTINGS` | `y` | Zephyr settings subsystem |
|
||||||
| `CONFIG_SETTINGS_NVS` | `y` | settings NVS backend |
|
| `CONFIG_SETTINGS_NVS` | `y` | settings NVS backend |
|
||||||
|
|
||||||
|
|
||||||
|
## 주요 핀 매핑
|
||||||
|
|
||||||
|
| 이름 | 핀 | 역할 |
|
||||||
|
|---|---|---|
|
||||||
|
| `PWR_HOLD` | P0.08 | 전원 래치, active high |
|
||||||
|
| `BUTTON_CHECK` | P1.08 | 전원 버튼 |
|
||||||
|
| `LED_BLE` | P0.12 | 녹색 LED, active low |
|
||||||
|
| `FUNCTION_LED` | P0.29 | 주황 LED, active low |
|
||||||
|
| Battery ADC | P0.04 / AIN2 | 배터리 전압 측정 |
|
||||||
|
| I2C0 SCL | P1.14 | ICM42670P SCL |
|
||||||
|
| I2C0 SDA | P1.15 | ICM42670P SDA |
|
||||||
|
| `PIEZO_PWR` | P1.09 | Piezo 전원 enable |
|
||||||
|
| `PIEZO_PE` | P0.25 | Piezo pulse enable |
|
||||||
|
| `PIEZO_P_OUT` | P1.07 | Piezo P pulse |
|
||||||
|
| `PIEZO_N_OUT` | P1.06 | Piezo N pulse |
|
||||||
|
| `PIEZO_DMP` | P1.00 | Piezo dump |
|
||||||
|
| `MUX_EN_A` | P0.21 | MUX enable A |
|
||||||
|
| `MUX_EN_B` | P0.23 | MUX enable B |
|
||||||
|
| `MUX_SEL0` | P1.10 | MUX select 0 |
|
||||||
|
| `MUX_SEL1` | P0.28 | MUX select 1 |
|
||||||
|
| `ECHO_SCLK` | P0.14 | ADC121S051 SCLK |
|
||||||
|
| `ECHO_MISO` | P0.15 | ADC121S051 MISO |
|
||||||
|
| `ECHO_CS` | P0.19 | ADC121S051 CS |
|
||||||
|
|||||||
Reference in New Issue
Block a user