종설 성능 실험 설계 모델 · 예시값 · 실측 아님
STM32G474 + W25Q32JV · 3 MB BMP 왕복 · 병목 12 · 요인 17 · A/B 절차 · 측정 계층 · 논문용 흑백 다이어그램 15장 · 3D 장비 구성 3장. 설계 Fable 5.1 · 구현 Opus 5 · 3D Astra · 2026-09-15.
1차 발표 브리핑 (시간표 · 업무분장 · 구매 목록 · 회의 안건)
종설 1차 발표(9/22) 브리핑 — 시간분배 · 업무분장
- 작성: 2026-09-15 오후 팀 브리핑용. 4인 팀. 발표 25분(발표 21분 + 질의 4분 가정. 질의가 따로 주어지면 각 파트에 1분씩 더 붙인다).
- 발표 목적 = 교수가 요구한 "시스템 분석 및 설계". 필수 결과물 3개: 시스템 블록도 · 데이터 흐름도 · 구현 계획. 이 셋이 슬라이드 한 장씩 뚜렷하게 나와야 한다.
- 녹취 정본:
2_정리본_타임스탬프.txt(깨끗한 전사, 타임스탬프).2.txt는 전사 오류 많음. - 실험 설계(요인·병목·A/B·장비) =
실험설계\A7_실험설계_다이어그램_설계서.md. 논문용 흑백 다이어그램 14장 =실험설계\diagrams\. - 자료 원천: 랩 https://kungfumaru.pages.dev/collab/jongseol/ (블록도 V01, Flash 맵 V02, 페이지 타이밍 V03, 버퍼 V04, 파이프라인 V05, BMP V06, 시간 예산 V07, 실패 V08). 랩 수치는 전부 모델 예시값이지 실측이 아니다. 슬라이드에도 "예시값"이라고 적는다.
- 2026-09-15 엄밀 검토(Codex) 반영: 모델의 ACK 불일치 수정(ACK = 저장 완료 후 응답 → 겹침 없음, 예시 B·C는 credit 프리셋으로 76.2 s·31.6 s, ACK면 82.5 s·37.9 s). 총시간 = 사전 소거 포함. 변환 단계 = Gray만(CRC 분리). Gray 정수식 오차 명시.
- 구조 원칙: 각 모듈 담당이 자기 구간의 구현·검증·최적화·발표까지 책임진다. 통합 담당은 경계 규칙과 구간 사이 개선을 맡는다. 한 사람에게 일이 몰리지 않게 한다.
1. 25분 시간분배
| # | 시간 | 발표자 | 내용 | 교수 요구 항목 | 슬라이드 | 랩 장면 |
|---|---|---|---|---|---|---|
| 1 | 0:00–4:00 | 수현 (통합) | 목표를 블록도 장에 포함 → 블록도(장치·연결) → 데이터 흐름도(순서·버퍼·완료 조건) → 시간 예산 한 장(개략값·병목 틀) | 동작 과정, 블록도, 데이터 흐름, 병목 순서 | 3 | #brief, V01, V07 |
| 2 | 4:00–9:00 | UART 담당 | 8N1·baud → DMA 수신 구조 → 청크 프로토콜(길이·순번·CRC·ACK) → PC 프로그램 → 이 구간 병목(baud·브리지 한계) | UART 통신 구조, 병목 | 3~4 | V04, #comm UART·USB |
| 3 | 9:00–14:00 | Flash 담당 | W25Q32 기하 → 페이지 경계를 넘는 청크 하나의 처리 사례(WREN→PP→WIP, 1~256 B 부분 쓰기 가능, 경계 넘으면 wrap, 소거 단위 ≠ 쓰기 단위) → 소거 정책(섹터·블록·칩 typ/max 비교) → SPI DMA + 짧은 명령·상태 조회는 폴링 검토 → 이 구간 병목(소거 고정비 · Program · 전송을 분리). opcode 전체 나열은 예비 장으로 | SPI 구조, Flash R/W 구조, 병목 | 3~4 | V02, V03, #comm SPI·Flash |
| 4 | 14:00–19:00 | BMP 담당 | 지원 형식 선언(24 bpp 무압축, bfOffBits·DIB 크기 확인, 범위 밖 거절) → 행·픽셀 경계(4096 B 청크 ≠ 3072 B 행) → Gray 규약(기준식 + 정수식 오차 허용치) → 출력 형식 → 검증(2차 = 바이트 비교, 3차 = 기준 Gray 픽셀 비교) | BMP 구조, 변환 방법 | 3 | V06, V08 |
| 5 | 19:00–21:00 | 수현 (통합) | 역할 분담표 → 4주 개발 일정 → 착수 준비(장비 후보) → 마무리 | 역할 분담, 향후 계획 | 2 | #plan |
| Q | 21:00–25:00 | 전원 | 질의응답 (자기 구간 질문은 그 담당이 답한다) | — | 예비 1 | — |
본문 13~15장 + 예비 2~4장(opcode 표·보드 비교·논문 표). 각 파트가 자기 구간 병목까지 설명하므로 마무리에서 병목을 다시 설명하지 않는다. Flash가 리허설에서 계속 넘치면 BMP 1분을 옮겨 4+5+6+4+2+4로 조정한다.
예상 성능을 말하는 법. "115200이면 수 분, 921600이면 1분 전후, 안정적인 3 Mbps와 흐름 제어가 갖춰지면 수십 초를 목표로 계산했다" 정도로만. 랩의 76 s·32 s는 credit 흐름 제어·W25Q32JV typ·SPI 42 MHz 가정의 모델값이고, 저장 완료 후 ACK 방식이면 각각 82 s·38 s다. 초 단위 숫자를 확정치처럼 내지 않는다. UART 전송 하한(8N1, 왕복)만 확실한 수치다: 115200 = 546 s, 921600 = 68 s, 3 Mbps = 21 s (Gray24 기준. Gray8이면 각 364·46·14 s).
2. 업무분장 — 개발 파트 4개 (랩 roles.json과 동일, 이름만 채우면 확정)
| 담당 | 맡을 업무 | 완료 기준 | 9/22까지 준비 | 발표 |
|---|---|---|---|---|
| 수현: 시스템 통합·성능 분석 | 전체 상태 흐름, 버퍼 소유권(FREE↔FULL), 전체 저장 완료 후 변환 시작 조건(장벽), 모듈 연결, 단계별 시간 측정, 측정 결과로 개선 우선순위 결정, 구간 사이 버퍼·처리 순서 개선 | 전 경로가 동작하고 어디서 시간이 걸리는지 숫자로 설명 가능 | 블록도·데이터 흐름도·시간 예산·역할표·일정 최종본, 슬라이드 병합, 리허설 진행 | 1, 5 |
| 조해문: SPI·Flash | SPI/DMA 설정, 소거·읽기·쓰기·완료 확인(WIP), 페이지·섹터 경계 처리, tPP·tSE 실측, Flash 구간 성능 개선 | 여러 페이지·섹터에 걸친 데이터를 저장하고 동일하게 읽어옴 | 데이터시트 명령 표·타이밍(tPP·tSE·클럭 상한), 페이지·섹터 분할 설계, SPI DMA 구조 그림 | 3 |
| 윤수민: UART·전송 프로토콜 | MCU UART/DMA 수신·송신, PC 바이트 송수신 프로그램, 길이·순번·오류 확인·흐름 제어, 안정 최대 baud 실측, 전송 구간 성능 개선 | 큰 데이터를 누락 없이 주고받고 전송속도를 측정함 | baud 후보·브리지 한계 조사, DMA 수신 구조 그림, 청크 프로토콜 초안, PC 프로그램 언어 결정(Python 권장) | 2 |
| 홍석현: BMP·Gray·검증 자동화 | MCU 변환 코드, BMP 해석·출력 파일 구성, PC 기준 변환(교수 권고 07:53: 먼저 PC에서 C/C++로 변환을 확인하고 그 함수를 그대로 MCU에 이식. 검증 도구는 Python 가능), 원본·복원·Gray 파일 자동 비교 도구(2차 발표 무결성 데모부터 사용), 실패 위치 찾기 | 변환 결과를 자동 판정하고 실패 위치를 찾아냄 | BMP 헤더 해부 그림, Gray 공식·고정소수점, 표본 BMP(3 MB 이상), 기준 변환 스크립트, 검증 도구 설계 | 4 |
- PC 프로그램은 둘로 나눈다. 통신(바이트 송수신·타임스탬프) = UART 담당, 파일 형식·결과 검증 = BMP 담당. 실행 진입점과 파일·바이트 API는 둘이 합의.
- 공통
.ioc·핀맵·DMA 스트림 할당·빌드 설정은 통합 담당이 병합한다. UART·Flash 담당은 요구 설정을 제안만. - 모듈 내부 버그와 해당 구간 최적화는 그 모듈 담당이 끝까지 맡는다. 통합 담당이 대신 고치지 않는다.
- 교차 검사 쌍: Flash ↔ UART (서로의 DMA 완료 처리), BMP ↔ 통합 (출력 파일 vs 시간 로그).
- 슬라이드는 각자 자기 파트 슬라이드와 대본을 완성해서 제출한다. 통합 담당은 흐름과 중복만 정리한다.
통합 담당이 오늘 먼저 정할 경계 규칙 4개
다른 팀원 개발이 끝나기 전에 상태 흐름과 연결 코드를 만들려면 이 넷을 먼저 합의해야 한다.
- 함수에 넘기는 것: 어떤 데이터와 길이를 넘기나.
flash_write(addr, buf, n),flash_read(addr, buf, n),gray_row(in, out, w), 청크 도착 이벤트, 송신 큐. - 완료 신호: 처리가 끝났다는 걸 어떻게 알리나. 콜백·플래그·큐 중 하나로 통일.
- 버퍼 반환 시점: DMA에 넘긴 버퍼를 언제 다시 써도 되나. 소유권 FREE↔FULL 규칙.
- 오류 처리 주체: 오류가 나면 중단·재시도를 누가 하나. 모듈 안에서 재시도, 한도 초과 시 통합에 보고. 중복 청크·재전송·Flash 오류의 재시도를 한 곳에서만 하도록 정한다.
특히 2번과 3번은 모델 오류로 이미 한 번 밟았다. ACK가 "수신 완료"인지 "Flash 저장 완료"인지에 따라 총시간이 약 5.5 s 달라지고, 저장 완료 ACK면 수신과 프로그램이 겹치지 않는다. 선행 수신을 허용하려면 credit(남은 버퍼 수 보장)이 필요하다. flash_write() 반환이 버퍼 해제 가능·버스 완료·Flash 저장 완료 중 무엇인지도 같이 정한다.
발표 준비 일정
| 기한 | 일 | 담당 |
|---|---|---|
| 9/15 (오늘) | 파트·이름 확정, 경계 규칙 4개 합의, 보드·Flash·브리지 1안, 슬라이드 템플릿 공유 | 전원 |
| 9/17 (목) 14:00 | 팀 미팅. 각 파트 슬라이드 초안 + 대본 지참. 장비 최종 결정, 경계 규칙 4 합의. 미팅 직후 통합 담당이 병합 시작 | 전원 |
| 9/18 (금) | 교수 사전 제출 마감. 병합본 완성·제출 (블록도·데이터 흐름도·구현 계획 포함) | 수현 |
| 9/19 (토) | 리허설 1회, 시간 재기, 질문 예상 5개 | 전원 |
| 9/21 (월) | 리허설 2회, 최종본 | 전원 |
| 9/22 (화) | 발표 | — |
내부 마감 (공식 발표일 1주 전 기능 고정)
| 내부 마감 | 결과물 |
|---|---|
| 9/29 | UART 작은 바이너리 왕복, Flash ID·페이지 읽기 확인, PC 비교 도구 |
| 10/6 | 작은 파일 전체 저장·복원 연결, 페이지·섹터 경계 시험 |
| 10/13 | 3 MB 이상 BMP 저장·복원·자동 무결성 판정 (2차 10/20) |
| 11/3 | Flash→Gray→PC 전체 경로 동작 |
| 11/10 | Baseline 반복 측정(5~10회, 중앙값·최소·최대·실패 수)·로그 고정 (3차 11/17) |
| 11/24 | 요인별 A/B 개선 실험(소거·Program·전송·출력 형식 분리) |
| 12/1 | 최적화 통합, 최종 구현 고정 |
| 12/8 | 최종 반복 측정·개선표·시연 영상·재현 절차 (4차 12/15) |
구매 목록 안 (2026-09-15 저녁 논의 결과, 회의에서 확정)
| 품목 | 수량 | 대략 | 용도 |
|---|---|---|---|
| Nucleo-G474RE (STLINK-V3E 온보드, VCP = LPUART1) | 4 | 3만 × 4 | 팀 공통 보드. 캐시 없음, QUADSPI 있음 |
| W25Q64JV QSPI DIP 브레이크아웃 (Adafruit 5633, 디바이스마트 15013111) | 6 | 5,016 × 6 | 팀 Flash. W25Q32JV와 명령 호환, 8 MB, DIP 직결. 해외구매 반품 불가·납기 4~5일 |
| FT232H 브레이크아웃(RTS/CTS 핀, 3.3 V) | 4 | 1~2만 × 4 | 브리지 보험 + F15 비교. 개발 시작은 V3E, 8 M 안정성 실패 시 전환 |
| 칩 비교(F14) | 0 | 0 | 제외 결정(9/17). 같은 tPP라 결과 없음 |
| 보드 비교(F16) | 0 | 0 | 보유 보드 사용: F411(수현), F746G-DISCO(수현), H7(수현). 참고 표만, 인과 주장 안 함 |
| Nucleo-64 프로토 실드 | 4 | 1만 × 4 | W25Q32·FT232H 납땜 고정 → 점퍼 접촉 불량 제거 |
| 예비 | G474RE 1 | 3만 | Flash 예비는 위 6개에 포함 |
| 점퍼·브레드보드·USB 케이블 | 4세트 | 소액 | |
| 로직 애널라이저 100 MS/s급 | 1 | 6~9만 | 파형 디버깅. 실험실 오실로스코프로 대체 가능 |
합계 25~30만 원. 라이즈 지원 50만 원 안. 비교용 칩·로직 애널라이저는 2차 발표 후 구매해도 됨. 규정(품목 제한·영수증·귀속)은 조교에게 먼저 확인.
3. 오늘 오후 회의에서 반드시 정할 것
- ~~4명 이름 → 파트~~ 확정(9/15): Flash 조해문 · UART 윤수민 · BMP 홍석현 · 통합 서수현. roles.json 반영 완료.
- 경계 규칙 4개 (위 2절). 함수 입출력과 완료 조건부터 맞춘다.
- 보드 1안. 랩 착수 준비 표에 후보 7개(장단점·가격·출처, 추천 없음). 기준 = DMA 채널 수, RAM 크기(버퍼 개수), SPI 최대 클럭, 온보드 Flash 유무, 재고.
- Flash 1안. W25Q32 suffix(JV 등)와 모듈 형태. 교수 녹취: 온보드 Flash를 떼고 다른 시리얼 Flash를 붙여도 되고 용량이 커도 된다(JEDEC 명령 호환). W25Q32는 4 MiB라 입력 3 MB + Gray 출력(8 bpp 1 MB)이 꽉 찬다. W25Q64·Q128이면 출력도 Flash에 두는 선택지가 열린다. 랩 착수 준비 표의 Flash 후보 6개 참고.
- USB-UART 브리지. ST-LINK VCP만 쓸지, 별도 브리지(CP2102N·FT232 등)로 baud를 올릴지. 이게 UART 병목의 상한을 정한다.
- Gray 출력 형식. 8 bpp 팔레트 BMP(파일 1/3) vs 24 bpp 동일값(변환 단순). 송신 시간에 직접 영향.
- BMP 헤더 처리 위치. 녹취 04:39: PC에서 헤더를 떼고 픽셀만 보내도 되고, 통째로 보내 MCU가 헤더를 해석해도 된다. 팀 자유. UART 프로토콜과 BMP 파트 양쪽에 걸리므로 오늘 정한다. 픽셀만 보내면 전송량 54 B 차이뿐이라 결정 기준은 MCU 코드 단순성.
- 재료비 신청. 라이즈(RISE) 사업단 지원(50만 원 규모, 조교 안내, 녹취 15:41). 신청 담당 1명.
- 교수 저서 확보 담당 1명. 도서관·구매. Flash 파트가 5~6장, UART 파트가 7장부터 읽는다.
- PC 송신 도구. 직접 짜도 되고 Tera Term 같은 터미널로 보내도 된다(녹취 09:01). 시간 측정을 위해 자체 프로그램 권장.
회의에서 말할 한 문장: "제가 전체 구조랑 통합, 성능 측정을 맡을게요. 각자 모듈은 구현부터 검증·최적화까지 맡고, 오늘 함수 입출력과 완료 조건부터 맞추죠. BMP 담당은 복원 파일 검증 도구도 같이 맡으면 좋겠습니다."
4. 예상 질문 5개 (답하는 사람)
- 3 MB가 RAM에 안 들어가는데 Flash 저장 완료를 어떻게 보장하나 → 장벽 + 재독출 CRC. (통합)
- 페이지 경계에 안 맞는 마지막 조각은 어떻게 쓰나 → 부분 페이지 쓰기, 소거는 섹터 단위 사전 처리. (Flash)
- UART 속도를 얼마나 올릴 수 있나 → 브리지·클럭 오차 실측 계획, 흐름 제어 필요성. (UART)
- 변환이 맞는지 어떻게 확인하나 → PC 기준 변환과 픽셀 전수 대조, 실패 위치 출력. (BMP)
- 시간 측정 기준점은 → PC 송신 시작 ~ PC 수신 완료, MCU 내부는 단계별 타이머. (통합)
5. 녹취 정리본에서 확인한 것 (2.txt 대비 추가·정정)
- 03:04 "쓰기 알고리즘을 자체적으로 고안"이 교수의 최대 도전 과제. Flash 발표 블록의 중심 슬라이드. 단 녹취의 "몇 바이트는 못 쓴다"는 그대로 기술 설명으로 옮기지 않는다. W25Q32는 페이지 안에서 1~256 B 부분 쓰기가 되고, 경계를 넘으면 wrap된다는 게 정확한 설명이다.
- 01:49 시리얼 Flash는 표준이라 용량 작으면 떼고 큰 것을 붙여도 된다.
- 05:48 JEDEC 표준 명령이라 다른 제조사 칩도 호환. SPI DMA 중간에 비DMA 레지스터 접근 언급은 전사가 모호하다. "payload는 DMA, 짧은 명령·상태 조회는 폴링 검토"는 우리 설계안이지 교수의 필수 지시로 인용하지 않는다.
- 07:53 Gray 변환은 PC C/C++로 먼저 확인 후 MCU 이식. "바로 임베디드에서 짜는 건 어설픈 행동".
- 10:29 JPG·PNG도 허용. 3 MB 미만도 Flash를 진짜 거쳤으면 인정. 단 공지 4절은 3 MB 이상 명시라 3 MB 이상으로 간다.
- 15:59 팀당 30분, 10팀이면 22·23일 분산. 25분 발표 + 5분 전환·질의로 볼 수도 있다.
- 15:41 지원 사업단 이름은 "라이즈"(2.txt의 "라이드"는 오기).
6. 논문 5편 사용법 (검토 결과)
1차 본문에는 microSD 실시간 저장 논문(Tran·Choi 2023, 가장 가까운 응용) 1편, 필요하면 Saidi 청크 크기 논문까지 1~2편만 "우리 설계에서 무엇을 참고했는지" 한 문장씩. 나머지는 예비 슬라이드. 논문의 가속비를 STM32 예상치로 옮기지 않는다. YCbCr→RGB 논문은 Gray 정수식의 직접 근거가 아니라 본문에서 뺀다. Gray 근거 = BT.601-7 계수 + 전수 비교 + MCU 실측.
7. 교수 저서 = 과제의 1차 참고서 (목차 대조, 2026-09-15)
주제를 낸 임종수 교수의 책(제목 확인 필요, SJ_MCUBook M0/M4 보드 기반) 목차가 과제와 직접 겹친다. 팀이 한 권 확보해 Flash·UART 파트의 1차 자료로 쓴다. 교수가 자기 책의 순서로 질문할 가능성이 크다.
| 과제 단계 | 책 장·절 | 담당 |
|---|---|---|
| W25Q32 소개·사용법·동작 원리·명령 표 | 5.1 ~ 5.4 (p.203~) | Flash |
| JEDEC ID 식별 · 소거 · 읽기 · 쓰기 코드 | 6.1 ~ 6.5 (p.251~) | Flash |
| 실행 파일을 외부 Flash에 저장 · Host에서 파일 전송(UART 프로토콜) | 7.1 ~ 7.2 (p.307~) | UART · 통합 |
| MCU 내부 Flash 읽기·쓰기 접근 시간 | 4.2.1 ~ 4.2.3 (p.174~) | Flash |
| Hex 편집기(HxD)로 바이트 대조 | 4.1 (p.159) | BMP 검증 |
| 보드 회로도 | 부록 2 (p.653) | 통합 |
주의 세 가지.
- 5.2절이 W25Q32FV다. 랩 수치는 JV Rev G/K 기준(tPP typ 0.4 ms). FV는 tPP typ이 다를 수 있으니 부품 확정 후 데이터시트로
params.js를 맞춘다. - 책의 코드는 폴링 방식일 가능성이 높다. 우리 과제의 추가 가치는 DMA·파이프라인·측정이므로 "책 = 기본 동작, 우리 = 최적화"로 발표 구도를 잡는다.
- 코드나 그림을 슬라이드에 옮기면 출처(저자·장·쪽)를 적는다.
8. 가정과 미검증
- 25분에 질의 포함 여부는 공지에 없다. 위 표는 질의 4분 포함 가정. 질의가 별도면 파트 2·3·4에 1분씩, 파트 1에 1분 더 준다.
- 랩 수치 전부 예시값. 실측 로그 없음. 슬라이드의 모든 시간은 "모델 추정"으로 표기한다.
- 보드·Flash·브리지·팀원 이름은 이 문서에서도 미확정. 오늘 회의 결과를 이 문서와 roles.json에 반영한다.
- 각 파트 업무량은 CubeMX가 초기화 코드를 만들어 준다는 것만으로 판단하지 않는다. 실제 크기는 2차 발표 전 첫 실기 결과로 다시 본다.
- 랩 모델은 청크를 균일하게 두고 마지막 청크도 평균 프로그램 시간을 쓰는 근사다. 패킷 헤더·ACK 바이트·OS/USB 지연·재전송은 모델에 없다.
- 표본 1024×1024 BMP는 원본 + Gray8을 W25Q32 4 MiB에 동시에 두면 1,132 B 초과한다. Gray는 RAM 블록에서 변환해 바로 송신하면 되므로 Flash에 다시 저장할 필요는 없다.
다이어그램 15장 (흑백 · IEEE 스타일 · SVG/JSON 다운로드)

