Files
VesiScan-Basic-firmware-test/README.md
jh.Chun 836ebe5878 IMU gyro/accel config fix and README piezo frequency table correction
- Add GYRO_CONFIG0/ACCEL_CONFIG0 register setup in imu_read_direct() to fix gyro always returning -32768
- Increase sensor startup delay from 2ms to 80ms for reliable first read
- Put IMU back to sleep after msp? read to save power
- Fix piezo frequency table: swap freq 0/1 values, remove unused freq 5

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 17:27:17 +09:00

4.2 KiB

Medithings VesiScan BASIC

nRF52840 기반 초음파(Piezo) + IMU 방광 모니터링 패치 펌웨어

Author

Charles KWON - charleskwon@medithings.co.kr

Overview

VesiScan BASIC은 피에조 초음파 트랜스듀서와 IMU 센서를 이용하여 방광 상태를 측정하고, BLE를 통해 모바일 클라이언트로 데이터를 전송하는 웨어러블 패치 디바이스 펌웨어입니다.

Hardware

구분 칩/센서 사양 인터페이스
MCU nRF52840 ARM Cortex-M4, SoftDevice S140 -
Piezo TX MD1822K6-G + TC7920K6-G MOSFET Driver, +/-20V GPIO (Timer+PPI)
Piezo MUX 8ch MUX (MUXA/MUXB) 채널 선택 (CH0~CH7) GPIO
Echo AFE ADA2200 Lock-in Amplifier SPI
Echo ADC ADC121S051 12-bit, Echo 신호 샘플링 SPI
DAC MCP4725 12-bit, 바이어스 전압 I2C (SW)
DigiPot AD5272 가변저항, AGC 제어 I2C (SW)
IMU ICM42670P 6축 가속도/자이로 I2C (HW)

BLE Commands (Piezo)

Command Response 설명
mpa? - Piezo 시스템 활성화 (전원 ON + 드라이버 초기화)
mpc? [cycles] [freq] [ch] - Piezo 버스트 (주파수/채널 선택)
mdc? [cycles] [delay] [samples] rdb: rdd: rde: Piezo 버스트 + Echo 캡처 (12-bit packed)
mec? [freq] [delay] [samples] [cycles] [avg] [ch] rer: Piezo 버스트 + Echo 캡처 (16-bit raw)
maa? [mode] raa: 8채널 전체 캡처 (비동기, mode 0=raw)

Piezo 주파수 옵션

freq 주파수
0 1.8 MHz
1 (기본) 2.1 MHz
2 2.0 MHz
3 1.7 MHz
4 2.2 MHz

8채널 MUX 매핑

Channel MUX SEL1 SEL0 EN_MUXA EN_MUXB
CH0 A0 0 0 1 0
CH1 A2 0 1 1 0
CH2 A1 1 0 1 0
CH3 A3 1 1 1 0
CH4 B0 1 1 0 1
CH5 B1 0 1 0 1
CH6 B2 1 0 0 1
CH7 B3 0 0 0 1

Echo 수신 체인

Piezo → MUX(8ch) → ADA2200(AFE) → ADC121S051 → nRF52840
                                      ↑
                               MCP4725(Bias) + AD5272(AGC)

BLE Commands (IMU)

Command Response 설명
msp? rsp: IMU 6축 데이터 (single shot, 레지스터 직접 읽기)

IMU 사양

항목 설정
센서 ICM42670P (6축: 3축 가속도 + 3축 자이로)
인터페이스 I2C (HW)
모드 Low-Noise Mode
해상도 16-bit

BLE Commands (측정)

Command Response 설명
scj? rcj: PD-ADC M48 MODE 2 (Pressure + M48 + Battery + Temp + IMU)
sdj? rdj: PD-ADC M48 MODE 3
sej? rej: PD-ADC M48 MODE 4 (M48 + Battery + IMU)
ssj? rsj: PD-ADC M48 MODE 0 (M48 + Battery/IMU combined)
cmd? [v1] [v2] [v3] rmd: ADC count / delay / 파라미터 설정

Build

  • IDE: Keil uVision5 (ARM5)
  • SDK: nRF5 SDK + SoftDevice S140
#define HARDWARE_VERSION   "VB0HW0000"
#define FIRMWARE_VERSION   "VB0FW0000"
#define FIRMWARE_SERIAL_NO "VB026030000"

Project Structure

project/
├── ble_peripheral/
│   ├── ble_app_bladder_patch/       ← 메인 펌웨어
│   │   ├── main.c                    ← 부트, BLE, 전원 제어
│   │   ├── main_timer.c              ← 메인 루프 (측정/제어)
│   │   ├── cmd_parse.c               ← BLE 명령어 파싱 (레거시)
│   │   ├── icm42670p/                ← IMU 드라이버
│   │   └── meas_pd_*.c              ← PD Echo 측정 (모드별)
│   └── dr_piezo/                    ← Piezo TX 드라이버
└── dfu/
    └── secure_bootloader/           ← BLE DFU 부트로더

pc_firm/                             ← 파서 및 ADC 드라이버
├── parser.c                          ← BLE 명령어 파서 (신규)
└── dr_adc121s051/                   ← Echo ADC 드라이버

License

Proprietary - Medithings Co., Ltd.