From 5ddabdd1a84e7b73b2c87784ea2d12d097b277e7 Mon Sep 17 00:00:00 2001 From: jhChun Date: Thu, 26 Mar 2026 11:39:12 +0900 Subject: [PATCH] =?UTF-8?q?EEPROM=20=EB=A0=88=EA=B1=B0=EC=8B=9C=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - EEP_WP, eeprom_control, power_gpio_init 삭제 --- .../ble_app_bladder_patch/main.c | 37 ++++++++++++--- .../ble_app_bladder_patch/power_control.c | 46 ++----------------- .../ble_app_bladder_patch/power_control.h | 14 ++---- 3 files changed, 38 insertions(+), 59 deletions(-) diff --git a/project/ble_peripheral/ble_app_bladder_patch/main.c b/project/ble_peripheral/ble_app_bladder_patch/main.c index c466ed5..a5a0cf0 100644 --- a/project/ble_peripheral/ble_app_bladder_patch/main.c +++ b/project/ble_peripheral/ble_app_bladder_patch/main.c @@ -90,7 +90,7 @@ #endif /* ── 애플리케이션 모듈 헤더 ── */ -#include "system_interface.h" /* 시스템 인터페이스 (센서/EEPROM 제어 추상화) */ +#include "system_interface.h" /* 시스템 인터페이스 (IMU 센서 I2C 통신) */ #include "main.h" /* 메인 헤더 (전역 구조체, 상수, 외부 함수 선언) */ #include "app_raw_main.h" /* 센서 원시 데이터 처리 모듈 */ #include "main_timer.h" /* 메인 이벤트 루프 타이머 (10ms 주기) */ @@ -342,7 +342,6 @@ static void gpio_init(void) nrf_gpio_cfg_input(POWER_BUTTON, NRF_GPIO_PIN_NOPULL); nrf_gpio_cfg_output(POWER_HOLD); nrf_gpio_pin_set(POWER_HOLD); - power_gpio_init(); DBG_PRINTF("[GPIO] OK (BTN=%d)\r\n", nrf_gpio_pin_read(POWER_BUTTON)); } @@ -1656,6 +1655,13 @@ int main(void) /*────────────────────────────────────────────────────────────── * Phase 1: 하드웨어 기본 초기화 (BLE 무관) + * + * - 전원 자가유지 래치 (P0.8 HIGH) + * - RTT 로그 출력 + * - GPIO (전원 버튼 입력, 전원 유지 핀) + * - 앱 타이머 (전원 폴링, 배터리, 메인 루프) + * - 기본 설정값 (시리얼 번호, 패스키) + * - 버튼/LED (BSP) *────────────────────────────────────────────────────────────*/ power_hold_init(); @@ -1681,15 +1687,23 @@ int main(void) /*────────────────────────────────────────────────────────────── * Phase 2: BLE 스택 초기화 + * + * - 전원 관리 모듈 (idle 시 WFE/슬립) + * - SoftDevice S140 (BLE 5.0 프로토콜 스택) + * - DC-DC 컨버터 활성화 (SoftDevice 이후 필수) *────────────────────────────────────────────────────────────*/ DBG_PRINTF("[2] BLE Stack\r\n"); power_management_init(); ble_stack_init(); - APP_ERROR_CHECK(sd_power_dcdc_mode_set(NRF_POWER_DCDC_ENABLE)); /* DC-DC: SD 이후 필수 */ + APP_ERROR_CHECK(sd_power_dcdc_mode_set(NRF_POWER_DCDC_ENABLE)); DBG_PRINTF(" pwr/stack/dcdc OK\r\n"); /*────────────────────────────────────────────────────────────── - * Phase 3: FDS + 설정 로드 (BLE 스택 이후에 초기화해야 함) + * Phase 3: 내장 플래시 설정 (BLE 스택 이후에 초기화해야 함) + * + * - FDS(Flash Data Storage) 초기화 + * - 플래시에서 저장된 설정 읽기 (시리얼, 패스키, 피에조 등) + * - 기본값 위에 플래시 값 덮어쓰기 *────────────────────────────────────────────────────────────*/ DBG_PRINTF("[3] FDS\r\n"); fs_storage_init(); @@ -1698,7 +1712,14 @@ int main(void) DBG_PRINTF(" fds OK\r\n"); /*────────────────────────────────────────────────────────────── - * Phase 4: BLE 프로토콜 (GAP/GATT/NUS/Advertising/보안) + * Phase 4: BLE 프로토콜 설정 + * + * - GAP: 디바이스 이름(시리얼 번호), 연결 파라미터, 패스키 + * - GATT: MTU 크기 협상 + * - 서비스: NUS(Nordic UART Service), QWR, DFU + * - Advertising: 광고 데이터 구성 (이름, UUID) + * - 연결 파라미터 협상 모듈 + * - 보안: Peer Manager (본딩/패스키) *────────────────────────────────────────────────────────────*/ DBG_PRINTF("[4] BLE Protocol\r\n"); gap_params_init(); @@ -1711,7 +1732,6 @@ int main(void) #endif DBG_PRINTF(" gap/gatt/svc/adv/conn/sec OK\r\n"); - /* FDS 기본값 저장 (advertising 이후) */ if (m_need_save_defaults) { config_save(); m_need_save_defaults = false; @@ -1720,6 +1740,11 @@ int main(void) /*────────────────────────────────────────────────────────────── * Phase 5: 애플리케이션 초기화 + * + * - 명령 파서: BLE 수신 명령 처리 (로그, BLE 전송, CRC) + * - 피에조 드라이버: 초음파 측정용 GPIO/Timer/PPI 설정 + * - IMU(ICM42670P)는 여기서 초기화하지 않음 + * → msp? 명령 시 imu_read_direct()가 매번 자체 설정/읽기/슬립 처리 *────────────────────────────────────────────────────────────*/ DBG_PRINTF("[5] App\r\n"); g_plat.log = log_printf; diff --git a/project/ble_peripheral/ble_app_bladder_patch/power_control.c b/project/ble_peripheral/ble_app_bladder_patch/power_control.c index 3cde82a..de5115f 100644 --- a/project/ble_peripheral/ble_app_bladder_patch/power_control.c +++ b/project/ble_peripheral/ble_app_bladder_patch/power_control.c @@ -8,23 +8,17 @@ * * [전원 켜기 흐름] * device_activated() - * → p_order=0으로 초기화, power_loop 타이머 시작 - * → power_loop() 상태머신이 20ms 간격으로 Step 0→1→2 순서대로 실행 - * - Step 0: I2C 초기화 (sw_i2c_init_once) - * - Step 1: 예약 (현재 미사용) - * - Step 2: 전원 시퀀스 완료 + * → power_loop 타이머 시작 → 즉시 완료 (센서 초기화 불필요) + * → 센서(IMU)는 측정 명령 시 imu_read_direct()가 자체 처리 * * [슬립 모드] * device_sleep_mode() - * → EEPROM OFF → processing 플래그 해제 + * → processing 플래그 해제 * * [재활성화] * device_reactivated() * → I2C 재초기화 후 전원 시퀀스를 처음부터 다시 시작 * - * [EEPROM 쓰기 보호 핀] - * EEP_WP = P0.24 (레거시, 현재는 FDS를 사용하므로 실질적으로 미사용) - * * [타이머] * 싱글샷 모드 app_timer, 20ms 간격으로 power_loop 호출 * @@ -43,8 +37,6 @@ #include "debug_print.h" #include "i2c_manager.h" -/* EEPROM 쓰기 보호 핀 (P0.24) - 레거시, 현재는 FDS 사용 */ -#define EEP_WP NRF_GPIO_PIN_MAP(0, 24) /* 전원 시퀀스용 싱글샷 타이머 인스턴스 */ APP_TIMER_DEF(m_power_timer_id); @@ -53,9 +45,6 @@ APP_TIMER_DEF(m_power_timer_id); // 2025-12-08 change to #define POWER_LOOP_INTERVAL 30 -> 20 #define POWER_LOOP_INTERVAL 20 - - - /* 전원 시퀀스 현재 단계 (0: I2C 초기화, 1: 예약, 2: 완료) */ static uint8_t p_order; @@ -65,36 +54,10 @@ extern volatile bool processing; /* 전원 시퀀스 잠금 플래그 (true = 전원 시퀀스 진행 중) */ bool lock_check = false; -/** - * @brief 전원 관련 GPIO 핀 초기화 - * - * EEP_WP 핀을 출력 모드로 설정한다. - */ -void power_gpio_init(void) -{ - nrf_gpio_cfg_output(EEP_WP); -} - - -/** - * @brief EEPROM 전원 제어 (ON/OFF) - * - * @param eeprom_st ON: EEP_WP 핀 HIGH (쓰기 허용), OFF: LOW (쓰기 보호) - * 레거시 기능으로, 현재는 FDS(Flash Data Storage)를 사용하여 실질적으로 미사용. - */ -void eeprom_control(on_off_cont_t eeprom_st) -{ - if(eeprom_st == OFF) { - nrf_gpio_pin_clear(EEP_WP); /* LOW: EEPROM 쓰기 보호 활성화 */ - }else if(eeprom_st == ON){ - nrf_gpio_pin_set(EEP_WP); /* HIGH: EEPROM 쓰기 허용 */ - } -} - /** * @brief 디바이스 슬립 모드 진입 * - * EEPROM을 OFF하고, 데이터 처리 플래그(processing)를 해제하여 + * 데이터 처리 플래그(processing)를 해제하여 * 메인 루프가 더 이상 센서 데이터를 처리하지 않도록 한다. * * @return 0 (항상 성공) @@ -114,7 +77,6 @@ int device_sleep_mode(void){ * * 전원 시퀀스 단계를 0으로 초기화하고, 잠금 플래그를 설정한 뒤 * 타이머를 시작하여 power_loop() 상태머신을 구동한다. - * EEPROM은 OFF 상태로 시작한다. * * @return 0 (항상 성공) */ diff --git a/project/ble_peripheral/ble_app_bladder_patch/power_control.h b/project/ble_peripheral/ble_app_bladder_patch/power_control.h index 773b069..441270c 100644 --- a/project/ble_peripheral/ble_app_bladder_patch/power_control.h +++ b/project/ble_peripheral/ble_app_bladder_patch/power_control.h @@ -10,11 +10,9 @@ * 디바이스 전원 시퀀스 관리 모듈의 공용 인터페이스 헤더. * * [주요 함수 요약] - * power_gpio_init() : 전원 관련 GPIO 초기화 (EEP_WP 핀) - * eeprom_control() : EEPROM 쓰기 보호 ON/OFF (레거시) * device_activated() : 전원 켜기 → power_loop 상태머신 시작 - * device_sleep_mode() : 슬립 모드 진입 (EEPROM OFF, 처리 중단) - * device_reactivated() : 슬립 복귀 → I2C 재초기화 후 전원 시퀀스 재시작 + * device_sleep_mode() : 슬립 모드 진입 (처리 중단) + * device_reactivated() : 슬립 복귀 → 전원 시퀀스 재시작 * power_loop() : 20ms 간격 전원 시퀀스 상태머신 콜백 * power_timer_start/stop : 전원 시퀀스 타이머 제어 * power_timer_init() : 전원 시퀀스 타이머 초기화 (앱 시작 시 1회) @@ -26,13 +24,7 @@ #include "main.h" -/** @brief 전원 관련 GPIO 핀 초기화 (EEP_WP 출력 설정) */ -void power_gpio_init(void); - -/** @brief EEPROM 쓰기 보호 제어 (ON=허용, OFF=보호) - 레거시 */ -void eeprom_control(on_off_cont_t eeprom_st); - -/** @brief 디바이스 슬립 모드 진입 (EEPROM OFF, processing 해제) */ +/** @brief 디바이스 슬립 모드 진입 (processing 해제) */ int device_sleep_mode(void); /** @brief 디바이스 전원 켜기 (전원 시퀀스 상태머신 시작) */