SAADC 타이밍 충돌로 인한 FW RESET 방지: 배터리 저전압 측정 주기 및 init 실패시 처리 변경
- 배터리 저전압 측정 주기 5초 -> 60초로 변경(충돌 확률 감소) - SAADC init 실패 시 APP_ERROR_CHECK -> 측정 스킵 처리 ***** 현재 에러 처리는 APP_ERROR_CHECK로 되어있는데, 에러 발생 시 APP_ERROR_CHECK에 걸리면 HardFault 무한 루프에 빠져서 기기가 먹통이 됨. 런타임 중 에러가 발생해도 안전하게 복구되도록 에러 처리 전환 필요함. *****
This commit is contained in:
@@ -67,7 +67,7 @@ static nrf_saadc_value_t adc_buf;
|
||||
APP_TIMER_DEF(m_battery_loop_timer_id);
|
||||
|
||||
/* 배터리 측정 주기: 5초 (밀리초 단위) */
|
||||
#define BATTERY_LOOP_INTERVAL 5000
|
||||
#define BATTERY_LOOP_INTERVAL 60000
|
||||
|
||||
/* 저전압 체크 플래그 — battery_loop에서 true로 설정, 핸들러에서 소비 */
|
||||
bool low_battery_check = false;
|
||||
@@ -217,7 +217,9 @@ static void battery_configure(void)
|
||||
saadc_config.resolution = NRF_SAADC_RESOLUTION_12BIT; // 10 -> 12bit
|
||||
saadc_config.oversample = NRF_SAADC_OVERSAMPLE_4X;
|
||||
ret_code_t err_code = nrf_drv_saadc_init(&saadc_config, battery_event_handler);
|
||||
APP_ERROR_CHECK(err_code);
|
||||
if (err_code != NRF_SUCCESS) {
|
||||
return; /* SAADC 사용 중 → 이번 측정 스킵, 다음 주기에 재시도 */
|
||||
}
|
||||
|
||||
/* AIN2 채널 설정: 싱글엔드 입력, 1/6 gain, burst + TACQ 20μs */
|
||||
nrf_saadc_channel_config_t config = NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(NRF_SAADC_INPUT_AIN2);
|
||||
|
||||
Reference in New Issue
Block a user