.claude/ 제외(.gitignore 추가). 기존 초기커밋(5a96a69) 위에 신규·수정·이동분 커밋.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
12 KiB
■ 작업 기록 규칙 (필수)
- 코드/사양 작업을 하면 그 내용을
doc폴더에 마크다운으로 기록할 것. - 파일명:
YYMMDD_제목형식 (예:doc/260617_수정내용.md). - 같은 날 추가 작업은 그 날짜 파일에 이어서 append.
- 기록 항목: 변경 파일/이유/핵심 결정, 빌드 결과, 미해결/후속 사항.
■ 펌웨어 위치/작업 규칙
- 펌웨어 폴더:
SOURCE/HECO2/(User, Library, Makefile, build.sh). 구program/에서 2026-06-17 이동됨 — 이전 문서/메모의program/User/...는SOURCE/HECO2/User/...로 읽을 것. SOURCE/HECO2/User/My_RJ2.c(룸컨),My_bunbaegi.c(각실분배기)는 수정 금지 — 검증된 코드. 문제는My_Homenet.c/MyMotor.c/My_system.c/My_Hood.c또는 대시보드 쪽에서 해결.- 펌웨어 수정 후 반드시 빌드 확인:
cd SOURCE/HECO2 && bash build.sh all(경고/오류 0).
DL 각실제어 시스템 구성 HERV (전열교환기) -(485통신) BUNBAGI -(485통신) 배기(RA) DIFFUSER -(485통신) 급기(SA) DIFFUSER
각실 DIFFUSER 구성 거실 : 배기(RA) DIFFUSER / 급기(SA1) DIFFUSER / 급기(SA2) DIFFUSER 방1 ~ 방3 : 배기(RA) DIFFUSER / 급기(SA) DIFFUSER
프로토콜 HERV / BUNBAGI / DIFFUSER : 수정_Each_Room_Jushin_protocol_RS485_Rev1.2_20260115_CWS
대시보드 프로그램 (모두 TestProgram 폴더 하위) C# WPF .NET 10
빌드 및 배포방법 PC 대시보드 dotnet cleand 프로젝트명 dotnet build 프로젝트명 dotnet publish "d:\project\nuvoton\HERV\TestProgram\PCDashBoard\ErvDashboard.csproj" -c Release csproj에 SelfContained / PublishSingleFile / win-x64 가 이미 설정돼 있어서 추가 옵션이 필요 없습니다. 결과물: TestProgram\PCDashBoard\bin\Release\net10.0-windows\win-x64\publish\ErvDashboard.exe
WEB 대시보드
런타임 미설치 PC용 (단일 exe, 권장)
dotnet publish "d:\project\nuvoton\HERV\TestProgram\WebDashBoard\ErvCollector\ErvCollector.csproj" ` -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true
.NET 10 런타임 이미 깔린 PC용 (가벼움)
dotnet publish "d:\project\nuvoton\HERV\TestProgram\WebDashBoard\ErvCollector\ErvCollector.csproj" -c Release
결과물: ...\ErvCollector\bin\Release\net10.0\win-x64\publish
appsettings.json 과 wwwroot\ (웹 모니터 정적파일)가 publish 폴더에 같이 복사됩니다 — publish 폴더 전체를 통째로 복사하세요. exe만 떼면 웹 화면이 안 뜹니다.
해상도 : 1920 X 1200 (노트북 기준) 안 넘게 제작. 프로토콜 : PC_ERV_Protocol.MD 공용 라이브러리 : TestProgram/ErvProtocol 폴더 (단일 진실원본) PC용 (485통신) - TestProgram/PCDashBoard (ErvDashboard.csproj) WEB용 (WIFI) - TestProgram/WebDashBoard (ErvCollector 수집·제어 서버 + ErvWebDashboard 모니터)
시뮬레이터 프로그램 C# WPF UI 내용은 정적생성 할 것. 반복생성은 제외. ERV SIMULATOR : DIFFUSER SIMULATOR :
HERV 사양 동작사양 전원 : ON, OFF 운전모드 : 환기(수동), 자동, 바이패스, 공기청정 (운전모드 전환 시 풍량 1단, 자동 제외) 특이사항 : 기저운전/장비보호
(꺼짐예약) : 0 ~ 8 시간, 1시간 단위, 0은 꺼짐 VSP 설정값 (1바이트 0~255, 개발사양서 p.12 휴벤 ECO2/좌타입 HRD1-150EPI = 펌웨어 MyControl.c 기본값) ※ 환기 터보-4(250CMH)는 사양서 자동(각실제어) 250 행 값. 기저(50CMH, SA52/EA53)는 대시보드 VSP 9엔트리에서 제외.
| 구분 | 단수 | 풍량(CMH) | VSP SA | VSP EA | 전압 SA(V) | 전압 EA(V) |
|---|---|---|---|---|---|---|
| 환기 | 약-1 | 100 | 56 | 57 | 3.30 | 3.35 |
| 환기 | 중-2 | 150 | 63 | 63 | 3.65 | 3.65 |
| 환기 | 강-3 | 200 | 70 | 70 | 4.00 | 4.00 |
| 환기 | 터보-4 | 250 | 86 | 85 | 4.80 | 4.75 |
| 바이패스 | 기본 | 150 | 67 | 75 | 3.85 | 4.25 |
| 공청 | 약-1 | 80 | 65 | - | 3.75 | - |
| 공청 | 중-2 | 100 | 72 | - | 4.10 | - |
| 공청 | 강-3 | 120 | 78 | - | 4.40 | - |
| 공청 | 터보-4 | 150 | 80 | - | 4.50 | - |
VSP 테이블 (VSP ↔ 실측전압, V = VSP × 0.05 + 0.5)
| VSP | V | VSP | V | VSP | V | VSP | V | VSP | V |
|---|---|---|---|---|---|---|---|---|---|
| 5 | 0.75 | 25 | 1.75 | 45 | 2.75 | 65 | 3.75 | 85 | 4.75 |
| 6 | 0.80 | 26 | 1.80 | 46 | 2.80 | 66 | 3.80 | 86 | 4.80 |
| 7 | 0.85 | 27 | 1.85 | 47 | 2.85 | 67 | 3.85 | 87 | 4.85 |
| 8 | 0.90 | 28 | 1.90 | 48 | 2.90 | 68 | 3.90 | 88 | 4.90 |
| 9 | 0.95 | 29 | 1.95 | 49 | 2.95 | 69 | 3.95 | 89 | 4.95 |
| 10 | 1.00 | 30 | 2.00 | 50 | 3.00 | 70 | 4.00 | 90 | 5.00 |
| 11 | 1.05 | 31 | 2.05 | 51 | 3.05 | 71 | 4.05 | 91 | 5.05 |
| 12 | 1.10 | 32 | 2.10 | 52 | 3.10 | 72 | 4.10 | 92 | 5.10 |
| 13 | 1.15 | 33 | 2.15 | 53 | 3.15 | 73 | 4.15 | 93 | 5.15 |
| 14 | 1.20 | 34 | 2.20 | 54 | 3.20 | 74 | 4.20 | 94 | 5.20 |
| 15 | 1.25 | 35 | 2.25 | 55 | 3.25 | 75 | 4.25 | 95 | 5.25 |
| 16 | 1.30 | 36 | 2.30 | 56 | 3.30 | 76 | 4.30 | ||
| 17 | 1.35 | 37 | 2.35 | 57 | 3.35 | 77 | 4.35 | ||
| 18 | 1.40 | 38 | 2.40 | 58 | 3.40 | 78 | 4.40 | ||
| 19 | 1.45 | 39 | 2.45 | 59 | 3.45 | 79 | 4.45 | ||
| 20 | 1.50 | 40 | 2.50 | 60 | 3.50 | 80 | 4.50 | ||
| 21 | 1.55 | 41 | 2.55 | 61 | 3.55 | 81 | 4.55 | ||
| 22 | 1.60 | 42 | 2.60 | 62 | 3.60 | 82 | 4.60 | ||
| 23 | 1.65 | 43 | 2.65 | 63 | 3.65 | 83 | 4.65 | ||
| 24 | 1.70 | 44 | 2.70 | 64 | 3.70 | 84 | 4.70 |
공기질 센서 모드별 오염단계 임계 및 히스테리시스(하강)
| 오염단계 | ECO CO2 | ECO PM2.5 | ECO PM10 | ECO VOC | NORMAL CO2 | NORMAL PM2.5 | NORMAL PM10 | NORMAL VOC | TURBO CO2 | TURBO PM2.5 | TURBO PM10 | TURBO VOC | 상태/색상 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0~1000 | 0~20 | 0~40 | 0~171 | 0~800 | 0~14 | 0~28 | 0~120 | 0~700 | 0~12 | 0~24 | 0~103 | 좋음(파랑) |
| 1 | 1001~1300 | 21~38 | 41~86 | 172~195 | 801~1100 | 15~29 | 29~66 | 121~150 | 701~1000 | 13~23 | 25~53 | 104~120 | 보통(초록) |
| 2 | 1301~1600 | 39~60 | 87~126 | 196~308 | 1101~1400 | 30~49 | 67~102 | 151~250 | 1001~1300 | 24~38 | 54~78 | 121~192 | 나쁨(노랑) |
| 3 | 1601~2000 | 61~86 | 127~173 | 309~438 | 1401~1700 | 50~69 | 103~138 | 251~350 | 1301~1600 | 39~52 | 79~104 | 193~263 | 매우나쁨(주황) |
| 4 | 2001~ | 87~ | 174~ | 439~ | 1701~ | 70~ | 139~ | 351~ | 1601~ | 53~ | 105~ | 264~ | 매우나쁨(빨강) |
| 히스(하강) | -50 | -2 | -5 | -5 | -50 | -2 | -5 | -5 | -30 | -2 | -5 | -3 |
각실제어 시나리오모드 : 자동(분산,집중), 안심회복, 스마트 수면, 쾌적조리
회로도 : HERV_MAIN_REV1.1_20240826(회로도).PDF
■ NANO100 메모리 맵 (MCU: Nano100SE3BN — LDROM 4K / APROM 115K / Data Flash 8K / SRAM 16K) 출처: DS_Nano100(B)_Series_EN_Rev1.09.pdf (5.2 Memory Organization p.106, 5.6 FMC p.111) + SOURCE/HECO2/Library .../fmc.h, EEPROM_Emulate.h
(1) 시스템 주소공간 (Cortex-M0, 리틀엔디안, 4GB)
| 주소 범위 | 영역 | 비고 |
|---|---|---|
| 0x0000_0000 ~ 0x0001_FFFF | FLASH (코드) | FLASH_BA, 최대 128KB 어드레싱(실제 칩은 123K 프로그램+4K LDROM+Config) |
| 0x2000_0000 ~ 0x2000_3FFF | SRAM 16KB | SRAM_BA |
| 0x4000_0000 ~ 0x401F_FFFF | APB1/APB2 주변장치 | WDT0x40004000·RTC0x40008000·TMR01 0x40010000·I2C0 0x40020000·PWM0 0x40040000·UART0 0x40050000·USBD 0x40060000·ADC12 0x400E0000 / TMR23 0x40110000·UART1 0x40150000·SC0 0x40190000·SC1 0x401B0000·SC2 0x401C0000 |
| 0x5000_0000 ~ 0x5001_FFFF | AHB 주변장치 | GCR 0x50000000·CLK 0x50000200·INT 0x50000300·GPIO 0x50004000·DMA 0x50008000·FMC 0x5000C000·EBI 0x50010000 |
| 0xE000_E000 ~ 0xE000_EFFF | 시스템 제어 | SysTick·NVIC·SCS |
(2) 온칩 플래시 내부 구조 (FMC, 페이지 512B 단위, fmc.h)
| 주소 범위 | 크기 | 영역 | 용도 |
|---|---|---|---|
| 0x0000_0000 ~ 0x0001_CC00 | 115KB | APROM (응용 프로그램) | 펌웨어 코드 + EEPROM 에뮬레이션이 여기 안에 있음 |
| 0x0001_CC00 ~ 0x0001_EC00 | 8KB | Data Flash | 시작주소 = Config1(DFBA) = 0x0001CC00. 현재 펌웨어 미사용 |
| 0x0010_0000 ~ 0x0010_1000 | 4KB | LDROM (ISP 로더) | 미사용 |
| 0x0030_0000 ~ | - | User Config | CONFIG0=0xFFFFFFFE(CBS 부팅선택 등), CONFIG1=0x0001CC00(DFBA) |
| (APROM+DataFlash 합) 0x0 ~ 0x1EC00 | 123KB | 전체 프로그램 플래시 | DS의 "123K APROM"은 Data Flash 포함 합계(공유) |
(3) 우리가 실제로 쓰는 영역
| 주소 | 크기 | 무엇 | 근거 |
|---|---|---|---|
| 0x0000_0000 ~ 0x0000_B338 | ~46KB | 펌웨어(벡터/코드/rodata/data-init) | build/HERV.bin 크기 (text 43.9K+data 1.9K) |
| 0x0000_B338 ~ 0x0000_FC00 | ~18KB | (빈 APROM) | 코드와 EEPROM 사이 여유 |
| 0x0000_FC00 ~ 0x0000_FFFF | 1KB (512B×2페이지) | EEPROM 에뮬레이션 | EEP_FLASH_BASE=0xFC00, EEP_PAGE_COUNT=2 (EEPROM_Emulate.h). APROM 내부이며 칩 Data Flash 아님 |
| 0x0000_FFFF ~ 0x0001_CC00 | ~68KB | (빈 APROM) | 미사용 |
| 0x0001_CC00 ~ 0x0001_EC00 | 8KB | 칩 Data Flash | 현재 미사용 (사장님이 FF로 쓰는 곳이 여기 — EEPROM과 다른 영역) |
| 0x2000_0000 ~ 0x2000_3FFF | 16KB | SRAM (gcc_arm.ld) | 스택/힙/.data/.bss |
⚠ 핵심 주의
- 펌웨어 EEPROM(0xFC00, APROM 내부) ≠ 칩 Data Flash(0x1CC00). 그래서 Nu-Link ICP로 Data Flash에 FF를 써도 EEPROM은 안 지워짐. EEPROM을 비우려면 칩 이레이즈 또는 0xFC00 포함 APROM 이레이즈 필요. (
build.sh flash=program은 코드 섹터만 지워 0xFC00 유지 → 구 EEPROM 잔존) - 링커
gcc_arm.ld는 EEPROM/Data Flash 영역을 예약/보호하지 않음 (FLASH를 0x0~0x20000 통짜로 잡음, 길이 표기도 칩과 불일치). 펌웨어가 0xFC00(63KB)을 넘으면 코드가 EEPROM 위에 얹혀 충돌 — 현재 ~46KB라 여유 있음. - EEPROM 에뮬레이션 = 2페이지 wear-leveling(EEPROM_Emulate.c). 페이지 매직 0x55AA0001, 엔트리 4B(TAG 0xE5 | idx |
idx | val), 가득 차면 compact()로 다른 페이지 이동 후 옛 페이지 erase. 논리 인덱스 0127(128B)을 아래 표대로 사용.
EEPROM 저장 데이터 (논리 인덱스, My_define.h EEP_*, page 128B / 엔트리 약 122)
| 인덱스 | 항목 | 비고 |
|---|---|---|
| 0~3 | 서명 0x55AA55AA | 초기화 마커 |
| 5 | Modbus ID | |
| 10~33 | 팬 VSP 프리셋 s_FAN1/2 (환기·공청·바이패스 1~4) | 1바이트, 대시보드 CTRL_VSP 반영 |
| 34~39 | 필터/소자 청소·교체 시간 | u16 |
| 40~42 | 정전복귀(전원/운전모드/풍량) | |
| 43 | 히스테리시스 활성 프리셋 (0 ECO/1 NORMAL/2 TURBO) | 유효성 마커 겸용 |
| 44~55 | 데드밴드(하강) Co2/Pm25/Pm10/Voc × 3프리셋 | u8 |
| 56~79 | CO2 임계 Co2_Thr[3][4] | u16 |
| 80~103 | VOC 임계 Voc_Thr[3][4] | u16 |
| 104~115 | PM2.5 임계 Pm25_Thr[3][4] | u8 |
| 116~127 | PM10 임계 Pm10_Thr[3][4] | u8 |
- 대시보드에서 전원/모드/VSP/히스테리시스(프리셋·임계·데드밴드) 변경 → ERV가 EEPROM 저장(재부팅 유지).
- 구버전 펌웨어(STATUS 134B, 구 m_*_Level) EEPROM은 신규 영역 미초기화 → 기본값(사양값) 사용 후 변경 시 저장.
BUNBAGI 사양
회로도 : HERV_MAIN_REV1.1_20240826(회로도).PDF STATUS LED : STATUS_LED-PB.14, ACTIVE LOW
DIFFUSER 사양 급기(SA) DIFFUSER 구성 : 댐퍼 배기(RA) DIFFUSER 구성 : 댐퍼, 공기질센서, LED
회로도 : 전동디퓨져_REV1.0_20260130.PDF STATUS LED : STATUS_LED-PA.11, ACTIVE LOW SELECT SWITCH : SW1, DIPSW1-PA.10, LOW-SA, HIGH-RA 485 통신 : CN3, CN4, INT485TX-PB.5, INT485RX-PB.4, INT485DIR-PB.6 댐퍼 : CN2, STEP1_A-PC.8,STEP1_B-PC.9,STEP1_C-PC.10,STEP1_D-PC.11 공기질 센서 : CN5, SENSOR_ON-PA.3, SENSOR_SCL-PA.5, SENSOR_SDA-PA.4, SEN66 LED : CN6, LED_ON-PA.15, LED_R-PA.14,LED_G-PA.13,LED_B-PA.12