# 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 ``` ## 빌드 방법 1. 이 저장소 clone 2. Keil uVision 5에서 `project/ble_peripheral/ble_app_vivaMayo/pca10056/s140/arm5_no_packs/ble_app_VivaMayo.uvprojx` 열기 3. Keil Include Path에서 `mt_parser` 경로를 `lib/pc_firm`으로 변경 (필요 시) 4. 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 | ## 기술 문서 - [프로그램 아키텍처](project/ble_peripheral/ble_app_vivaMayo/docs/PROGRAM_ARCHITECTURE.md) - [FDS 내장 Flash 사용법](project/ble_peripheral/ble_app_vivaMayo/docs/FDS_INTERNAL_FLASH.md) - [FDS 모듈 이식 가이드](project/ble_peripheral/ble_app_vivaMayo/docs/FDS_MODULE_PORTING_GUIDE.md) - [W25Q32 외장 Flash](project/ble_peripheral/ble_app_vivaMayo/docs/W25Q32RV_FLASH_MEMORY.md) - [W25Q32 초기화](project/ble_peripheral/ble_app_vivaMayo/docs/W25Q32RV_INITIALIZATION.md) ## 라이선스 Copyright (c) 2025 Medithings Inc. All rights reserved.