- 기존 bit-bang 방식, SPI 핀(P0.14/15/16)이 하드웨어 SPIM 모드로 잡혀있어 GPIO 제어 불가 - CS만 GPIO로 분리 제어(ADA2200, W25Q32)
VivaMyo - BLE NIRS Firmware
nRF52840 기반 BLE 의료기기 펌웨어. 방광 모니터링을 위한 NIRS(Near-Infrared Spectroscopy) 장치.
주요 사양
| 항목 | 사양 |
|---|---|
| MCU | Nordic nRF52840 |
| SoftDevice | s140 v7.2.0 |
| 통신 | BLE 5.0 (Nordic UART Service) |
| 보안 | LESC 페어링, Static Passkey |
| 센서 | LED x48, Photodetector, IMU (ICM42670P), 온도 (TMP235), 압력 |
| 저장 | 내장 Flash (FDS) + 외장 Flash (W25Q32RV) |
| IDE | Keil uVision 5 (ARM Compiler 5) |
디렉토리 구조
mt_VivaMayo/
│
├── project/ble_peripheral/ble_app_vivaMayo/ # 메인 펌웨어 소스
│ ├── main.c # 엔트리 포인트
│ ├── main.h
│ ├── main_timer.c/h # 타이머 관리
│ ├── fstorage.c/h # FDS 내장 Flash 저장
│ ├── cmd_parse.c/h # 명령어 파서 래퍼
│ ├── cmd/
│ │ ├── cmd.c # BLE 명령어 핸들러 (mr*/mw* 포함)
│ │ └── cmd.h
│ ├── ble/ # BLE 코어, 데이터 전송, 보안
│ │ ├── ble_core.c/h
│ │ ├── ble_data_tx.c/h
│ │ ├── ble_security.c/h
│ │ └── ble_services.c/h
│ ├── storage/ # 메모리 추상화 API
│ │ ├── dr_mem.c/h # 이름 기반 메모리 읽기/쓰기
│ │ └── mem_*.c/h # 메모리 HAL
│ ├── config/
│ │ ├── device_config.c/h # 부팅 시 디바이스 설정 로드
│ │ └── sdk_config.h # (pca10056/s140/config/)
│ ├── drivers/w25q32/ # W25Q32 외장 Flash SPI 드라이버
│ ├── power/ # 전원 제어, 슬립 모드
│ ├── peripheral/ # UART 핸들러
│ ├── icm42670p/ # IMU 센서 드라이버 (InvenSense)
│ ├── docs/ # 기술 문서
│ │ ├── PROGRAM_ARCHITECTURE.md
│ │ ├── FDS_INTERNAL_FLASH.md
│ │ ├── FDS_MODULE_PORTING_GUIDE.md
│ │ ├── W25Q32RV_FLASH_MEMORY.md
│ │ └── W25Q32RV_INITIALIZATION.md
│ └── pca10056/s140/arm5_no_packs/ # Keil 프로젝트
│ └── ble_app_VivaMayo.uvprojx
│
├── project/dfu/ # DFU 부트로더
│ ├── private_key.c
│ └── secure_bootloader/
│
├── lib/pc_firm/ # 공용 라이브러리 (pc_firm)
│ ├── parser.c/h # 명령어 파서 코어
│ ├── dr_util/ # BLE 응답 유틸 (dr_ble_return_*)
│ ├── dr_adc121s051/ # ADC 드라이버
│ ├── ble_security/ # BLE 보안 (quick pairing)
│ └── storage/ # 메모리 추상화 (EEPROM/Flash HAL)
│
├── components/ # Nordic SDK - BLE, 라이브러리
├── modules/ # Nordic SDK - nrfx 드라이버
├── external/ # Nordic SDK - 외부 라이브러리
├── integration/ # Nordic SDK - nrfx 통합
│
├── pads/ # PCB 패드 파일
├── sch/ # 회로도
└── README.md
빌드 방법
- 이 저장소 clone
- Keil uVision 5에서
project/ble_peripheral/ble_app_vivaMayo/pca10056/s140/arm5_no_packs/ble_app_VivaMayo.uvprojx열기 - Keil Include Path에서
mt_parser경로를lib/pc_firm으로 변경 (필요 시) - Build (F7)
Note
: Nordic SDK (components, modules, external, integration)와 pc_firm 라이브러리가 모두 포함되어 있어 clone만으로 빌드 가능합니다.
부팅 순서
GPIO/Timer 초기화
→ BLE Stack (SoftDevice)
→ FDS 초기화 (fs_storage_init)
→ Config 로드 (config_load + load_device_configuration)
→ GAP/GATT/Services
→ Advertising 시작
→ Main Loop (idle)
BLE 명령어 (메모리 읽기/쓰기)
| 읽기 | 쓰기 | 대상 | 저장소 |
|---|---|---|---|
mrh? |
mwh? |
HW 번호 (12B) | FDS |
mrs? |
mws? |
시리얼 번호 (12B) | FDS |
mrp? |
mwp? |
패스키 (6B) | FDS |
mrb? |
mwb? |
본딩 삭제 플래그 | FDS |
mrr? |
mwr? |
리셋 상태 | FDS |
mrc? |
mwc? |
ADC 카운트 | FDS |
mrd? |
mwd? |
PD 딜레이 | FDS |
mrg? |
mwg? |
AGC 게인 (48ch) | W25Q32 |
mrl? |
mwl? |
사용 횟수 | W25Q32 |
기술 문서
라이선스
Copyright (c) 2025 Medithings Inc. All rights reserved.
Description
Languages
C
97.1%
Assembly
2.7%
Roff
0.1%