IEEE Std 1016-2009 설계 기술 뷰 + SysML/UML 블록·포트(
smallsq) 표기 [12] · 설계서 §1.1(측정점 T0~T5) · §1.1a(측정 계층) · §3.3(장비) · §4 D01; [7] W25Q32JV, [8] RM0440, [9] UM2505 SVG · JSON
IEEE Std 1016-2009 설계 기술 뷰 · 구조적 분석 DFD 표기(원=프로세스, 두 줄=저장소, 사각=외부 개체) [12] · 설계서 §1.1(T2·T3) · §1.2(성공 판정) · §4 D02; [7] W25Q32JV 페이지 256 B, [11] BMP 헤더·stride SVG · JSON

[12] OMG UML 2.5.1 statechart (rrect 상태 + entry/do 구획, initial 의사상태,
evt [guard] / act 천이 라벨, note) · 설계서 §4 D03, §2 B7(버퍼 수·겹침), §1.2-3(순번 누락·CRC 실패 0), 랩 불변조건 INV-04·05 · [8] RM0440 (LPUART RX DMA / SPI DMA 소유권) · [7] Winbond W25Q32JV (WIP, PP 256 B×16 = 4096 B 청크) SVG · JSON
[12] OMG UML 2.5.1 sequence (lifeline · activation ·
loop 결합 프래그먼트 · 동기/비동기/반환 메시지) · 설계서 §4 D04, §2 B3(ACK 청크당 왕복 ≈ 1 ms × 769), §3 F2·F4(청크 4 KiB) · [7] Winbond (06h WREN / 02h PP / 05h RDSR·WIP, 4096 B = 256 B×16) · [8] RM0440 (LPUART RX DMA TC 인터럽트) SVG · JSON
[12] OMG UML 2.5.1 sequence (활성 구간 중첩으로 병행 표현) · 설계서 §4 D05, §2 B3·B7(버퍼 3 = 겹침), §3 F2·F3, 랩 INV-04(빈 버퍼 수 보장) · [1] Saidi 2012 / [2] Sancho 2008 (더블·멀티버퍼 겹침 모델) SVG · JSON

