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