{
  "type": "sequence",
  "font": "Pretendard",
  "bg": "#ffffff",
  "nodes": [
    {
      "id": "n0",
      "k": "lifeline",
      "x": 85,
      "y": 40,
      "w": 150,
      "h": 580,
      "label": "PC\n(송신 프로그램)",
      "sc": "#1a1a1a",
      "tc": "#1a1a1a",
      "fc": "#ffffff"
    },
    {
      "id": "n1",
      "k": "lifeline",
      "x": 365,
      "y": 40,
      "w": 150,
      "h": 580,
      "label": "MCU : LPUART\nRX DMA",
      "sc": "#1a1a1a",
      "tc": "#1a1a1a",
      "fc": "#ffffff"
    },
    {
      "id": "n2",
      "k": "lifeline",
      "x": 645,
      "y": 40,
      "w": 150,
      "h": 580,
      "label": "MCU : main\n(제어 루프)",
      "sc": "#1a1a1a",
      "tc": "#1a1a1a",
      "fc": "#ffffff"
    },
    {
      "id": "n3",
      "k": "lifeline",
      "x": 935,
      "y": 40,
      "w": 150,
      "h": 580,
      "label": "W25Q32JV\n(Flash)",
      "sc": "#1a1a1a",
      "tc": "#1a1a1a",
      "fc": "#ffffff"
    },
    {
      "id": "n4",
      "k": "activation",
      "x": 154,
      "y": 108,
      "w": 12,
      "h": 92,
      "label": "",
      "sc": "#1a1a1a"
    },
    {
      "id": "n5",
      "k": "activation",
      "x": 154,
      "y": 362,
      "w": 12,
      "h": 63,
      "label": "",
      "sc": "#1a1a1a"
    },
    {
      "id": "n6",
      "k": "activation",
      "x": 154,
      "y": 572,
      "w": 12,
      "h": 28,
      "label": "",
      "sc": "#1a1a1a"
    },
    {
      "id": "n7",
      "k": "activation",
      "x": 434,
      "y": 110,
      "w": 12,
      "h": 360,
      "label": "",
      "sc": "#1a1a1a"
    },
    {
      "id": "n8",
      "k": "activation",
      "x": 714,
      "y": 218,
      "w": 12,
      "h": 162,
      "label": "",
      "sc": "#1a1a1a"
    },
    {
      "id": "n9",
      "k": "activation",
      "x": 714,
      "y": 443,
      "w": 12,
      "h": 147,
      "label": "",
      "sc": "#1a1a1a"
    },
    {
      "id": "n10",
      "k": "activation",
      "x": 1004,
      "y": 258,
      "w": 12,
      "h": 80,
      "label": "",
      "sc": "#1a1a1a"
    },
    {
      "id": "n11",
      "k": "activation",
      "x": 1004,
      "y": 483,
      "w": 12,
      "h": 65,
      "label": "",
      "sc": "#1a1a1a"
    },
    {
      "id": "n12",
      "k": "text",
      "x": 178,
      "y": 262,
      "w": 176,
      "h": 32,
      "label": "PC 대기 없음\n(credit 만큼 선행 송신)",
      "sc": "#1a1a1a",
      "tc": "#1a1a1a"
    },
    {
      "id": "n13",
      "k": "text",
      "x": 480,
      "y": 296,
      "w": 200,
      "h": 32,
      "label": "수신 · 프로그램 겹침\n(활성 구간 중첩)",
      "sc": "#1a1a1a",
      "tc": "#1a1a1a"
    },
    {
      "id": "n14",
      "k": "note",
      "x": 85,
      "y": 646,
      "w": 300,
      "h": 58,
      "label": "빈 버퍼 수 보장 = overrun 방지 조건\n(INV-04) · credit 3 = 버퍼 3개",
      "sc": "#1a1a1a",
      "tc": "#1a1a1a",
      "fc": "#ffffff"
    }
  ],
  "edges": [
    {
      "id": "e0",
      "from": "n0",
      "to": "n1",
      "t": "async",
      "label": "데이터 청크 k (credit 3)",
      "ly": 115,
      "c": "#1a1a1a"
    },
    {
      "id": "e1",
      "from": "n0",
      "to": "n1",
      "t": "async",
      "label": "데이터 청크 k+1",
      "ly": 150,
      "c": "#1a1a1a"
    },
    {
      "id": "e2",
      "from": "n0",
      "to": "n1",
      "t": "async",
      "label": "데이터 청크 k+2",
      "ly": 185,
      "c": "#1a1a1a"
    },
    {
      "id": "e3",
      "from": "n1",
      "to": "n2",
      "t": "async",
      "label": "청크 k 도착 IRQ",
      "ly": 225,
      "c": "#1a1a1a"
    },
    {
      "id": "e4",
      "from": "n2",
      "to": "n3",
      "t": "flow",
      "label": "WREN / PP ×16 (청크 k)",
      "ly": 265,
      "c": "#1a1a1a"
    },
    {
      "id": "e5",
      "from": "n3",
      "to": "n2",
      "t": "ret",
      "label": "WIP=0 (청크 k 완료)",
      "ly": 330,
      "c": "#1a1a1a"
    },
    {
      "id": "e6",
      "from": "n2",
      "to": "n0",
      "t": "async",
      "label": "credit +1 (빈 버퍼 1개)",
      "ly": 370,
      "lbx": -140,
      "c": "#1a1a1a"
    },
    {
      "id": "e7",
      "from": "n0",
      "to": "n1",
      "t": "async",
      "label": "데이터 청크 k+3",
      "ly": 410,
      "c": "#1a1a1a"
    },
    {
      "id": "e8",
      "from": "n1",
      "to": "n2",
      "t": "async",
      "label": "청크 k+1 도착 IRQ",
      "ly": 450,
      "c": "#1a1a1a"
    },
    {
      "id": "e9",
      "from": "n2",
      "to": "n3",
      "t": "flow",
      "label": "WREN / PP ×16 (청크 k+1)",
      "ly": 490,
      "c": "#1a1a1a"
    },
    {
      "id": "e10",
      "from": "n3",
      "to": "n2",
      "t": "ret",
      "label": "WIP=0 (청크 k+1 완료)",
      "ly": 540,
      "c": "#1a1a1a"
    },
    {
      "id": "e11",
      "from": "n2",
      "to": "n0",
      "t": "async",
      "label": "credit +1",
      "ly": 580,
      "lbx": -140,
      "c": "#1a1a1a"
    }
  ]
}