타이밍도 = 데이터시트 관례 [7] Winbond W25Q32JV Rev K 파형 표기 (레인별 신호, 세로 점선 이벤트 마커, 명령 필드 상자) · 설계서 §4 D06, §2 B5·B6 · [7] Winbond: tPP typ 0.4 ms / max 3 ms, Page Program 1~256 B, 06h/02h/05h · [8] RM0440 (SPI BSY, DMA TC) · 설계서 §2 파생 수치: 21 MHz → 381 ns/B, 42 MHz → 190 ns/B, 260 B 프레임 ≈ 99 µs, 총 ≈ 499 µs SVG · JSON

flash_write(addr, buf, n)가 페이지 잔여(256 − addr mod 256)로 전송을 쪼개 wrap 없이 Page Program을 반복하고, WIP 폴링 타임아웃에서만 오류로 빠져나오는 순서도.순서도 ISO 5807 (단자 stadium · 판단 diamond · 처리 rect · 정의된 처리 predef, 루프백 elbow) · [7] Winbond W25Q32JV (PP 1~256 B · 페이지 wrap · WREN 06h / PP 02h / RDSR 05h / SE 20h · tPP), 설계서 §2 B4·B5·B6, §3 F8·F9·F10, §4 D07, 랩 F04(timeout)·F07(미소거 쓰기) SVG · JSON

