122 lines
5.5 KiB
Markdown
122 lines
5.5 KiB
Markdown
# 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.
|