From 310ca152cff8f09e4d97db79eae773189de514e8 Mon Sep 17 00:00:00 2001 From: jhChun Date: Fri, 20 Mar 2026 10:43:59 +0900 Subject: [PATCH] =?UTF-8?q?=ED=83=80=EC=9D=B4=EB=B0=8D=20=EC=B5=9C?= =?UTF-8?q?=EC=A0=81=ED=99=94=20-=20=EC=98=A8=EB=8F=84=20=EC=B8=A1?= =?UTF-8?q?=EC=A0=95,=20Piezo=20=EC=B8=A1=EC=A0=95=20=EC=82=AC=EC=9D=B4=20?= =?UTF-8?q?=EB=94=9C=EB=A0=88=EC=9D=B4=20=EC=A4=84=EC=9D=B4=EA=B8=B0=20-?= =?UTF-8?q?=20Piezo=20=ED=95=9C=20=EC=B1=84=EB=84=90=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=ED=8F=89=EA=B7=A0=ED=99=94=EB=A5=BC=20=EC=9C=84=ED=95=9C=20?= =?UTF-8?q?=EB=B0=98=EB=B3=B5=20=EC=B8=A1=EC=A0=95=20=EC=82=AC=EC=9D=B4=20?= =?UTF-8?q?=EB=94=9C=EB=A0=88=EC=9D=B4=20=EC=A4=84=EC=9D=B4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- pc_firm/dr_adc121s051/dr_adc121s051.c | 4 ++-- pc_firm/parser.c | 12 +++++------- .../icm42670p/app_raw/app_raw.c | 3 ++- .../ble_peripheral/ble_app_bladder_patch/main.c | 3 +++ project/ble_peripheral/dr_piezo/dr_piezo.c | 14 ++++++++++---- 5 files changed, 22 insertions(+), 14 deletions(-) diff --git a/pc_firm/dr_adc121s051/dr_adc121s051.c b/pc_firm/dr_adc121s051/dr_adc121s051.c index 2203cd3..a1fb9ea 100644 --- a/pc_firm/dr_adc121s051/dr_adc121s051.c +++ b/pc_firm/dr_adc121s051/dr_adc121s051.c @@ -828,10 +828,10 @@ dr_adc_err_t dr_adc_capture_channel_only(uint8_t freq_option, uint16_t delay_us, /* Capture with averaging */ for (uint16_t avg_iter = 0; avg_iter < averaging; avg_iter++) { if (avg_iter > 0) { - nrf_delay_us(500); /* Echo decay time */ + //nrf_delay_us(500); /* Echo decay time */ } - dr_piezo_select_channel(piezo_ch); + //dr_piezo_select_channel(piezo_ch); /* Execute piezo burst */ switch (freq_option) { diff --git a/pc_firm/parser.c b/pc_firm/parser.c index 2991158..7c29946 100644 --- a/pc_firm/parser.c +++ b/pc_firm/parser.c @@ -53,6 +53,7 @@ extern void param_error(const char *cmd); /* 파라미터 오류 시 BLE로 extern void single_format_data(uint8_t *buffer, const char *tag, uint16_t value); /* TAG(4바이트) + uint16 값(2바이트)을 buffer에 포맷팅 */ extern void ascii_format_data(uint8_t *buffer, const char *tag, const char *ascii, uint8_t len); /* TAG(4바이트) + ASCII 문자열을 buffer에 포맷팅 */ extern void dr_binary_tx_safe(const uint8_t *buffer, uint16_t length); /* BLE NUS를 통해 바이너리 데이터 전송 (length는 워드 단위) */ +extern volatile bool data_tx_in_progress; /* BLE TX 진행 중 플래그 */ extern void dr_sd_delay_ms(uint32_t ms); /* SoftDevice 호환 딜레이 (BLE 스택 이벤트 처리 허용) */ /* FDS(Flash Data Storage) 설정 관련 */ @@ -1076,7 +1077,7 @@ static void all_sensors(void) /* 1) 배터리 전압 측정 → info_batt에 저장 */ battery_level_meas(); - dr_sd_delay_ms(50); /* SAADC 콜백 완료 대기 */ + dr_sd_delay_ms(1); /* SAADC 콜백 완료 대기 */ /* 2) IMU 6축 단발 읽기 → info_imu[6]에 저장 */ hw_i2c_init_once(); @@ -1090,7 +1091,7 @@ static void all_sensors(void) } tmp235_voltage_level_meas(); - dr_sd_delay_ms(50); /* SAADC 콜백 완료 대기 */ + dr_sd_delay_ms(1); /* SAADC 콜백 완료 대기 */ info4 = false; @@ -1109,6 +1110,8 @@ static void all_sensors(void) buf[18] = (uint8_t)(info_temp & 0xFF); buf[19] = (uint8_t)(info_temp >> 8); + + if (g_plat.log) g_plat.log("[Cmd_mbb] rbb: TX before send, in_progress=%d\r\n", (int)data_tx_in_progress); dr_binary_tx_safe(buf, 10); /* 20바이트 = 10워드 */ if (g_plat.log) g_plat.log("[Cmd_mbb] rbb: sent (batt=%u temp=%u)\r\n", info_batt, info_temp); @@ -1157,8 +1160,6 @@ static int Cmd_mbb(const ParsedCmd *cmd) all_sensors(); - dr_sd_delay_ms(20); /* SoftDevice 이벤트 정리 후 캡처 시작 */ - if (maa_async_is_busy()) { dr_ble_return_1("raa:", 0xFFFE); @@ -1199,9 +1200,6 @@ static int Cmd_mbb(const ParsedCmd *cmd) return 1; } - /* 완료 시 자동 전원 OFF */ - //maa_async_set_auto_power(true); - return 1; } diff --git a/project/ble_peripheral/ble_app_bladder_patch/icm42670p/app_raw/app_raw.c b/project/ble_peripheral/ble_app_bladder_patch/icm42670p/app_raw/app_raw.c index eca9e15..e5352cd 100644 --- a/project/ble_peripheral/ble_app_bladder_patch/icm42670p/app_raw/app_raw.c +++ b/project/ble_peripheral/ble_app_bladder_patch/icm42670p/app_raw/app_raw.c @@ -507,7 +507,8 @@ int imu_read_direct(void) { uint8_t pwr_cmd[2] = { 0x1F, 0x0F }; /* reg=0x1F, val=0x0F */ icm42670_twi_tx(IMU_I2C_ADDR, pwr_cmd, 2, false); - nrf_delay_ms(80); /* 자이로 스타트업: 최소 45ms + 안전 마진 */ + //nrf_delay_ms(80); /* 자이로 스타트업: 최소 45ms + 안전 마진 */ + dr_sd_delay_ms(80); } /* ACCEL_DATA_X1(0x0B)부터 12바이트 연속 읽기 (0x0B~0x16) */ diff --git a/project/ble_peripheral/ble_app_bladder_patch/main.c b/project/ble_peripheral/ble_app_bladder_patch/main.c index d71de4d..7d9e33b 100644 --- a/project/ble_peripheral/ble_app_bladder_patch/main.c +++ b/project/ble_peripheral/ble_app_bladder_patch/main.c @@ -1576,6 +1576,9 @@ void dr_binary_tx_safe(uint8_t const *ble_bin_buff, uint16_t length) // BLE } } while (retry_count < MAX_RETRIES); + if (retry_count > 0) { + DBG_PRINTF("[BLE TX] retry=%u (+%ums)\r\n", retry_count, retry_count * 5); + } if (retry_count >= MAX_RETRIES) { // 최대 재시도(100회) 초과 시 해당 패킷 드롭, 연결은 유지 DBG_PRINTF("[BLE TX] FAIL %u retries\r\n", retry_count); data_tx_in_progress = false; diff --git a/project/ble_peripheral/dr_piezo/dr_piezo.c b/project/ble_peripheral/dr_piezo/dr_piezo.c index 0e7104e..cba1814 100644 --- a/project/ble_peripheral/dr_piezo/dr_piezo.c +++ b/project/ble_peripheral/dr_piezo/dr_piezo.c @@ -228,15 +228,21 @@ void dr_piezo_power_on(void) DBG_PRINTF("[PIEZO] Power ON: +/-20V ready\r\n"); } -/* 피에조 전원 OFF: TX 비활성화 후 DC/DC 컨버터 차단 */ +/* 피에조 전원 OFF: TX 비활성화 → MUX 비활성화 → DC/DC 컨버터 차단 */ void dr_piezo_power_off(void) { dr_piezo_disable(); - + + /* MUX enable 핀 클리어: select_channel() 이후 HIGH로 남은 핀 해제 */ + nrf_gpio_pin_clear(DR_PIEZO_EN_MUXA); + nrf_gpio_pin_clear(DR_PIEZO_EN_MUXB); + nrf_gpio_pin_clear(DR_PIEZO_MUX_SEL0); + nrf_gpio_pin_clear(DR_PIEZO_MUX_SEL1); + nrf_gpio_pin_clear(DR_PIEZO_PWR_EN); - + m_power_enabled = false; - + DBG_PRINTF("[PIEZO] Power OFF\r\n"); }