순서도 ISO 5807 (동상, 루프백 elbow) · [11] Microsoft BITMAPINFOHEADER (헤더 54 B · 팔레트 1024 B · stride · bottom-up), [7] Winbond (0Bh Fast Read), 설계서 §1.1 T3~T5, §2 B9·B11, §3 F12, §4 D08 SVG · JSON

region) PC / MCU / Flash 3개. 시작 → PC 청크 송신(4 KiB × 769) → fork → [MCU: RX DMA 수신, 순환 DMA·청크 CRC] ∥ [Flash: Page Program ≤ 256 B × 16] → join → 장벽: 전체 저장 완료(회색, T2 → T3 검증 CRC) → fork → [Flash: Fast Read 0Bh 행 배수 블록] ∥ [MCU: RGB→Gray 행 단위 3,072 B] ∥ [MCU→PC: TX DMA 송신] → join → PC 파일 저장·기준 Gray 비교 → 종료. Page Program에서 PC로 되돌아가는 점선 = credit 반환. 오른쪽 아래 점선 region = F17 청크 재독출 스트리밍(교수 확인 후), 장벽 join을 우회해 재독출 → 변환 → 송신으로 빠진다.OMG UML 2.5.1 액티비티 — 파티션(스윔레인), fork/join 막대(
hbar), 초기/종료 노드 [12] · 설계서 §2 B7(겹침 부족) · §3 F2·F3·F4·F17 · §4 D09 · §8(F17 교수 확인); [1] 청크·더블버퍼 닫힌식, [2] 겹침 효과 비교 SVG · JSON
특성요인도 — K. Ishikawa, *Guide to Quality Control*, 1976 [13] (등뼈 → 오른쪽 결과 상자, 큰 가지 사선, 잔가지 수평) · 설계서 §2 표 B1~B12, §3 표 F1~F17 (B1↔F1, B3↔F2, B11↔F12, B2↔F15, B4↔F9, B5↔F14, 정렬↔F10, B7↔F3, 청크↔F4, 겹침 전략↔F17, B6↔F6, 전송 방식↔F7, 폴링 주기↔F8, B9↔F6, B8↔F11, B10↔F13, B12↔F5) SVG · JSON

순서도 ISO 5807 (연결자 circle A·B로 열 이동·되돌림) · [4] Jain 1991 ch.16–18 (OFAT · 2³ 요인 실험), [5] Hoefler & Belli 2015 (평균 금지 · 중앙값·분위수), 설계서 §1.2 성공 판정, §3.1 실험 순서, §3.2 통제·기록 규칙(로그 JSON) SVG · JSON

타이밍도 = 데이터시트 관례 [7] (레인 + 세로 점선 이벤트 마커 + 구간 막대·양방향 화살표) · 설계서 §1.1 (T0~T5 정의, Ttotal = T5 − T0, 공지 5단계, Tprep 별도 보고, Σ단계 ≤ Ttotal / 겹침 시 > 허용) · [8] RM0440 (DWT CYCCNT 170 MHz, 5.9 ns 해상도) · [5] Hoefler 2015(구간 정의의 재현성) SVG · JSON

FTA — IEC 61025:2006 [13] (사건 rect, OR 게이트 입력은 아래, 기본 사건 원, 미전개 사건 마름모) · 랩
lab/src/data/failures.json F01~F12, [7] Winbond(페이지 wrap · WIP), [11] Microsoft BMP(stride · bottom-up · 팔레트), 설계서 §1.2 성공 판정, §4 D13 SVG · JSON
NASA SE Handbook SP-2016-6105 rev2 App. F — N² 차트(대각선 = 요소, 비대각 = 인터페이스) [13]; 설계 뷰는 IEEE Std 1016-2009 [12] · 설계서 §4 D14 · §3.2(로그 필드가 모듈 경계에 걸침) · D03 버퍼 소유권 불변조건 INV-04·05 SVG · JSON

PERT 선후행 노드망(activity-on-node) — 일반 관례 · 설계서 §3.1 실험 순서(Baseline 3차 · OFAT · 2³ 요인 · 최종 조합 4차) · §3.1a(고속 baud 시험은 9/29 마감 항목) · §4 D15 SVG · JSON
실험 장비 구성 (3D 개념도 · Astra)



