EEPROM 레거시 코드 정리

- EEP_WP, eeprom_control, power_gpio_init 삭제
This commit is contained in:
jhChun
2026-03-26 11:39:12 +09:00
parent d9e83392f2
commit 5ddabdd1a8
3 changed files with 38 additions and 59 deletions

View File

@@ -90,7 +90,7 @@
#endif #endif
/* ── 애플리케이션 모듈 헤더 ── */ /* ── 애플리케이션 모듈 헤더 ── */
#include "system_interface.h" /* 시스템 인터페이스 (센서/EEPROM 제어 추상화) */ #include "system_interface.h" /* 시스템 인터페이스 (IMU 센서 I2C 통신) */
#include "main.h" /* 메인 헤더 (전역 구조체, 상수, 외부 함수 선언) */ #include "main.h" /* 메인 헤더 (전역 구조체, 상수, 외부 함수 선언) */
#include "app_raw_main.h" /* 센서 원시 데이터 처리 모듈 */ #include "app_raw_main.h" /* 센서 원시 데이터 처리 모듈 */
#include "main_timer.h" /* 메인 이벤트 루프 타이머 (10ms 주기) */ #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_input(POWER_BUTTON, NRF_GPIO_PIN_NOPULL);
nrf_gpio_cfg_output(POWER_HOLD); nrf_gpio_cfg_output(POWER_HOLD);
nrf_gpio_pin_set(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)); DBG_PRINTF("[GPIO] OK (BTN=%d)\r\n", nrf_gpio_pin_read(POWER_BUTTON));
} }
@@ -1656,6 +1655,13 @@ int main(void)
/*────────────────────────────────────────────────────────────── /*──────────────────────────────────────────────────────────────
* Phase 1: 하드웨어 기본 초기화 (BLE 무관) * Phase 1: 하드웨어 기본 초기화 (BLE 무관)
*
* - 전원 자가유지 래치 (P0.8 HIGH)
* - RTT 로그 출력
* - GPIO (전원 버튼 입력, 전원 유지 핀)
* - 앱 타이머 (전원 폴링, 배터리, 메인 루프)
* - 기본 설정값 (시리얼 번호, 패스키)
* - 버튼/LED (BSP)
*────────────────────────────────────────────────────────────*/ *────────────────────────────────────────────────────────────*/
power_hold_init(); power_hold_init();
@@ -1681,15 +1687,23 @@ int main(void)
/*────────────────────────────────────────────────────────────── /*──────────────────────────────────────────────────────────────
* Phase 2: BLE 스택 초기화 * Phase 2: BLE 스택 초기화
*
* - 전원 관리 모듈 (idle 시 WFE/슬립)
* - SoftDevice S140 (BLE 5.0 프로토콜 스택)
* - DC-DC 컨버터 활성화 (SoftDevice 이후 필수)
*────────────────────────────────────────────────────────────*/ *────────────────────────────────────────────────────────────*/
DBG_PRINTF("[2] BLE Stack\r\n"); DBG_PRINTF("[2] BLE Stack\r\n");
power_management_init(); power_management_init();
ble_stack_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"); 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"); DBG_PRINTF("[3] FDS\r\n");
fs_storage_init(); fs_storage_init();
@@ -1698,7 +1712,14 @@ int main(void)
DBG_PRINTF(" fds OK\r\n"); 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"); DBG_PRINTF("[4] BLE Protocol\r\n");
gap_params_init(); gap_params_init();
@@ -1711,7 +1732,6 @@ int main(void)
#endif #endif
DBG_PRINTF(" gap/gatt/svc/adv/conn/sec OK\r\n"); DBG_PRINTF(" gap/gatt/svc/adv/conn/sec OK\r\n");
/* FDS 기본값 저장 (advertising 이후) */
if (m_need_save_defaults) { if (m_need_save_defaults) {
config_save(); config_save();
m_need_save_defaults = false; m_need_save_defaults = false;
@@ -1720,6 +1740,11 @@ int main(void)
/*────────────────────────────────────────────────────────────── /*──────────────────────────────────────────────────────────────
* Phase 5: 애플리케이션 초기화 * Phase 5: 애플리케이션 초기화
*
* - 명령 파서: BLE 수신 명령 처리 (로그, BLE 전송, CRC)
* - 피에조 드라이버: 초음파 측정용 GPIO/Timer/PPI 설정
* - IMU(ICM42670P)는 여기서 초기화하지 않음
* → msp? 명령 시 imu_read_direct()가 매번 자체 설정/읽기/슬립 처리
*────────────────────────────────────────────────────────────*/ *────────────────────────────────────────────────────────────*/
DBG_PRINTF("[5] App\r\n"); DBG_PRINTF("[5] App\r\n");
g_plat.log = log_printf; g_plat.log = log_printf;

View File

@@ -8,23 +8,17 @@
* *
* [전원 켜기 흐름] * [전원 켜기 흐름]
* device_activated() * device_activated()
* → p_order=0으로 초기화, power_loop 타이머 시작 * → power_loop 타이머 시작 → 즉시 완료 (센서 초기화 불필요)
* → power_loop() 상태머신이 20ms 간격으로 Step 0→1→2 순서대로 실행 * → 센서(IMU)는 측정 명령 시 imu_read_direct()가 자체 처리
* - Step 0: I2C 초기화 (sw_i2c_init_once)
* - Step 1: 예약 (현재 미사용)
* - Step 2: 전원 시퀀스 완료
* *
* [슬립 모드] * [슬립 모드]
* device_sleep_mode() * device_sleep_mode()
* → EEPROM OFF → processing 플래그 해제 * → processing 플래그 해제
* *
* [재활성화] * [재활성화]
* device_reactivated() * device_reactivated()
* → I2C 재초기화 후 전원 시퀀스를 처음부터 다시 시작 * → I2C 재초기화 후 전원 시퀀스를 처음부터 다시 시작
* *
* [EEPROM 쓰기 보호 핀]
* EEP_WP = P0.24 (레거시, 현재는 FDS를 사용하므로 실질적으로 미사용)
*
* [타이머] * [타이머]
* 싱글샷 모드 app_timer, 20ms 간격으로 power_loop 호출 * 싱글샷 모드 app_timer, 20ms 간격으로 power_loop 호출
* *
@@ -43,8 +37,6 @@
#include "debug_print.h" #include "debug_print.h"
#include "i2c_manager.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); 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 // 2025-12-08 change to #define POWER_LOOP_INTERVAL 30 -> 20
#define POWER_LOOP_INTERVAL 20 #define POWER_LOOP_INTERVAL 20
/* 전원 시퀀스 현재 단계 (0: I2C 초기화, 1: 예약, 2: 완료) */ /* 전원 시퀀스 현재 단계 (0: I2C 초기화, 1: 예약, 2: 완료) */
static uint8_t p_order; static uint8_t p_order;
@@ -65,36 +54,10 @@ extern volatile bool processing;
/* 전원 시퀀스 잠금 플래그 (true = 전원 시퀀스 진행 중) */ /* 전원 시퀀스 잠금 플래그 (true = 전원 시퀀스 진행 중) */
bool lock_check = false; 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 디바이스 슬립 모드 진입 * @brief 디바이스 슬립 모드 진입
* *
* EEPROM을 OFF하고, 데이터 처리 플래그(processing)를 해제하여 * 데이터 처리 플래그(processing)를 해제하여
* 메인 루프가 더 이상 센서 데이터를 처리하지 않도록 한다. * 메인 루프가 더 이상 센서 데이터를 처리하지 않도록 한다.
* *
* @return 0 (항상 성공) * @return 0 (항상 성공)
@@ -114,7 +77,6 @@ int device_sleep_mode(void){
* *
* 전원 시퀀스 단계를 0으로 초기화하고, 잠금 플래그를 설정한 뒤 * 전원 시퀀스 단계를 0으로 초기화하고, 잠금 플래그를 설정한 뒤
* 타이머를 시작하여 power_loop() 상태머신을 구동한다. * 타이머를 시작하여 power_loop() 상태머신을 구동한다.
* EEPROM은 OFF 상태로 시작한다.
* *
* @return 0 (항상 성공) * @return 0 (항상 성공)
*/ */

View File

@@ -10,11 +10,9 @@
* 디바이스 전원 시퀀스 관리 모듈의 공용 인터페이스 헤더. * 디바이스 전원 시퀀스 관리 모듈의 공용 인터페이스 헤더.
* *
* [주요 함수 요약] * [주요 함수 요약]
* power_gpio_init() : 전원 관련 GPIO 초기화 (EEP_WP 핀)
* eeprom_control() : EEPROM 쓰기 보호 ON/OFF (레거시)
* device_activated() : 전원 켜기 → power_loop 상태머신 시작 * device_activated() : 전원 켜기 → power_loop 상태머신 시작
* device_sleep_mode() : 슬립 모드 진입 (EEPROM OFF, 처리 중단) * device_sleep_mode() : 슬립 모드 진입 (처리 중단)
* device_reactivated() : 슬립 복귀 → I2C 재초기화 후 전원 시퀀스 재시작 * device_reactivated() : 슬립 복귀 → 전원 시퀀스 재시작
* power_loop() : 20ms 간격 전원 시퀀스 상태머신 콜백 * power_loop() : 20ms 간격 전원 시퀀스 상태머신 콜백
* power_timer_start/stop : 전원 시퀀스 타이머 제어 * power_timer_start/stop : 전원 시퀀스 타이머 제어
* power_timer_init() : 전원 시퀀스 타이머 초기화 (앱 시작 시 1회) * power_timer_init() : 전원 시퀀스 타이머 초기화 (앱 시작 시 1회)
@@ -26,13 +24,7 @@
#include "main.h" #include "main.h"
/** @brief 전원 관련 GPIO 핀 초기화 (EEP_WP 출력 설정) */ /** @brief 디바이스 슬립 모드 진입 (processing 해제) */
void power_gpio_init(void);
/** @brief EEPROM 쓰기 보호 제어 (ON=허용, OFF=보호) - 레거시 */
void eeprom_control(on_off_cont_t eeprom_st);
/** @brief 디바이스 슬립 모드 진입 (EEPROM OFF, processing 해제) */
int device_sleep_mode(void); int device_sleep_mode(void);
/** @brief 디바이스 전원 켜기 (전원 시퀀스 상태머신 시작) */ /** @brief 디바이스 전원 켜기 (전원 시퀀스 상태머신 시작) */