fix: BLE TX 먹통 해결 및 메모리 안전성 개선
- binary_tx_handler를 dr_binary_tx_safe로 전체 교체 (APP_ERROR_CHECK 제거) - data_tx_handler APP_ERROR_CHECK → DBG_PRINTF 교체 - memset/memcpy 하드코딩 크기를 define 상수로 교체 (버퍼 오버런 수정) - SERIAL_NO_LENGTH, HW_NO_LENGTH, PASSKEY_LENGTH를 main.h로 통합 - 미사용 HW 드라이버/EEPROM 코드 삭제, TWI를 i2c_manager.c로 통합 - EEPROM → FDS 전환, 코드 리뷰 현황 문서 추가 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
342
data/260311 VesiScan-Basic_VB0HW0100_Firmware Dev 버전 개발 사양.md
Normal file
342
data/260311 VesiScan-Basic_VB0HW0100_Firmware Dev 버전 개발 사양.md
Normal file
@@ -0,0 +1,342 @@
|
||||
# VB0HW0100 — Firmware Dev. 버전 개발 사양서
|
||||
|
||||
## 1. 시스템 개요
|
||||
|
||||
### 1-1. 보드 기능
|
||||
|
||||
초음파 방광 모니터링을 위한 웨어러블 디바이스.
|
||||
6채널 Piezo 트랜스듀서를 순차 구동하여 A-mode 초음파 측정을 수행하고, BLE를 통해 데이터를 전송한다.
|
||||
Dev. 버전은 모든 명령이 앱에서 내려지도록 개발.
|
||||
|
||||
### 1-2. 기능 블록 구분
|
||||
|
||||
| 블록 | 명칭 | 주요 IC | 역할 |
|
||||
|------|------|---------|------|
|
||||
| 제어부 | Control | nRF52840 (U26) | MCU, BLE, 전체 제어 |
|
||||
| | | W25Q32 (U16) | Flash Memory (데이터 저장) |
|
||||
| | | ICM-42670 (U10) | IMU 센서 (6축) |
|
||||
| TX | Transmit | MD1822 (U27) | MOSFET Driver |
|
||||
| | | TC7920 (U30) | MOSFET (고전압 스위칭) |
|
||||
| | | MAX14778 (U31) | 8채널 MUX (채널 선택) |
|
||||
| | | Misc | TMP235 (U22) | 온도 센서 |
|
||||
| RX | Receive | MD0100 (U34) | T/R 스위치 (수신 보호) |
|
||||
| | | OPA2836 (U2) | 2단 수신 증폭기 |
|
||||
| | | ADL5513 (U23) | 로그 디텍터 (AGC) |
|
||||
| | | ADC121S051 (U37) | 12비트 SPI ADC |
|
||||
| 전원 | Power | MIC5528 (U5) | LDO → +3.3V_M (제어부) |
|
||||
| | | MIC5528 (U42) | LDO → +3.3V_PZT_TX (TX) |
|
||||
| | | MIC5528 (U41) | LDO → +3.3V_PZT_RX (RX) |
|
||||
| | | LT3463 (U32) | DC-DC → ±25V (펄서 전원) |
|
||||
| | | MCP1804 (U33) | LDO → +10V |
|
||||
| | | LM27762 (U38) | Charge Pump → ±2.75V (Op-Amp 전원) |
|
||||
| | | MCP73838 (U3) | 배터리 충전 IC |
|
||||
|
||||
### 1-3. 신호 흐름
|
||||
|
||||
```
|
||||
[TX 경로]
|
||||
nRF52840 → MD1822 (Driver) → TC7920 (MOSFET) → MAX14778 (MUX) → Piezo (6ch 중 1개)
|
||||
|
||||
[RX 경로]
|
||||
Piezo (6ch 중 1개) → MAX14778 (MUX) → MD0100 (T/R 보호) → OPA2836 (2단 증폭) → ADL5513 (로그 디텍터) → ADC121S051 → nRF52840
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. 전원 시퀀싱
|
||||
|
||||
### 2-1. 전원 도메인
|
||||
|
||||
| 도메인 | 전원넷 | LDO | Enable 신호 | 공급 대상 |
|
||||
|--------|--------|-----|-------------|-----------|
|
||||
| 제어부 | +3.3V_M | U5 (MIC5528) | PWR_MCU_EN | nRF52840, W25Q32, ICM-42670 |
|
||||
| TX | +3.3V_PZT_TX | U42 (MIC5528) | PZT_PWR_EN | 펄서 관련 회로 (MD1822, TC7920 등) |
|
||||
| RX | +3.3V_PZT_RX | U41 (MIC5528) | PZT_PWR_EN | 수신 회로 (OPA2836, ADC121S051 등) |
|
||||
|
||||
- TX와 RX는 **동일한 PZT_PWR_EN** 신호로 동시에 ON/OFF
|
||||
|
||||
### 2-2. 전원 켜기 (Power ON)
|
||||
|
||||
1. 사용자가 **SW2**를 누름
|
||||
2. PWR_MCU_EN = **High** → U5 활성화 → +3.3V_M 출력
|
||||
3. nRF52840 부팅 시작
|
||||
4. MCU가 SW2 눌림 상태를 확인하며 **2초간** 유지 여부 판단
|
||||
5. 조건 충족 시 MCU가 **PWR_HOLD = High** 출력 → 자기유지 (Self-Latch)
|
||||
6. 이후 SW2를 놓아도 전원 유지됨
|
||||
|
||||
### 2-3. 전원 끄기 (Power OFF)
|
||||
|
||||
1. MCU는 **BUTTON_CHECK** 핀으로 SW2 상태를 상시 감시
|
||||
2. SW2가 **3초간** 눌림 유지 감지
|
||||
3. MCU가 **PWR_HOLD = Low** 출력
|
||||
4. U5 이네이블 해제 → +3.3V_M 차단 → 전체 전원 OFF
|
||||
|
||||
### 2-4. 동작 모드
|
||||
|
||||
| 모드 | 제어부 (+3.3V_M) | TX (+3.3V_PZT_TX) | RX (+3.3V_PZT_RX) | 설명 |
|
||||
|------|:-:|:-:|:-:|------|
|
||||
| **Sleep Mode** | ON | OFF | OFF | 모든 IC 저전력 모드 동작, MCU BLE 유지, 명령 대기 |
|
||||
| **Active Mode** | ON | ON | ON | 초음파 측정 가능 상태 |
|
||||
|
||||
- Sleep → Active: MCU가 **PZT_PWR_EN = High**
|
||||
- Active → Sleep: MCU가 **PZT_PWR_EN = Low**
|
||||
- 기본 상태는 항상 **Sleep Mode**
|
||||
- W25Q32와 ICM-42670는 초기설정을 **Deep Power-Down** 모드로 세팅
|
||||
- 모든 측정 후에는 항상 **Sleep Mode**로 복귀
|
||||
---
|
||||
|
||||
## 3. 측정 명령
|
||||
|
||||
### 3-1. 측정 명령 종류
|
||||
|
||||
| 측정 명령 | 측정 대상 | 필요 모드 | 비고 |
|
||||
|-----------|-----------|:-:|------|
|
||||
| 배터리 전압 측정 | ADC_BAT | Sleep | +3.3V_M 도메인, Active 전환 불필요 |
|
||||
| IMU 측정 | ICM-42670 (I2C) | Sleep | +3.3V_M 도메인, Active 전환 불필요 |
|
||||
| 온도 측정 | TMP235 (ADC_TEMP) | **Active** | TX/RX 전원 필요 |
|
||||
| 초음파 측정 | Piezo 6ch | **Active** | TX/RX 전원 필요 |
|
||||
| 모두 측정 | 전체 | **Active** | TX/RX 전원 필요 |
|
||||
|
||||
-
|
||||
|
||||
### 3-2. 명령별 동작 흐름
|
||||
|
||||
**Sleep Mode에서 처리 (Active 전환 불필요)**
|
||||
|
||||
```
|
||||
배터리 측정 명령 → 동작모드 전환 → ADC_BAT 읽기 → BLE 전송 → Deep Power-Down 모드 전환
|
||||
IMU 측정 명령 → 동작모드 전환 → I2C로 ICM-42670 읽기 → BLE 전송 → Deep Power-Down 모드 또는 필요 모드 전환
|
||||
```
|
||||
|
||||
**Active Mode 필요**
|
||||
|
||||
```
|
||||
온도 측정 명령 → Active 진입 → ADC_TEMP 읽기 → BLE 전송 → Sleep 복귀
|
||||
초음파 측정 명령 → Active 진입 → 6ch 스캔 → BLE 전송 → Sleep 복귀
|
||||
모두 측정 명령 → Active 진입 → 배터리 + IMU + 온도 + 초음파 → BLE 전송 → Sleep 복귀
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Piezo 초음파 측정
|
||||
|
||||
### 4-1. 측정 파라미터
|
||||
|
||||
| 파라미터 | 범위 | 설명 |
|
||||
|----------|------|------|
|
||||
| Frequency | 1.8 / 1.9 / 2.0 / 2.1 / 2.2 MHz | 송신 펄스 주파수 |
|
||||
| Cycle | 3 ~ 7 | 송신 펄스 사이클 수 |
|
||||
| 평균화 수 (Avg) | 1 ~ 10 | 채널당 반복 측정 횟수 |
|
||||
| 측정 Channel 개수 (N) | 1 ~ 6 | 측정 대상 채널 수 |
|
||||
| 대기 시간 (Delay) | 0~30 (default: 10) | TX 펄수 출력 후 ADC 시작 시까지 대기 시간 (μs) |
|
||||
| 측정 샘플 수 (Num_samples) | 80 ~ 140 | 측정 ADC 샘플 개수 |
|
||||
|
||||
### 4-2. 채널 정의
|
||||
|
||||
- 총 **6채널**: CH0, CH1, CH2, CH3, CH4, CH5
|
||||
- Channel 개수 = N이면 **CH0 ~ CH(N-1)** 을 순차 측정
|
||||
- 예: N=4 → CH0, CH1, CH2, CH3만 측정
|
||||
|
||||
### 4-3. 평균화 동작
|
||||
|
||||
각 채널별로 평균화 수(Avg)만큼 반복 측정한 후, 평균값을 해당 채널의 최종 측정값으로 사용한다.
|
||||
|
||||
예: Avg=5, N=3인 경우
|
||||
|
||||
```
|
||||
CH0: 측정①②③④⑤ → 평균 → CH0 최종값
|
||||
CH1: 측정①②③④⑤ → 평균 → CH1 최종값
|
||||
CH2: 측정①②③④⑤ → 평균 → CH2 최종값
|
||||
```
|
||||
|
||||
### 4-4. TX 송신 절차
|
||||
|
||||
1. **MAX14778 (MUX)** 채널 선택 (해당 Piezo 연결)
|
||||
2. **1.3ms 대기** (MAX14778 채널 스위칭 안정화 시간)
|
||||
3. **PZT_PE = High** (펄서 활성화)
|
||||
4. **MD1822**에 설정된 Frequency / Cycle로 펄스 신호 입력
|
||||
5. **TC7920 (MOSFET)** 이 ±25V 펄스를 Piezo에 인가
|
||||
|
||||
| 관련 핀/넷 | 연결 |
|
||||
|------------|------|
|
||||
| PZT_CH_SEL0 | U26.A20 → U31 (MUX 채널 선택 비트 0) |
|
||||
| PZT_CH_SEL1 | U26.B11 → U31 (MUX 채널 선택 비트 1) |
|
||||
| PZT_EN_MUXA | U26.AC17 → U31 (MUX A 활성화) |
|
||||
| PZT_EN_MUXB | U26.AC19 → U31 (MUX B 활성화) |
|
||||
| PZT_PE | U26.AC21 → U27.15 (펄서 이네이블) |
|
||||
| PZT_P_PULSE | U26.P23 → R30 (48.7Ω) → U27 (양의 펄스) |
|
||||
| PZT_N_PULSE | U26.R24 → R40 (48.7Ω) → U27 (음의 펄스) |
|
||||
| PZT_DMP | U26.AD22 → R12 (48.7Ω) → U27 (댐핑 제어) |
|
||||
|
||||
### 4-5. RX 수신 절차
|
||||
|
||||
1. TX 펄스 출력 후 약 **10μs 대기** (근거리 잔향 회피)
|
||||
2. 에코 신호 경로:
|
||||
Piezo → MAX14778 (MUX) → MD0100 (T/R 보호) → OPA2836 (2단 증폭, 총 ~40dB) → ADL5513 (로그 디텍터)
|
||||
3. **ADC121S051**에서 약 **300μs 동안** ADC 값 연속 수집
|
||||
4. MCU가 SPI를 통해 ADC 데이터 읽기
|
||||
|
||||
| 관련 핀/넷 | 연결 |
|
||||
|------------|------|
|
||||
| \PZT_SPI_CS | U26.AC15 → U37 (ADC 칩셀렉트) |
|
||||
| SPI_SCK | U26.AC9 (Flash와 공유) |
|
||||
| SPI_MISO | U26.AD10 (Flash와 공유) |
|
||||
|
||||
### 4-6. 단일 측정 타이밍
|
||||
|
||||
```
|
||||
|←── TX ──→|← 10μs →|←─────── 300μs RX 수집 ───────→|
|
||||
펄스 출력 대기 ADC121S051 연속 샘플링
|
||||
```
|
||||
|
||||
### 4-7. 전체 스캔 시퀀스 (예: Avg=5, N=3)
|
||||
|
||||
```
|
||||
측정 명령 수신
|
||||
│
|
||||
▼
|
||||
Active Mode 진입 (PZT_PWR_EN = High)
|
||||
│
|
||||
├─ CH0 선택 (MUX → A0) → 1.3ms 대기
|
||||
│ ├─ 1회: TX → 10μs → 300μs RX
|
||||
│ ├─ 2회: TX → 10μs → 300μs RX
|
||||
│ ├─ 3회: TX → 10μs → 300μs RX
|
||||
│ ├─ 4회: TX → 10μs → 300μs RX
|
||||
│ └─ 5회: TX → 10μs → 300μs RX
|
||||
│ → CH0 평균값 산출
|
||||
│
|
||||
├─ CH1 선택 (MUX → A1) → 1.3ms 대기
|
||||
│ └─ 5회 반복 → CH1 평균값 산출
|
||||
│
|
||||
├─ CH2 선택 (MUX → A2) → 1.3ms 대기
|
||||
│ └─ 5회 반복 → CH2 평균값 산출
|
||||
│
|
||||
▼
|
||||
BLE 전송
|
||||
│
|
||||
▼
|
||||
Sleep Mode 복귀 (PZT_PWR_EN = Low)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 참고 사항
|
||||
|
||||
### 5-1. 배터리 전압 측정
|
||||
|
||||
- R28 (806kΩ) / R29 (2MΩ) 분압 → ADC_BAT
|
||||
- 분압비: 2M / (806k + 2M) ≈ 0.713
|
||||
- nRF52840 내장 ADC로 읽기
|
||||
|
||||
### 5-2. 충전 / 동작 상태 표시 LED
|
||||
|
||||
| LED | 색상 | 연결 네트 | 상태 | 표시 |
|
||||
|-----|------|------|------|------|
|
||||
| LED1 | 오렌지 | U3.STAT1 | 충전중 | 상시 점등 |
|
||||
| LED2 | 블루 | U3.STAT2 | 충전 완료 | 상시 점등 |
|
||||
| LED3 | 초록 | LED_BLE | BLE Advertising | 1초 간격 점멸 |
|
||||
| LED3 | 초록 | LED_BLE | BLE 연결 후, Piezo 초음파 측정 후 복부 부착으로 감지된 경우 | 소등 |
|
||||
| LED3 | 초록 | LED_BLE | Piezo 초음파 측정 후 탈착으로 감지된 경우 | 점등 1초 소등 3초 반복 |
|
||||
| LED4 | 오렌지 | FUNCTION_LED | 기기 정렬모드에서 방광위치를 탐지하지 못하고 있을 경우 | 1초 간격 점멸 |
|
||||
| LED3 | 초록 | LED_BLE | 기기 정렬모드에서 방광위치를 탐지하고 있을 경우 | 점등 3초 소등 1초 반복 |
|
||||
|
||||
- 기기 정렬 모드 : 빠른 주기로 초음파 측정
|
||||
- 복부 부착, 탈착, 방광위치 탐지 유무는 앱에서 판단, LED 동작 모드 명령 송신
|
||||
|
||||
### 5-3. 펄서 고전압 전원
|
||||
|
||||
| 전원 | 생성 IC | 전압 | 용도 |
|
||||
|------|---------|------|------|
|
||||
| PZT_+25V | LT3463 (U32) | +25V | 양의 펄스 전압 |
|
||||
| PZT_-25V | LT3463 (U32) | -25V | 음의 펄스 전압 |
|
||||
| PZT_+10V | MCP1804 (U33) | +10V | MD1822 공급 전원 |
|
||||
|
||||
### 5-4. 수신부 아날로그 전원
|
||||
|
||||
| 전원 | 생성 IC | 전압 | 용도 |
|
||||
|------|---------|------|------|
|
||||
| +2.75V_CP | LM27762 (U38) | +2.75V | OPA2836 양전원 |
|
||||
| -2.75V_CP | LM27762 (U38) | -2.75V | OPA2836 음전원 |
|
||||
|
||||
### 5-5. DFU 관련 주의사항
|
||||
|
||||
- nRF52840 DFU(Device Firmware Update) 부트로더에서 **P0.25를 사용하지 않도록** 수정 필요
|
||||
- 기본 DFU 부트로더가 P0.25를 버튼 입력 등으로 사용할 수 있으므로, 커스텀 DFU 빌드 시 해당 핀 설정을 제거 또는 변경할 것
|
||||
|
||||
### 5-6. MAX14778 채널 스위칭 지연
|
||||
|
||||
- MAX14778 채널 전환 후 신호 경로가 안정되기까지 **1.3ms delay** 필요
|
||||
- MUX_SelectChannel() 호출 후 반드시 1.3ms 대기 후 TX 펄스를 출력할 것
|
||||
- 동일 채널 내 반복 측정 시에는 추가 delay 불필요 (채널 전환 시에만 적용)
|
||||
|
||||
---
|
||||
|
||||
## 6. 전력 절감 방안
|
||||
|
||||
### 6-1. Sleep Mode 소비 전류 줄이기
|
||||
|
||||
Sleep Mode에서 +3.3V_M에 상시 전원을 받는 IC는 3개이며, 각각에 대해 저전력 제어가 가능하다.
|
||||
|
||||
**nRF52840 (MCU)**
|
||||
|
||||
- BLE 연결 유지를 위해 System ON 슬립 상태를 사용
|
||||
- 사용하지 않는 peripheral 클럭을 모두 비활성화
|
||||
- RAM 리텐션 영역을 최소한으로 설정
|
||||
- 위 조치를 통해 수 μA 수준까지 소비 전류 절감 가능
|
||||
|
||||
**W25Q32 (Flash Memory)**
|
||||
|
||||
- 대기 상태에서도 수 μA 소모
|
||||
- 측정/저장 시에만 깨우고, 평소에는 **Deep Power-Down** 모드 사용
|
||||
- Deep Power-Down 진입: SPI로 0xB9 커맨드 전송 → 소비 전류 약 1μA 이하
|
||||
- 복귀: 0xAB 커맨드 전송 후 수 μs 대기
|
||||
- \SPI_CS_FLASH를 High로 유지하는 것만으로는 불충분하며, 명시적으로 커맨드를 전송해야 함
|
||||
|
||||
| 상태 | 소비 전류 (대략) | 진입 방법 |
|
||||
|------|:-:|------|
|
||||
| Normal Standby | ~수 μA | 기본 상태 |
|
||||
| Deep Power-Down | ~1μA 이하 | SPI 커맨드 0xB9 |
|
||||
|
||||
**ICM-42670 (IMU Sensor)**
|
||||
|
||||
- IMU를 상시 켜둘 필요 없음
|
||||
- 측정 명령이 올 때만 Wake → 측정 → 다시 Sleep 시키는 방식 사용
|
||||
- I2C로 슬립 모드 진입 또는 ODR(Output Data Rate)을 최소로 설정
|
||||
|
||||
| 상태 | 소비 전류 (대략) | 비고 |
|
||||
|------|:-:|------|
|
||||
| Full Rate 동작 | ~수백 μA | 가속도 + 자이로 활성 |
|
||||
| Low Power / Sleep | ~수 μA 이하 | 측정 시에만 Wake |
|
||||
|
||||
### 6-2. Active Mode 체류 시간 최소화
|
||||
|
||||
Active Mode에서는 TX/RX LDO(U42, U41)뿐 아니라 LT3463(±25V), MCP1804(+10V), LM27762(±2.75V) 등 고전압/아날로그 전원이 모두 켜지므로 소비 전류가 크게 증가한다. 따라서 Active Mode 체류 시간을 최소화하는 것이 전력 절감에 가장 효과적이다.
|
||||
|
||||
**원칙: 측정 직전에 Active 진입, 측정 직후 즉시 Sleep 복귀**
|
||||
|
||||
**전원 안정화 시간 관리**
|
||||
|
||||
- PZT_PWR_EN = High 후 LDO/DC-DC 출력이 안정될 때까지 대기 필요
|
||||
- 이 안정화 시간을 실측하여 필요 최소한으로 설정
|
||||
- 불필요하게 긴 마진을 두지 않도록 주의
|
||||
|
||||
**스캔 시간 분석**
|
||||
|
||||
| 항목 | 시간 |
|
||||
|------|------|
|
||||
| MUX 채널 스위칭 안정화 | 1.3ms (채널 전환 시 1회) |
|
||||
| 1회 측정 (TX + 10μs 대기 + 300μs RX) | ~310μs |
|
||||
| 1채널 (Avg=5) | 1.3ms + 5 × 310μs ≈ 2.85ms |
|
||||
| 6채널 전체 (Avg=5, N=6) | 6 × 2.85ms ≈ 17.1ms |
|
||||
|
||||
- 6채널 전체 스캔 자체는 약 17ms 이내로 완료 가능
|
||||
- 전원 안정화 대기 시간이 오히려 더 큰 비중을 차지할 수 있음
|
||||
- 채널 전환 → TX → RX를 타이트하게 구성하여 불필요한 간격 제거
|
||||
|
||||
**측정 파라미터에 의한 시간 절감**
|
||||
|
||||
| 파라미터 조절 | 효과 |
|
||||
|--------------|------|
|
||||
| Channel 개수 줄이기 | 측정 채널 수에 비례하여 Active 시간 단축 |
|
||||
| 평균화 수 줄이기 | 반복 횟수에 비례하여 Active 시간 단축 |
|
||||
| 간헐 측정 (측정 주기 늘리기) | Active 진입 빈도 자체를 줄임 |
|
||||
37662
data/CODE_REVIEW.pdf
Normal file
37662
data/CODE_REVIEW.pdf
Normal file
File diff suppressed because it is too large
Load Diff
473
data/CODE_REVIEW_STATUS.md
Normal file
473
data/CODE_REVIEW_STATUS.md
Normal file
@@ -0,0 +1,473 @@
|
||||
# VesiScan-Basic 코드 리뷰 현황 보고서
|
||||
|
||||
작성일: 2026-03-16
|
||||
대상: VesiScan BASIC 펌웨어 전체 (nRF52840 + S140 SoftDevice)
|
||||
기준 문서: CODE_REVIEW.pdf (2026-03-15)
|
||||
현재 빌드: DEBUG_MINIMAL_BOOT=1, BLE_DEV_MODE=1
|
||||
|
||||
## 목차
|
||||
|
||||
1. 삭제 대상: 미사용 하드웨어 드라이버
|
||||
2. 삭제 대상: 미사용 코드
|
||||
3. DEBUG_MINIMAL_BOOT 조건부 컴파일 정리
|
||||
4. Keil 프로젝트 파일 정리
|
||||
5. 버그 및 오류 수정
|
||||
6. 저전력 최적화
|
||||
7. 코드 품질 개선
|
||||
8. 작업 우선순위 요약
|
||||
|
||||
---
|
||||
|
||||
## 1. 삭제 대상: 미사용 하드웨어 드라이버
|
||||
|
||||
### 1.1 회로 기반 분석
|
||||
|
||||
변경 없음. VB0HW0100 회로 기준 IC 목록은 CODE_REVIEW.pdf 1.1절과 동일.
|
||||
|
||||
### 1.2 회로에 없는 IC의 드라이버 (삭제 대상)
|
||||
|
||||
| 파일 | IC/기능 | 판정 | 현재 상태 |
|
||||
|------|--------|------|----------|
|
||||
| ad5272_i2c.c/h | AD5272 디지털 포텐시오미터 | 삭제 | **완료** |
|
||||
| ada2200_spi.c/h | ADA2200 동기 복조기 | 삭제 | **완료** |
|
||||
| mcp4725_i2c.c/h | MCP4725 DAC | 삭제 | **완료** |
|
||||
| mcp4725_adc.c/h | MCP4725 ADC 피드백 | 삭제 | **완료** |
|
||||
| ir_i2c.c/h | IR LED 센서 (0x50~0x57) | 삭제 | **완료** |
|
||||
| LED_Parse.c/h | LED ROM 파싱 | 삭제 | **완료** |
|
||||
|
||||
### 1.3 기능적으로 미사용인 드라이버 (삭제 대상)
|
||||
|
||||
| 파일 | 기능 | 판정 | 현재 상태 |
|
||||
|------|------|------|----------|
|
||||
| measurements.c/h | 레거시 측정 루프 | 삭제 | **완료** |
|
||||
| measurements_20.c/h | 20-샘플 측정 변형 | 삭제 | **완료** |
|
||||
| meas_pd_imm.c/h | 즉시 PD 측정 | 삭제 | **완료** |
|
||||
| meas_pd_buff.c/h | 버퍼드 PD 측정 | 삭제 | **완료** |
|
||||
| meas_pd_voltage_simple.c/h | 단순 전압 측정 | 삭제 | **완료** |
|
||||
| meas_pd_voltage_half.c/h | 반파 전압 측정 | 삭제 | **완료** |
|
||||
| meas_pd_voltage_full.c/h | 전파 전압 측정 | 삭제 | **완료** |
|
||||
| meas_pd_voltage_custom.c/h | 커스텀 전압 측정 | 삭제 | **완료** |
|
||||
| full_agc.c/h | 자동 이득 제어 | 삭제 | **완료** |
|
||||
| debuf_print.h | 오타 파일 | 삭제 | **완료** |
|
||||
|
||||
### 1.4 삭제 시 의존성 영향
|
||||
|
||||
cmd_parse.h에서 제거할 include 목록:
|
||||
|
||||
| include | 현재 상태 |
|
||||
|---------|----------|
|
||||
| #include "ir_i2c.h" | **완료** (제거됨) |
|
||||
| #include "ad5272_i2c.h" | **완료** (제거됨) |
|
||||
| #include "ada2200_spi.h" | **완료** (제거됨) |
|
||||
| #include "mcp4725_i2c.h" | **완료** (제거됨) |
|
||||
| #include "measurements.h" | **완료** (제거됨) |
|
||||
| #include "meas_pd_voltage_simple.h" | **완료** (제거됨) |
|
||||
| #include "meas_pd_voltage_half.h" | **완료** (제거됨) |
|
||||
| #include "meas_pd_voltage_full.h" | **완료** (제거됨) |
|
||||
| #include "full_agc.h" | **완료** (제거됨) |
|
||||
| #include "meas_pd_imm.h" | **완료** (제거됨) |
|
||||
|
||||
### 1.5 cat_interface.c (EEPROM 드라이버) 삭제 분석
|
||||
|
||||
#### 1.5.1 결론: EEPROM 삭제 완료, TWI는 i2c_manager.c로 통합
|
||||
|
||||
현재 상태: **완료** - jhChun 26.03.16
|
||||
|
||||
cat_interface.c 삭제(EEPROM/AES 코드 전체 삭제). TWI 인스턴스(m_twi) 및 초기화/해제 함수는 i2c_manager.c로 통합.
|
||||
|
||||
|
||||
#### 1.5.2 cat_interface.c가 제공하는 것
|
||||
|
||||
| 기능 | 판정 | 현재 상태 |
|
||||
|------|------|----------|
|
||||
| m_eeprom TWI 인스턴스 | i2c_manager.c로 이동, m_twi로 리네이밍 | **완료** |
|
||||
| eeprom_initialize() / uninitialize() | i2c_manager.c로 이동, twi_initialize/uninitialize로 리네이밍 (static) | **완료** |
|
||||
| eeprom_read/write_byte/word/page/bytes | 삭제 | **완료** |
|
||||
| eeprom_read/write_uint16_array | 삭제 | **완료** |
|
||||
| eeprom_read/write_uint32 | 삭제 | **완료** |
|
||||
| eeprom_write_encrypted() / read_decrypted() | 삭제 | **완료** |
|
||||
| encrypt_data() / decrypt_data() | 삭제 | **완료** |
|
||||
| aes_key[16], aes_iv[16] | 삭제 | **완료** |
|
||||
|
||||
#### 1.5.3 권장 작업
|
||||
|
||||
| # | 작업 | 현재 상태 |
|
||||
|---|------|----------|
|
||||
| 1 | TWI 인스턴스/init/uninit → i2c_manager.c로 통합 | **완료** |
|
||||
| 2 | m_eeprom → m_twi 리네이밍 | **완료** |
|
||||
| 3 | EEPROM read/write 전체 삭제, AES 전체 삭제 | **완료** |
|
||||
| 4 | cmd_parse.c EEPROM 호출 -> FDS 전환 | **완료** |
|
||||
| 5 | main.c 버튼 롱프레스 리셋: EEPROM -> FDS | **완료** |
|
||||
| 6 | power_control.c: cat_interface.h include 제거 | **완료** |
|
||||
|
||||
#### 1.5.4 cmd_parse.c EEPROM -> FDS 전환 목록
|
||||
|
||||
| EEPROM 호출 | 위치 | FDS 대체 방법 | 현재 상태 |
|
||||
|------------|------|------------|----------|
|
||||
| eeprom_init_values_read() | cmd_parse.c | 삭제 (FDS config_load 대체) | **완료** |
|
||||
| eeprom_write_byte(0x0070, m_pd_adc_cnt) | cmd_parse.c | m_config.pd_adc_cnt = val; config_save(); | **완료** |
|
||||
| eeprom_write_word(0x0080, m_pd_delay_us) | cmd_parse.c | m_config.pd_delay_us = val; config_save(); | **완료** |
|
||||
| eeprom_write_byte(0x0060, bond_data_delete) | cmd_parse.c | m_config.bond_data_delete = val; config_save(); | **완료** |
|
||||
| eeprom_write_byte(0x0065, m_reset_status) | cmd_parse.c | m_config.reset_status = val; config_save(); | **완료** |
|
||||
| eeprom_write_encrypted(0x0020, passkey, 6) | cmd_parse.c | memcpy(m_config.static_passkey, val, 6); config_save(); | **완료** |
|
||||
| eeprom_read_decrypted(0x0020, passkey, 6) | cmd_parse.c | memcpy(buf, m_config.static_passkey, 6); | **완료** |
|
||||
| eeprom_write_uint32(0x0090, m_life_cycle) | cmd_parse.c | m_config.life_cycle = val; config_save(); (FDS 필드 추가 완료) | **완료** |
|
||||
| eeprom_read_uint32(0x0090, &m_life_cycle) | cmd_parse.c | m_life_cycle = m_config.life_cycle; | **완료** |
|
||||
| eeprom_write/read_uint16_array(0x0480, ...) | cmd_parse.c | AGC gain — HW 제거됨, 명령 비활성화 | **완료** |
|
||||
|
||||
---
|
||||
|
||||
## 2. 삭제 대상: 미사용 코드
|
||||
|
||||
### 2.1 AES 암호화 (cat_interface.c)
|
||||
|
||||
판정 변경: 전체 삭제
|
||||
|
||||
| 항목 | 위치 | 판정 | 현재 상태 |
|
||||
|------|------|------|----------|
|
||||
| aes_key[16] 하드코딩 | cat_interface.c | 삭제 | **완료** |
|
||||
| aes_iv[16] (고정 IV = 0) | cat_interface.c | 삭제 | **완료** |
|
||||
| encrypt_data() | cat_interface.c | 삭제 | **완료** |
|
||||
| decrypt_data() | cat_interface.c | 삭제 | **완료** |
|
||||
| eeprom_write_encrypted() | cat_interface.c | 삭제 | **완료** |
|
||||
| eeprom_read_decrypted() | cat_interface.c | 삭제 | **완료** |
|
||||
|
||||
### 2.2 Serial Number / Passkey / HW Version 중복 선언 분석
|
||||
|
||||
| 데이터 | 전역 변수 (런타임) | FDS (내장 Flash) | EEPROM (외부, 제거됨) | 현재 상태 |
|
||||
|--------|----------------|----------------|-------------------|----------|
|
||||
| Serial Number | SERIAL_NO[12] | m_config.serial_no[12] | ~~addr 0x0030~~ | **EEPROM 경로 삭제 완료** |
|
||||
| Passkey | m_static_passkey[6] | m_config.static_passkey[6] | ~~addr 0x0020~~ | **EEPROM 경로 삭제 완료** |
|
||||
| HW Version | HW_NO[12] | m_config.hw_no[12] | ~~addr 0x0010~~ | **HW_NO 미삭제** |
|
||||
|
||||
권장 작업 현황:
|
||||
|
||||
| # | 작업 | 현재 상태 |
|
||||
|---|------|----------|
|
||||
| 1 | EEPROM 경로 삭제 -> eeprom_init_values_read() 삭제 | **완료** |
|
||||
| 2 | HW_NO[12] 삭제 -> m_config.hw_no 직접 사용 | **미완료** |
|
||||
| 3 | SERIAL_NO, m_static_passkey 유지 (BLE 스택 필요) | 해당없음 |
|
||||
| 4 | 데이터 흐름 단순화: FDS -> 전역변수 -> BLE 스택 | **미완료** |
|
||||
|
||||
### 2.3 미사용 전역 변수
|
||||
|
||||
| 변수 | 위치 | 판정 | 현재 상태 |
|
||||
|------|------|------|----------|
|
||||
| roles_str[] | main.c:189 | 삭제 | **미완료** |
|
||||
| m_encrypted_text[16] | main.c:194 | 삭제 | **미완료** |
|
||||
| m_encrypted_text2[16] | main.c:195 | 삭제 | **미완료** |
|
||||
| m_decrypted_text[16] | main.c:196 | 삭제 | **미완료** |
|
||||
| DEVICE_NAME | cmd_parse.c | 삭제 | 확인 필요 |
|
||||
| HW_NO[12] | cmd_parse.c | 삭제 | **미완료** |
|
||||
| AES_KEY_SIZE | main.c:154 | 삭제 | **미완료** |
|
||||
| AES_BLOCK_SIZE | main.c:155 | 삭제 | **미완료** |
|
||||
| suppress_unused_warnings() | main.c:239 | 삭제 | **미완료** |
|
||||
| c_addr[6] | main.c:187 | 삭제 | **미완료** |
|
||||
| led_pd_dac_v[LED_NUM] | 참조 다수 | 삭제 | 확인 필요 |
|
||||
|
||||
### 2.4 주석 처리된 코드
|
||||
|
||||
| 위치 | 내용 | 판정 | 현재 상태 |
|
||||
|------|------|------|----------|
|
||||
| main_timer.c:37-88 | FEATURE_DETAIL_VALUE_FULL 주석 블록 | 삭제 | **미완료** |
|
||||
| cmd_parse.c:282-317 | serial_to_passkey_hash, test_eeprom_page_rw | 삭제 | **미완료** |
|
||||
| cmd_parse.c:87-88 | pd_adc_half/full_a_start extern | 삭제 | 확인 필요 |
|
||||
| battery_saadc.c:22 | //#include "fstorage.h" | 삭제 | **미완료** |
|
||||
|
||||
---
|
||||
|
||||
## 3. DEBUG_MINIMAL_BOOT 조건부 컴파일 정리
|
||||
|
||||
현재 DEBUG_MINIMAL_BOOT=1로 MINIMAL 모드만 사용. Full boot 경로는 실행되지 않음.
|
||||
|
||||
### 3.1 제거 대상 #if 블록
|
||||
|
||||
| 파일 | 블록 | 판정 | 현재 상태 |
|
||||
|------|------|------|----------|
|
||||
| main.c:280-281 | #if !DEBUG_MINIMAL_BOOT full_gpio_init() | 삭제 (함수 전체) | **미완료** |
|
||||
| main.c:354-355 | #if !DEBUG_MINIMAL_BOOT load_eeprom_config() | 삭제 (함수 전체, EEPROM 제거 완료) | **완료** (함수 삭제됨) |
|
||||
| main.c:1437-1439 | Full boot 경로 (ada2200_init, mcp4725_init 등) | 삭제 | **미완료** |
|
||||
| main.c GPIO init 분기 | GPIO init 분기 | MINIMAL 코드만 유지 | **미완료** |
|
||||
| power_control.c | Full boot power sequence | 삭제 (minimal 경로만 유지) | **미완료** |
|
||||
|
||||
### 3.3 DEBUG_MINIMAL_BOOT 제거 시 함께 정리
|
||||
|
||||
| 항목 | 현재 상태 |
|
||||
|------|----------|
|
||||
| #define DEBUG_MINIMAL_BOOT 1 삭제 (main.c:96) | **미완료** (여전히 활성) |
|
||||
| 모든 #if 조건 제거, MINIMAL 코드만 유지 | **미완료** |
|
||||
| BLE_DEV_MODE define 유지 | 해당없음 |
|
||||
|
||||
---
|
||||
|
||||
## 4. Keil 프로젝트 파일 정리
|
||||
|
||||
### 4.1 삭제할 소스 참조 (uvprojx)
|
||||
|
||||
현재 상태: **정리 불필요**
|
||||
|
||||
ble_app_bladder_patch_s140.uvprojx 확인 결과, 아래 삭제 대상 파일들은 이미 프로젝트에 등록되어 있지 않음:
|
||||
|
||||
- ad5272_i2c.c, ada2200_spi.c, mcp4725_i2c.c, mcp4725_adc.c
|
||||
- ir_i2c.c, LED_Parse.c, measurements.c, measurements_20.c
|
||||
- full_agc.c, meas_pd_voltage_custom.c, cat_interface.c
|
||||
|
||||
uvprojx 수정 작업 없음.
|
||||
|
||||
---
|
||||
|
||||
## 5. 버그 및 오류 수정
|
||||
|
||||
### 5.1 심각도 높음 (HIGH)
|
||||
|
||||
#### B1: BLE TX 큐 풀 시 APP_ERROR_CHECK로 인한 시스템 먹통 현상
|
||||
|
||||
파일: main.c (구 binary_tx_handler)
|
||||
|
||||
현재 상태: **완료**
|
||||
|
||||
- `binary_tx_handler()` 함수 본체 삭제
|
||||
- 모든 호출처를 `dr_binary_tx_safe()`로 교체 완료
|
||||
- cmd_parse.c (22곳 + 함수 포인터 1곳)
|
||||
- battery_saadc.c (2곳)
|
||||
- app_raw.c (2곳)
|
||||
- tmp235_q1.c (1곳)
|
||||
- parser.c (17곳)
|
||||
- main.h 선언 제거, dr_util.c/dr_adc121s051.c의 옛날 extern 선언 제거
|
||||
- `dr_binary_tx_safe()`는 NRF_ERROR_RESOURCES 시 최대 100회 재시도 후 패킷 드롭, 연결 에러 시 graceful 리턴
|
||||
- `data_tx_handler()`의 APP_ERROR_CHECK도 DBG_PRINTF로 교체 — 예상치 못한 에러 시에도 패킷 드롭 후 정상 동작 유지
|
||||
|
||||
#### B2: nrf_delay_ms(10) 블로킹 대기 (BLE TX)
|
||||
|
||||
파일: main.c:1221-1228
|
||||
|
||||
현재 상태: **완료**
|
||||
|
||||
조건문 로직이 정상 수정됨. NRF_ERROR_RESOURCES가 아닌 경우에만 delay 실행.
|
||||
|
||||
#### B3: extern + 초기화 동시 사용
|
||||
|
||||
파일: cmd_parse.c
|
||||
|
||||
현재 상태: **완료**
|
||||
|
||||
`extern int8_t pd_adc_counts[4] = {8, 16, 24, 32};` 선언이 제거됨.
|
||||
|
||||
#### B4: memset/memcpy 버퍼 크기 불일치 및 매직 넘버
|
||||
|
||||
파일: main.c config_apply_to_globals()
|
||||
|
||||
현재 상태: **완료**
|
||||
|
||||
- memset 오버런 수정: 하드코딩 `16` → `sizeof(SERIAL_NO)`, `PASSKEY_LENGTH` 사용
|
||||
- memcpy 매직 넘버 수정: 하드코딩 `12` → `sizeof(m_config.hw_no)`, `sizeof(m_config.serial_no)`, `sizeof(SERIAL_NO)` 등으로 교체
|
||||
- m_static_passkey memset/memcpy: `PASSKEY_LENGTH` define 활용
|
||||
|
||||
스택/힙 오버플로우로 인한 메모리 손상 가능성이 있는 심각한 버그.
|
||||
|
||||
### 5.2 심각도 중간 (MEDIUM)
|
||||
|
||||
#### B6: battery_event_handler에서 floating-point 연산
|
||||
|
||||
파일: battery_saadc.c:167
|
||||
|
||||
현재 상태: **미완료**
|
||||
|
||||
여전히 부동소수점 연산 사용 중:
|
||||
```c
|
||||
batt_lvl_in_milli_volt_1 = (batt_lvl_in_milli_volt_0) *1.42;
|
||||
```
|
||||
|
||||
수정 필요:
|
||||
```c
|
||||
batt_lvl_in_milli_volt_1 = (batt_lvl_in_milli_volt_0 * 142) / 100;
|
||||
```
|
||||
|
||||
#### B7: main_timer 단발 모드 문제
|
||||
|
||||
현재 상태: **해당없음** (의도적 설계로 판단)
|
||||
|
||||
#### B8: processing_start_tick 미사용
|
||||
|
||||
파일: cmd_parse.c:57
|
||||
|
||||
현재 상태: **완료** (해결됨)
|
||||
|
||||
변수가 5초 타임아웃 추적에 활용되고 있음:
|
||||
- cmd_parse.c:483에서 초기값 확인
|
||||
- cmd_parse.c:489에서 5초 경과 비교
|
||||
|
||||
#### B9: config_load() goto 기반 흐름
|
||||
|
||||
파일: fstorage.c:157-261
|
||||
|
||||
현재 상태: **미완료**
|
||||
|
||||
`goto cfg_load_start` 패턴이 여전히 존재. 3개의 goto 문과 2개의 레이블로 복잡한 흐름 유지 중. FDS 초기화 실패 시 무한 루프 가능성 여전.
|
||||
|
||||
### 5.3 심각도 낮음 (LOW)
|
||||
|
||||
#### B11: debuf_print.h 파일명 오타
|
||||
|
||||
현재 상태: **완료** (파일 삭제)
|
||||
|
||||
#### B12: 함수 중복 선언
|
||||
|
||||
파일: main.h:44-54
|
||||
|
||||
현재 상태: **미완료**
|
||||
|
||||
static 함수 프로토타입 6개가 헤더에 여전히 선언됨:
|
||||
- advertising_start (FEATURE_SECURE_CONNECTION 내)
|
||||
- t_power_off_timeout_handler
|
||||
- power_control_handler
|
||||
- main_s
|
||||
- PM_s
|
||||
- main_routine_handler
|
||||
|
||||
#### B13: LED_ALLOFF, PD_ALLOFF 매크로 정의 위치
|
||||
|
||||
현재 상태: 확인 필요
|
||||
|
||||
---
|
||||
|
||||
## 6. 저전력 최적화
|
||||
|
||||
### 6.1 현재 전력 구조 분석
|
||||
|
||||
변경 없음. CODE_REVIEW.pdf 6.1절과 동일.
|
||||
|
||||
### 6.2 개선 항목
|
||||
|
||||
#### P1: UART 비활성화 (가장 큰 절약 -- 예상 ~1mA 절감)
|
||||
|
||||
파일: main.c:1427
|
||||
|
||||
현재 상태: **미완료**
|
||||
|
||||
`uart_init()`이 무조건 호출됨. `#if BLE_DEV_MODE` 조건으로 감싸져 있지 않음.
|
||||
|
||||
수정 필요:
|
||||
```c
|
||||
#if BLE_DEV_MODE
|
||||
uart_init();
|
||||
#endif
|
||||
```
|
||||
|
||||
#### P2: SEGGER RTT 비활성화 (프로덕션)
|
||||
|
||||
파일: debug_print.h
|
||||
|
||||
현재 상태: **미완료**
|
||||
|
||||
`ENABLE_PRINTF`가 `1`로 하드코딩되어 있음. `BLE_DEV_MODE`와 연동되지 않음.
|
||||
|
||||
수정 필요:
|
||||
```c
|
||||
#if BLE_DEV_MODE
|
||||
#define ENABLE_PRINTF 1
|
||||
#else
|
||||
#define ENABLE_PRINTF 0
|
||||
#endif
|
||||
```
|
||||
|
||||
#### P3: 배터리 타이머 주기 최적화
|
||||
|
||||
파일: battery_saadc.c:48
|
||||
|
||||
현재 상태: **미완료**
|
||||
|
||||
`BATTERY_LOOP_INTERVAL = 5000ms` 고정. 동적 조절 로직 없음.
|
||||
|
||||
#### P4: IMU 타이머 조건부 시작
|
||||
|
||||
파일: main.c BLE 이벤트 핸들러
|
||||
|
||||
현재 상태: **미완료**
|
||||
|
||||
BLE_GAP_EVT_CONNECTED/DISCONNECTED 핸들러에 IMU 타이머 start/stop 로직 없음. BLE 미연결 시에도 IMU를 읽을 수 있는 상태.
|
||||
|
||||
#### P5: main_loop() 타이머 폴링 효율화
|
||||
|
||||
현재 상태: **미완료**
|
||||
|
||||
플래그 기반 폴링 패턴 그대로 유지 중.
|
||||
|
||||
#### P6: NRF_LOG 비활성화 고려
|
||||
|
||||
현재 상태: **미완료** (확인 필요)
|
||||
|
||||
### 6.3 예상 절감 효과
|
||||
|
||||
| 최적화 | 예상 절감 | 난이도 | 현재 상태 |
|
||||
|--------|----------|--------|----------|
|
||||
| P1: UART 비활성화 | ~1mA | 쉬움 | **미완료** |
|
||||
| P2: RTT 비활성화 | ~0.1-0.5mA | 쉬움 | **미완료** |
|
||||
| P4: IMU 타이머 조건부 시작 | ~41uA (미연결 시) | 쉬움 | **미완료** |
|
||||
| P3: 배터리 타이머 동적 | ~5uA | 보통 | **미완료** |
|
||||
| P5-A: 단발->직접호출 | 응답 개선 | 쉬움 | **미완료** |
|
||||
| P5-B: app_scheduler | 코드 품질 + 확장성 | 보통 | **미완료** |
|
||||
| P5-C: IMU FIFO+인터럽트 | 연속측정 시 ~50uA | 어려움 | **미완료** |
|
||||
| P6: NRF_LOG 비활성화 | ~10uA | 쉬움 | **미완료** |
|
||||
|
||||
---
|
||||
|
||||
## 7. 코드 품질 개선
|
||||
|
||||
### 7.1 구조 개선
|
||||
|
||||
| # | 항목 | 현재 상태 |
|
||||
|---|------|----------|
|
||||
| Q1 | main.h에서 static 함수 선언 제거 | **미완료** (6개 잔존) |
|
||||
| Q2 | cat_interface.c -> i2c_manager.c로 TWI 통합 | **완료** |
|
||||
| Q3 | extern 변수 과다 사용 | **미완료** (30개 이상) |
|
||||
| Q4 | main_timer.c main_loop() 플래그 기반 폴링 | **미완료** |
|
||||
| Q5 | 매직 넘버 제거 | **미완료** |
|
||||
|
||||
### 7.2 코딩 스타일
|
||||
|
||||
변경 없음. CODE_REVIEW.pdf 7.2절과 동일.
|
||||
|
||||
---
|
||||
|
||||
## 8. 작업 우선순위 요약
|
||||
|
||||
### 즉시 수정 (안전/안정성)
|
||||
|
||||
| # | 항목 | 심각도 | 현재 상태 |
|
||||
|---|------|--------|----------|
|
||||
| 1 | B4: memset/memcpy 버퍼 크기 불일치 및 매직 넘버 | CRITICAL | **완료** |
|
||||
| 2 | B1: BLE TX 큐 풀 시 시스템 먹통 (binary_tx_handler → dr_binary_tx_safe 교체) | HIGH | **완료** |
|
||||
| 3 | B2: BLE TX 에러 핸들링 로직 반전 | HIGH | **완료** |
|
||||
| 4 | B3: extern + 초기화 동시 사용 | HIGH | **완료** |
|
||||
|
||||
### 1차 정리 (미사용 코드/EEPROM 삭제)
|
||||
|
||||
| # | 항목 | 현재 상태 |
|
||||
|---|------|----------|
|
||||
| 5 | 미사용 HW 드라이버 삭제 (1.2절) | **완료** |
|
||||
| 6 | cat_interface.c EEPROM 기능 삭제 + TWI를 i2c_manager.c로 통합 (1.5절) | **완료** |
|
||||
| 7 | cmd_parse.c EEPROM 호출 -> FDS 전환 (1.5.4절) | **완료** |
|
||||
| 8 | 미사용 전역변수 + HW_NO 삭제 (2.2-2.3절) | **미완료** |
|
||||
| 9 | DEBUG_MINIMAL_BOOT 조건 제거 (3절) | **미완료** |
|
||||
| 10 | Keil uvprojx 소스 참조 제거 (4절) | 확인 필요 |
|
||||
| 11 | 주석 처리된 코드 삭제 (2.4절) | **미완료** |
|
||||
|
||||
### 2차 정리 (저전력 최적화)
|
||||
|
||||
| # | 항목 | 예상 절감 | 현재 상태 |
|
||||
|---|------|----------|----------|
|
||||
| 12 | P1: UART 비활성화 | ~1mA | **미완료** |
|
||||
| 13 | P2: RTT 비활성화 | ~0.1-0.5mA | **미완료** |
|
||||
| 14 | P4: IMU 타이머 BLE 연결 시에만 동작 | ~41uA | **미완료** |
|
||||
| 15 | P5-A: main_loop 단발 이벤트 직접 호출로 전환 | 응답 개선 | **미완료** |
|
||||
| 16 | P5-B: app_scheduler 도입 (선택) | 코드 품질 | **미완료** |
|
||||
| 17 | P3: 배터리 타이머 동적 조절 | ~5uA | **미완료** |
|
||||
|
||||
### 3차 정리 (코드 품질)
|
||||
|
||||
| # | 항목 | 현재 상태 |
|
||||
|---|------|----------|
|
||||
| 18 | Q1: main.h static 함수 제거 | **미완료** |
|
||||
| 19 | Q5: 매직 넘버 define화 | **미완료** |
|
||||
| 20 | B9: config_load() goto 제거 | **미완료** |
|
||||
BIN
data/CODE_REVIEW_STATUS.pdf
Normal file
BIN
data/CODE_REVIEW_STATUS.pdf
Normal file
Binary file not shown.
3521
data/curcuit/20305 VB0HW0100 (1).asc
Normal file
3521
data/curcuit/20305 VB0HW0100 (1).asc
Normal file
File diff suppressed because it is too large
Load Diff
BIN
data/curcuit/20305 VB0HW0100.sch
Normal file
BIN
data/curcuit/20305 VB0HW0100.sch
Normal file
Binary file not shown.
BIN
data/curcuit/VesiScan-Basic_curcuit.pdf
Normal file
BIN
data/curcuit/VesiScan-Basic_curcuit.pdf
Normal file
Binary file not shown.
BIN
data/datasheet/W25Q32RV.pdf
Normal file
BIN
data/datasheet/W25Q32RV.pdf
Normal file
Binary file not shown.
Reference in New Issue
Block a user