설계서 본문
A7 · 성능 실험 설계 + 논문용 다이어그램 14장 설계서
- 작성: Claude Fable 5.1, 2026-09-15. 구현: Opus 5 에이전트 3명(다이어그램). 3D: Astra 메모(9절).
- 위치:
C:\claude\2학기 전공\종설\실험설계\— 이 문서,diagrams\<id>.json|svg|png,diagrams\INDEX.md,ASTRA_MEMO.md. - 도구:
C:\claude\diagram-ref헤드리스 빌더(render.py,lint_diagram.py). 표기 규칙은reference.html해당 절. - 목적: (1) 3차·4차 발표의 성능 실험을 재현 가능하게 고정한다. (2) 1차 발표·최종 보고서에 쓸 다이어그램을 IEEE 논문 흑백 스타일로 만든다. 수치는 전부 모델·데이터시트 값이고 실측은 3차부터다.
1. 측정 대상과 정의
1.1 시간 정의 (측정점 6개)
| 기호 | 정의 | 시계 |
|---|---|---|
| T0 | PC가 첫 데이터 바이트를 브리지에 쓴 시각 | PC QPC |
| T1 | PC가 마지막 입력 바이트를 쓴 시각 | PC QPC |
| T2 | MCU가 마지막 청크의 WIP=0을 확인한 시각(전체 저장 완료) | MCU DWT |
| T3 | 장벽 통과(검증 CRC 완료, 검증 끄면 T3=T2) | MCU DWT |
| T4 | MCU가 Gray BMP 첫 바이트를 송신 DMA에 넘긴 시각 | MCU DWT |
| T5 | PC가 마지막 출력 바이트를 읽은 시각 | PC QPC |
- 총시간 Ttotal = T5 − T0, PC 시계 하나로만 잰다. MCU 시계와 PC 시계를 빼지 않는다.
- 공지 5단계: UART RX = T0~(MCU 마지막 청크 도착), Flash Write = 소거 + Program 합(작업시간, 대기 제외), Flash Read = 검증 읽기 + 픽셀 읽기, RGB→Gray = 변환 CPU 시간만(CRC 제외), UART TX = T4~T5.
- 보조 항목(따로 보고): 사전 소거(Tprep, T0 앞. 포함 여부를 표에 명시), 검증 CRC, 흐름 제어 대기, 프로토콜 오버헤드.
- MCU 구간 = DWT CYCCNT(170 MHz, 5.9 ns 해상도) 차분. 구간 시작·끝을 링 버퍼에 기록하고 run 끝에 로그 패킷 1개로 PC에 보낸다. 측정 코드의 오버헤드(< 20 사이클/구간)는 무시.
- 일관성 검사: Σ(MCU 작업시간) ≤ Ttotal, 파이프라인이면 단계 합 > Ttotal 허용(겹침). 위반이면 그 run 폐기.
1.1a 측정 계층 (서로 검증)
| 층 | 측정기 | 대상 | 해상도 | 한계 |
|---|---|---|---|---|
| 평가값 | PC QPC | Ttotal = T5 − T0 | 0.1 µs | OS·USB 지터 수 ms(총시간 대비 < 0.1 %) |
| 내부 단계 | MCU DWT CYCCNT | 단계 7개 작업시간 | 5.9 ns | 펌웨어 자체 측정, 독립 검증 아님 |
| 외부 진실 | 로직 애널라이저(≥ 200 MS/s) | UART RX 첫 start 비트 = T0, TX 마지막 stop 비트 = T5, CS↑→WIP=0(RDSR 응답)로 tPP, 단계 경계 GPIO 토글(PB0~PB3) | 2.5~5 ns | 채널·캡처 메모리 |
검증 규칙: 각 조건에서 최소 3 run은 LA 동시 캡처. |QPC − LA| < 5 ms, |DWT − LA| < 1 % 이면 나머지 run은 QPC·DWT만으로 인정. 벗어나면 측정 경로부터 고친다. 8 Mbaud 신호 품질(링잉·eye)은 실험실 오실로스코프(≥ 100 MHz)로 조건당 1회.
1.2 성공 판정 (시간을 재기 전에 통과해야 함)
- 반환 파일 길이 = 기대 길이(Gray24 3,145,782 B / Gray8 1,049,654 B).
- 반환 파일 열림(BMP 파서) + 기준 Gray(PC C 구현, int1000)와 픽셀 전수 비교, 허용 오차 = 팀이 정한 값(0 또는 ±1).
- 순번 누락 0, CRC 실패 0, 재전송 횟수 기록.
실패 run은 시간 표에서 제외하고 실패 수만 센다.
2. 병목 지점 전부 (B1~B12)
| id | 병목 | 자원 | 모델 크기(예시 조건) | 좌우하는 요인 | A/B 방법 | 비교 장비 |
|---|---|---|---|---|---|---|
| B1 | PC→MCU UART 직렬 전송 | UART RX | 115200: 273 s, 921600: 34 s, 4 M: 7.9 s | baud, 8N1 | baud 5수준 | 같은 보드·브리지, baud만 |
| B2 | USB 브리지·PC 드라이버 지연 | 브리지 FIFO, USB 폴링(FS 1 ms / HS 125 µs) | 실측 필요, 4 M 이상에서 드러남 | 브리지 종류, PC 쓰기 단위 | 브리지 3종 교체, PC write 크기 3수준 | STLINK-V3E(온보드), FT232H, CP2102N |
| B3 | 흐름 제어 왕복 | UART 양방향 | ACK: 청크당 PC 응답 지연 ≈ 1 ms × 769 = 0.77 s + 겹침 손실 5.5 s | ack / credit, 청크 크기 | 흐름 제어 2수준 × 청크 3수준 | 동일 |
| B3a | 프로토콜 오버헤드 | UART | 8N1 = 10 bit/B(parity 없음). 청크 헤더(순번 2 + 길이 2) + CRC-32 4 B = 8 B/4096 B ≈ 0.2 %. parity(8E1)는 +10 %라 채택 안 함. CRC = STM32 하드웨어 CRC 유닛 | 청크 크기 | 청크 3수준에 포함 | 동일 |
| B4 | 사전 소거 | Flash 내부 | 49블록 7.35 s / 칩 10 s / 769섹터 34.6 s (typ) | 소거 단위, 사전/온디맨드 | 소거 정책 4수준, Tprep 포함·제외 둘 다 보고 | 동일 칩 |
| B5 | Page Program 내부 시간 tPP | Flash 내부(WIP) | 12,289 × 0.4 ms = 4.9 s typ, max 36.9 s | 정렬(안 A 17회 vs 안 B 16회), 폴링 주기 | 정렬 2수준 (칩 비교 제외) | W25Q64JV 고정 |
| B6 | SPI 프로그램 전송 + WREN·RDSR 트랜잭션 | SPI 버스, CPU | 42 MHz: 0.62 s + CS 오버헤드 12,289×3회 | SPI 클럭, DMA/폴링, WIP 폴링 주기 | SPI 클럭 3수준, 전송 방식 2수준, 폴링 주기 3수준 | 동일 |
| B7 | 수신·프로그램 겹침 부족 | RAM 버퍼 | 버퍼 1: 겹침 0, 버퍼 3: UART 지배 조건에서 완전 겹침 | 버퍼 수, 청크 크기, 전략 | 버퍼 4수준(1·2·3·4) | 동일 |
| B8 | 검증 재독출 + CRC | SPI, CPU | 읽기 0.6 s + CRC 0.15 s (팀 선택) | 검증 on/off, 블록 크기 | 2수준 | 동일 |
| B9 | 픽셀 읽기 | SPI | 3 MB @42 MHz 0.6 s, Quad I/O면 1/4 | SPI 클럭, 1선/4선 | 2수준(G474 QUADSPI) | 동일 |
| B10 | Gray 변환 CPU | CPU | 1M 픽셀 × 10 cyc / 170 MHz = 0.06 s | 정수식, 컴파일 최적화 -O0/-O2 | 3수준 | 동일 |
| B11 | MCU→PC 반환 | UART TX | Gray24 = 입력과 같음, Gray8 = 1/3 | 출력 형식, baud | 2수준 | 동일 |
| B12 | 인터럽트·HAL 오버헤드 | CPU | 청크당 수십 µs, 폴링 방식이면 CPU 100 % | IT/DMA/폴링, HAL vs LL | 3수준 | 동일 |
모델 근거: lab/src/model/stub.js 예시값. 병목 순서는 조건에 따라 바뀐다(B1 → B4·B5 → B7). 우선순위는 "요인 하나를 바꿨을 때 Ttotal 변화량"으로 정한다.
3. 요인과 수준 (실험 매트릭스)
| 요인 | 수준 | 기본(Baseline) | 관련 병목 |
|---|---|---|---|
| F1 baud | 115200 · 921600 · 3 M · 4 M · 8 M | 115200 | B1 |
| F2 흐름 제어 | ack · credit | ack | B3, B7 |
| F3 버퍼 수 | 1 · 2 · 3 · 4 | 1 | B7 |
| F4 청크 크기 | 1 KiB · 4 KiB · 16 KiB | 4 KiB | B3, B7 |
| F5 UART 수신 방식 | 폴링 · IT · DMA | 폴링 | B12 |
| F6 SPI 클럭 | 10.6 · 21.25 · 42.5 MHz(보드 최대) | 10.6 | B6, B9 |
| F7 SPI 전송 방식 | 폴링 · DMA | 폴링 | B6, B12 |
| F8 WIP 폴링 주기 | busy · 10 µs · 100 µs | busy | B6 |
| F9 소거 정책 | 섹터 온디맨드 · 블록 사전 · 칩 사전 · (없음=금지) | 블록 사전 | B4 |
| F10 페이지 정렬 | 안 A(오프셋 54) · 안 B(256 정렬) | 안 A | B5 |
| F11 검증 재독출 | on · off | on | B8 |
| F12 출력 형식 | Gray24 · Gray8 | Gray24 | B11 |
| F13 Gray 정수식 | int1000 · int77 · int77b | int1000 | B10 |
| F14 Flash 칩 | ~~W25Q32JV · W25Q64JV · IS25LP032D~~ 제외(2026-09-17 결정). 팀 칩 = W25Q64JV(Adafruit 5633, W25Q32JV와 명령·타이밍 동일). 차이 날 칩(IS25LP032D)은 수급 불가 | W25Q64JV | B5 |
| F15 브리지 | STLINK-V3E · FT232H · CP2102N (부 요인: HW 흐름 제어 RTS/CTS 없음/있음. V3E는 Nucleo-64에 배선 없음, FT232H는 LPUART1 RTS/CTS에 연결) | V3E | B2, B3 |
| F16 보드 | G474RE · F411RE · H743ZI2 | G474RE | B6, B12 |
| F17 변환 시점 | 장벽 후(전체 저장 → 재독출) · 청크 재독출 스트리밍(청크 저장 → 그 청크를 Flash에서 다시 읽어 변환·송신, 수신과 겹침) | 장벽 후 | B1+B11 겹침 |
F17 주의: 스트리밍도 데이터는 Flash를 거치고(재독출 주소 = 저장 주소) run 끝에 전체 이미지가 Flash에 남아 있으므로 공지 4절("Flash에 전체 이미지 저장", "RAM만 변환 불인정")을 형식상 만족한다. 그러나 공지 3절의 순서(저장 → 읽기 → 변환 → 재전송)를 문자 그대로 요구하는지는 교수 확인이 필요하다. 1차 발표 질의에서 확인 전까지 Baseline·최종 조합은 장벽 후 방식으로 하고, 스트리밍은 별도 조건으로만 측정·보고한다. UART는 전이중이라 상행 수신과 하행 송신이 동시에 가능하며, 이론상 Ttotal ≈ max(상행, 하행) + 지연으로 최대 약 2배 단축이다. 증거 = 재독출 주소 로그 + run 종료 후 Flash 덤프와 원본 비교.
3.1 실험 순서
- Baseline(3차 발표): 모든 요인 기본값. n = 10. 이 값이 대조군.
- OFAT(one-factor-at-a-time): Baseline에서 요인 하나씩 바꿔 n = 10. 총 run ≈ Σ(수준−1) × 10 ≈ 30 × 10 = 300 run. 3 MB 왕복 최악 10분/run이므로 baud 115200 조건은 n = 5로 줄인다.
- 주요인 3개 2³ 요인 실험: OFAT에서 효과 큰 3개(예상 F1·F9·F12)로 8조합 × n = 5. 교호작용 확인(Jain 1991, 17~18장).
- 최종 조합(4차): 효과 있는 수준을 전부 켠 조건 n = 10 → Baseline 대비 배수.
- 하드웨어 요인 F15·F16은 최종 조합 위에서만 교체 비교(각 n = 5). F14는 제외.
3.1a 고속 baud 안정성 시험 (F1 수준 채택 조건)
baud를 올리면 세 가지가 깨질 수 있다. (a) 분주 오차: LPUART1은 LPUARTDIV = 256·fck / baud 정수라 fck 170 MHz에서 8 M = 5440, 4 M = 10880으로 오차 0. 브리지 쪽 오차와 합이 ±2 % 안이어야 한다. (b) 수신 처리: 8 Mbaud = 1.25 µs/byte라 바이트 인터럽트는 불가, 순환 DMA 필수. DMA 재시작 공백이 1바이트를 넘으면 overrun. (c) 신호·USB: 온보드 V3E 경로는 PCB라 문제 없고, 외장 브리지는 점퍼 30 cm 이하. USB HS 벌크는 8 Mbaud(0.8 MB/s)에 여유.
시험: baud 수준마다 알려진 패턴 3 MB를 왕복 10회, 프레이밍/오버런 오류 카운터(USART ISR FE·ORE)와 청크 CRC 실패 수를 기록. 채택 규칙 = 10회 모두 오류 0인 최대 baud. 오류가 나면 한 단계 아래 baud와 흐름 제어(RTS/CTS 또는 credit)로 재시험. 전환 규칙: V3E VCP가 목표 baud(8 M)에서 10회 무오류를 못 내면 FT232H + RTS/CTS로 브리지를 바꾸고 같은 시험을 반복한다. FTDI 드라이버 지연 타이머는 1 ms로 설정하고 로그 bridge 필드에 기록(기본 16 ms는 ACK 방식에서 청크당 16 ms 손실). 이 시험은 Baseline 전에 끝낸다(9/29 내부 마감 항목).
참고 단위: 115200 bps = 0.115 Mbit/s ≈ 11.5 kB/s(8N1 10 bit/byte). 8 Mbaud = 0.8 MB/s, 약 70배.
3.2 통제·기록 규칙
- 같은 입력 파일(1024×1024 24 bpp, 3,145,782 B, SHA-256 고정), 같은 노트북·USB 포트, 전원 어댑터 연결, 절전 끔. PC 프로그램은 같은 빌드.
- 각 조건 첫 run은 워밍업으로 버린다. Flash 소거 횟수를 세어 10만 회 수명 대비 기록.
- 통계: 중앙값 · 사분위(IQR) · 최소 · 최대 · 실패 수. 평균만 쓰지 않는다(Hoefler & Belli 2015). 조건 간 비교는 중앙값 차이와 IQR 겹침으로.
- 측정 편향 경고(Mytkowicz 2009): 링크 순서·메모리 배치로도 수 % 달라진다. 펌웨어 빌드는 조건 간 동일 바이너리 + 런타임 파라미터로 바꾸는 것을 원칙으로 하고, 불가피하면 빌드 해시를 로그에 남긴다.
- 로그 JSON 필드:
run_id, ts, build_hash, board, chip, bridge, factors{F1..F16}, t0..t5_us, stages_ns{rx,erase,prog,verify,read,conv,tx}, waits_ns{flow,poll}, counters{chunks,retries,crc_fail,pages,erases}, result{len_ok,pixel_ok,max_err}, status. 통합 파트tools/ref_time.py가 검사.
3.3 비교 장비 목록
| 용도 | 장비 | 수량 | 비고 |
|---|---|---|---|
| 기준 보드 | Nucleo-G474RE (STLINK-V3E, VCP = LPUART1) | 4 | 팀 공통 |
| 보드 비교 | 보유 보드: F411, F746G-DISCO, H7(모델 확인) | 0 구매 | F16. 보드 교체 = 클럭·USART·캐시·브리지 동시 변경 → 참고 표만, 인과 주장 없음 |
| 기준 Flash | W25Q64JV QSPI DIP 브레이크아웃 (Adafruit 5633, W25Q64JVSSIQ, 3.3 V, 디바이스마트 15013111 · 5,016원) | 6 (4 + 예비 2) | 공지 부품 W25Q32JV와 명령·페이지·섹터·tPP 동일. QSPI IO2·IO3 있어 B9 실험 가능. tCE 20 s(Q32는 10 s) |
| 칩 비교 | — | 0 | F14 제외 |
| 브리지 비교 | FT232H 모듈, CP2102N 모듈 | 각 1~2 | F15 |
| 외부 시간 검증 | 로직 애널라이저 ≥ 200 MS/s · 16채널 (Kingst LA2016 7~8만 원 또는 DSLogic Plus 400 MS/s 10만 원대). 24 MHz급 저가품은 SPI 42 MHz 불가 | 1 | 1.1a 외부 진실 층. UART RX/TX·CS·MISO·GPIO 토글 4핀 |
| 신호 품질 | 실험실 오실로스코프 ≥ 100 MHz | 대여 | 8 Mbaud·SPI 42 MHz 파형 링잉 확인, 조건당 1회 |
| 측정 PC | 같은 노트북, USB 3.0 포트 고정 | 1 | QPC 타이머 |
4. 다이어그램 14장 명세 (전부 흑백 · IEEE 스타일)
공통 계약
type은 표기법대로,font: "Pretendard",bg: "#ffffff". 색은 잉크#1a1a1a하나. 강조는shaded: 1(회색 채움)이나dash: 1(점선)로만. 컬러 금지.- 캔버스 1200×800 안. 라벨 한 줄 ≤ 28자(LONGLINE), 노드 간격 ≥ 40 px. 글자 기본 12, 제목·범례 없음(캡션은 문서에서).
- 산출:
diagrams\<id>.json+.svg+.png(scale 2).lint_diagram.py오류 0. PNG를 Read로 열어 육안 검수(대각선 엉킴·여백). - 각 그림의 참고문헌 주석은
diagrams\INDEX.md에 표로(그림 id · 캡션 · 표기법 근거 · 내용 근거). 그림 안에는 넣지 않는다. - 라벨 언어: 한국어 + 기술 용어 영문. 숫자는 이 문서 값과 일치.
D01 sys-block · 시스템 블록도 (type ibd)
PC(프로그램 · USB 호스트) — USB HS — [Nucleo-G474RE: STLINK-V3E(VCP) — LPUART1(RX DMA · TX DMA) — STM32G474 코어(RAM 버퍼 ×3 · DWT 타이머) — SPI1(DMA) — CS·SCLK·MOSI·MISO] — W25Q32JV(4 MiB). 포트는 smallsq, 커넥터는 plain + 신호명 라벨. 측정점 T0·T5(PC 쪽), T2·T3·T4(MCU 쪽)를 text 노드로 표시.
D02 dfd · 데이터 흐름도 (type dfd)
외부 개체 PC(송신)·PC(수신). 프로세스 P1 청크 수신, P2 Flash 프로그램, P3 장벽 확인(+검증 CRC), P4 블록 읽기, P5 Gray 변환, P6 송신. 저장소 D1 RAM 버퍼, D2 W25Q32, D3 Gray 헤더. 흐름 라벨에 바이트 단위(4096 B 청크, ≤256 B 페이지, 3072 B 행). 장벽은 P3에서만 P4로 흐름이 나가도록 그려 "장벽 전 읽기 없음"을 구조로 보인다.
D03 buffer-fsm · 버퍼 소유권 상태기계 (type statechart)
상태 FREE, RX_FILLING(소유 RX DMA), FULL(소유 없음 · 대기), PROGRAMMING(소유 SPI DMA), 그리고 오류 상태 OVERRUN, CRC_FAIL. 전이: DMA 시작 / 청크 도착(순번·CRC 검사) / flash_write() 시작 / WIP=0 → FREE / 빈 버퍼 없음 → OVERRUN / CRC 불일치 → CRC_FAIL → 재전송 요청 → FREE. 각 상태 rrect에 entry 동작 sub. 불변조건 INV-04·05(버퍼 하나에 소유자 하나)를 note로.
D04 seq-ack · ACK 흐름 제어 시퀀스 (type sequence)
라이프라인 PC · MCU(LPUART DMA) · MCU(main) · W25Q32. 청크 k: PC→MCU 데이터 4096 B → 청크 도착 IRQ → flash_write → WREN/PP×16/RDSR 폴링(루프 프레임) → WIP=0 → ACK → PC 다음 청크. 활성 막대로 "PC 대기 구간"을 보이고 note로 "겹침 없음 · 청크당 왕복 지연".
D05 seq-credit · credit 흐름 제어 시퀀스 (type sequence)
같은 라이프라인. PC가 credit 3만큼 선행 송신, MCU는 프로그램 완료마다 credit +1 반환. 수신과 프로그램이 겹치는 구간을 activation 겹침으로 표시. note "빈 버퍼 수 보장 = overrun 방지 조건".
D06 pp-timing · Page Program 타이밍 (type timing)
레인 CS, SCLK(버스트 표시), MOSI(06h | 02h+A23..A0 | D0..D255), DMA TC, SPI BSY, WIP, CPU(RDSR 폴링 펄스). 시간축 0 ~ 약 510 µs(21 MHz 예시) 또는 42 MHz 값. 세 완료 마커(DMA TC · BSY=0 · WIP=0)를 세로 점선 + 라벨. poly로 파형.
D07 flash-write-flow · flash_write(addr, buf, n) 페이지 분할 순서도 (type flowchart)
시작 → n > 0? → 페이지 잔여 = 256 − (addr mod 256) → len = min(n, 잔여) → 섹터 첫 페이지이고 온디맨드? → 섹터 소거·WIP 대기 → WREN → PP(addr, len) → WIP=0 폴링(타임아웃 → 오류 F04) → addr += len, n −= len → 루프 → 완료 신호. 실패 분기(타임아웃·wrap 방지 검사)를 점선.
D08 restore-flow · 복원 경로 순서도 (type flowchart)
장벽 확인 → 헤더·팔레트 송신 → 행 배수 블록 읽기(Fast Read 0Bh, DMA) → 행 단위 Gray(픽셀 3 B 경계 유지, 잔여 이월 0) → TX DMA 큐 → 마지막 행? → 완료. 3단 겹침은 activity(D09)에서, 여기는 논리 순서만.
D09 pipeline-activity · 저장·복원 파이프라인 액티비티 (type activity, 스윔레인 region 3개: PC / MCU / Flash)
fork/join(hbar)으로 수신 DMA와 프로그램의 병행, 장벽 join, 복원 3단(읽기·변환·송신) 병행. 순차 전략과의 차이는 note. F17 스트리밍 변형은 점선 region으로 "교수 확인 후"라고 표기해 같은 그림 오른쪽에 작게(장벽 join을 우회해 청크 재독출 → 변환 → 송신이 수신과 병행).
D10 bottleneck-ishikawa · 병목 원인 계통도 (type ishikawa)
결과 = 총시간 Ttotal. 큰 가지 6: UART 전송(B1·B3·B11), USB·PC(B2), Flash 내부(B4·B5), SPI·트랜잭션(B6·B9), 버퍼·겹침(B7), CPU·소프트웨어(B8·B10·B12). 잔가지에 요인 F번호.
D11 ab-procedure · A/B 측정 절차 순서도 (type flowchart)
조건 설정(요인 1개 변경) → 워밍업 run 폐기 → run i (i = 1..n) → 성공 판정(1.2절) 실패면 실패 수 +1 → 로그 JSON 저장 → n 완료? → 중앙값·IQR 계산 → Baseline 대비 차이 → 다음 요인. 2³ 요인 실험 분기 note.
D12 measure-timing · 측정점과 시계 (type timing)
레인 PC 시계, MCU DWT, 단계(UART RX / Erase / Program / Verify / Read / Gray / UART TX). T0~T5 세로 점선. PC 시계 레인에 Ttotal = T5 − T0 화살표, MCU 레인에 단계 구간. "두 시계를 빼지 않는다" note.
D13 fail-fta · 실패 고장수목 (type fta)
최상위 사건 "반환 Gray BMP 불일치 또는 미완료". OR 아래: 청크 손실(overrun · 순번 누락) / Flash 쓰기 손상(미소거 쓰기 F07 · wrap · WIP 무시) / 장벽 위반(장벽 전 읽기) / 변환 오류(픽셀 경계 이월 누락 · 정수식 오차 초과) / 헤더 오류(stride · bottom-up · 팔레트). 랩 F01~F12 id를 잎에 표기.
D14 module-n2 · 모듈 인터페이스 N² 차트 (type n2)
대각선 4칸: 통합(main) · UART 드라이버 · Flash 드라이버 · BMP/Gray. 비대각 칸에 주고받는 것: 청크 도착 이벤트·송신 큐(UART→통합), 빈 버퍼(통합→UART), flash_write/flash_read/저장 완료 신호(Flash→통합), 버퍼 소유권 규칙(통합→Flash), gray_row·검증 결과(BMP→통합), Flash 읽은 행(Flash→BMP 경유 통합). 경계 규칙 4개를 note.
(선택 D15 schedule-pert · 내부 마감 PERT, type pert: 9/29 → 10/6 → 10/13 → 10/20 → 11/3 → 11/10 → 11/17 → 11/24 → 12/1 → 12/8 → 12/15. 시간 남으면.)
에이전트 분담
- Opus-A: D01, D02, D09, D14, (D15)
- Opus-B: D03, D04, D05, D06, D12
- Opus-C: D07, D08, D10, D11, D13
각자 diagrams\INDEX.md에 자기 행만 추가(파일 잠금 충돌 방지: INDEX-<A|B|C>.md로 따로 쓰고 Fable이 합친다).
5. 참고문헌 (INDEX의 근거 열에 이 번호로 인용)
[1] S. Saidi, P. Tendulkar, T. Lepley, O. Maler, "Optimizing explicit data transfers for data parallel applications on the Cell architecture," ACM TACO 8(4), 2012. doi:10.1145/2086696.2086716 — 청크 크기·더블버퍼 닫힌식(D05·D09·F4 근거).
[2] J. C. Sancho, D. J. Kerbyson, "Analysis of double buffering on two different multicore architectures," IPDPS 2008. doi:10.1109/IPDPS.2008.4536316 — 겹침 효과 비교 방법(D09).
[3] D. M. Tran, J.-Y. Choi, "A real-time data storage method for AC servo motor drives using micro SD card," IEEE Access 11, 2023. doi:10.1109/ACCESS.2023.3328394 — 저장 매체 busy 은닉·누락률 A/B(D03·D11).
[4] R. Jain, *The Art of Computer Systems Performance Analysis*, Wiley, 1991, ch. 16–18 — OFAT·2^k 요인 실험 설계(3.1절·D11).
[5] T. Hoefler, R. Belli, "Scientific benchmarking of parallel computing systems," SC'15, 2015. doi:10.1145/2807591.2807644 — 중앙값·분위수 보고, 평균 금지(3.2절).
[6] T. Mytkowicz, A. Diwan, M. Hauswirth, P. F. Sweeney, "Producing wrong data without doing anything obviously wrong!," ASPLOS 2009. doi:10.1145/1508244.1508275 — 측정 편향(3.2절).
[7] Winbond, *W25Q32JV Datasheet*, Rev K, 2026 — tPP/tSE/tBE/tCE, Page Program 1~256 B, wrap(D06·D07·B4·B5).
[8] STMicroelectronics, *RM0440 STM32G4 Reference Manual* — LPUART·SPI·DMA·DWT(D01·D06·D12).
[9] STMicroelectronics, *UM2505 STM32G4 Nucleo-64 boards* — STLINK-V3E VCP ↔ LPUART1 배선(D01).
[10] ITU-R BT.601-7, 2011, §2.5.1 — luma 계수(F13).
[11] Microsoft, *Bitmap Storage* / *BITMAPINFOHEADER*, Win32 docs — 헤더·stride·bottom-up(D08).
[12] OMG, *UML 2.5.1*, 2017 — statechart·sequence·activity 표기(D03·D04·D05·D09). IEEE Std 1016-2009 — 설계 기술 뷰(D01·D02·D14).
[13] N. R. Lane, "N² chart," NASA Systems Engineering Handbook SP-2016-6105 rev2, App. F — N² 표기(D14). IEC 61025:2006 — FTA 표기(D13). K. Ishikawa, *Guide to Quality Control*, 1976 — 특성요인도(D10).
6. 산출물 검사 (Fable)
- 14장 PNG 전부 Read로 열어 표기 오류·내용 오류 확인. 2. lint 0 확인. 3. INDEX 병합. 4.
발표1차_브리핑7절 뒤에 "실험 설계 = 실험설계\A7" 링크 한 줄.
7. 하지 않는 것
컬러, 실측값 기입, 랩 파일 수정, 논문 본문 작성(이 문서는 설계·방법론까지).
8. 이 설계의 열린 문제 (팀 회의 · 교수 확인)
사전 소거 Tprep 포함 여부(교수 확인), 청크 재독출 스트리밍(F17) 허용 여부(교수 확인, 1차 질의), 허용 오차(0 또는 ±1), 검증 재독출 on/off 기본값, 안 A/B 정렬 기본값, 채택 baud(3.1a 시험 결과).
9. Astra(3D) 메모 → ASTRA_MEMO.md
- 완료(Astra, 2026-09-15 커밋 d2d9f7b):
종설\labssets\A7_3D\— 장비 구성도 2장(01 온보드 ST-LINK 경로, 02 FT232H 대안 경로)과 Flash 비교 1장(03 W25Q32JV·W25Q64JV·IS25LP032D). 각각 clean/labeled PNG 2400×1350, 라벨 SVG, GLB, Blender 원본, QA JSON. Fable 육안 검수 통과. 실제 핀 배치·통신 안정성 미검증(Astra 명시). - 보고서 사용: 01 = Fig. 실험 장비 구성(§3.3), 02 = F15 브리지 대안, 03 = F14 칩 비교. 02에는 RTS·CTS 2선이 안 그려져 있음 → HW 흐름 제어 실험 때 재요청(TXD·RXD·RTS·CTS·GND 5선).