{
  "type": "sequence",
  "font": "Pretendard",
  "bg": "#ffffff",
  "nodes": [
    { "id": "n0", "k": "lifeline", "x": 85, "y": 40, "w": 150, "h": 500, "label": "PC\n(송신 프로그램)", "sc": "#1a1a1a", "tc": "#1a1a1a", "fc": "#ffffff" },
    { "id": "n1", "k": "lifeline", "x": 365, "y": 40, "w": 150, "h": 500, "label": "MCU : LPUART\nRX DMA", "sc": "#1a1a1a", "tc": "#1a1a1a", "fc": "#ffffff" },
    { "id": "n2", "k": "lifeline", "x": 645, "y": 40, "w": 150, "h": 500, "label": "MCU : main\n(제어 루프)", "sc": "#1a1a1a", "tc": "#1a1a1a", "fc": "#ffffff" },
    { "id": "n3", "k": "lifeline", "x": 935, "y": 40, "w": 150, "h": 500, "label": "W25Q32JV\n(Flash)", "sc": "#1a1a1a", "tc": "#1a1a1a", "fc": "#ffffff" },

    { "id": "n4", "k": "region", "x": 530, "y": 196, "w": 545, "h": 126, "label": "loop [페이지 1..16]", "sc": "#1a1a1a", "tc": "#1a1a1a" },

    { "id": "n5", "k": "activation", "x": 154, "y": 112, "w": 12, "h": 38, "label": "", "sc": "#1a1a1a" },
    { "id": "n6", "k": "activation", "x": 154, "y": 432, "w": 12, "h": 73, "label": "", "sc": "#1a1a1a" },
    { "id": "n7", "k": "activation", "x": 434, "y": 112, "w": 12, "h": 73, "label": "", "sc": "#1a1a1a" },
    { "id": "n8", "k": "activation", "x": 434, "y": 478, "w": 12, "h": 42, "label": "", "sc": "#1a1a1a" },
    { "id": "n9", "k": "activation", "x": 714, "y": 162, "w": 12, "h": 288, "label": "", "sc": "#1a1a1a" },
    { "id": "n10", "k": "activation", "x": 1004, "y": 205, "w": 12, "h": 195, "label": "", "sc": "#1a1a1a" },

    { "id": "n11", "k": "poly", "x": 168, "y": 152, "w": 0, "h": 0, "label": "", "pts": [[0, 0], [0, 276]], "arrow": 1, "sc": "#1a1a1a", "sw": 1 },
    { "id": "n12", "k": "poly", "x": 168, "y": 428, "w": 0, "h": 0, "label": "", "pts": [[0, 0], [0, -276]], "arrow": 1, "sc": "#1a1a1a", "sw": 1 },
    { "id": "n13", "k": "text", "x": 180, "y": 274, "w": 160, "h": 32, "label": "PC 대기 (idle)\n≈ 1 ms / 청크", "sc": "#1a1a1a", "tc": "#1a1a1a" },
    { "id": "n14", "k": "text", "x": 755, "y": 338, "w": 220, "h": 18, "label": "tPP 대기 · RDSR 폴링 반복", "sc": "#1a1a1a", "tc": "#1a1a1a" },
    { "id": "n15", "k": "note", "x": 85, "y": 566, "w": 300, "h": 58, "label": "겹침 없음 (수신 · 프로그램 직렬)\n청크당 왕복 지연 ≈ 1 ms · 769 청크", "sc": "#1a1a1a", "tc": "#1a1a1a", "fc": "#ffffff" }
  ],
  "edges": [
    { "id": "e0", "from": "n0", "to": "n1", "t": "async", "label": "데이터 청크 k (4096 B)", "ly": 120, "c": "#1a1a1a" },
    { "id": "e1", "from": "n1", "to": "n2", "t": "async", "label": "청크 도착 IRQ (DMA TC)", "ly": 170, "c": "#1a1a1a" },
    { "id": "e2", "from": "n2", "to": "n3", "t": "flow", "label": "WREN (06h)", "ly": 215, "c": "#1a1a1a" },
    { "id": "e3", "from": "n2", "to": "n3", "t": "flow", "label": "PP (02h) 256 B", "ly": 255, "c": "#1a1a1a" },
    { "id": "e4", "from": "n3", "to": "n2", "t": "ret", "label": "RDSR (05h) : WIP=1", "ly": 295, "c": "#1a1a1a" },
    { "id": "e5", "from": "n3", "to": "n2", "t": "ret", "label": "WIP=0 (16/16 페이지 완료)", "ly": 395, "c": "#1a1a1a" },
    { "id": "e6", "from": "n2", "to": "n0", "t": "async", "label": "ACK k (다음 청크 허용)", "ly": 440, "lbx": -140, "c": "#1a1a1a" },
    { "id": "e7", "from": "n0", "to": "n1", "t": "async", "label": "데이터 청크 k+1", "ly": 485, "c": "#1a1a1a" }
  ]
}
