EEPROM 레거시 코드 정리
- EEP_WP, eeprom_control, power_gpio_init 삭제
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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 (항상 성공)
|
||||
*/
|
||||
|
||||
@@ -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 디바이스 전원 켜기 (전원 시퀀스 상태머신 시작) */
|
||||
|
||||
Reference in New Issue
Block a user