增加了相关文档说明

This commit is contained in:
2026-05-11 10:32:35 +08:00
parent 0f5368bb51
commit 773b506f40
34 changed files with 6745 additions and 0 deletions

View File

@@ -0,0 +1,236 @@
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2024-05-25T00:00:00.000Z" agent="AI" version="21.0.0" type="device">
<diagram name="SPI Waveform" id="spi_waveform">
<mxGraphModel dx="1000" dy="600" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1000" pageHeight="600" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="grid" value="" style="points=[];gridColor=#e0e0e0;gridSize=20;spacingTop=20;spacingLeft=20;spacingBottom=20;spacingRight=20;html=1;" vertex="1" parent="1">
<mxGeometry x="0" y="0" width="1000" height="600" as="geometry"/>
</mxCell>
<mxCell id="title" value="SPI 全双工传输 (模式 0: CPOL=0, CPHA=0)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="300" y="20" width="400" height="30" as="geometry"/>
</mxCell>
<mxCell id="msb" value="MSB" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="130" y="60" width="40" height="20" as="geometry"/>
</mxCell>
<mxCell id="lsb" value="LSB" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="880" y="60" width="40" height="20" as="geometry"/>
</mxCell>
<mxCell id="label_cs" value="CS" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="85" width="50" height="20" as="geometry"/>
</mxCell>
<mxCell id="label_sclk" value="SCLK" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="185" width="50" height="20" as="geometry"/>
</mxCell>
<mxCell id="label_mosi" value="MOSI" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="275" width="50" height="20" as="geometry"/>
</mxCell>
<mxCell id="label_miso" value="MISO" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="365" width="50" height="20" as="geometry"/>
</mxCell>
<mxCell id="vl_150" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="150" y="180" as="sourcePoint"/>
<mxPoint x="150" y="420" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="vl_250" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="250" y="180" as="sourcePoint"/>
<mxPoint x="250" y="420" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="vl_350" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="350" y="180" as="sourcePoint"/>
<mxPoint x="350" y="420" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="vl_450" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="450" y="180" as="sourcePoint"/>
<mxPoint x="450" y="420" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="vl_550" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="550" y="180" as="sourcePoint"/>
<mxPoint x="550" y="420" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="vl_650" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="650" y="180" as="sourcePoint"/>
<mxPoint x="650" y="420" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="vl_750" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="750" y="180" as="sourcePoint"/>
<mxPoint x="750" y="420" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="vl_850" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="850" y="180" as="sourcePoint"/>
<mxPoint x="850" y="420" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="cs" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#FF5722;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="80" as="sourcePoint"/>
<mxPoint x="920" y="80" as="targetPoint"/>
<Array as="points">
<mxPoint x="90" y="80"/>
<mxPoint x="90" y="110"/>
<mxPoint x="910" y="110"/>
<mxPoint x="910" y="80"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="sclk" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#2196F3;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="210" as="sourcePoint"/>
<mxPoint x="920" y="210" as="targetPoint"/>
<Array as="points">
<mxPoint x="100" y="210"/>
<mxPoint x="150" y="210"/>
<mxPoint x="150" y="180"/>
<mxPoint x="190" y="180"/>
<mxPoint x="190" y="210"/>
<mxPoint x="250" y="210"/>
<mxPoint x="250" y="180"/>
<mxPoint x="290" y="180"/>
<mxPoint x="290" y="210"/>
<mxPoint x="350" y="210"/>
<mxPoint x="350" y="180"/>
<mxPoint x="390" y="180"/>
<mxPoint x="390" y="210"/>
<mxPoint x="450" y="210"/>
<mxPoint x="450" y="180"/>
<mxPoint x="490" y="180"/>
<mxPoint x="490" y="210"/>
<mxPoint x="550" y="210"/>
<mxPoint x="550" y="180"/>
<mxPoint x="590" y="180"/>
<mxPoint x="590" y="210"/>
<mxPoint x="650" y="210"/>
<mxPoint x="650" y="180"/>
<mxPoint x="690" y="180"/>
<mxPoint x="690" y="210"/>
<mxPoint x="750" y="210"/>
<mxPoint x="750" y="180"/>
<mxPoint x="790" y="180"/>
<mxPoint x="790" y="210"/>
<mxPoint x="850" y="210"/>
<mxPoint x="850" y="180"/>
<mxPoint x="890" y="180"/>
<mxPoint x="890" y="210"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="mosi" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#4CAF50;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="310" as="sourcePoint"/>
<mxPoint x="920" y="310" as="targetPoint"/>
<Array as="points">
<mxPoint x="100" y="310"/>
<mxPoint x="190" y="310"/>
<mxPoint x="190" y="280"/>
<mxPoint x="290" y="280"/>
<mxPoint x="290" y="310"/>
<mxPoint x="390" y="310"/>
<mxPoint x="390" y="280"/>
<mxPoint x="490" y="280"/>
<mxPoint x="590" y="280"/>
<mxPoint x="590" y="310"/>
<mxPoint x="690" y="310"/>
<mxPoint x="690" y="280"/>
<mxPoint x="790" y="280"/>
<mxPoint x="790" y="310"/>
<mxPoint x="890" y="310"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="miso" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#9C27B0;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="380" as="sourcePoint"/>
<mxPoint x="920" y="380" as="targetPoint"/>
<Array as="points">
<mxPoint x="100" y="380"/>
<mxPoint x="190" y="380"/>
<mxPoint x="190" y="410"/>
<mxPoint x="290" y="410"/>
<mxPoint x="290" y="380"/>
<mxPoint x="390" y="380"/>
<mxPoint x="390" y="410"/>
<mxPoint x="490" y="410"/>
<mxPoint x="590" y="410"/>
<mxPoint x="590" y="380"/>
<mxPoint x="690" y="380"/>
<mxPoint x="690" y="410"/>
<mxPoint x="790" y="410"/>
<mxPoint x="790" y="380"/>
<mxPoint x="890" y="380"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="m0" value="0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="145" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="m1" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="240" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="m2" value="0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="340" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="m3" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="440" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="m4" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="540" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="m5" value="0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="640" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="m6" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="740" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="m7" value="0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="840" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="s0" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="145" y="355" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="s1" value="0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="240" y="355" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="s2" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="340" y="355" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="s3" value="0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="440" y="355" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="s4" value="0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="540" y="355" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="s5" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="640" y="355" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="s6" value="0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="740" y="355" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="s7" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="840" y="355" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="hex_mosi" value="0x5A" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="500" y="235" width="80" height="20" as="geometry"/>
</mxCell>
<mxCell id="hex_miso" value="0xA5" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="500" y="425" width="80" height="20" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,215 @@
<mxfile host="app.diagrams.net">
<diagram id="配电自动化系统架构" name="Page-1">
<mxGraphModel dx="1200" dy="1000" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1200" pageHeight="1000" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<!-- 外部系统大容器 -->
<mxCell id="externalBox" value="外部系统" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="20" y="20" width="1160" height="150" as="geometry"/>
</mxCell>
<!-- 外部系统子模块 -->
<mxCell id="sys1" value="上一级调度自动化系统" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="130" y="40" width="180" height="80" as="geometry"/>
</mxCell>
<mxCell id="sys2" value="配电GIS系统" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="350" y="40" width="150" height="80" as="geometry"/>
</mxCell>
<mxCell id="sys3" value="生产管理系统" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="550" y="40" width="150" height="80" as="geometry"/>
</mxCell>
<mxCell id="sysDot" value="……" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="750" y="40" width="80" height="80" as="geometry"/>
</mxCell>
<mxCell id="sys4" value="营销管理信息系统" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="880" y="40" width="180" height="80" as="geometry"/>
</mxCell>
<!-- 信息交互总线 -->
<mxCell id="bus" value="信息交互总线" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="50" y="190" width="1100" height="80" as="geometry"/>
</mxCell>
<!-- 外部系统到总线的双向箭头 -->
<mxCell id="conn1" value="" style="endArrow=block;startArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="sys1" target="bus">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="conn2" value="" style="endArrow=block;startArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="sys2" target="bus">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="conn3" value="" style="endArrow=block;startArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="sys3" target="bus">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="conn4" value="" style="endArrow=block;startArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="sys4" target="bus">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- 左侧层级竖排标签 -->
<mxCell id="levelBox" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="20" y="300" width="80" height="650" as="geometry"/>
</mxCell>
<mxCell id="level1" value="主站层" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;fillColor=none;rotation=270;align=center;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="20" y="300" width="80" height="150" as="geometry"/>
</mxCell>
<mxCell id="level2" value="子站层" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;fillColor=none;rotation=270;align=center;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="20" y="450" width="80" height="150" as="geometry"/>
</mxCell>
<mxCell id="level3" value="终端层" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;fillColor=none;rotation=270;align=center;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="20" y="600" width="80" height="350" as="geometry"/>
</mxCell>
<!-- 配电自动化系统大虚线框 -->
<mxCell id="daBox" value="配电自动化系统" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;align=right;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="120" y="300" width="1040" height="650" as="geometry"/>
</mxCell>
<!-- 配电主站 -->
<mxCell id="mainStation" value="配电主站" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="490" y="350" width="220" height="60" as="geometry"/>
</mxCell>
<!-- 总线到主站双向箭头 -->
<mxCell id="connBusMain" value="" style="endArrow=block;startArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="bus" target="mainStation">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- 骨干层通信网 -->
<mxCell id="backboneNet" value="通信网(骨干层)" style="ellipse=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="320" y="450" width="560" height="60" as="geometry"/>
</mxCell>
<!-- 主站到骨干网双向箭头 -->
<mxCell id="connMainBackbone" value="" style="endArrow=block;startArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="mainStation" target="backboneNet">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- 子站层 -->
<mxCell id="subOptional" value="(可选)" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;fillColor=none;align=left;" vertex="1" parent="1">
<mxGeometry x="130" y="550" width="100" height="50" as="geometry"/>
</mxCell>
<mxCell id="subStation1" value="配电子站" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="250" y="550" width="180" height="50" as="geometry"/>
</mxCell>
<mxCell id="subDot" value="……" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="480" y="550" width="80" height="50" as="geometry"/>
</mxCell>
<mxCell id="subStation2" value="配电子站" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="770" y="550" width="180" height="50" as="geometry"/>
</mxCell>
<!-- 骨干网到子站连线 -->
<mxCell id="connBackboneSub1" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="backboneNet" target="subStation1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="connBackboneSub2" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="backboneNet" target="subStation2">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- 接入层通信网 -->
<mxCell id="accessNet1" value="通信网(接入层)" style="ellipse=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="250" y="650" width="180" height="50" as="geometry"/>
</mxCell>
<mxCell id="accessNet2" value="通信网(接入层)" style="ellipse=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="770" y="650" width="180" height="50" as="geometry"/>
</mxCell>
<!-- 子站到接入网连线 -->
<mxCell id="connSub1Access1" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="subStation1" target="accessNet1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="connSub2Access2" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="subStation2" target="accessNet2">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- 终端层设备 第一组 -->
<mxCell id="ftu1" value="FTU" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="150" y="730" width="80" height="40" as="geometry"/>
</mxCell>
<mxCell id="poleSwitch1" value="柱上\n开关" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="150" y="790" width="80" height="60" as="geometry"/>
</mxCell>
<mxCell id="connFtu1" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="accessNet1" target="ftu1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="connFtu1Switch" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="ftu1" target="poleSwitch1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="ttu1" value="TTU" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="300" y="730" width="80" height="40" as="geometry"/>
</mxCell>
<mxCell id="transformer1" value="配电\n变压器" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="300" y="790" width="80" height="60" as="geometry"/>
</mxCell>
<mxCell id="connTtu1" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="accessNet1" target="ttu1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="connTtu1Trans" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="ttu1" target="transformer1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="dot1" value="……" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="400" y="730" width="40" height="120" as="geometry"/>
</mxCell>
<mxCell id="ftu2" value="FTU" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="470" y="730" width="80" height="40" as="geometry"/>
</mxCell>
<mxCell id="poleSwitch2" value="柱上\n开关" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="470" y="790" width="80" height="60" as="geometry"/>
</mxCell>
<mxCell id="connFtu2" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="accessNet1" target="ftu2">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="connFtu2Switch" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="ftu2" target="poleSwitch2">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- 终端层设备 第二组 -->
<mxCell id="dtu1" value="DTU" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="600" y="730" width="80" height="40" as="geometry"/>
</mxCell>
<mxCell id="ringCab1" value="环网\n柜" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="600" y="790" width="80" height="60" as="geometry"/>
</mxCell>
<mxCell id="connDtu1" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="accessNet2" target="dtu1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="connDtu1Cab" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="dtu1" target="ringCab1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="dtu2" value="DTU" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="770" y="730" width="80" height="40" as="geometry"/>
</mxCell>
<mxCell id="ringCab2" value="环网\n柜" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="770" y="790" width="80" height="60" as="geometry"/>
</mxCell>
<mxCell id="connDtu2" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="accessNet2" target="dtu2">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="connDtu2Cab" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="dtu2" target="ringCab2">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="dot2" value="……" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="870" y="730" width="40" height="120" as="geometry"/>
</mxCell>
<mxCell id="ftu3" value="FTU" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="940" y="730" width="80" height="40" as="geometry"/>
</mxCell>
<mxCell id="poleSwitch3" value="柱上\n开关" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="940" y="790" width="80" height="60" as="geometry"/>
</mxCell>
<mxCell id="connFtu3" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="accessNet2" target="ftu3">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="connFtu3Switch" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="ftu3" target="poleSwitch3">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- 最右侧开关站DTU -->
<mxCell id="dtu3" value="DTU" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1050" y="730" width="80" height="40" as="geometry"/>
</mxCell>
<mxCell id="switchStation" value="开关\n站" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1050" y="790" width="80" height="60" as="geometry"/>
</mxCell>
<mxCell id="connDtu3" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="backboneNet" target="dtu3">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="connDtu3Station" value="" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="dtu3" target="switchStation">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,88 @@
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2026-05-10T00:00:00.000Z"
agent="AI-Drawio-Replicator" version="24.0.0" type="device">
<diagram id="page-1" name="传感器工厂模式">
<mxGraphModel dx="1400" dy="900" grid="1" gridSize="10"
guides="1" tooltips="1" connect="1" arrows="1"
fold="1" page="1" pageScale="1"
pageWidth="1400" pageHeight="900"
background="#f0f8ff">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<!-- 应用层 -->
<mxCell id="2" value="&lt;div style=&quot;display:flex;align-items:center;justify-content:center;gap:15px;font-size:20px;font-weight:bold;&quot;&gt;&lt;div style=&quot;font-size:40px;&quot;&gt;📱&lt;/div&gt;&lt;div&gt;应用层&lt;br&gt;&lt;span style=&quot;font-size:16px;font-weight:normal;&quot;&gt;(调用者)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e6f2ff;strokeColor=#6699cc;strokeWidth=2;shadow=1;fontSize=14;" vertex="1" parent="1">
<mxGeometry x="100" y="80" width="220" height="100" as="geometry"/>
</mxCell>
<!-- 代码示例 -->
<mxCell id="3" value="&lt;div style=&quot;font-family:monospace;font-size:18px;line-height:1.6;&quot;&gt;sensor = &lt;span style=&quot;color:#0066cc;font-weight:bold;&quot;&gt;sensor_create&lt;/span&gt;(SENSOR_DS18B20);&lt;br&gt;sensor-&gt;read(); &lt;span style=&quot;color:#666666;&quot;&gt;// 不关心具体实现&lt;/span&gt;&lt;/div&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="380" y="80" width="600" height="100" as="geometry"/>
</mxCell>
<!-- 工厂函数 -->
<mxCell id="4" value="&lt;div style=&quot;display:flex;align-items:center;justify-content:center;gap:15px;font-size:24px;font-weight:bold;&quot;&gt;&lt;div style=&quot;font-size:40px;&quot;&gt;🏭&lt;/div&gt;&lt;div&gt;工厂函数&lt;/div&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e6f9f2;strokeColor=#33cc99;strokeWidth=3;shadow=1;fontSize=14;" vertex="1" parent="1">
<mxGeometry x="400" y="280" width="280" height="100" as="geometry"/>
</mxCell>
<!-- 工厂函数说明 -->
<mxCell id="5" value="&lt;div style=&quot;font-size:16px;&quot;&gt;根据类型参数,选择并返回对应的操作集合&lt;/div&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="720" y="320" width="350" height="30" as="geometry"/>
</mxCell>
<!-- 传感器操作接口容器 -->
<mxCell id="6" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e6f2ff;strokeColor=#6699cc;strokeWidth=3;shadow=1;fontSize=14;" vertex="1" parent="1">
<mxGeometry x="250" y="500" width="700" height="280" as="geometry"/>
</mxCell>
<!-- 传感器操作接口标题 -->
<mxCell id="7" value="&lt;div style=&quot;font-size:24px;font-weight:bold;text-align:center;&quot;&gt;传感器操作接口&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f7ff;strokeColor=#6699cc;strokeWidth=2;fontSize=14;" vertex="1" parent="6">
<mxGeometry x="50" y="20" width="600" height="50" as="geometry"/>
</mxCell>
<!-- DS18B20传感器 -->
<mxCell id="8" value="&lt;div style=&quot;display:flex;align-items:center;justify-content:center;gap:10px;font-size:20px;font-weight:bold;&quot;&gt;&lt;div style=&quot;font-size:36px;&quot;&gt;🌡️&lt;/div&gt;&lt;div&gt;DS18B20&lt;br&gt;&lt;span style=&quot;font-size:16px;font-weight:normal;font-family:monospace;&quot;&gt;.init&lt;br&gt;.read&lt;br&gt;.deinit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f7ff;strokeColor=#6699cc;strokeWidth=2;fontSize=14;" vertex="1" parent="6">
<mxGeometry x="50" y="100" width="180" height="160" as="geometry"/>
</mxCell>
<!-- NTC传感器 -->
<mxCell id="9" value="&lt;div style=&quot;display:flex;align-items:center;justify-content:center;gap:10px;font-size:20px;font-weight:bold;&quot;&gt;&lt;div style=&quot;font-size:36px;&quot;&gt;🌡️&lt;/div&gt;&lt;div&gt;NTC&lt;br&gt;&lt;span style=&quot;font-size:16px;font-weight:normal;font-family:monospace;&quot;&gt;.init&lt;br&gt;.read&lt;br&gt;.deinit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e6f9f2;strokeColor=#33cc99;strokeWidth=2;fontSize=14;" vertex="1" parent="6">
<mxGeometry x="260" y="100" width="180" height="160" as="geometry"/>
</mxCell>
<!-- PT100传感器 -->
<mxCell id="10" value="&lt;div style=&quot;display:flex;align-items:center;justify-content:center;gap:10px;font-size:20px;font-weight:bold;&quot;&gt;&lt;div style=&quot;font-size:36px;&quot;&gt;🌡️&lt;/div&gt;&lt;div&gt;PT100&lt;br&gt;&lt;span style=&quot;font-size:16px;font-weight:normal;font-family:monospace;&quot;&gt;.init&lt;br&gt;.read&lt;br&gt;.deinit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f7ff;strokeColor=#6699cc;strokeWidth=2;fontSize=14;" vertex="1" parent="6">
<mxGeometry x="470" y="100" width="180" height="160" as="geometry"/>
</mxCell>
<!-- 连线1应用层到工厂函数 -->
<mxCell id="11" value="&lt;div style=&quot;font-size:16px;&quot;&gt;调用工厂函数&lt;/div&gt;" style="endArrow=classic;html=1;strokeColor=#336699;strokeWidth=2;labelPosition=top;verticalAlign=bottom;labelBackgroundColor=#ffffff;" edge="1" parent="1" source="2" target="4">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="210" y="180" as="sourcePoint"/>
<mxPoint x="210" y="280" as="targetPoint"/>
<mxPoint x="400" y="280" as="targetPoint"/>
</mxGeometry>
</mxCell>
<!-- 连线2工厂函数到传感器接口 -->
<mxCell id="12" value="&lt;div style=&quot;font-size:16px;&quot;&gt;返回具体实例&lt;/div&gt;" style="endArrow=classic;html=1;strokeColor=#33cc99;strokeWidth=3;labelPosition=right;verticalAlign=middle;labelBackgroundColor=#ffffff;" edge="1" parent="1" source="4" target="6">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="540" y="380" as="sourcePoint"/>
<mxPoint x="540" y="500" as="targetPoint"/>
</mxGeometry>
</mxCell>
<!-- 装饰性图标 -->
<mxCell id="13" value="📄" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=32;" vertex="1" parent="1">
<mxGeometry x="480" y="200" width="40" height="40" as="geometry"/>
</mxCell>
<!-- 装饰性箭头 -->
<mxCell id="14" value="⬇️" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize:48px;color:#33cc99;" vertex="1" parent="1">
<mxGeometry x="520" y="420" width="40" height="60" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,167 @@
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2026-05-10T00:00:00.000Z"
agent="AI-Drawio-Replicator" version="24.0.0" type="device">
<diagram id="page-1" name="嵌入式系统分层架构">
<mxGraphModel dx="1400" dy="900" grid="1" gridSize="10"
guides="1" tooltips="1" connect="1" arrows="1"
fold="1" page="1" pageScale="1"
pageWidth="1400" pageHeight="900"
background="#ffffff">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<!-- 应用层容器 -->
<mxCell id="2" value="应用层 Application Layer&lt;br&gt;&lt;span style=&quot;font-size:12px;&quot;&gt;【业务逻辑】&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ff99ff;strokeColor=#333333;strokeWidth=2;align=center;verticalAlign=top;fontSize=16;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="100" y="50" width="1200" height="120" as="geometry"/>
</mxCell>
<!-- 应用层模块 -->
<mxCell id="3" value="业务状态机" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="2">
<mxGeometry x="50" y="40" width="160" height="60" as="geometry"/>
</mxCell>
<mxCell id="4" value="采集控制逻辑" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="2">
<mxGeometry x="260" y="40" width="160" height="60" as="geometry"/>
</mxCell>
<mxCell id="5" value="故障处理模块" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="2">
<mxGeometry x="470" y="40" width="160" height="60" as="geometry"/>
</mxCell>
<mxCell id="6" value="人机交互逻辑" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="2">
<mxGeometry x="680" y="40" width="160" height="60" as="geometry"/>
</mxCell>
<!-- 服务层容器 -->
<mxCell id="7" value="服务层 Service Layer&lt;br&gt;&lt;span style=&quot;font-size:12px;&quot;&gt;【通用能力】&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#99ccff;strokeColor=#333333;strokeWidth=2;align=center;verticalAlign=top;fontSize=16;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="100" y="200" width="1200" height="120" as="geometry"/>
</mxCell>
<!-- 服务层模块 -->
<mxCell id="8" value="数据存储服务" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="7">
<mxGeometry x="30" y="40" width="140" height="60" as="geometry"/>
</mxCell>
<mxCell id="9" value="协议解析服务" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="7">
<mxGeometry x="210" y="40" width="140" height="60" as="geometry"/>
</mxCell>
<mxCell id="10" value="日志系统服务" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="7">
<mxGeometry x="390" y="40" width="140" height="60" as="geometry"/>
</mxCell>
<mxCell id="11" value="算法滤波服务" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="7">
<mxGeometry x="570" y="40" width="140" height="60" as="geometry"/>
</mxCell>
<mxCell id="12" value="定时任务服务" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="7">
<mxGeometry x="750" y="40" width="140" height="60" as="geometry"/>
</mxCell>
<!-- 设备驱动层容器 -->
<mxCell id="13" value="设备驱动层 Device Driver Layer&lt;br&gt;&lt;span style=&quot;font-size:12px;&quot;&gt;【设备操作】&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#99ffcc;strokeColor=#333333;strokeWidth=2;align=center;verticalAlign=top;fontSize=16;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="100" y="350" width="1200" height="120" as="geometry"/>
</mxCell>
<!-- 设备驱动层模块 -->
<mxCell id="14" value="传感器驱动" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="13">
<mxGeometry x="30" y="40" width="140" height="60" as="geometry"/>
</mxCell>
<mxCell id="15" value="Flash驱动" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="13">
<mxGeometry x="210" y="40" width="140" height="60" as="geometry"/>
</mxCell>
<mxCell id="16" value="UART/485驱动" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="13">
<mxGeometry x="390" y="40" width="140" height="60" as="geometry"/>
</mxCell>
<mxCell id="17" value="ADC/DAC驱动" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="13">
<mxGeometry x="570" y="40" width="140" height="60" as="geometry"/>
</mxCell>
<mxCell id="18" value="继电器/执行器驱动" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="13">
<mxGeometry x="750" y="40" width="180" height="60" as="geometry"/>
</mxCell>
<!-- 硬件抽象层容器 -->
<mxCell id="19" value="硬件抽象层 HAL Layer&lt;br&gt;&lt;span style=&quot;font-size:12px;&quot;&gt;【硬件封装】&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffcc99;strokeColor=#333333;strokeWidth=2;align=center;verticalAlign=top;fontSize=16;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="100" y="500" width="1200" height="120" as="geometry"/>
</mxCell>
<!-- 硬件抽象层模块 -->
<mxCell id="20" value="寄存器操作封装" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="19">
<mxGeometry x="50" y="40" width="160" height="60" as="geometry"/>
</mxCell>
<mxCell id="21" value="时钟/中断管理" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="19">
<mxGeometry x="260" y="40" width="160" height="60" as="geometry"/>
</mxCell>
<mxCell id="22" value="GPIO抽象接口" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="19">
<mxGeometry x="470" y="40" width="160" height="60" as="geometry"/>
</mxCell>
<mxCell id="23" value="外设基础封装" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="19">
<mxGeometry x="680" y="40" width="160" height="60" as="geometry"/>
</mxCell>
<!-- 硬件层容器 -->
<mxCell id="24" value="硬件层 Hardware Layer&lt;br&gt;&lt;span style=&quot;font-size:12px;&quot;&gt;【物理实体】&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#cccccc;strokeColor=#333333;strokeWidth=2;align=center;verticalAlign=top;fontSize=16;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="100" y="650" width="1200" height="120" as="geometry"/>
</mxCell>
<!-- 硬件层模块 -->
<mxCell id="25" value="MCU内核" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="24">
<mxGeometry x="30" y="40" width="140" height="60" as="geometry"/>
</mxCell>
<mxCell id="26" value="片内外设" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="24">
<mxGeometry x="210" y="40" width="140" height="60" as="geometry"/>
</mxCell>
<mxCell id="27" value="外部传感器" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="24">
<mxGeometry x="390" y="40" width="140" height="60" as="geometry"/>
</mxCell>
<mxCell id="28" value="执行机构" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="24">
<mxGeometry x="570" y="40" width="140" height="60" as="geometry"/>
</mxCell>
<mxCell id="29" value="通信模块" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#333333;strokeWidth=1;align=center;verticalAlign=middle;fontSize=12;" vertex="1" parent="24">
<mxGeometry x="750" y="40" width="140" height="60" as="geometry"/>
</mxCell>
<!-- 主连线 -->
<mxCell id="30" value="" style="endArrow=classic;html=1;strokeColor=#333333;strokeWidth=2;" edge="1" parent="1" source="2" target="7">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="700" y="170" as="sourcePoint"/>
<mxPoint x="700" y="200" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="31" value="" style="endArrow=classic;html=1;strokeColor=#333333;strokeWidth=2;" edge="1" parent="1" source="7" target="13">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="700" y="320" as="sourcePoint"/>
<mxPoint x="700" y="350" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="32" value="" style="endArrow=classic;html=1;strokeColor=#333333;strokeWidth=2;" edge="1" parent="1" source="13" target="19">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="700" y="470" as="sourcePoint"/>
<mxPoint x="700" y="500" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="33" value="" style="endArrow=classic;html=1;strokeColor=#333333;strokeWidth=2;" edge="1" parent="1" source="19" target="24">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="700" y="620" as="sourcePoint"/>
<mxPoint x="700" y="650" as="targetPoint"/>
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,202 @@
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2026-05-10T08:42:00.000Z"
agent="AI-Drawio-Replicator" version="24.0.0" type="device">
<diagram id="hw-arch" name="Hardware Architecture">
<mxGraphModel dx="1200" dy="900" grid="1" gridSize="10"
guides="1" tooltips="1" connect="1" arrows="1"
fold="1" page="1" pageScale="1"
pageWidth="1169" pageHeight="827"
background="#ffffff">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<!-- 整体外框 -->
<mxCell id="2" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#000000;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="60" y="20" width="1100" height="670" as="geometry"/>
</mxCell>
<!-- 左侧层级标签 -->
<mxCell id="3" value="对外接口层" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;" vertex="1" parent="1">
<mxGeometry x="15" y="80" width="40" height="80" as="geometry"/>
</mxCell>
<mxCell id="4" value="通信协议层" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;" vertex="1" parent="1">
<mxGeometry x="15" y="210" width="40" height="80" as="geometry"/>
</mxCell>
<mxCell id="5" value="核心控制层" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;" vertex="1" parent="1">
<mxGeometry x="15" y="355" width="40" height="80" as="geometry"/>
</mxCell>
<mxCell id="6" value="存储辅助层" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;" vertex="1" parent="1">
<mxGeometry x="15" y="490" width="40" height="80" as="geometry"/>
</mxCell>
<mxCell id="7" value="数据采集层" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;" vertex="1" parent="1">
<mxGeometry x="15" y="615" width="40" height="80" as="geometry"/>
</mxCell>
<!-- ========== Layer 1: 对外接口层 (橙色) ========== -->
<mxCell id="8" value="&lt;b&gt;HY911105AE&lt;/b&gt;&lt;br&gt;ETH Port 1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="700" y="65" width="130" height="50" as="geometry"/>
</mxCell>
<mxCell id="9" value="&lt;b&gt;HY911105AE&lt;/b&gt;&lt;br&gt;ETH Port 2" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="920" y="65" width="130" height="50" as="geometry"/>
</mxCell>
<mxCell id="10" value="&lt;b&gt;RS485&lt;/b&gt;&lt;br&gt;Interface" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="345" y="65" width="100" height="50" as="geometry"/>
</mxCell>
<mxCell id="11" value="&lt;b&gt;RS232-1&lt;/b&gt;&lt;br&gt;Interface" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="160" y="65" width="110" height="50" as="geometry"/>
</mxCell>
<mxCell id="12" value="&lt;b&gt;RS232-2&lt;/b&gt;&lt;br&gt;Interface" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="300" y="65" width="110" height="50" as="geometry"/>
</mxCell>
<!-- ========== Layer 2: 通信协议层 (蓝色) ========== -->
<mxCell id="13" value="&lt;b&gt;RTL8305NBI-CG&lt;/b&gt;&lt;br&gt;Ethernet Switch" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="790" y="165" width="140" height="55" as="geometry"/>
</mxCell>
<mxCell id="14" value="&lt;b&gt;Network&lt;/b&gt;&lt;br&gt;Transformer" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="640" y="165" width="130" height="55" as="geometry"/>
</mxCell>
<mxCell id="15" value="&lt;b&gt;CH395F&lt;/b&gt;&lt;br&gt;ETH Controller" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="490" y="165" width="130" height="55" as="geometry"/>
</mxCell>
<mxCell id="16" value="&lt;b&gt;TP8485E-SR&lt;/b&gt;&lt;br&gt;RS485 Transceiver" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="330" y="165" width="130" height="55" as="geometry"/>
</mxCell>
<mxCell id="17" value="&lt;b&gt;CA-IS3722HS&lt;/b&gt;&lt;br&gt;Isolation Chip" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="150" y="165" width="130" height="55" as="geometry"/>
</mxCell>
<mxCell id="18" value="&lt;b&gt;TPT3232E&lt;/b&gt;&lt;br&gt;RS232 Transceiver" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="150" y="240" width="130" height="50" as="geometry"/>
</mxCell>
<!-- ========== Layer 3: 核心控制层 (蓝色大框+白色内部模块) ========== -->
<mxCell id="19" value="&lt;b&gt;STM32F407VGT6&lt;/b&gt;&lt;br&gt;Main Controller" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=14;fontStyle=1;align=center;verticalAlign=top;spacingTop=5;" vertex="1" parent="1">
<mxGeometry x="280" y="300" width="480" height="130" as="geometry"/>
</mxCell>
<!-- 内部接口模块 -->
<mxCell id="20" value="SPI1&lt;br&gt;(CH395F)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;fontColor=#000000;fontSize=10;" vertex="1" parent="19">
<mxGeometry x="25" y="40" width="120" height="35" as="geometry"/>
</mxCell>
<mxCell id="21" value="SPI2&lt;br&gt;(FLASH)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;fontColor=#000000;fontSize=10;" vertex="1" parent="19">
<mxGeometry x="175" y="40" width="120" height="35" as="geometry"/>
</mxCell>
<mxCell id="22" value="I2C&lt;br&gt;(RTC)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;fontColor=#000000;fontSize=10;" vertex="1" parent="19">
<mxGeometry x="325" y="40" width="120" height="35" as="geometry"/>
</mxCell>
<mxCell id="23" value="UART1&lt;br&gt;(RS485)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;fontColor=#000000;fontSize=10;" vertex="1" parent="19">
<mxGeometry x="25" y="85" width="120" height="35" as="geometry"/>
</mxCell>
<mxCell id="24" value="UART2&lt;br&gt;(RS232)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;fontColor=#000000;fontSize=10;" vertex="1" parent="19">
<mxGeometry x="175" y="85" width="120" height="35" as="geometry"/>
</mxCell>
<mxCell id="25" value="GPIO&lt;br&gt;(ADC)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;fontColor=#000000;fontSize=10;" vertex="1" parent="19">
<mxGeometry x="325" y="85" width="120" height="35" as="geometry"/>
</mxCell>
<!-- ========== Layer 4: 存储辅助层 (蓝色) ========== -->
<mxCell id="26" value="&lt;b&gt;GD5F2GQ5UE&lt;/b&gt;&lt;br&gt;SPI FLASH" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="350" y="470" width="160" height="55" as="geometry"/>
</mxCell>
<mxCell id="27" value="&lt;b&gt;SD2506API-G&lt;/b&gt;&lt;br&gt;RTC Clock" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="560" y="470" width="160" height="55" as="geometry"/>
</mxCell>
<!-- ========== Layer 5: 数据采集层 (蓝色) ========== -->
<mxCell id="28" value="&lt;b&gt;TPAFE5160&lt;/b&gt;&lt;br&gt;8-Ch ADC (Parallel)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="420" y="595" width="200" height="60" as="geometry"/>
</mxCell>
<!-- ========== 层间双向箭头 ========== -->
<mxCell id="29" value="" style="endArrow=classic;startArrow=classic;html=1;strokeColor=#000000;strokeWidth=3;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="620" y="140" as="sourcePoint"/>
<mxPoint x="620" y="160" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="30" value="" style="endArrow=classic;startArrow=classic;html=1;strokeColor=#000000;strokeWidth=3;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="620" y="280" as="sourcePoint"/>
<mxPoint x="620" y="300" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="31" value="" style="endArrow=classic;startArrow=classic;html=1;strokeColor=#000000;strokeWidth=3;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="620" y="430" as="sourcePoint"/>
<mxPoint x="620" y="450" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="32" value="" style="endArrow=classic;startArrow=classic;html=1;strokeColor=#000000;strokeWidth=3;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="620" y="550" as="sourcePoint"/>
<mxPoint x="620" y="570" as="targetPoint"/>
</mxGeometry>
</mxCell>
<!-- ========== 芯片间连线 ========== -->
<!-- STM32 → 各外设 -->
<mxCell id="33" value="SPI" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;" edge="1" parent="1" source="19" target="15">
<mxGeometry width="50" height="50" relative="1" as="geometry"/>
</mxCell>
<mxCell id="34" value="UART" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;" edge="1" parent="1" source="19" target="16">
<mxGeometry width="50" height="50" relative="1" as="geometry"/>
</mxCell>
<mxCell id="35" value="UART" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;" edge="1" parent="1" source="19" target="17">
<mxGeometry width="50" height="50" relative="1" as="geometry"/>
</mxCell>
<mxCell id="36" value="SPI" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;" edge="1" parent="1" source="19" target="26">
<mxGeometry width="50" height="50" relative="1" as="geometry"/>
</mxCell>
<mxCell id="37" value="I2C" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;" edge="1" parent="1" source="19" target="27">
<mxGeometry width="50" height="50" relative="1" as="geometry"/>
</mxCell>
<mxCell id="38" value="8-bit Parallel" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;" edge="1" parent="1" source="19" target="28">
<mxGeometry width="50" height="50" relative="1" as="geometry"/>
</mxCell>
<!-- 网络链路 -->
<mxCell id="39" value="" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;" edge="1" parent="1" source="15" target="14">
<mxGeometry width="50" height="50" relative="1" as="geometry"/>
</mxCell>
<mxCell id="40" value="" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;" edge="1" parent="1" source="14" target="13">
<mxGeometry width="50" height="50" relative="1" as="geometry"/>
</mxCell>
<mxCell id="41" value="" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;" edge="1" parent="1" source="13" target="8">
<mxGeometry width="50" height="50" relative="1" as="geometry"/>
</mxCell>
<mxCell id="42" value="" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;" edge="1" parent="1" source="13" target="9">
<mxGeometry width="50" height="50" relative="1" as="geometry"/>
</mxCell>
<!-- 串口链路 -->
<mxCell id="43" value="" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;" edge="1" parent="1" source="16" target="10">
<mxGeometry width="50" height="50" relative="1" as="geometry"/>
</mxCell>
<mxCell id="44" value="" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;" edge="1" parent="1" source="17" target="18">
<mxGeometry width="50" height="50" relative="1" as="geometry"/>
</mxCell>
<mxCell id="45" value="" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;" edge="1" parent="1" source="18" target="11">
<mxGeometry width="50" height="50" relative="1" as="geometry"/>
</mxCell>
<mxCell id="46" value="" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;" edge="1" parent="1" source="18" target="12">
<mxGeometry width="50" height="50" relative="1" as="geometry"/>
</mxCell>
<!-- ========== 底部图例 ========== -->
<mxCell id="47" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;" vertex="1" parent="1">
<mxGeometry x="380" y="705" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="48" value="系统功能模块" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="420" y="700" width="120" height="30" as="geometry"/>
</mxCell>
<mxCell id="49" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;" vertex="1" parent="1">
<mxGeometry x="620" y="705" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="50" value="对外接口设备" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="660" y="700" width="120" height="30" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,677 @@
<mxfile host="Electron" agent="AI-Drawio-Replicator">
<diagram id="hw-arch" name="Hardware Architecture">
<mxGraphModel dx="2020" dy="2814" grid="1" gridSize="5" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" background="#ffffff" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="B37HkNnOgrgZiHbc5-xt-83" parent="1" style="rounded=0;whiteSpace=wrap;html=1;container=1;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="700" width="1070" x="70" y="-683" as="geometry" />
</mxCell>
<mxCell id="19" parent="B37HkNnOgrgZiHbc5-xt-83" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=14;fontStyle=1;align=center;verticalAlign=top;spacingTop=5;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="370" width="595.99" x="240" y="155" as="geometry" />
</mxCell>
<mxCell id="20" parent="19" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;fontSize=10;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="370" width="89.01" as="geometry" />
</mxCell>
<mxCell id="23" parent="19" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;fontColor=#000000;fontSize=10;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="75" width="505.99" x="89.01" y="295" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-214" parent="19" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;BSP&amp;nbsp;&lt;/font&gt;&lt;div&gt;&lt;font style=&quot;font-size: 18px;&quot;&gt;板级支持&lt;/font&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="68.57" width="90" y="298" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-215" parent="19" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;Driver&lt;br&gt;驱动&lt;/font&gt;" vertex="1">
<mxGeometry height="68.57" width="89.01" x="-0.01" y="226.43" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-223" parent="19" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;HAL&lt;br&gt;硬件抽象&lt;/font&gt;" vertex="1">
<mxGeometry height="68.57" width="89.01" x="0.99" y="148.21" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-224" parent="19" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;fontColor=#000000;fontSize=10;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="75" width="505.99" x="89" y="220" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-225" parent="19" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;fontColor=#000000;fontSize=10;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="75" width="505.99" x="89" y="145" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-226" parent="19" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;fontColor=#000000;fontSize=10;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="75" width="505.99" x="89" y="70" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-227" parent="19" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;Service&lt;br&gt;服务层&lt;/font&gt;" vertex="1">
<mxGeometry height="68.57" width="89.01" x="0.9900000000000091" y="73.21000000000001" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-228" parent="19" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;APP&lt;br&gt;应用层&lt;/font&gt;" vertex="1">
<mxGeometry height="68.57" width="89.01" x="-0.009999999999990905" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-229" parent="19" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;fontColor=#000000;fontSize=10;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="75" width="505.99" x="89" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-230" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="时钟配置" vertex="1">
<mxGeometry height="42" width="60" x="100" y="311.5" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-231" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="IO分配" vertex="1">
<mxGeometry height="42" width="60" x="186" y="311.5" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-232" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="中断向量" vertex="1">
<mxGeometry height="42" width="60" x="272" y="311.5" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-233" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="定时器" vertex="1">
<mxGeometry height="42" width="60" x="358" y="311.29" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-234" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="DMA" vertex="1">
<mxGeometry height="42" width="60" x="444" y="311.28999999999996" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-235" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="中断向量" vertex="1">
<mxGeometry height="42" width="60" x="530" y="311.5" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-236" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="SPI" vertex="1">
<mxGeometry height="42" width="60" x="100" y="239.72000000000003" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-256" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="IIC" vertex="1">
<mxGeometry height="42" width="60" x="186" y="239.72000000000003" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-257" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="RS485" vertex="1">
<mxGeometry height="42" width="60" x="272" y="239.70999999999998" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-258" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="UART" vertex="1">
<mxGeometry height="42" width="60" x="358" y="239.72000000000003" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-259" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="16并行采集" vertex="1">
<mxGeometry height="42" width="60" x="444" y="239.72000000000003" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-260" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="16并行采集" vertex="1">
<mxGeometry height="42" width="60" x="530" y="239.72000000000003" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-261" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="屏蔽芯片差异统一接口" vertex="1">
<mxGeometry height="42" width="490" x="100" y="164" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-262" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="104" vertex="1">
<mxGeometry height="42" width="60" x="100" y="86.5" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-263" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="101" vertex="1">
<mxGeometry height="42" width="60" x="186" y="86.5" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-264" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="显示协议" vertex="1">
<mxGeometry height="42" width="60" x="272" y="86.5" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-265" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="按键协议" vertex="1">
<mxGeometry height="42" width="60" x="358" y="86.5" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-266" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="按键协议" vertex="1">
<mxGeometry height="42" width="60" x="444" y="88" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-267" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="图像界面" vertex="1">
<mxGeometry height="42" width="60" x="100" y="13.289999999999964" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-268" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="保护" vertex="1">
<mxGeometry height="42" width="60" x="186" y="13.289999999999964" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-269" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="响应主站" vertex="1">
<mxGeometry height="42" width="60" x="272" y="13.289999999999964" as="geometry" />
</mxCell>
<mxCell id="18" parent="B37HkNnOgrgZiHbc5-xt-83" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;b&gt;TPT3232E&lt;/b&gt;&lt;br&gt;RS232 Transceiver" vertex="1">
<mxGeometry height="73.76" width="100" x="5" y="15.999999999999998" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-90" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-83" style="group;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="158.29999999999995" width="195" x="310" y="525" as="geometry" />
</mxCell>
<mxCell id="26" parent="B37HkNnOgrgZiHbc5-xt-90" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b&gt;存储芯片&lt;/b&gt;&lt;/div&gt;&lt;b&gt;GD5F2GQ5UE&lt;/b&gt;&lt;br&gt;SPI FLASH" vertex="1">
<mxGeometry height="90.92" width="195" y="67.38" as="geometry" />
</mxCell>
<mxCell id="36" edge="1" parent="B37HkNnOgrgZiHbc5-xt-90" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;" value="CLK">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="115" y="0.0014285714286188522" as="sourcePoint" />
<mxPoint x="115" y="67.37648648648667" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-85" edge="1" parent="B37HkNnOgrgZiHbc5-xt-90" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;" value="&lt;font&gt;MISO&lt;/font&gt;">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="79.86000000000001" y="0.37999999999999545" as="sourcePoint" />
<mxPoint x="79.86000000000001" y="67.38" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-86" edge="1" parent="B37HkNnOgrgZiHbc5-xt-90" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;" value="&lt;font&gt;MOSI&lt;/font&gt;">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="45" y="0.37999999999999545" as="sourcePoint" />
<mxPoint x="45" y="67.38" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-87" edge="1" parent="B37HkNnOgrgZiHbc5-xt-90" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;" value="WP">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="150" y="0.37999999999999545" as="sourcePoint" />
<mxPoint x="150" y="67.38" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-88" edge="1" parent="B37HkNnOgrgZiHbc5-xt-90" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;" value="&lt;font&gt;CS&lt;/font&gt;">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="10" as="sourcePoint" />
<mxPoint x="10" y="67" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-89" edge="1" parent="B37HkNnOgrgZiHbc5-xt-90" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;" value="HOLD">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="185" as="sourcePoint" />
<mxPoint x="185" y="67" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-110" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-83" style="group;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="158.87" width="93.93" x="695" y="524" as="geometry" />
</mxCell>
<mxCell id="27" parent="B37HkNnOgrgZiHbc5-xt-110" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b&gt;时钟模块&lt;/b&gt;&lt;/div&gt;&lt;b&gt;SD2506API-G&lt;/b&gt;&lt;br&gt;RTC Clock" vertex="1">
<mxGeometry height="91.87" width="93.93" y="67" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-91" edge="1" parent="B37HkNnOgrgZiHbc5-xt-110" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;entryX=0.323;entryY=0.01;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Times New Roman;" target="27" value="SCL">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="30" as="sourcePoint" />
<mxPoint x="30" y="67" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-92" edge="1" parent="B37HkNnOgrgZiHbc5-xt-110" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=0.667;exitY=1.001;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.323;entryY=0.01;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Times New Roman;" value="SDA">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="60.16000000000008" y="0.5728571428570604" as="sourcePoint" />
<mxPoint x="60" y="67.20000000000005" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-168" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-83" style="group" value="" vertex="1">
<mxGeometry height="280.54" width="216.06999999999994" x="835" y="209" as="geometry" />
</mxCell>
<mxCell id="28" parent="B37HkNnOgrgZiHbc5-xt-168" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b&gt;模拟量采样芯片&lt;/b&gt;&lt;/div&gt;&lt;b&gt;TPAFE5160&lt;/b&gt;" vertex="1">
<mxGeometry height="280.54" width="166.07" x="50" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-102" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="260" as="sourcePoint" />
<mxPoint x="50" y="260" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-104" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-102" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D0&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-106" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="250" as="sourcePoint" />
<mxPoint x="50" y="250" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-107" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-106" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D1&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-108" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="240" as="sourcePoint" />
<mxPoint x="50" y="240" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-109" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-108" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D2&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-111" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="230" as="sourcePoint" />
<mxPoint x="50" y="230" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-112" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-111" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D3&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-113" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="220" as="sourcePoint" />
<mxPoint x="50" y="220" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-114" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-113" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D4&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-115" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="210" as="sourcePoint" />
<mxPoint x="50" y="210" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-116" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-115" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D5&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-117" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="200" as="sourcePoint" />
<mxPoint x="50" y="200" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-118" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-117" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D6&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-119" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="190" as="sourcePoint" />
<mxPoint x="50" y="190" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-120" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-119" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D7&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-121" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="180" as="sourcePoint" />
<mxPoint x="50" y="180" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-122" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-121" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D8&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-123" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="169.92000000000002" as="sourcePoint" />
<mxPoint x="50" y="169.92000000000002" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-124" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-123" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D9&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-125" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="160" as="sourcePoint" />
<mxPoint x="50" y="160" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-126" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-125" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D10&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-127" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="150" as="sourcePoint" />
<mxPoint x="50" y="150" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-128" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-127" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D11&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-129" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="140" as="sourcePoint" />
<mxPoint x="50" y="140" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-130" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-129" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D12&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-131" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="130" as="sourcePoint" />
<mxPoint x="50" y="130" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-132" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-131" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D13&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-133" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="120" as="sourcePoint" />
<mxPoint x="50" y="120" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-134" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-133" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D14&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-135" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="110" as="sourcePoint" />
<mxPoint x="50" y="110" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-136" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-135" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D15&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-137" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=1;startArrow=none;startFill=0;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="50" as="sourcePoint" />
<mxPoint x="50" y="50" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-138" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-137" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;CONVST&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint x="-10" y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-145" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="60" as="sourcePoint" />
<mxPoint x="50" y="60" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-146" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-145" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;BUSY&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-147" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="70" as="sourcePoint" />
<mxPoint x="50" y="70" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-148" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-147" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;FRST&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="14" parent="B37HkNnOgrgZiHbc5-xt-83" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;b&gt;网络变压器&lt;/b&gt;" vertex="1">
<mxGeometry height="75.49" width="70" x="770" y="19.51" as="geometry" />
</mxCell>
<mxCell id="13" parent="B37HkNnOgrgZiHbc5-xt-83" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b&gt;网络交换机&lt;/b&gt;&lt;/div&gt;&lt;b&gt;RTL8305NBI-CG&lt;/b&gt;" vertex="1">
<mxGeometry height="75" width="140" x="879" y="19.51" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-153" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="15" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endWidth=7.741935483870967;endSize=2.85;startSize=2.85;width=4.354838709677419;startArrow=classic;startFill=1;startWidth=7.181795448862215;" target="14" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="670" y="57.17500000000012" as="sourcePoint" />
<mxPoint x="710" y="57.17039215686275" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-154" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endWidth=7.741935483870967;endSize=2.85;startSize=2.85;width=4.354838709677419;startArrow=classic;startFill=1;startWidth=7.181795448862215;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="840" y="57.09460784313736" as="sourcePoint" />
<mxPoint x="880" y="57.089999999999996" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-166" parent="B37HkNnOgrgZiHbc5-xt-83" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(237, 237, 237));&quot;&gt;光耦隔离器&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;FOC-817SC&lt;/b&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="75.49" width="70" x="520" y="21.240000000000002" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-169" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-83" style="group" value="" vertex="1">
<mxGeometry height="137.14736694677867" width="130" x="600" y="19.51" as="geometry" />
</mxCell>
<mxCell id="15" parent="B37HkNnOgrgZiHbc5-xt-169" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;b&gt;CH395F&lt;/b&gt;&lt;br&gt;ETH Controller" vertex="1">
<mxGeometry height="75.49" width="130" as="geometry" />
</mxCell>
<mxCell id="33" edge="1" parent="B37HkNnOgrgZiHbc5-xt-169" source="19" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0.631;exitY=0.001;exitDx=0;exitDy=0;exitPerimeter=0;" value="CS">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="15.370000000000005" y="137.1428571428571" as="sourcePoint" />
<mxPoint x="14.997831963993235" y="75.48549019607844" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-150" edge="1" parent="B37HkNnOgrgZiHbc5-xt-169" source="19" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0.689;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;" value="MOSI">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="50.37216803600677" y="137.14736694677867" as="sourcePoint" />
<mxPoint x="50" y="75.49000000000001" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-151" edge="1" parent="B37HkNnOgrgZiHbc5-xt-169" source="19" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0.749;exitY=-0.001;exitDx=0;exitDy=0;exitPerimeter=0;" value="MISO">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="85.37216803600677" y="137.14736694677867" as="sourcePoint" />
<mxPoint x="85" y="75.49000000000001" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-152" edge="1" parent="B37HkNnOgrgZiHbc5-xt-169" source="19" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0.807;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;" value="SCK">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="120.37216803600677" y="137.14736694677867" as="sourcePoint" />
<mxPoint x="120" y="75.49000000000001" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-170" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="16" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=0;startArrow=classic;startFill=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" target="B37HkNnOgrgZiHbc5-xt-166" value="DIR">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="150" y="57.09" as="sourcePoint" />
<mxPoint x="100" y="57.09" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-171" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="B37HkNnOgrgZiHbc5-xt-166" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0.5;exitY=1;exitDx=0;exitDy=0;endFill=0;startArrow=classic;startFill=1;entryX=0.53;entryY=0.001;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;entryPerimeter=0;" target="19" value="DIR">
<mxGeometry height="50" relative="1" width="50" x="-0.0243" as="geometry">
<mxPoint as="offset" />
<mxPoint x="135" y="216" as="sourcePoint" />
<mxPoint x="80" y="216.09000000000003" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-177" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-83" style="group" value="" vertex="1">
<mxGeometry height="75.49" width="80" x="112" y="274" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-182" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-177" style="group" value="" vertex="1">
<mxGeometry height="75.49" width="80" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-172" parent="B37HkNnOgrgZiHbc5-xt-182" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(237, 237, 237));&quot;&gt;数字隔离器&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;CA-IS3722HS&lt;/b&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="75.49" width="80" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-175" edge="1" parent="B37HkNnOgrgZiHbc5-xt-182" source="19" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=-0.003;exitY=0.367;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;exitPerimeter=0;" target="B37HkNnOgrgZiHbc5-xt-172" value="TX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="100" y="-12.99750000000006" as="sourcePoint" />
<mxPoint x="149.03999999999996" y="-12.902857142857215" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-176" edge="1" parent="B37HkNnOgrgZiHbc5-xt-182" source="19" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;endFill=0;startArrow=classic;startFill=1;entryX=1;entryY=0.75;entryDx=0;entryDy=0;exitX=-0.001;exitY=0.468;exitDx=0;exitDy=0;exitPerimeter=0;" target="B37HkNnOgrgZiHbc5-xt-172" value="RX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="155" y="57" as="sourcePoint" />
<mxPoint x="135" y="45" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-183" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-83" style="group" value="" vertex="1">
<mxGeometry height="75.49" width="80" x="112" y="366" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-184" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-183" style="group" value="" vertex="1">
<mxGeometry height="75.49" width="80" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-185" parent="B37HkNnOgrgZiHbc5-xt-184" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(237, 237, 237));&quot;&gt;数字隔离器&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;CA-IS3722HS&lt;/b&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="75.49" width="80" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-186" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="19" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0;exitY=0.616;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;exitPerimeter=0;" target="B37HkNnOgrgZiHbc5-xt-185" value="TX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="185" y="353.00249999999994" as="sourcePoint" />
<mxPoint x="234.03999999999996" y="353.0971428571428" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-187" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="19" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;endFill=0;startArrow=classic;startFill=1;entryX=1;entryY=0.75;entryDx=0;entryDy=0;exitX=0.002;exitY=0.717;exitDx=0;exitDy=0;exitPerimeter=0;" target="B37HkNnOgrgZiHbc5-xt-185" value="RX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="267" y="423" as="sourcePoint" />
<mxPoint x="247" y="411" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-188" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=-0.003;exitY=0.367;exitDx=0;exitDy=0;entryX=0.791;entryY=1.003;entryDx=0;entryDy=0;exitPerimeter=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;entryPerimeter=0;" target="18" value="TX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="112" y="291" as="sourcePoint" />
<mxPoint x="65" y="291" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-189" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="B37HkNnOgrgZiHbc5-xt-172" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;endFill=0;startArrow=classic;startFill=1;entryX=0.6;entryY=0.995;entryDx=0;entryDy=0;exitX=0;exitY=0.75;exitDx=0;exitDy=0;entryPerimeter=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;" target="18" value="RX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="93" y="349" as="sourcePoint" />
<mxPoint x="45" y="350" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-190" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="B37HkNnOgrgZiHbc5-xt-185" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0;exitY=0.25;exitDx=0;exitDy=0;entryX=0.384;entryY=1.004;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;entryPerimeter=0;" target="18" value="TX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="109" y="411" as="sourcePoint" />
<mxPoint x="25" y="615" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-191" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="B37HkNnOgrgZiHbc5-xt-185" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;endFill=0;startArrow=classic;startFill=1;entryX=0.191;entryY=0.993;entryDx=0;entryDy=0;exitX=0;exitY=0.75;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;entryPerimeter=0;" target="18" value="RX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="112" y="436" as="sourcePoint" />
<mxPoint x="45" y="602" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-160" parent="B37HkNnOgrgZiHbc5-xt-83" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(237, 237, 237));&quot;&gt;数字隔离器&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;CA-IS3722HS&lt;/b&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="75.49" width="80" x="255" y="21.240000000000002" as="geometry" />
</mxCell>
<mxCell id="16" parent="B37HkNnOgrgZiHbc5-xt-83" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;b&gt;TP8485E-SR&lt;/b&gt;&lt;br&gt;RS485 Transceiver" vertex="1">
<mxGeometry height="75.49" width="95" x="380" y="21.24" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-162" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="20" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0.399;exitY=0.004;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;" target="B37HkNnOgrgZiHbc5-xt-160" value="TX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="355.37216803600677" y="158.38736694677866" as="sourcePoint" />
<mxPoint x="355" y="96.72999999999999" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-163" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="19" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0.127;exitY=0.003;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;entryX=0.75;entryY=1;entryDx=0;entryDy=0;" target="B37HkNnOgrgZiHbc5-xt-160" value="RX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="415.37216803600677" y="157.89736694677865" as="sourcePoint" />
<mxPoint x="415" y="96.24" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-164" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="B37HkNnOgrgZiHbc5-xt-160" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;" target="16" value="TX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="305.37216803600677" y="112.89736694677866" as="sourcePoint" />
<mxPoint x="305" y="51.239999999999995" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-165" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="B37HkNnOgrgZiHbc5-xt-160" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=1;exitY=0.75;exitDx=0;exitDy=0;endFill=0;startArrow=classic;startFill=1;entryX=0;entryY=0.75;entryDx=0;entryDy=0;" target="16" value="RX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="300.37216803600677" y="127.89736694677866" as="sourcePoint" />
<mxPoint x="300" y="66.24" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-157" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;container=1;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" value="" vertex="1">
<mxGeometry height="960" width="85" x="5" y="-823" as="geometry" />
</mxCell>
<mxCell id="3" parent="B37HkNnOgrgZiHbc5-xt-157" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 21px;&quot;&gt;接口层&lt;/font&gt;" vertex="1">
<mxGeometry height="68.57142857142856" width="85" y="45.279999999999994" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-204" parent="B37HkNnOgrgZiHbc5-xt-157" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 21px;&quot;&gt;功能层&lt;/font&gt;" vertex="1">
<mxGeometry height="68.57142857142856" width="85" y="445.71428571428567" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-213" parent="B37HkNnOgrgZiHbc5-xt-157" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 21px;&quot;&gt;电源层&lt;/font&gt;" vertex="1">
<mxGeometry height="68.57142857142856" width="85" y="875" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-84" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;container=1;" value="" vertex="1">
<mxGeometry height="140" width="1070" x="90" y="-823" as="geometry" />
</mxCell>
<mxCell id="10" parent="B37HkNnOgrgZiHbc5-xt-84" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;b&gt;RS485&lt;/b&gt;&lt;br&gt;Interface" vertex="1">
<mxGeometry height="68.62745098039215" width="103.88349514563106" x="375.55553398058254" y="19.999803921568628" as="geometry" />
</mxCell>
<mxCell id="8" parent="B37HkNnOgrgZiHbc5-xt-84" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b&gt;带网络变压器的网口&lt;/b&gt;&lt;/div&gt;&lt;b&gt;HY911105AE&lt;/b&gt;" vertex="1">
<mxGeometry height="70" width="105" x="835" y="20" as="geometry" />
</mxCell>
<mxCell id="9" parent="B37HkNnOgrgZiHbc5-xt-84" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b&gt;带网络变压器的网口&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;HY911105AE&lt;/b&gt;" vertex="1">
<mxGeometry height="70" width="105" x="958" y="20" as="geometry" />
</mxCell>
<mxCell id="12" parent="B37HkNnOgrgZiHbc5-xt-84" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;b&gt;RS232-2&lt;/b&gt;&lt;br&gt;Interface" vertex="1">
<mxGeometry height="68.62745098039215" width="114.27184466019418" x="130.00446601941746" y="19.994901960784333" as="geometry" />
</mxCell>
<mxCell id="11" parent="B37HkNnOgrgZiHbc5-xt-84" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;b&gt;RS232-1&lt;/b&gt;&lt;br&gt;Interface" vertex="1">
<mxGeometry height="68.62745098039215" width="114.27184466019418" x="4.995922330097073" y="19.99627450980394" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-149" parent="B37HkNnOgrgZiHbc5-xt-84" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;b&gt;RJ45 网口&lt;/b&gt;" vertex="1">
<mxGeometry height="70" width="105" x="260" y="20" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-203" parent="B37HkNnOgrgZiHbc5-xt-84" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;b&gt;96个板级接口&lt;/b&gt;" vertex="1">
<mxGeometry height="68.63" width="315" x="500" y="20" as="geometry" />
</mxCell>
<mxCell id="43" edge="1" parent="1" source="16" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontFamily=Times New Roman;exitX=0.5;exitY=0;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;" target="10" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-155" edge="1" parent="1" source="8" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;endWidth=7.741935483870967;endSize=2.85;startSize=2.85;width=4.354838709677419;startArrow=classic;startFill=1;startWidth=7.181795448862215;" target="13" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="910" y="-669.4853921568626" as="sourcePoint" />
<mxPoint x="950" y="-669.49" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-156" edge="1" parent="1" source="9" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;endWidth=7.741935483870967;endSize=2.85;startSize=2.85;width=4.354838709677419;startArrow=classic;startFill=1;startWidth=7.181795448862215;" target="13" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="1080" y="-669.49" as="sourcePoint" />
<mxPoint x="1080" y="-609.49" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-196" edge="1" parent="1" source="18" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0.25;exitY=0;exitDx=0;exitDy=0;entryX=0.216;entryY=0.998;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;entryPerimeter=0;" target="11" value="TX1">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="288" y="-592" as="sourcePoint" />
<mxPoint x="260" y="-793" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-197" edge="1" parent="1" source="18" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;endFill=0;startArrow=classic;startFill=1;entryX=0.592;entryY=0.998;entryDx=0;entryDy=0;exitX=0.4;exitY=0.015;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;exitPerimeter=0;entryPerimeter=0;" target="11" value="RX1">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="227" y="-486" as="sourcePoint" />
<mxPoint x="180" y="-728" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-201" edge="1" parent="1" source="18" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;entryX=0.25;entryY=1;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;exitX=0.75;exitY=0;exitDx=0;exitDy=0;" target="B37HkNnOgrgZiHbc5-xt-149" value="TX2">
<mxGeometry height="50" relative="1" width="50" x="0.5481" as="geometry">
<mxPoint as="offset" />
<Array as="points">
<mxPoint x="170" y="-708" />
<mxPoint x="376" y="-708" />
</Array>
<mxPoint x="250" y="-708" as="sourcePoint" />
<mxPoint x="325" y="-709" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-198" edge="1" parent="1" source="18" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0.571;exitY=0;exitDx=0;exitDy=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;exitPerimeter=0;" target="12" value="TX2">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<Array as="points">
<mxPoint x="170" y="-668" />
<mxPoint x="170" y="-708" />
<mxPoint x="249" y="-708" />
</Array>
<mxPoint x="255" y="-622" as="sourcePoint" />
<mxPoint x="259" y="-688" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-202" edge="1" parent="1" source="18" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;endFill=0;startArrow=classic;startFill=1;entryX=0.75;entryY=1;entryDx=0;entryDy=0;exitX=0.846;exitY=-0.011;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;exitPerimeter=0;" target="B37HkNnOgrgZiHbc5-xt-149" value="RX2">
<mxGeometry height="50" relative="1" width="50" x="0.178" as="geometry">
<mxPoint as="offset" />
<Array as="points">
<mxPoint x="180" y="-693" />
<mxPoint x="429" y="-693" />
</Array>
<mxPoint x="285" y="-632" as="sourcePoint" />
<mxPoint x="411" y="-698" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-199" edge="1" parent="1" source="18" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;endFill=0;startArrow=classic;startFill=1;entryX=0.75;entryY=1;entryDx=0;entryDy=0;exitX=0.847;exitY=0;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;exitPerimeter=0;" target="12" value="RX2">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<Array as="points">
<mxPoint x="180" y="-693" />
<mxPoint x="306" y="-693" />
</Array>
<mxPoint x="250" y="-621" as="sourcePoint" />
<mxPoint x="267" y="-688" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-205" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="" vertex="1">
<mxGeometry height="120" width="1070" x="90" y="17" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-209" edge="1" parent="1" source="B37HkNnOgrgZiHbc5-xt-207" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="B37HkNnOgrgZiHbc5-xt-208" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-207" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b&gt;&lt;font style=&quot;font-size: 15px;&quot;&gt;数字 3.3V 供电2&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;&lt;b&gt;CJT1117B-3.3&lt;/b&gt;&lt;/span&gt;" vertex="1">
<mxGeometry height="70" width="130" x="708" y="52" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-211" edge="1" parent="1" source="B37HkNnOgrgZiHbc5-xt-208" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="B37HkNnOgrgZiHbc5-xt-210" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-208" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;span style=&quot;font-size: 15px;&quot;&gt;&lt;b&gt;隔离电源&lt;/b&gt;&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;&lt;b&gt;B0505S&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="70" width="100" x="420" y="52" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-210" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b&gt;&lt;font style=&quot;font-size: 15px;&quot;&gt;隔离 3.3V 供电&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="70" width="125" x="105" y="52" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-212" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b&gt;&lt;font style=&quot;font-size: 15px;&quot;&gt;数字 3.3V 供电1&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;&lt;b&gt;CJT1117B-3.3&lt;/b&gt;&lt;/span&gt;" vertex="1">
<mxGeometry height="70" width="130" x="1010" y="52" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,107 @@
<mxfile host="app.diagrams.net">
<diagram id="STM32-CH395-交换机拓扑" name="Page-1">
<mxGraphModel dx="1200" dy="800" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1200" pageHeight="800" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<!-- 左侧主控与接口芯片 -->
<mxCell id="stm32" value="STM32F4" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#333333;fontSize=14;fontWeight=bold;" vertex="1" parent="1">
<mxGeometry x="80" y="280" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="ch395" value="CH395I" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#333333;fontSize=14;fontWeight=bold;" vertex="1" parent="1">
<mxGeometry x="280" y="280" width="120" height="60" as="geometry"/>
</mxCell>
<!-- 交换机芯片 -->
<mxCell id="switch" value="交换机芯片" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e8f4f8;strokeColor=#333333;fontSize=14;fontWeight=bold;" vertex="1" parent="1">
<mxGeometry x="480" y="180" width="140" height="260" as="geometry"/>
</mxCell>
<!-- 上行口标注 -->
<mxCell id="uplinkLabel" value="上行口" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="420" y="280" width="50" height="20" as="geometry"/>
</mxCell>
<!-- 三个下行口网络变压器 -->
<mxCell id="transformer1" value="网络变压器1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#333333;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="700" y="180" width="120" height="40" as="geometry"/>
</mxCell>
<mxCell id="transformer2" value="网络变压器2" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#333333;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="700" y="290" width="120" height="40" as="geometry"/>
</mxCell>
<mxCell id="transformer3" value="网络变压器3" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#333333;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="700" y="400" width="120" height="40" as="geometry"/>
</mxCell>
<!-- 三个RJ45接口 -->
<mxCell id="rj45_1" value="RJ45-1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2e6;strokeColor=#333333;fontSize=12;fontWeight=bold;" vertex="1" parent="1">
<mxGeometry x="900" y="180" width="100" height="40" as="geometry"/>
</mxCell>
<mxCell id="rj45_2" value="RJ45-2" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2e6;strokeColor=#333333;fontSize=12;fontWeight=bold;" vertex="1" parent="1">
<mxGeometry x="900" y="290" width="100" height="40" as="geometry"/>
</mxCell>
<mxCell id="rj45_3" value="RJ45-3" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2e6;strokeColor=#333333;fontSize=12;fontWeight=bold;" vertex="1" parent="1">
<mxGeometry x="900" y="400" width="100" height="40" as="geometry"/>
</mxCell>
<!-- 功能注释 -->
<mxCell id="note1" value="(主站通信)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="1010" y="180" width="120" height="40" as="geometry"/>
</mxCell>
<mxCell id="note2" value="(本地调试/级联)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="1010" y="290" width="120" height="40" as="geometry"/>
</mxCell>
<mxCell id="note3" value="(备用/扩展)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="1010" y="400" width="120" height="40" as="geometry"/>
</mxCell>
<!-- 连线与接口标注 -->
<mxCell id="conn1" value="SPI/并口" style="endArrow=block;startArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;labelPosition=top;verticalAlign=top;fontSize=12;" edge="1" parent="1" source="stm32" target="ch395">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="conn2" value="RMII/MII" style="endArrow=block;startArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;labelPosition=top;verticalAlign=top;fontSize=12;" edge="1" parent="1" source="ch395" target="switch">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="conn3" value="下行口1" style="endArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;labelPosition=top;verticalAlign=top;fontSize=12;" edge="1" parent="1" source="switch" target="transformer1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="620" y="200" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="conn4" style="endArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="transformer1" target="rj45_1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="conn5" value="下行口2" style="endArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;labelPosition=top;verticalAlign=top;fontSize=12;" edge="1" parent="1" source="switch" target="transformer2">
<mxGeometry relative="1" as="geometry">
<mxPoint x="620" y="310" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="conn6" style="endArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="transformer2" target="rj45_2">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="conn7" value="下行口3" style="endArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;labelPosition=top;verticalAlign=top;fontSize=12;" edge="1" parent="1" source="switch" target="transformer3">
<mxGeometry relative="1" as="geometry">
<mxPoint x="620" y="420" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="conn8" style="endArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="transformer3" target="rj45_3">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2026-05-10T00:00:00.000Z"
agent="AI-Drawio-Replicator" version="24.0.0" type="device">
<diagram id="page-1" name="传感器OPS架构">
<mxGraphModel dx="1200" dy="800" grid="1" gridSize="10"
guides="1" tooltips="1" connect="1" arrows="1"
fold="1" page="1" pageScale="1"
pageWidth="1169" pageHeight="827"
background="#ffffff">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<!-- 调用者/上层 -->
<mxCell id="2" value="&lt;div style=&quot;display:flex;align-items:center;justify-content:center;gap:20px;font-size:24px;font-weight:bold;&quot;&gt;&lt;div style=&quot;font-size:48px;color:#2b579a;&quot;&gt;👤&lt;/div&gt;&lt;div&gt;调用者 / 上层&lt;br&gt;&lt;span style=&quot;font-size:18px;font-weight:normal;&quot;&gt;(只认识 sensor_ops&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f7ff;strokeColor=#2b579a;strokeWidth=2;fontSize=14;" vertex="1" parent="1">
<mxGeometry x="220" y="50" width="620" height="120" as="geometry"/>
</mxCell>
<!-- OPS句柄 -->
<mxCell id="3" value="&lt;div style=&quot;display:flex;align-items:center;justify-content:center;gap:20px;font-size:28px;font-weight:bold;&quot;&gt;&lt;div style=&quot;font-size:48px;color:#2385bb;&quot;&gt;🏷️&lt;/div&gt;&lt;div&gt;ops 句柄&lt;br&gt;&lt;span style=&quot;font-size:22px;font-weight:normal;font-family:monospace;&quot;&gt;{ init, read, close }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f9f9;strokeColor=#2385bb;strokeWidth=3;fontSize=14;" vertex="1" parent="1">
<mxGeometry x="270" y="300" width="520" height="120" as="geometry"/>
</mxCell>
<!-- 温度传感器 -->
<mxCell id="4" value="&lt;div style=&quot;display:flex;align-items:center;justify-content:center;gap:15px;font-size:22px;font-weight:bold;&quot;&gt;&lt;div style=&quot;font-size:48px;color:#2b579a;&quot;&gt;🌡️&lt;/div&gt;&lt;div&gt;温度传感器&lt;br&gt;&lt;span style=&quot;font-size:18px;font-weight:normal;font-family:monospace;&quot;&gt;temp_read()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f7ff;strokeColor=#2b579a;strokeWidth=2;fontSize=14;" vertex="1" parent="1">
<mxGeometry x="100" y="580" width="350" height="100" as="geometry"/>
</mxCell>
<!-- 加速度传感器 -->
<mxCell id="5" value="&lt;div style=&quot;display:flex;align-items:center;justify-content:center;gap:15px;font-size:22px;font-weight:bold;&quot;&gt;&lt;div style=&quot;font-size:48px;color:#2b579a;&quot;&gt;🔲&lt;/div&gt;&lt;div&gt;加速度传感器&lt;br&gt;&lt;span style=&quot;font-size:18px;font-weight:normal;font-family:monospace;&quot;&gt;accel_read()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f7ff;strokeColor=#2b579a;strokeWidth=2;fontSize=14;" vertex="1" parent="1">
<mxGeometry x="610" y="580" width="350" height="100" as="geometry"/>
</mxCell>
<!-- 接口边界标注 -->
<mxCell id="6" value="&lt;div style=&quot;font-size:20px;color:#2b579a;font-weight:bold;&quot;&gt;接口边界&lt;/div&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="880" y="350" width="120" height="30" as="geometry"/>
</mxCell>
<!-- 虚线箭头 -->
<mxCell id="7" value="" style="endArrow=block;html=1;strokeColor=#2b579a;strokeWidth=2;dashed=1;dashPattern=4 4;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="790" y="360" as="sourcePoint"/>
<mxPoint x="870" y="360" as="targetPoint"/>
</mxGeometry>
</mxCell>
<!-- 连线1上层到OPS句柄 -->
<mxCell id="8" value="&lt;div style=&quot;font-size:20px;font-family:monospace;&quot;&gt;ops-&gt;read(ctx, &amp;v)&lt;/div&gt;" style="endArrow=classic;html=1;strokeColor=#1a365d;strokeWidth=3;labelPosition=top;verticalAlign=bottom;labelBackgroundColor=#ffffff;" edge="1" parent="1" source="2" target="3">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="530" y="170" as="sourcePoint"/>
<mxPoint x="530" y="300" as="targetPoint"/>
</mxGeometry>
</mxCell>
<!-- 连线2OPS句柄到分支点 -->
<mxCell id="9" value="" style="html=1;strokeColor=#1a365d;strokeWidth=3;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="530" y="420" as="sourcePoint"/>
<mxPoint x="530" y="500" as="targetPoint"/>
</mxGeometry>
</mxCell>
<!-- 分支点 -->
<mxCell id="10" value="" style="ellipse;whiteSpace=wrap;html=1;fillColor=#1a365d;strokeColor=#1a365d;strokeWidth=2;" vertex="1" parent="1">
<mxGeometry x="520" y="495" width="20" height="20" as="geometry"/>
</mxCell>
<!-- 连线3分支点到温度传感器 -->
<mxCell id="11" value="" style="endArrow=classic;html=1;strokeColor=#1a365d;strokeWidth=3;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="530" y="505" as="sourcePoint"/>
<mxPoint x="275" y="505" as="targetPoint"/>
<mxPoint x="275" y="580" as="targetPoint"/>
</mxGeometry>
</mxCell>
<!-- 连线4分支点到加速度传感器 -->
<mxCell id="12" value="" style="endArrow=classic;html=1;strokeColor=#1a365d;strokeWidth=3;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="530" y="505" as="sourcePoint"/>
<mxPoint x="785" y="505" as="targetPoint"/>
<mxPoint x="785" y="580" as="targetPoint"/>
</mxGeometry>
</mxCell>
<!-- 连线标注:函数指针实际指向 -->
<mxCell id="13" value="&lt;div style=&quot;font-size:18px;&quot;&gt;函数指针实际指向&lt;/div&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;labelBackgroundColor=#ffffff;" vertex="1" parent="1">
<mxGeometry x="580" y="460" width="200" height="30" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,424 @@
# Draw.io 波形图生成智能体 Skill
## 角色定义
你是一个专业的数字时序波形图生成专家,专注于使用 draw.io (diagrams.net) XML 格式生成高质量、逻辑正确的时序图。你的核心能力是将文本描述或 ASCII 时序图转换为精确的 draw.io `.drawio` 文件。
## 核心能力
- 深入理解 SPI、I2C、UART、QSPI 等常见数字通信协议的时序规范
- 精通 draw.io XML 格式中 `edge` 元素的折线绘制机制
- 能够根据协议规范CPOL/CPHA、采样边沿、建立/保持时间)生成逻辑正确的波形
- 确保所有波形线均为水平/垂直直线,无斜线或曲线
---
## 执行流程(严格按顺序执行)
### Step 1: 需求解析与协议确认
1. **识别信号线**:从用户输入中提取所有信号名称(如 CS、SCLK、MOSI、MISO、IO0、IO1 等)
2. **确认协议规范**
- SPI 模式CPOL (0/1)、CPHA (0/1)
- 采样边沿:上升沿 or 下降沿
- 输出边沿:与采样边沿相反
- 数据位序MSB first or LSB first
3. **提取数据内容**:命令码、地址、数据字节等,转换为 bit 序列
4. **确定阶段划分**:命令阶段 → 地址阶段 → 数据阶段(如有)
### Step 2: 坐标系与参数设计
1. **画布尺寸**:根据周期数计算宽度,公式 `width = start_x + n_cycles * cycle_w + margin`
2. **Y 坐标定义**(每个信号固定):
```
信号1 (CS): high=80, low=110
信号2 (SCLK): high=180, low=210
信号3 (DATA1): high=280, low=310
信号4 (DATA2): high=380, low=410
...以此类推,垂直间距 100px
```
3. **X 坐标定义**
- `start_x = 100`(信号起始位置)
- `cycle_w = 50 or 100`(单个时钟周期宽度)
- `rise_edges = [start_x + i*cycle_w + cycle_w//2 for i in range(n)]`
- `fall_edges = [start_x + (i+1)*cycle_w for i in range(n)]`
4. **关键规则**
- 数据跳变必须发生在 **输出边沿**(如下降沿)
- 数据稳定必须覆盖 **采样边沿**(如上升沿)
- 高电平占空比建议 40%,低电平 60%,确保建立时间
### Step 3: 生成 XML 结构
按以下顺序构建 `<mxfile>` 内容:
1. **文件头**`<?xml version="1.0" encoding="UTF-8"?>` + `<mxfile>` + `<mxGraphModel>`
- 必须设置正确的 `pageWidth` 和 `pageHeight`
- `dx` 和 `dy` 设为与画布尺寸匹配
2. **背景网格**`<mxCell id="grid">`(可选,用于视觉参考)
3. **标题**`<mxCell id="title">`,包含协议名称和模式信息
4. **MSB/LSB 标记**:在波形起始和结束位置添加文本标签
5. **信号标签**:左侧纵向排列,每个信号一个文本标签
6. **阶段分界虚线**(可选):用 `dashed=1` 的垂直线划分命令/地址/数据阶段
7. **波形生成**(核心步骤,见 Step 4
8. **数据位标签**:在每个 bit 周期的中点位置添加数值标签
9. **阶段名称标注**:在波形上方或下方添加阶段说明文本
10. **文件尾**:关闭所有标签 `</root></mxGraphModel></diagram></mxfile>`
### Step 4: 波形 Edge 生成规范(最关键)
#### 4.1 Edge 元素基本结构
```xml
<mxCell id="{signal_name}" value=""
style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#{color};rounded=0;endArrow=none;"
edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="{src_x}" y="{src_y}" as="sourcePoint"/>
<mxPoint x="{tgt_x}" y="{tgt_y}" as="targetPoint"/>
<Array as="points">
<mxPoint x="{x1}" y="{y1}"/>
<mxPoint x="{x2}" y="{y2}"/>
...
</Array>
</mxGeometry>
</mxCell>
```
#### 4.2 防斜线铁律(必须遵守)
- **sourcePoint.y 必须等于第一个中间点的 y**
- **targetPoint.y 必须等于最后一个中间点的 y**
- **相邻两点的 x 或 y 必须至少有一个相等**(确保水平或垂直线)
- **禁止**出现 (x1≠x2 且 y1≠y2) 的相邻点
#### 4.3 各类信号绘制方法
**A. CS片选信号**
```
起点(80, high) → (90, high) → (90, low) → (end_x, low) → (end_x, high) → (end_x+10, high)
```
- 起始和结束各有 10px 的过渡段
**B. SCLK时钟信号**
```
起点(80, low) → (start_x, low) →
for each cycle:
(rise_edge, low) → (rise_edge, high) → (fall_edge, high) → (fall_edge, low) →
(tail_x, low)
```
**C. 数据信号MOSI/MISO/IOx**
```
# 确定第一位数据的电平
start_y = y_high if bits[0] else y_low
pts = [(80, start_y), (start_x, start_y)]
for i in range(len(bits)):
y_curr = y_high if bits[i] else y_low
end_x = fall_edges[i] if i < len(fall_edges) else last_fall
# 添加当前 bit 的水平线段终点
pts.append((end_x, y_curr))
# 如果下一位值不同,在下降沿处跳变
if i + 1 < len(bits):
y_next = y_high if bits[i+1] else y_low
if y_next != y_curr:
pts.append((end_x, y_next))
pts.append((tail_x, pts[-1][1]))
```
**D. 空闲/高阻信号**
- 全程保持低电平或高电平,无跳变
- 或使用 sourcePoint=targetPoint 同 y 的水平线
### Step 5: 标签与标注生成
1. **Bit 标签**`x = rise_edges[i] - 10``y = signal_high - 25`
2. **阶段标签**`x = stage_center_x - 60`,使用不同颜色区分阶段
3. **十六进制标注**:在波形下方或上方添加数据包整体值
### Step 6: 验证与输出
1. **逻辑验证**
- [ ] 数据跳变位置 = 输出边沿(下降沿 for CPHA=0
- [ ] 采样时刻 = 采样边沿(上升沿 for CPHA=0
- [ ] 数据在采样边沿前后保持稳定(建立/保持时间)
- [ ] MSB/LSB 方向正确
2. **几何验证**
- [ ] 所有 edge 的 sourcePoint.y == 第一个中间点.y
- [ ] 所有 edge 的 targetPoint.y == 最后一个中间点.y
- [ ] 无斜线(相邻点 x 或 y 至少一个相等)
3. **输出**:将完整 XML 保存为 `.drawio` 文件,提供下载链接
---
## 常见协议模板
### SPI 模式 0 (CPOL=0, CPHA=0)
- SCLK 空闲低电平
- 下降沿输出数据,上升沿采样数据
- 高电平占空比 40%,低电平 60%
### SPI 模式 3 (CPOL=1, CPHA=1)
- SCLK 空闲高电平
- 上升沿输出数据,下降沿采样数据
- 低电平占空比 40%,高电平 60%
### QSPI Fast Read Dual Output (0x3B)
- 命令阶段IO0 单线8 周期
- 地址阶段IO0 单线24 周期
- 数据阶段IO0+IO1 双线,每周期输出 2 bit
---
## 输出格式要求
1. 必须提供可下载的 `.drawio` 文件
2. 必须说明时序逻辑的关键设计点
3. 必须列出信号定义和阶段划分
4. 如有修复,必须说明修复原因(如斜线问题、边沿对齐问题)
---
## 错误处理
- 若用户提供的数据与协议规范冲突,优先遵循协议规范并提示用户
- 若 bit 序列长度与时钟周期数不匹配,自动调整或提示用户补充
- 若画布宽度超出默认范围,自动扩展 pageWidth
## 参考代码
```python
import xml.etree.ElementTree as ET
def make_qspi_mxfile():
# ========== 基础参数 ==========
y_cs_high, y_cs_low = 80, 110
y_sclk_high, y_sclk_low = 180, 210
y_io0_high, y_io0_low = 280, 310
y_io1_high, y_io1_low = 380, 410
# 时序参数50px/周期36个周期8命令+24地址+4数据
cycle_w = 50
start_x = 100
n_cycles = 36 # 8 + 24 + 4
end_x = start_x + n_cycles * cycle_w # 1900
tail_x = end_x + 50 # 1950
rise_edges = [start_x + i*cycle_w + cycle_w//2 for i in range(n_cycles)] # 125,175...
fall_edges = [start_x + (i+1)*cycle_w for i in range(n_cycles)] # 150,200...1900
# 数据定义
cmd_bits = [0,0,1,1,1,0,1,1] # 0x3B MSB first
addr_bytes = [
[0,0,0,1,0,0,1,0], # 0x12 A23-A16
[0,0,1,1,0,1,0,0], # 0x34 A15-A8
[0,1,0,1,0,1,1,0], # 0x56 A7-A0
]
addr_bits = [b for byte in addr_bytes for b in byte]
data_io0 = [0,0,0,0] # D0,D2,D4,D6 (示例 0xAA)
data_io1 = [1,1,1,1] # D1,D3,D5,D7
all_io0 = cmd_bits + addr_bits + data_io0
all_io1 = [0]*32 + data_io1 # 命令地址期间 IO1 idle/low
lines = []
lines.append('<?xml version="1.0" encoding="UTF-8"?>')
lines.append('<mxfile host="app.diagrams.net" modified="2024-05-25T00:00:00.000Z" agent="AI" version="21.0.0" type="device">')
lines.append(' <diagram name="QSPI Waveform" id="qspi_waveform">')
lines.append(' <mxGraphModel dx="2000" dy="600" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2000" pageHeight="600" math="0" shadow="0">')
lines.append(' <root>')
lines.append(' <mxCell id="0"/>')
lines.append(' <mxCell id="1" parent="0"/>')
# 背景
lines.append(' <mxCell id="grid" value="" style="points=[];gridColor=#e0e0e0;gridSize=20;spacingTop=20;spacingLeft=20;spacingBottom=20;spacingRight=20;html=1;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="0" y="0" width="2100" height="600" as="geometry"/>')
lines.append(' </mxCell>')
# 标题
lines.append(' <mxCell id="title" value="QSPI Fast Read Dual Output (命令 0x3B)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1;" vertex="1" parent="1">')
lines.append(' <mxGeometry x="600" y="20" width="500" height="30" as="geometry"/>')
lines.append(' </mxCell>')
# MSB / LSB
lines.append(' <mxCell id="msb" value="MSB" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{start_x+10}" y="60" width="40" height="20" as="geometry"/>')
lines.append(' </mxCell>')
lines.append(' <mxCell id="lsb" value="LSB" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{end_x-40}" y="60" width="40" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# 信号标签
for label, y, eid in [("CS", 85, "label_cs"), ("SCLK", 185, "label_sclk"),
("IO0", 275, "label_io0"), ("IO1", 375, "label_io1")]:
lines.append(f' <mxCell id="{eid}" value="{label}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="20" y="{y}" width="50" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# 阶段分界虚线
boundaries = [
(start_x + 8*cycle_w, "cmd_addr"), # 500
(start_x + 16*cycle_w, "addr_mid1"), # 900
(start_x + 24*cycle_w, "addr_mid2"), # 1300
(start_x + 32*cycle_w, "addr_data"), # 1700
]
for x, eid in boundaries:
lines.append(f' <mxCell id="vl_{eid}" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">')
lines.append(' <mxGeometry width="50" height="50" relative="1" as="geometry">')
lines.append(f' <mxPoint x="{x}" y="180" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{x}" y="420" as="targetPoint"/>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# ========== CS 波形 ==========
cs_pts = [(80, y_cs_high), (90, y_cs_high), (90, y_cs_low), (tail_x, y_cs_low), (tail_x, y_cs_high), (tail_x+10, y_cs_high)]
lines.append(' <mxCell id="cs" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#FF5722;rounded=0;endArrow=none;" edge="1" parent="1">')
lines.append(' <mxGeometry relative="0" as="geometry">')
lines.append(f' <mxPoint x="{cs_pts[0][0]}" y="{cs_pts[0][1]}" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{cs_pts[-1][0]}" y="{cs_pts[-1][1]}" as="targetPoint"/>')
lines.append(' <Array as="points">')
for x, y in cs_pts[1:-1]:
lines.append(f' <mxPoint x="{x}" y="{y}"/>')
lines.append(' </Array>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# ========== SCLK 波形 ==========
sclk_pts = [(80, y_sclk_low), (start_x, y_sclk_low)]
for i in range(n_cycles):
rise = rise_edges[i]
fall = fall_edges[i]
sclk_pts.extend([
(rise, y_sclk_low),
(rise, y_sclk_high),
(fall, y_sclk_high),
(fall, y_sclk_low),
])
sclk_pts.append((tail_x, y_sclk_low))
lines.append(' <mxCell id="sclk" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#2196F3;rounded=0;endArrow=none;" edge="1" parent="1">')
lines.append(' <mxGeometry relative="0" as="geometry">')
lines.append(f' <mxPoint x="{sclk_pts[0][0]}" y="{sclk_pts[0][1]}" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{sclk_pts[-1][0]}" y="{sclk_pts[-1][1]}" as="targetPoint"/>')
lines.append(' <Array as="points">')
for x, y in sclk_pts[1:-1]:
lines.append(f' <mxPoint x="{x}" y="{y}"/>')
lines.append(' </Array>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# ========== IO0 波形 ==========
def build_wave_pts(bits, y_hi, y_lo, idle_y):
y0 = y_hi if bits[0] else y_lo
pts = [(80, y0), (start_x, y0)]
for i in range(len(bits)-1):
end_x = fall_edges[i]
y_curr = y_hi if bits[i] else y_lo
y_next = y_hi if bits[i+1] else y_lo
pts.append((end_x, y_curr))
if y_next != y_curr:
pts.append((end_x, y_next))
pts.append((end_x := fall_edges[len(bits)-1], y_hi if bits[-1] else y_lo))
pts.append((tail_x, pts[-1][1]))
return pts
io0_pts = build_wave_pts(all_io0, y_io0_high, y_io0_low, y_io0_low)
lines.append(' <mxCell id="io0" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#4CAF50;rounded=0;endArrow=none;" edge="1" parent="1">')
lines.append(' <mxGeometry relative="0" as="geometry">')
lines.append(f' <mxPoint x="{io0_pts[0][0]}" y="{io0_pts[0][1]}" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{io0_pts[-1][0]}" y="{io0_pts[-1][1]}" as="targetPoint"/>')
lines.append(' <Array as="points">')
for x, y in io0_pts[1:-1]:
lines.append(f' <mxPoint x="{x}" y="{y}"/>')
lines.append(' </Array>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# ========== IO1 波形 ==========
io1_pts = build_wave_pts(all_io1, y_io1_high, y_io1_low, y_io1_low)
lines.append(' <mxCell id="io1" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#9C27B0;rounded=0;endArrow=none;" edge="1" parent="1">')
lines.append(' <mxGeometry relative="0" as="geometry">')
lines.append(f' <mxPoint x="{io1_pts[0][0]}" y="{io1_pts[0][1]}" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{io1_pts[-1][0]}" y="{io1_pts[-1][1]}" as="targetPoint"/>')
lines.append(' <Array as="points">')
for x, y in io1_pts[1:-1]:
lines.append(f' <mxPoint x="{x}" y="{y}"/>')
lines.append(' </Array>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# ========== 命令 bit 标签IO0 上方) ==========
cmd_labels = ["0","0","1","1","1","0","1","1"]
for i, val in enumerate(cmd_labels):
cx = rise_edges[i]
lines.append(f' <mxCell id="cmd{i}" value="{val}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{cx-10}" y="255" width="20" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# ========== 阶段名称标签 ==========
stage_labels = [
(start_x + 4*cycle_w, "命令 (0x3B)", "#4CAF50"),
(start_x + 12*cycle_w, "地址 [23:16]", "#666666"),
(start_x + 20*cycle_w, "地址 [15:8]", "#666666"),
(start_x + 28*cycle_w, "地址 [7:0]", "#666666"),
(start_x + 34*cycle_w, "数据 (Dual)", "#2196F3"),
]
for x, txt, color in stage_labels:
lines.append(f' <mxCell id="stage_{txt[:4]}" value="{txt}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor={color};" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{x-60}" y="235" width="120" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# ========== 数据阶段 bit 标签 ==========
data_labels_io0 = ["D0","D2","D4","D6"]
data_labels_io1 = ["D1","D3","D5","D7"]
for i in range(4):
cx = rise_edges[32 + i]
# IO0
lines.append(f' <mxCell id="d0_{i}" value="{data_labels_io0[i]}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{cx-10}" y="255" width="20" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# IO1
lines.append(f' <mxCell id="d1_{i}" value="{data_labels_io1[i]}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#9C27B0;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{cx-10}" y="355" width="20" height="20" as="geometry"/>')
lines.append(' </mxCell>')
lines.append(' </root>')
lines.append(' </mxGraphModel>')
lines.append(' </diagram>')
lines.append('</mxfile>')
return "\n".join(lines)
xml_content = make_qspi_mxfile()
output_path = "SPI_Waveform_QSPI.drawio"
with open(output_path, "w", encoding="utf-8") as f:
f.write(xml_content)
print("文件已生成:", output_path)
```

View File

@@ -0,0 +1,151 @@
<mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/29.6.6 Chrome/144.0.7559.236 Electron/40.8.4 Safari/537.36" version="29.6.6">
<diagram id="ntp-packet-diagram" name="NTP v4 Packet Format">
<mxGraphModel dx="1064" dy="1030" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1400" pageHeight="800" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="title" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=20;fontStyle=1" value="NTP v4 / SNTP v4 报文格式 (标准 48 字节)" vertex="1">
<mxGeometry height="40" width="600" x="175" y="60" as="geometry" />
</mxCell>
<mxCell id="header-bit-title" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1" value="报文头部 (Word 0 - 第 0 至 31 位)" vertex="1">
<mxGeometry height="30" width="300" x="100" y="100" as="geometry" />
</mxCell>
<mxCell id="ruler-0" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=top;fontSize=10" value="0" vertex="1">
<mxGeometry height="20" width="25" x="100" y="130" as="geometry" />
</mxCell>
<mxCell id="ruler-1" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=top;fontSize=10" value="1" vertex="1">
<mxGeometry height="20" width="25" x="125" y="130" as="geometry" />
</mxCell>
<mxCell id="ruler-2" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=top;fontSize=10" value="2" vertex="1">
<mxGeometry height="20" width="25" x="150" y="130" as="geometry" />
</mxCell>
<mxCell id="ruler-3" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=top;fontSize=10" value="3" vertex="1">
<mxGeometry height="20" width="25" x="175" y="130" as="geometry" />
</mxCell>
<mxCell id="ruler-4" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=top;fontSize=10" value="4" vertex="1">
<mxGeometry height="20" width="25" x="200" y="130" as="geometry" />
</mxCell>
<mxCell id="ruler-5" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=top;fontSize=10" value="5" vertex="1">
<mxGeometry height="20" width="25" x="225" y="130" as="geometry" />
</mxCell>
<mxCell id="ruler-6" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=top;fontSize=10" value="6" vertex="1">
<mxGeometry height="20" width="25" x="250" y="130" as="geometry" />
</mxCell>
<mxCell id="ruler-7" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=top;fontSize=10" value="7" vertex="1">
<mxGeometry height="20" width="25" x="275" y="130" as="geometry" />
</mxCell>
<mxCell id="ruler-8" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=top;fontSize=10" value="8" vertex="1">
<mxGeometry height="20" width="25" x="300" y="130" as="geometry" />
</mxCell>
<mxCell id="ruler-15" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=top;fontSize=10" value="15" vertex="1">
<mxGeometry height="20" width="50" x="460" y="130" as="geometry" />
</mxCell>
<mxCell id="ruler-16" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=top;fontSize=10" value="16" vertex="1">
<mxGeometry height="20" width="50" x="490" y="130" as="geometry" />
</mxCell>
<mxCell id="ruler-23" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=top;fontSize=10" value="23" vertex="1">
<mxGeometry height="20" width="50" x="660" y="130" as="geometry" />
</mxCell>
<mxCell id="ruler-24" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=top;fontSize=10" value="24" vertex="1">
<mxGeometry height="20" width="50" x="690" y="130" as="geometry" />
</mxCell>
<mxCell id="ruler-31" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=top;fontSize=10" value="31" vertex="1">
<mxGeometry height="20" width="50" x="870" y="130" as="geometry" />
</mxCell>
<mxCell id="li-box" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#000000;align=center;verticalAlign=middle;fontStyle=1" value="LI" vertex="1">
<mxGeometry height="40" width="50" x="100" y="150" as="geometry" />
</mxCell>
<mxCell id="vn-box" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#000000;align=center;verticalAlign=middle;fontStyle=1" value="VN" vertex="1">
<mxGeometry height="40" width="75" x="150" y="150" as="geometry" />
</mxCell>
<mxCell id="mode-box" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#000000;align=center;verticalAlign=middle;fontStyle=1" value="Mode" vertex="1">
<mxGeometry height="40" width="75" x="225" y="150" as="geometry" />
</mxCell>
<mxCell id="stratum-box" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#000000;align=center;verticalAlign=middle;fontStyle=1" value="Stratum&amp;nbsp;&lt;span style=&quot;font-size: 11px; font-weight: 400;&quot;&gt;8bit (1 字节)&lt;/span&gt;" vertex="1">
<mxGeometry height="40" width="200" x="300" y="150" as="geometry" />
</mxCell>
<mxCell id="poll-box" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#000000;align=center;verticalAlign=middle;fontStyle=1" value="Poll&amp;nbsp;&lt;span style=&quot;font-size: 11px; font-weight: 400;&quot;&gt;8bit (1 字节)&lt;/span&gt;" vertex="1">
<mxGeometry height="40" width="200" x="500" y="150" as="geometry" />
</mxCell>
<mxCell id="precision-box" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#000000;align=center;verticalAlign=middle;fontStyle=1" value="Precision&amp;nbsp;&lt;span style=&quot;font-size: 11px; font-weight: 400;&quot;&gt;8bit (1 字节)&lt;/span&gt;" vertex="1">
<mxGeometry height="40" width="200" x="700" y="150" as="geometry" />
</mxCell>
<mxCell id="timestamps-title" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1" value="时间戳与其他字段 (Words 1-11)" vertex="1">
<mxGeometry height="30" width="400" x="100" y="201" as="geometry" />
</mxCell>
<mxCell id="root-delay-box" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#000000;align=center;verticalAlign=middle" value="Root Delay &lt;span style=&quot;font-size: 11px;&quot;&gt;32bit (4 字节)&lt;/span&gt;" vertex="1">
<mxGeometry height="30" width="400" x="100" y="231" as="geometry" />
</mxCell>
<mxCell id="root-disp-box" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#000000;align=center;verticalAlign=middle" value="Root Dispersion&amp;nbsp;&lt;span style=&quot;font-size: 11px;&quot;&gt;32bit (4 字节)&lt;/span&gt;" vertex="1">
<mxGeometry height="30" width="400" x="100" y="271" as="geometry" />
</mxCell>
<mxCell id="ref-id-box" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#000000;align=center;verticalAlign=middle" value="Reference Identifier&amp;nbsp;&lt;span style=&quot;font-size: 11px;&quot;&gt;32bit (4 字节)&lt;/span&gt;" vertex="1">
<mxGeometry height="30" width="400" x="100" y="311" as="geometry" />
</mxCell>
<mxCell id="ref-ts-box" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#000000;align=center;verticalAlign=middle" value="Reference Timestamp&amp;nbsp;&lt;span style=&quot;font-size: 11px;&quot;&gt;64bit (8 字节)&lt;/span&gt;" vertex="1">
<mxGeometry height="30" width="800" x="100" y="361" as="geometry" />
</mxCell>
<mxCell id="orig-ts-box" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#000000;align=center;verticalAlign=middle" value="Originate Timestamp (T1)&amp;nbsp;&lt;span style=&quot;font-size: 11px;&quot;&gt;64bit (8 字节)&lt;/span&gt;" vertex="1">
<mxGeometry height="30" width="800" x="100" y="401" as="geometry" />
</mxCell>
<mxCell id="rx-ts-box" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#000000;align=center;verticalAlign=middle" value="Receive Timestamp (T2)&amp;nbsp;&lt;span style=&quot;font-size: 11px;&quot;&gt;64bit (8 字节)&lt;/span&gt;" vertex="1">
<mxGeometry height="30" width="800" x="100" y="441" as="geometry" />
</mxCell>
<mxCell id="tx-ts-box" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#000000;align=center;verticalAlign=middle" value="Transmit Timestamp (T3)&amp;nbsp;&lt;span style=&quot;font-size: 11px;&quot;&gt;64bit (8 字节)&lt;/span&gt;" vertex="1">
<mxGeometry height="30" width="800" x="100" y="481" as="geometry" />
</mxCell>
<mxCell id="table-title" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1" value="核心字段定义表" vertex="1">
<mxGeometry height="30" width="200" x="100" y="523" as="geometry" />
</mxCell>
<mxCell id="table-bg" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#666666;" value="" vertex="1">
<mxGeometry height="130" width="800" x="100" y="563" as="geometry" />
</mxCell>
<mxCell id="th1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#6c8ebf;strokeColor=#ffffff;fontColor=#ffffff;align=center;verticalAlign=middle;fontStyle=1" value="字段名称" vertex="1">
<mxGeometry height="30" width="180" x="100" y="563" as="geometry" />
</mxCell>
<mxCell id="th2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#6c8ebf;strokeColor=#ffffff;fontColor=#ffffff;align=center;verticalAlign=middle;fontStyle=1" value="长度" vertex="1">
<mxGeometry height="30" width="100" x="280" y="563" as="geometry" />
</mxCell>
<mxCell id="th3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#6c8ebf;strokeColor=#ffffff;fontColor=#ffffff;align=center;verticalAlign=middle;fontStyle=1" value="核心含义" vertex="1">
<mxGeometry height="30" width="520" x="380" y="563" as="geometry" />
</mxCell>
<mxCell id="d1-1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#cccccc;align=left;verticalAlign=middle" value="LI&amp;nbsp;" vertex="1">
<mxGeometry height="25" width="180" x="100" y="593" as="geometry" />
</mxCell>
<mxCell id="d1-2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#cccccc;align=center;verticalAlign=middle" value="2 bit" vertex="1">
<mxGeometry height="25" width="100" x="280" y="593" as="geometry" />
</mxCell>
<mxCell id="d1-3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#cccccc;align=left;verticalAlign=middle" value="闰秒警告(&lt;span style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));&quot;&gt;00 = 无警告11 = 时钟未同步告警&lt;/span&gt;)" vertex="1">
<mxGeometry height="25" width="520" x="380" y="593" as="geometry" />
</mxCell>
<mxCell id="d2-1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cccccc;align=left;verticalAlign=middle" value="VN" vertex="1">
<mxGeometry height="25" width="180" x="100" y="618" as="geometry" />
</mxCell>
<mxCell id="d2-2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cccccc;align=center;verticalAlign=middle" value="3 bit" vertex="1">
<mxGeometry height="25" width="100" x="280" y="618" as="geometry" />
</mxCell>
<mxCell id="d2-3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cccccc;align=left;verticalAlign=middle" value="版本号(&lt;span style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));&quot;&gt;SNTPv4 对应值为 4&lt;/span&gt;)" vertex="1">
<mxGeometry height="25" width="520" x="380" y="618" as="geometry" />
</mxCell>
<mxCell id="KUBt822XMcShu5GcSIXM-4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cccccc;align=left;verticalAlign=middle" value="Mode" vertex="1">
<mxGeometry height="25" width="180" x="100" y="643" as="geometry" />
</mxCell>
<mxCell id="KUBt822XMcShu5GcSIXM-5" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cccccc;align=center;verticalAlign=middle" value="3 bit" vertex="1">
<mxGeometry height="25" width="100" x="280" y="643" as="geometry" />
</mxCell>
<mxCell id="KUBt822XMcShu5GcSIXM-6" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cccccc;align=left;verticalAlign=middle" value="模式 (&lt;span style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));&quot;&gt;3 = 客户端4 = 服务器5 = 广播 / 多播)&lt;/span&gt;" vertex="1">
<mxGeometry height="25" width="520" x="380" y="643" as="geometry" />
</mxCell>
<mxCell id="KUBt822XMcShu5GcSIXM-7" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cccccc;align=left;verticalAlign=middle" value="Transmit Timestamp" vertex="1">
<mxGeometry height="25" width="180" x="100" y="668" as="geometry" />
</mxCell>
<mxCell id="KUBt822XMcShu5GcSIXM-8" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cccccc;align=center;verticalAlign=middle" value="64 bit" vertex="1">
<mxGeometry height="25" width="100" x="280" y="668" as="geometry" />
</mxCell>
<mxCell id="KUBt822XMcShu5GcSIXM-9" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cccccc;align=left;verticalAlign=middle" value="【T3】服务器离开时间戳 (计算偏移的核心)" vertex="1">
<mxGeometry height="25" width="520" x="380" y="668" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

View File

@@ -0,0 +1,428 @@
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2024-05-25T00:00:00.000Z" agent="AI" version="21.0.0" type="device">
<diagram name="QSPI Waveform" id="qspi_waveform">
<mxGraphModel dx="2000" dy="600" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2000" pageHeight="600" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="grid" value="" style="points=[];gridColor=#e0e0e0;gridSize=20;spacingTop=20;spacingLeft=20;spacingBottom=20;spacingRight=20;html=1;" vertex="1" parent="1">
<mxGeometry x="0" y="0" width="2100" height="600" as="geometry"/>
</mxCell>
<mxCell id="title" value="QSPI Fast Read Dual Output (0x3B) - 地址双线传输" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="500" y="20" width="600" height="30" as="geometry"/>
</mxCell>
<mxCell id="msb" value="MSB" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="110" y="60" width="40" height="20" as="geometry"/>
</mxCell>
<mxCell id="lsb" value="LSB" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="1860" y="60" width="40" height="20" as="geometry"/>
</mxCell>
<mxCell id="label_cs" value="CS" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="85" width="50" height="20" as="geometry"/>
</mxCell>
<mxCell id="label_sclk" value="SCLK" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="185" width="50" height="20" as="geometry"/>
</mxCell>
<mxCell id="label_io0" value="IO0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="275" width="50" height="20" as="geometry"/>
</mxCell>
<mxCell id="label_io1" value="IO1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="375" width="50" height="20" as="geometry"/>
</mxCell>
<mxCell id="vl_cmd_addr" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="500" y="180" as="sourcePoint"/>
<mxPoint x="500" y="420" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="vl_addr_data" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1100" y="180" as="sourcePoint"/>
<mxPoint x="1100" y="420" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="cs" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#FF5722;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="80" as="sourcePoint"/>
<mxPoint x="1960" y="80" as="targetPoint"/>
<Array as="points">
<mxPoint x="90" y="80"/>
<mxPoint x="90" y="110"/>
<mxPoint x="1950" y="110"/>
<mxPoint x="1950" y="80"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="sclk" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#2196F3;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="210" as="sourcePoint"/>
<mxPoint x="1950" y="210" as="targetPoint"/>
<Array as="points">
<mxPoint x="100" y="210"/>
<mxPoint x="125" y="210"/>
<mxPoint x="125" y="180"/>
<mxPoint x="150" y="180"/>
<mxPoint x="150" y="210"/>
<mxPoint x="175" y="210"/>
<mxPoint x="175" y="180"/>
<mxPoint x="200" y="180"/>
<mxPoint x="200" y="210"/>
<mxPoint x="225" y="210"/>
<mxPoint x="225" y="180"/>
<mxPoint x="250" y="180"/>
<mxPoint x="250" y="210"/>
<mxPoint x="275" y="210"/>
<mxPoint x="275" y="180"/>
<mxPoint x="300" y="180"/>
<mxPoint x="300" y="210"/>
<mxPoint x="325" y="210"/>
<mxPoint x="325" y="180"/>
<mxPoint x="350" y="180"/>
<mxPoint x="350" y="210"/>
<mxPoint x="375" y="210"/>
<mxPoint x="375" y="180"/>
<mxPoint x="400" y="180"/>
<mxPoint x="400" y="210"/>
<mxPoint x="425" y="210"/>
<mxPoint x="425" y="180"/>
<mxPoint x="450" y="180"/>
<mxPoint x="450" y="210"/>
<mxPoint x="475" y="210"/>
<mxPoint x="475" y="180"/>
<mxPoint x="500" y="180"/>
<mxPoint x="500" y="210"/>
<mxPoint x="525" y="210"/>
<mxPoint x="525" y="180"/>
<mxPoint x="550" y="180"/>
<mxPoint x="550" y="210"/>
<mxPoint x="575" y="210"/>
<mxPoint x="575" y="180"/>
<mxPoint x="600" y="180"/>
<mxPoint x="600" y="210"/>
<mxPoint x="625" y="210"/>
<mxPoint x="625" y="180"/>
<mxPoint x="650" y="180"/>
<mxPoint x="650" y="210"/>
<mxPoint x="675" y="210"/>
<mxPoint x="675" y="180"/>
<mxPoint x="700" y="180"/>
<mxPoint x="700" y="210"/>
<mxPoint x="725" y="210"/>
<mxPoint x="725" y="180"/>
<mxPoint x="750" y="180"/>
<mxPoint x="750" y="210"/>
<mxPoint x="775" y="210"/>
<mxPoint x="775" y="180"/>
<mxPoint x="800" y="180"/>
<mxPoint x="800" y="210"/>
<mxPoint x="825" y="210"/>
<mxPoint x="825" y="180"/>
<mxPoint x="850" y="180"/>
<mxPoint x="850" y="210"/>
<mxPoint x="875" y="210"/>
<mxPoint x="875" y="180"/>
<mxPoint x="900" y="180"/>
<mxPoint x="900" y="210"/>
<mxPoint x="925" y="210"/>
<mxPoint x="925" y="180"/>
<mxPoint x="950" y="180"/>
<mxPoint x="950" y="210"/>
<mxPoint x="975" y="210"/>
<mxPoint x="975" y="180"/>
<mxPoint x="1000" y="180"/>
<mxPoint x="1000" y="210"/>
<mxPoint x="1025" y="210"/>
<mxPoint x="1025" y="180"/>
<mxPoint x="1050" y="180"/>
<mxPoint x="1050" y="210"/>
<mxPoint x="1075" y="210"/>
<mxPoint x="1075" y="180"/>
<mxPoint x="1100" y="180"/>
<mxPoint x="1100" y="210"/>
<mxPoint x="1125" y="210"/>
<mxPoint x="1125" y="180"/>
<mxPoint x="1150" y="180"/>
<mxPoint x="1150" y="210"/>
<mxPoint x="1175" y="210"/>
<mxPoint x="1175" y="180"/>
<mxPoint x="1200" y="180"/>
<mxPoint x="1200" y="210"/>
<mxPoint x="1225" y="210"/>
<mxPoint x="1225" y="180"/>
<mxPoint x="1250" y="180"/>
<mxPoint x="1250" y="210"/>
<mxPoint x="1275" y="210"/>
<mxPoint x="1275" y="180"/>
<mxPoint x="1300" y="180"/>
<mxPoint x="1300" y="210"/>
<mxPoint x="1325" y="210"/>
<mxPoint x="1325" y="180"/>
<mxPoint x="1350" y="180"/>
<mxPoint x="1350" y="210"/>
<mxPoint x="1375" y="210"/>
<mxPoint x="1375" y="180"/>
<mxPoint x="1400" y="180"/>
<mxPoint x="1400" y="210"/>
<mxPoint x="1425" y="210"/>
<mxPoint x="1425" y="180"/>
<mxPoint x="1450" y="180"/>
<mxPoint x="1450" y="210"/>
<mxPoint x="1475" y="210"/>
<mxPoint x="1475" y="180"/>
<mxPoint x="1500" y="180"/>
<mxPoint x="1500" y="210"/>
<mxPoint x="1525" y="210"/>
<mxPoint x="1525" y="180"/>
<mxPoint x="1550" y="180"/>
<mxPoint x="1550" y="210"/>
<mxPoint x="1575" y="210"/>
<mxPoint x="1575" y="180"/>
<mxPoint x="1600" y="180"/>
<mxPoint x="1600" y="210"/>
<mxPoint x="1625" y="210"/>
<mxPoint x="1625" y="180"/>
<mxPoint x="1650" y="180"/>
<mxPoint x="1650" y="210"/>
<mxPoint x="1675" y="210"/>
<mxPoint x="1675" y="180"/>
<mxPoint x="1700" y="180"/>
<mxPoint x="1700" y="210"/>
<mxPoint x="1725" y="210"/>
<mxPoint x="1725" y="180"/>
<mxPoint x="1750" y="180"/>
<mxPoint x="1750" y="210"/>
<mxPoint x="1775" y="210"/>
<mxPoint x="1775" y="180"/>
<mxPoint x="1800" y="180"/>
<mxPoint x="1800" y="210"/>
<mxPoint x="1825" y="210"/>
<mxPoint x="1825" y="180"/>
<mxPoint x="1850" y="180"/>
<mxPoint x="1850" y="210"/>
<mxPoint x="1875" y="210"/>
<mxPoint x="1875" y="180"/>
<mxPoint x="1900" y="180"/>
<mxPoint x="1900" y="210"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="io0" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#4CAF50;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="310" as="sourcePoint"/>
<mxPoint x="1950" y="310" as="targetPoint"/>
<Array as="points">
<mxPoint x="100" y="310"/>
<mxPoint x="150" y="310"/>
<mxPoint x="200" y="310"/>
<mxPoint x="200" y="280"/>
<mxPoint x="250" y="280"/>
<mxPoint x="300" y="280"/>
<mxPoint x="350" y="280"/>
<mxPoint x="350" y="310"/>
<mxPoint x="400" y="310"/>
<mxPoint x="400" y="280"/>
<mxPoint x="450" y="280"/>
<mxPoint x="500" y="280"/>
<mxPoint x="500" y="310"/>
<mxPoint x="550" y="310"/>
<mxPoint x="600" y="310"/>
<mxPoint x="650" y="310"/>
<mxPoint x="650" y="280"/>
<mxPoint x="700" y="280"/>
<mxPoint x="700" y="310"/>
<mxPoint x="750" y="310"/>
<mxPoint x="750" y="280"/>
<mxPoint x="800" y="280"/>
<mxPoint x="800" y="310"/>
<mxPoint x="850" y="310"/>
<mxPoint x="900" y="310"/>
<mxPoint x="950" y="310"/>
<mxPoint x="1000" y="310"/>
<mxPoint x="1050" y="310"/>
<mxPoint x="1050" y="280"/>
<mxPoint x="1100" y="280"/>
<mxPoint x="1150" y="280"/>
<mxPoint x="1150" y="310"/>
<mxPoint x="1200" y="310"/>
<mxPoint x="1200" y="280"/>
<mxPoint x="1250" y="280"/>
<mxPoint x="1250" y="310"/>
<mxPoint x="1300" y="310"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="io1" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#9C27B0;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="410" as="sourcePoint"/>
<mxPoint x="1950" y="380" as="targetPoint"/>
<Array as="points">
<mxPoint x="100" y="410"/>
<mxPoint x="150" y="410"/>
<mxPoint x="200" y="410"/>
<mxPoint x="250" y="410"/>
<mxPoint x="300" y="410"/>
<mxPoint x="350" y="410"/>
<mxPoint x="400" y="410"/>
<mxPoint x="450" y="410"/>
<mxPoint x="500" y="410"/>
<mxPoint x="550" y="410"/>
<mxPoint x="550" y="380"/>
<mxPoint x="600" y="380"/>
<mxPoint x="600" y="410"/>
<mxPoint x="650" y="410"/>
<mxPoint x="700" y="410"/>
<mxPoint x="750" y="410"/>
<mxPoint x="750" y="380"/>
<mxPoint x="800" y="380"/>
<mxPoint x="850" y="380"/>
<mxPoint x="850" y="410"/>
<mxPoint x="900" y="410"/>
<mxPoint x="900" y="380"/>
<mxPoint x="950" y="380"/>
<mxPoint x="1000" y="380"/>
<mxPoint x="1050" y="380"/>
<mxPoint x="1050" y="410"/>
<mxPoint x="1100" y="410"/>
<mxPoint x="1150" y="410"/>
<mxPoint x="1150" y="380"/>
<mxPoint x="1200" y="380"/>
<mxPoint x="1200" y="410"/>
<mxPoint x="1250" y="410"/>
<mxPoint x="1250" y="380"/>
<mxPoint x="1300" y="380"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="cmd_io0_0" value="0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="115" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd_io0_1" value="0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="165" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd_io0_2" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="215" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd_io0_3" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="265" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd_io0_4" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="315" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd_io0_5" value="0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="365" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd_io0_6" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="415" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd_io0_7" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="465" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_0" value="A23" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="510" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io1_0" value="A22" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="510" y="355" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_1" value="A21" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="560" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io1_1" value="A20" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="560" y="355" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_2" value="A19" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="610" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io1_2" value="A18" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="610" y="355" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_3" value="A17" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="660" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io1_3" value="A16" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="660" y="355" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_4" value="A15" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="710" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io1_4" value="A14" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="710" y="355" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_5" value="A13" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="760" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io1_5" value="A12" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="760" y="355" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_6" value="A11" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="810" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io1_6" value="A10" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="810" y="355" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_7" value="A9" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="860" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io1_7" value="A8" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="860" y="355" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_8" value="A7" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="910" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io1_8" value="A6" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="910" y="355" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_9" value="A5" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="960" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io1_9" value="A4" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="960" y="355" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_10" value="A3" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="1010" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io1_10" value="A2" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="1010" y="355" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_11" value="A1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="1060" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io1_11" value="A0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="1060" y="355" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="data_io0_0" value="D7" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="1110" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="data_io1_0" value="D6" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="1110" y="355" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="data_io0_1" value="D5" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="1160" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="data_io1_1" value="D4" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="1160" y="355" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="data_io0_2" value="D3" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="1210" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="data_io1_2" value="D2" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="1210" y="355" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="data_io0_3" value="D1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="1260" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="data_io1_3" value="D0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="1260" y="355" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="stage_命令 (" value="命令 (0x3B)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="240" y="235" width="120" height="20" as="geometry"/>
</mxCell>
<mxCell id="stage_地址 (" value="地址 (24bit 双线)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#666666;" vertex="1" parent="1">
<mxGeometry x="740" y="235" width="120" height="20" as="geometry"/>
</mxCell>
<mxCell id="stage_数据 (" value="数据 (Dual Output)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#2196F3;" vertex="1" parent="1">
<mxGeometry x="1140" y="235" width="120" height="20" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

BIN
docs/绘图/SPI_QSPI.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 771 KiB

207
docs/绘图/SPI_QSPI.py Normal file
View File

@@ -0,0 +1,207 @@
import xml.etree.ElementTree as ET
def make_qspi_mxfile():
# ========== 基础参数 ==========
y_cs_high, y_cs_low = 80, 110
y_sclk_high, y_sclk_low = 180, 210
y_io0_high, y_io0_low = 280, 310
y_io1_high, y_io1_low = 380, 410
# 时序参数50px/周期36个周期8命令+24地址+4数据
cycle_w = 50
start_x = 100
n_cycles = 36 # 8 + 24 + 4
end_x = start_x + n_cycles * cycle_w # 1900
tail_x = end_x + 50 # 1950
rise_edges = [start_x + i*cycle_w + cycle_w//2 for i in range(n_cycles)] # 125,175...
fall_edges = [start_x + (i+1)*cycle_w for i in range(n_cycles)] # 150,200...1900
# 数据定义
cmd_bits = [0,0,1,1,1,0,1,1] # 0x3B MSB first
addr_bytes = [
[0,0,0,1,0,0,1,0], # 0x12 A23-A16
[0,0,1,1,0,1,0,0], # 0x34 A15-A8
[0,1,0,1,0,1,1,0], # 0x56 A7-A0
]
addr_bits = [b for byte in addr_bytes for b in byte]
data_io0 = [0,0,0,0] # D0,D2,D4,D6 (示例 0xAA)
data_io1 = [1,1,1,1] # D1,D3,D5,D7
all_io0 = cmd_bits + addr_bits + data_io0
all_io1 = [0]*32 + data_io1 # 命令地址期间 IO1 idle/low
lines = []
lines.append('<?xml version="1.0" encoding="UTF-8"?>')
lines.append('<mxfile host="app.diagrams.net" modified="2024-05-25T00:00:00.000Z" agent="AI" version="21.0.0" type="device">')
lines.append(' <diagram name="QSPI Waveform" id="qspi_waveform">')
lines.append(' <mxGraphModel dx="2000" dy="600" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2000" pageHeight="600" math="0" shadow="0">')
lines.append(' <root>')
lines.append(' <mxCell id="0"/>')
lines.append(' <mxCell id="1" parent="0"/>')
# 背景
lines.append(' <mxCell id="grid" value="" style="points=[];gridColor=#e0e0e0;gridSize=20;spacingTop=20;spacingLeft=20;spacingBottom=20;spacingRight=20;html=1;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="0" y="0" width="2100" height="600" as="geometry"/>')
lines.append(' </mxCell>')
# 标题
lines.append(' <mxCell id="title" value="QSPI Fast Read Dual Output (命令 0x3B)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1;" vertex="1" parent="1">')
lines.append(' <mxGeometry x="600" y="20" width="500" height="30" as="geometry"/>')
lines.append(' </mxCell>')
# MSB / LSB
lines.append(' <mxCell id="msb" value="MSB" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{start_x+10}" y="60" width="40" height="20" as="geometry"/>')
lines.append(' </mxCell>')
lines.append(' <mxCell id="lsb" value="LSB" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{end_x-40}" y="60" width="40" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# 信号标签
for label, y, eid in [("CS", 85, "label_cs"), ("SCLK", 185, "label_sclk"),
("IO0", 275, "label_io0"), ("IO1", 375, "label_io1")]:
lines.append(f' <mxCell id="{eid}" value="{label}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="20" y="{y}" width="50" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# 阶段分界虚线
boundaries = [
(start_x + 8*cycle_w, "cmd_addr"), # 500
(start_x + 16*cycle_w, "addr_mid1"), # 900
(start_x + 24*cycle_w, "addr_mid2"), # 1300
(start_x + 32*cycle_w, "addr_data"), # 1700
]
for x, eid in boundaries:
lines.append(f' <mxCell id="vl_{eid}" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">')
lines.append(' <mxGeometry width="50" height="50" relative="1" as="geometry">')
lines.append(f' <mxPoint x="{x}" y="180" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{x}" y="420" as="targetPoint"/>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# ========== CS 波形 ==========
cs_pts = [(80, y_cs_high), (90, y_cs_high), (90, y_cs_low), (tail_x, y_cs_low), (tail_x, y_cs_high), (tail_x+10, y_cs_high)]
lines.append(' <mxCell id="cs" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#FF5722;rounded=0;endArrow=none;" edge="1" parent="1">')
lines.append(' <mxGeometry relative="0" as="geometry">')
lines.append(f' <mxPoint x="{cs_pts[0][0]}" y="{cs_pts[0][1]}" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{cs_pts[-1][0]}" y="{cs_pts[-1][1]}" as="targetPoint"/>')
lines.append(' <Array as="points">')
for x, y in cs_pts[1:-1]:
lines.append(f' <mxPoint x="{x}" y="{y}"/>')
lines.append(' </Array>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# ========== SCLK 波形 ==========
sclk_pts = [(80, y_sclk_low), (start_x, y_sclk_low)]
for i in range(n_cycles):
rise = rise_edges[i]
fall = fall_edges[i]
sclk_pts.extend([
(rise, y_sclk_low),
(rise, y_sclk_high),
(fall, y_sclk_high),
(fall, y_sclk_low),
])
sclk_pts.append((tail_x, y_sclk_low))
lines.append(' <mxCell id="sclk" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#2196F3;rounded=0;endArrow=none;" edge="1" parent="1">')
lines.append(' <mxGeometry relative="0" as="geometry">')
lines.append(f' <mxPoint x="{sclk_pts[0][0]}" y="{sclk_pts[0][1]}" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{sclk_pts[-1][0]}" y="{sclk_pts[-1][1]}" as="targetPoint"/>')
lines.append(' <Array as="points">')
for x, y in sclk_pts[1:-1]:
lines.append(f' <mxPoint x="{x}" y="{y}"/>')
lines.append(' </Array>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# ========== IO0 波形 ==========
def build_wave_pts(bits, y_hi, y_lo, idle_y):
y0 = y_hi if bits[0] else y_lo
pts = [(80, y0), (start_x, y0)]
for i in range(len(bits)-1):
end_x = fall_edges[i]
y_curr = y_hi if bits[i] else y_lo
y_next = y_hi if bits[i+1] else y_lo
pts.append((end_x, y_curr))
if y_next != y_curr:
pts.append((end_x, y_next))
pts.append((end_x := fall_edges[len(bits)-1], y_hi if bits[-1] else y_lo))
pts.append((tail_x, pts[-1][1]))
return pts
io0_pts = build_wave_pts(all_io0, y_io0_high, y_io0_low, y_io0_low)
lines.append(' <mxCell id="io0" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#4CAF50;rounded=0;endArrow=none;" edge="1" parent="1">')
lines.append(' <mxGeometry relative="0" as="geometry">')
lines.append(f' <mxPoint x="{io0_pts[0][0]}" y="{io0_pts[0][1]}" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{io0_pts[-1][0]}" y="{io0_pts[-1][1]}" as="targetPoint"/>')
lines.append(' <Array as="points">')
for x, y in io0_pts[1:-1]:
lines.append(f' <mxPoint x="{x}" y="{y}"/>')
lines.append(' </Array>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# ========== IO1 波形 ==========
io1_pts = build_wave_pts(all_io1, y_io1_high, y_io1_low, y_io1_low)
lines.append(' <mxCell id="io1" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#9C27B0;rounded=0;endArrow=none;" edge="1" parent="1">')
lines.append(' <mxGeometry relative="0" as="geometry">')
lines.append(f' <mxPoint x="{io1_pts[0][0]}" y="{io1_pts[0][1]}" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{io1_pts[-1][0]}" y="{io1_pts[-1][1]}" as="targetPoint"/>')
lines.append(' <Array as="points">')
for x, y in io1_pts[1:-1]:
lines.append(f' <mxPoint x="{x}" y="{y}"/>')
lines.append(' </Array>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# ========== 命令 bit 标签IO0 上方) ==========
cmd_labels = ["0","0","1","1","1","0","1","1"]
for i, val in enumerate(cmd_labels):
cx = rise_edges[i]
lines.append(f' <mxCell id="cmd{i}" value="{val}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{cx-10}" y="255" width="20" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# ========== 阶段名称标签 ==========
stage_labels = [
(start_x + 4*cycle_w, "命令 (0x3B)", "#4CAF50"),
(start_x + 12*cycle_w, "地址 [23:16]", "#666666"),
(start_x + 20*cycle_w, "地址 [15:8]", "#666666"),
(start_x + 28*cycle_w, "地址 [7:0]", "#666666"),
(start_x + 34*cycle_w, "数据 (Dual)", "#2196F3"),
]
for x, txt, color in stage_labels:
lines.append(f' <mxCell id="stage_{txt[:4]}" value="{txt}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor={color};" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{x-60}" y="235" width="120" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# ========== 数据阶段 bit 标签 ==========
data_labels_io0 = ["D0","D2","D4","D6"]
data_labels_io1 = ["D1","D3","D5","D7"]
for i in range(4):
cx = rise_edges[32 + i]
# IO0
lines.append(f' <mxCell id="d0_{i}" value="{data_labels_io0[i]}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{cx-10}" y="255" width="20" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# IO1
lines.append(f' <mxCell id="d1_{i}" value="{data_labels_io1[i]}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#9C27B0;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{cx-10}" y="355" width="20" height="20" as="geometry"/>')
lines.append(' </mxCell>')
lines.append(' </root>')
lines.append(' </mxGraphModel>')
lines.append(' </diagram>')
lines.append('</mxfile>')
return "\n".join(lines)
xml_content = make_qspi_mxfile()
output_path = "SPI_Waveform_QSPI.drawio"
with open(output_path, "w", encoding="utf-8") as f:
f.write(xml_content)
print("文件已生成:", output_path)

345
docs/绘图/SPI_Quad.drawio Normal file
View File

@@ -0,0 +1,345 @@
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2024-05-25T00:00:00.000Z" agent="AI" version="21.0.0" type="device">
<diagram name="QSPI Quad I/O Fast Read (0xEB)" id="qspi_quad_io">
<mxGraphModel dx="1000" dy="700" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1000" pageHeight="700" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="grid" value="" style="points=[];gridColor=#e0e0e0;gridSize=20;spacingTop=20;spacingLeft=20;spacingBottom=20;spacingRight=20;html=1;" vertex="1" parent="1">
<mxGeometry x="0" y="0" width="1000" height="700" as="geometry"/>
</mxCell>
<mxCell id="title" value="QSPI Quad I/O Fast Read (命令 0xEB)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="300" y="20" width="400" height="30" as="geometry"/>
</mxCell>
<mxCell id="msb" value="MSB" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="110" y="60" width="40" height="20" as="geometry"/>
</mxCell>
<mxCell id="lsb" value="LSB" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="810" y="60" width="40" height="20" as="geometry"/>
</mxCell>
<mxCell id="label_cs" value="CS" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="85" width="50" height="20" as="geometry"/>
</mxCell>
<mxCell id="label_sclk" value="SCLK" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="185" width="50" height="20" as="geometry"/>
</mxCell>
<mxCell id="label_io0" value="IO0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="275" width="50" height="20" as="geometry"/>
</mxCell>
<mxCell id="label_io1" value="IO1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="375" width="50" height="20" as="geometry"/>
</mxCell>
<mxCell id="label_io2" value="IO2" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="475" width="50" height="20" as="geometry"/>
</mxCell>
<mxCell id="label_io3" value="IO3" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="575" width="50" height="20" as="geometry"/>
</mxCell>
<mxCell id="vl_cmd_addr" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="500" y="180" as="sourcePoint"/>
<mxPoint x="500" y="620" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="vl_addr_dummy" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="650" y="180" as="sourcePoint"/>
<mxPoint x="650" y="620" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="vl_dummy_data" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="750" y="180" as="sourcePoint"/>
<mxPoint x="750" y="620" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="cs" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#FF5722;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="80" as="sourcePoint"/>
<mxPoint x="910" y="80" as="targetPoint"/>
<Array as="points">
<mxPoint x="90" y="80"/>
<mxPoint x="90" y="110"/>
<mxPoint x="900" y="110"/>
<mxPoint x="900" y="80"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="sclk" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#2196F3;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="210" as="sourcePoint"/>
<mxPoint x="900" y="210" as="targetPoint"/>
<Array as="points">
<mxPoint x="100" y="210"/>
<mxPoint x="125" y="210"/>
<mxPoint x="125" y="180"/>
<mxPoint x="150" y="180"/>
<mxPoint x="150" y="210"/>
<mxPoint x="175" y="210"/>
<mxPoint x="175" y="180"/>
<mxPoint x="200" y="180"/>
<mxPoint x="200" y="210"/>
<mxPoint x="225" y="210"/>
<mxPoint x="225" y="180"/>
<mxPoint x="250" y="180"/>
<mxPoint x="250" y="210"/>
<mxPoint x="275" y="210"/>
<mxPoint x="275" y="180"/>
<mxPoint x="300" y="180"/>
<mxPoint x="300" y="210"/>
<mxPoint x="325" y="210"/>
<mxPoint x="325" y="180"/>
<mxPoint x="350" y="180"/>
<mxPoint x="350" y="210"/>
<mxPoint x="375" y="210"/>
<mxPoint x="375" y="180"/>
<mxPoint x="400" y="180"/>
<mxPoint x="400" y="210"/>
<mxPoint x="425" y="210"/>
<mxPoint x="425" y="180"/>
<mxPoint x="450" y="180"/>
<mxPoint x="450" y="210"/>
<mxPoint x="475" y="210"/>
<mxPoint x="475" y="180"/>
<mxPoint x="500" y="180"/>
<mxPoint x="500" y="210"/>
<mxPoint x="525" y="210"/>
<mxPoint x="525" y="180"/>
<mxPoint x="550" y="180"/>
<mxPoint x="550" y="210"/>
<mxPoint x="575" y="210"/>
<mxPoint x="575" y="180"/>
<mxPoint x="600" y="180"/>
<mxPoint x="600" y="210"/>
<mxPoint x="625" y="210"/>
<mxPoint x="625" y="180"/>
<mxPoint x="650" y="180"/>
<mxPoint x="650" y="210"/>
<mxPoint x="675" y="210"/>
<mxPoint x="675" y="180"/>
<mxPoint x="700" y="180"/>
<mxPoint x="700" y="210"/>
<mxPoint x="725" y="210"/>
<mxPoint x="725" y="180"/>
<mxPoint x="750" y="180"/>
<mxPoint x="750" y="210"/>
<mxPoint x="775" y="210"/>
<mxPoint x="775" y="180"/>
<mxPoint x="800" y="180"/>
<mxPoint x="800" y="210"/>
<mxPoint x="825" y="210"/>
<mxPoint x="825" y="180"/>
<mxPoint x="850" y="180"/>
<mxPoint x="850" y="210"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="io0" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#4CAF50;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="280" as="sourcePoint"/>
<mxPoint x="900" y="280" as="targetPoint"/>
<Array as="points">
<mxPoint x="100" y="280"/>
<mxPoint x="150" y="280"/>
<mxPoint x="200" y="280"/>
<mxPoint x="250" y="280"/>
<mxPoint x="250" y="310"/>
<mxPoint x="300" y="310"/>
<mxPoint x="300" y="280"/>
<mxPoint x="350" y="280"/>
<mxPoint x="350" y="310"/>
<mxPoint x="400" y="310"/>
<mxPoint x="400" y="280"/>
<mxPoint x="450" y="280"/>
<mxPoint x="500" y="280"/>
<mxPoint x="500" y="310"/>
<mxPoint x="550" y="310"/>
<mxPoint x="600" y="310"/>
<mxPoint x="650" y="310"/>
<mxPoint x="700" y="310"/>
<mxPoint x="750" y="310"/>
<mxPoint x="750" y="280"/>
<mxPoint x="800" y="280"/>
<mxPoint x="850" y="280"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="io1" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#9C27B0;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="410" as="sourcePoint"/>
<mxPoint x="900" y="410" as="targetPoint"/>
<Array as="points">
<mxPoint x="100" y="410"/>
<mxPoint x="150" y="410"/>
<mxPoint x="200" y="410"/>
<mxPoint x="250" y="410"/>
<mxPoint x="300" y="410"/>
<mxPoint x="350" y="410"/>
<mxPoint x="400" y="410"/>
<mxPoint x="450" y="410"/>
<mxPoint x="500" y="410"/>
<mxPoint x="550" y="410"/>
<mxPoint x="600" y="410"/>
<mxPoint x="650" y="410"/>
<mxPoint x="700" y="410"/>
<mxPoint x="750" y="410"/>
<mxPoint x="800" y="410"/>
<mxPoint x="850" y="410"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="io2" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#FFC107;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="510" as="sourcePoint"/>
<mxPoint x="900" y="480" as="targetPoint"/>
<Array as="points">
<mxPoint x="100" y="510"/>
<mxPoint x="150" y="510"/>
<mxPoint x="200" y="510"/>
<mxPoint x="250" y="510"/>
<mxPoint x="300" y="510"/>
<mxPoint x="350" y="510"/>
<mxPoint x="400" y="510"/>
<mxPoint x="450" y="510"/>
<mxPoint x="500" y="510"/>
<mxPoint x="550" y="510"/>
<mxPoint x="550" y="480"/>
<mxPoint x="600" y="480"/>
<mxPoint x="650" y="480"/>
<mxPoint x="650" y="510"/>
<mxPoint x="700" y="510"/>
<mxPoint x="750" y="510"/>
<mxPoint x="750" y="480"/>
<mxPoint x="800" y="480"/>
<mxPoint x="850" y="480"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="io3" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#607D8B;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="610" as="sourcePoint"/>
<mxPoint x="900" y="610" as="targetPoint"/>
<Array as="points">
<mxPoint x="100" y="610"/>
<mxPoint x="150" y="610"/>
<mxPoint x="200" y="610"/>
<mxPoint x="250" y="610"/>
<mxPoint x="300" y="610"/>
<mxPoint x="350" y="610"/>
<mxPoint x="400" y="610"/>
<mxPoint x="450" y="610"/>
<mxPoint x="500" y="610"/>
<mxPoint x="500" y="580"/>
<mxPoint x="550" y="580"/>
<mxPoint x="550" y="610"/>
<mxPoint x="600" y="610"/>
<mxPoint x="600" y="580"/>
<mxPoint x="650" y="580"/>
<mxPoint x="650" y="610"/>
<mxPoint x="700" y="610"/>
<mxPoint x="750" y="610"/>
<mxPoint x="800" y="610"/>
<mxPoint x="850" y="610"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="stage_命令 (" value="命令 (0xEB)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="240" y="235" width="120" height="20" as="geometry"/>
</mxCell>
<mxCell id="stage_地址 (" value="地址 (Quad)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#666666;" vertex="1" parent="1">
<mxGeometry x="515.0" y="235" width="120" height="20" as="geometry"/>
</mxCell>
<mxCell id="stage_空周期 " value="空周期 (2)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#666666;" vertex="1" parent="1">
<mxGeometry x="640" y="235" width="120" height="20" as="geometry"/>
</mxCell>
<mxCell id="stage_数据 (" value="数据 (Quad 0xAA)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#2196F3;" vertex="1" parent="1">
<mxGeometry x="740" y="235" width="120" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd_io0_0" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="115" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd_io0_1" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="165" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd_io0_2" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="215" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd_io0_3" value="0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="265" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd_io0_4" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="315" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd_io0_5" value="0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="365" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd_io0_6" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="415" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd_io0_7" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="465" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_0" value="A23" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="510" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_1" value="A19" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="560" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_2" value="A15" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="610" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_0" value="A22" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="510" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_1" value="A18" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="560" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_2" value="A14" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="610" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_0" value="A21" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#FFC107;" vertex="1" parent="1">
<mxGeometry x="510" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_1" value="A17" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#FFC107;" vertex="1" parent="1">
<mxGeometry x="560" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_2" value="A13" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#FFC107;" vertex="1" parent="1">
<mxGeometry x="610" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_0" value="A20" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#607D8B;" vertex="1" parent="1">
<mxGeometry x="510" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_1" value="A16" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#607D8B;" vertex="1" parent="1">
<mxGeometry x="560" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="addr_io0_2" value="A12" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#607D8B;" vertex="1" parent="1">
<mxGeometry x="610" y="255" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="data_io0_0" value="D0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="765" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="data_io0_1" value="D4" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="815" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="data_io0_0" value="D1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="765" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="data_io0_1" value="D5" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="815" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="data_io0_0" value="D2" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#FFC107;" vertex="1" parent="1">
<mxGeometry x="765" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="data_io0_1" value="D6" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#FFC107;" vertex="1" parent="1">
<mxGeometry x="815" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="data_io0_0" value="D3" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#607D8B;" vertex="1" parent="1">
<mxGeometry x="765" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="data_io0_1" value="D7" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#607D8B;" vertex="1" parent="1">
<mxGeometry x="815" y="255" width="20" height="20" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

BIN
docs/绘图/SPI_Quad.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 539 KiB

300
docs/绘图/SPI_Quad.py Normal file
View File

@@ -0,0 +1,300 @@
import xml.etree.ElementTree as ET
def make_qspi_quad_io_mxfile():
# ========== 基础参数定义 ==========
# Y坐标高/低电平严格遵循垂直间距100px规范
y_cs_high, y_cs_low = 80, 110
y_sclk_high, y_sclk_low = 180, 210
y_io0_high, y_io0_low = 280, 310
y_io1_high, y_io1_low = 380, 410
y_io2_high, y_io2_low = 480, 510
y_io3_high, y_io3_low = 580, 610
# 时序参数50px/周期,总周期数=8(命令)+3(地址)+2(空周期)+2(数据)=15
cycle_w = 50
start_x = 100
n_cycles = 15
end_x = start_x + n_cycles * cycle_w # 100 + 15*50 = 850
tail_x = end_x + 50 # 900
# 时钟边沿计算(上升沿=采样沿,下降沿=输出沿)
rise_edges = [start_x + i*cycle_w + cycle_w//2 for i in range(n_cycles)] # 125,175...825
fall_edges = [start_x + (i+1)*cycle_w for i in range(n_cycles)] # 150,200...850
# ========== 数据定义 ==========
# 1. 命令阶段IO0传输0xEB (11101011)MSB firstIO1-IO3 idle(0)
cmd_bits_io0 = [1,1,1,0,1,0,1,1] # 0xEB = b11101011
cmd_bits_io1 = [0]*8
cmd_bits_io2 = [0]*8
cmd_bits_io3 = [0]*8
# 2. 地址阶段3个周期4线并行传输地址位示例地址0x123456的高12位
# 地址0x123456 = 24位0001 0010 0011 0100 0101 0110
# A23=0,A22=0,A21=0,A20=1 | A19=0,A18=0,A17=1,A16=0 | A15=0,A14=0,A13=1,A12=1
addr_bits_io0 = [0, 0, 0] # A23, A19, A15
addr_bits_io1 = [0, 0, 0] # A22, A18, A14
addr_bits_io2 = [0, 1, 1] # A21, A17, A13
addr_bits_io3 = [1, 0, 1] # A20, A16, A12
# 3. 空周期2个周期所有IO idle(0)
dummy_bits = [0]*2
# 4. 数据阶段2个周期传输1字节(0xAA=10101010)4线并行
# D0=1,D1=0,D2=1,D3=0 | D4=1,D5=0,D6=1,D7=0
data_bits_io0 = [1, 1] # D0, D4
data_bits_io1 = [0, 0] # D1, D5
data_bits_io2 = [1, 1] # D2, D6
data_bits_io3 = [0, 0] # D3, D7
# 合并所有阶段的bit序列
all_io0 = cmd_bits_io0 + addr_bits_io0 + dummy_bits + data_bits_io0
all_io1 = cmd_bits_io1 + addr_bits_io1 + dummy_bits + data_bits_io1
all_io2 = cmd_bits_io2 + addr_bits_io2 + dummy_bits + data_bits_io2
all_io3 = cmd_bits_io3 + addr_bits_io3 + dummy_bits + data_bits_io3
# ========== 波形构建函数 ==========
def build_wave_pts(bits, y_hi, y_lo):
"""生成波形点,确保无斜线、边沿对齐"""
y0 = y_hi if bits[0] else y_lo
pts = [(80, y0), (start_x, y0)] # 起始过渡段
for i in range(len(bits)-1):
curr_fall = fall_edges[i]
y_curr = y_hi if bits[i] else y_lo
y_next = y_hi if bits[i+1] else y_lo
# 添加当前bit的水平段终点下降沿
pts.append((curr_fall, y_curr))
# 电平变化则在下降沿垂直跳变
if y_next != y_curr:
pts.append((curr_fall, y_next))
# 最后一个bit的终点 + 尾部过渡段
last_fall = fall_edges[len(bits)-1]
pts.append((last_fall, y_hi if bits[-1] else y_lo))
pts.append((tail_x, pts[-1][1]))
return pts
# ========== 生成XML内容 ==========
lines = []
# 文件头
lines.append('<?xml version="1.0" encoding="UTF-8"?>')
lines.append('<mxfile host="app.diagrams.net" modified="2024-05-25T00:00:00.000Z" agent="AI" version="21.0.0" type="device">')
lines.append(' <diagram name="QSPI Quad I/O Fast Read (0xEB)" id="qspi_quad_io">')
lines.append(' <mxGraphModel dx="1000" dy="700" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1000" pageHeight="700" math="0" shadow="0">')
lines.append(' <root>')
lines.append(' <mxCell id="0"/>')
lines.append(' <mxCell id="1" parent="0"/>')
# 背景网格
lines.append(' <mxCell id="grid" value="" style="points=[];gridColor=#e0e0e0;gridSize=20;spacingTop=20;spacingLeft=20;spacingBottom=20;spacingRight=20;html=1;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="0" y="0" width="1000" height="700" as="geometry"/>')
lines.append(' </mxCell>')
# 标题
lines.append(' <mxCell id="title" value="QSPI Quad I/O Fast Read (命令 0xEB)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1;" vertex="1" parent="1">')
lines.append(' <mxGeometry x="300" y="20" width="400" height="30" as="geometry"/>')
lines.append(' </mxCell>')
# MSB/LSB标记
lines.append(' <mxCell id="msb" value="MSB" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{start_x+10}" y="60" width="40" height="20" as="geometry"/>')
lines.append(' </mxCell>')
lines.append(' <mxCell id="lsb" value="LSB" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{end_x-40}" y="60" width="40" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# 信号标签(左侧)
signal_labels = [
("CS", 85, "label_cs"),
("SCLK", 185, "label_sclk"),
("IO0", 275, "label_io0"),
("IO1", 375, "label_io1"),
("IO2", 475, "label_io2"),
("IO3", 575, "label_io3")
]
for label, y, eid in signal_labels:
lines.append(f' <mxCell id="{eid}" value="{label}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="20" y="{y}" width="50" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# 阶段分界虚线(命令/地址/空周期/数据)
boundaries = [
(start_x + 8*cycle_w, "cmd_addr"), # 命令结束: 100+400=500
(start_x + 11*cycle_w, "addr_dummy"),# 地址结束: 100+550=650
(start_x + 13*cycle_w, "dummy_data"),# 空周期结束:100+650=750
]
for x, eid in boundaries:
lines.append(f' <mxCell id="vl_{eid}" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">')
lines.append(' <mxGeometry width="50" height="50" relative="1" as="geometry">')
lines.append(f' <mxPoint x="{x}" y="180" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{x}" y="620" as="targetPoint"/>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# ========== CS 波形 ==========
cs_pts = [(80, y_cs_high), (90, y_cs_high), (90, y_cs_low),
(tail_x, y_cs_low), (tail_x, y_cs_high), (tail_x+10, y_cs_high)]
lines.append(' <mxCell id="cs" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#FF5722;rounded=0;endArrow=none;" edge="1" parent="1">')
lines.append(' <mxGeometry relative="0" as="geometry">')
lines.append(f' <mxPoint x="{cs_pts[0][0]}" y="{cs_pts[0][1]}" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{cs_pts[-1][0]}" y="{cs_pts[-1][1]}" as="targetPoint"/>')
lines.append(' <Array as="points">')
for x, y in cs_pts[1:-1]:
lines.append(f' <mxPoint x="{x}" y="{y}"/>')
lines.append(' </Array>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# ========== SCLK 波形 ==========
sclk_pts = [(80, y_sclk_low), (start_x, y_sclk_low)]
for i in range(n_cycles):
rise = rise_edges[i]
fall = fall_edges[i]
sclk_pts.extend([
(rise, y_sclk_low),
(rise, y_sclk_high),
(fall, y_sclk_high),
(fall, y_sclk_low),
])
sclk_pts.append((tail_x, y_sclk_low))
lines.append(' <mxCell id="sclk" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#2196F3;rounded=0;endArrow=none;" edge="1" parent="1">')
lines.append(' <mxGeometry relative="0" as="geometry">')
lines.append(f' <mxPoint x="{sclk_pts[0][0]}" y="{sclk_pts[0][1]}" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{sclk_pts[-1][0]}" y="{sclk_pts[-1][1]}" as="targetPoint"/>')
lines.append(' <Array as="points">')
for x, y in sclk_pts[1:-1]:
lines.append(f' <mxPoint x="{x}" y="{y}"/>')
lines.append(' </Array>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# ========== IO0 波形 ==========
io0_pts = build_wave_pts(all_io0, y_io0_high, y_io0_low)
lines.append(' <mxCell id="io0" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#4CAF50;rounded=0;endArrow=none;" edge="1" parent="1">')
lines.append(' <mxGeometry relative="0" as="geometry">')
lines.append(f' <mxPoint x="{io0_pts[0][0]}" y="{io0_pts[0][1]}" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{io0_pts[-1][0]}" y="{io0_pts[-1][1]}" as="targetPoint"/>')
lines.append(' <Array as="points">')
for x, y in io0_pts[1:-1]:
lines.append(f' <mxPoint x="{x}" y="{y}"/>')
lines.append(' </Array>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# ========== IO1 波形 ==========
io1_pts = build_wave_pts(all_io1, y_io1_high, y_io1_low)
lines.append(' <mxCell id="io1" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#9C27B0;rounded=0;endArrow=none;" edge="1" parent="1">')
lines.append(' <mxGeometry relative="0" as="geometry">')
lines.append(f' <mxPoint x="{io1_pts[0][0]}" y="{io1_pts[0][1]}" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{io1_pts[-1][0]}" y="{io1_pts[-1][1]}" as="targetPoint"/>')
lines.append(' <Array as="points">')
for x, y in io1_pts[1:-1]:
lines.append(f' <mxPoint x="{x}" y="{y}"/>')
lines.append(' </Array>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# ========== IO2 波形 ==========
io2_pts = build_wave_pts(all_io2, y_io2_high, y_io2_low)
lines.append(' <mxCell id="io2" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#FFC107;rounded=0;endArrow=none;" edge="1" parent="1">')
lines.append(' <mxGeometry relative="0" as="geometry">')
lines.append(f' <mxPoint x="{io2_pts[0][0]}" y="{io2_pts[0][1]}" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{io2_pts[-1][0]}" y="{io2_pts[-1][1]}" as="targetPoint"/>')
lines.append(' <Array as="points">')
for x, y in io2_pts[1:-1]:
lines.append(f' <mxPoint x="{x}" y="{y}"/>')
lines.append(' </Array>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# ========== IO3 波形 ==========
io3_pts = build_wave_pts(all_io3, y_io3_high, y_io3_low)
lines.append(' <mxCell id="io3" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#607D8B;rounded=0;endArrow=none;" edge="1" parent="1">')
lines.append(' <mxGeometry relative="0" as="geometry">')
lines.append(f' <mxPoint x="{io3_pts[0][0]}" y="{io3_pts[0][1]}" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{io3_pts[-1][0]}" y="{io3_pts[-1][1]}" as="targetPoint"/>')
lines.append(' <Array as="points">')
for x, y in io3_pts[1:-1]:
lines.append(f' <mxPoint x="{x}" y="{y}"/>')
lines.append(' </Array>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# ========== 阶段名称标注 ==========
stage_labels = [
(start_x + 4*cycle_w, "命令 (0xEB)", "#4CAF50"), # 命令阶段中心
(start_x + 9.5*cycle_w, "地址 (Quad)", "#666666"), # 地址阶段中心
(start_x + 12*cycle_w, "空周期 (2)", "#666666"), # 空周期中心
(start_x + 14*cycle_w, "数据 (Quad 0xAA)", "#2196F3"), # 数据阶段中心
]
for x, txt, color in stage_labels:
lines.append(f' <mxCell id="stage_{txt[:4]}" value="{txt}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor={color};" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{x-60}" y="235" width="120" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# ========== 数据位标签 ==========
# 1. 命令阶段IO0 bit标签
for i in range(8):
cx = rise_edges[i]
lines.append(f' <mxCell id="cmd_io0_{i}" value="{cmd_bits_io0[i]}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{cx-10}" y="255" width="20" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# 2. 地址阶段bit标签
addr_io_labels = [
(8, "A23", "A19", "A15", "#4CAF50"), # IO0
(8, "A22", "A18", "A14", "#9C27B0"), # IO1
(8, "A21", "A17", "A13", "#FFC107"), # IO2
(8, "A20", "A16", "A12", "#607D8B"), # IO3
]
for io_idx, label1, label2, label3, color in addr_io_labels:
# 地址阶段第1个周期总第9个周期
cx = rise_edges[io_idx]
lines.append(f' <mxCell id="addr_io{io_idx-8}_{0}" value="{label1}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor={color};" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{cx-15}" y="{255+100*(io_idx-8)}" width="30" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# 地址阶段第2个周期总第10个周期
cx = rise_edges[io_idx+1]
lines.append(f' <mxCell id="addr_io{io_idx-8}_{1}" value="{label2}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor={color};" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{cx-15}" y="{255+100*(io_idx-8)}" width="30" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# 地址阶段第3个周期总第11个周期
cx = rise_edges[io_idx+2]
lines.append(f' <mxCell id="addr_io{io_idx-8}_{2}" value="{label3}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor={color};" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{cx-15}" y="{255+100*(io_idx-8)}" width="30" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# 3. 数据阶段bit标签
data_io_labels = [
(13, "D0", "D4", "#4CAF50"), # IO0
(13, "D1", "D5", "#9C27B0"), # IO1
(13, "D2", "D6", "#FFC107"), # IO2
(13, "D3", "D7", "#607D8B"), # IO3
]
for io_idx, label1, label2, color in data_io_labels:
# 数据阶段第1个周期总第14个周期
cx = rise_edges[io_idx]
lines.append(f' <mxCell id="data_io{io_idx-13}_{0}" value="{label1}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor={color};" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{cx-10}" y="{255+100*(io_idx-13)}" width="20" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# 数据阶段第2个周期总第15个周期
cx = rise_edges[io_idx+1]
lines.append(f' <mxCell id="data_io{io_idx-13}_{1}" value="{label2}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor={color};" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{cx-10}" y="{255+100*(io_idx-13)}" width="20" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# 文件尾
lines.append(' </root>')
lines.append(' </mxGraphModel>')
lines.append(' </diagram>')
lines.append('</mxfile>')
return "\n".join(lines)
# 生成并保存文件
xml_content = make_qspi_quad_io_mxfile()
output_path = "SPI_Quad.drawio"
with open(output_path, "w", encoding="utf-8") as f:
f.write(xml_content)
print(f"波形图文件已生成: {output_path}")

View File

@@ -0,0 +1,967 @@
<mxfile host="Electron" agent="AI" pages="3">
<diagram name="SPI Waveform" id="spi_waveform">
<mxGraphModel dx="1212" dy="1185" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1000" pageHeight="600" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="grid" parent="1" style="points=[];gridColor=#e0e0e0;gridSize=20;spacingTop=20;spacingLeft=20;spacingBottom=20;spacingRight=20;html=1;" value="" vertex="1">
<mxGeometry height="440" width="1000" y="10" as="geometry" />
</mxCell>
<mxCell id="title" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1;" value="SPI 全双工传输 (模式 0: CPOL=0, CPHA=0)" vertex="1">
<mxGeometry height="30" width="400" x="300" y="20" as="geometry" />
</mxCell>
<mxCell id="msb" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" value="MSB" vertex="1">
<mxGeometry height="20" width="40" x="130" y="60" as="geometry" />
</mxCell>
<mxCell id="lsb" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" value="LSB" vertex="1">
<mxGeometry height="20" width="40" x="880" y="60" as="geometry" />
</mxCell>
<mxCell id="label_cs" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" value="CS" vertex="1">
<mxGeometry height="20" width="50" x="20" y="85" as="geometry" />
</mxCell>
<mxCell id="label_sclk" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" value="SCLK" vertex="1">
<mxGeometry height="20" width="50" x="20" y="185" as="geometry" />
</mxCell>
<mxCell id="label_mosi" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" value="MOSI" vertex="1">
<mxGeometry height="20" width="50" x="20" y="275" as="geometry" />
</mxCell>
<mxCell id="label_miso" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" value="MISO" vertex="1">
<mxGeometry height="20" width="50" x="20" y="365" as="geometry" />
</mxCell>
<mxCell id="vl_150" edge="1" parent="1" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="150" y="180" as="sourcePoint" />
<mxPoint x="150" y="420" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="vl_250" edge="1" parent="1" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="250" y="180" as="sourcePoint" />
<mxPoint x="250" y="420" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="vl_350" edge="1" parent="1" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="350" y="180" as="sourcePoint" />
<mxPoint x="350" y="420" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="vl_450" edge="1" parent="1" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="450" y="180" as="sourcePoint" />
<mxPoint x="450" y="420" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="vl_550" edge="1" parent="1" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="550" y="180" as="sourcePoint" />
<mxPoint x="550" y="420" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="vl_650" edge="1" parent="1" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="650" y="180" as="sourcePoint" />
<mxPoint x="650" y="420" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="vl_750" edge="1" parent="1" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="750" y="180" as="sourcePoint" />
<mxPoint x="750" y="420" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="vl_850" edge="1" parent="1" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="850" y="180" as="sourcePoint" />
<mxPoint x="850" y="420" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="cs" edge="1" parent="1" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#FF5722;rounded=0;endArrow=none;" value="">
<mxGeometry as="geometry">
<Array as="points">
<mxPoint x="90" y="80" />
<mxPoint x="90" y="110" />
<mxPoint x="910" y="110" />
<mxPoint x="910" y="80" />
</Array>
<mxPoint x="80" y="80" as="sourcePoint" />
<mxPoint x="920" y="80" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="sclk" edge="1" parent="1" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#2196F3;rounded=0;endArrow=none;" value="">
<mxGeometry as="geometry">
<Array as="points">
<mxPoint x="100" y="210" />
<mxPoint x="150" y="210" />
<mxPoint x="150" y="180" />
<mxPoint x="190" y="180" />
<mxPoint x="190" y="210" />
<mxPoint x="250" y="210" />
<mxPoint x="250" y="180" />
<mxPoint x="290" y="180" />
<mxPoint x="290" y="210" />
<mxPoint x="350" y="210" />
<mxPoint x="350" y="180" />
<mxPoint x="390" y="180" />
<mxPoint x="390" y="210" />
<mxPoint x="450" y="210" />
<mxPoint x="450" y="180" />
<mxPoint x="490" y="180" />
<mxPoint x="490" y="210" />
<mxPoint x="550" y="210" />
<mxPoint x="550" y="180" />
<mxPoint x="590" y="180" />
<mxPoint x="590" y="210" />
<mxPoint x="650" y="210" />
<mxPoint x="650" y="180" />
<mxPoint x="690" y="180" />
<mxPoint x="690" y="210" />
<mxPoint x="750" y="210" />
<mxPoint x="750" y="180" />
<mxPoint x="790" y="180" />
<mxPoint x="790" y="210" />
<mxPoint x="850" y="210" />
<mxPoint x="850" y="180" />
<mxPoint x="890" y="180" />
<mxPoint x="890" y="210" />
</Array>
<mxPoint x="80" y="210" as="sourcePoint" />
<mxPoint x="920" y="210" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="mosi" edge="1" parent="1" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#4CAF50;rounded=0;endArrow=none;" value="">
<mxGeometry as="geometry">
<Array as="points">
<mxPoint x="100" y="310" />
<mxPoint x="190" y="310" />
<mxPoint x="190" y="280" />
<mxPoint x="290" y="280" />
<mxPoint x="290" y="310" />
<mxPoint x="390" y="310" />
<mxPoint x="390" y="280" />
<mxPoint x="490" y="280" />
<mxPoint x="590" y="280" />
<mxPoint x="590" y="310" />
<mxPoint x="690" y="310" />
<mxPoint x="690" y="280" />
<mxPoint x="790" y="280" />
<mxPoint x="790" y="310" />
<mxPoint x="890" y="310" />
</Array>
<mxPoint x="80" y="310" as="sourcePoint" />
<mxPoint x="920" y="310" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="miso" edge="1" parent="1" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#9C27B0;rounded=0;endArrow=none;" value="">
<mxGeometry as="geometry">
<Array as="points">
<mxPoint x="100" y="380" />
<mxPoint x="190" y="380" />
<mxPoint x="190" y="410" />
<mxPoint x="290" y="410" />
<mxPoint x="290" y="380" />
<mxPoint x="390" y="380" />
<mxPoint x="390" y="410" />
<mxPoint x="490" y="410" />
<mxPoint x="590" y="410" />
<mxPoint x="590" y="380" />
<mxPoint x="690" y="380" />
<mxPoint x="690" y="410" />
<mxPoint x="790" y="410" />
<mxPoint x="790" y="380" />
<mxPoint x="890" y="380" />
</Array>
<mxPoint x="80" y="380" as="sourcePoint" />
<mxPoint x="920" y="380" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="m0" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#4CAF50;" value="0" vertex="1">
<mxGeometry height="20" width="20" x="145" y="255" as="geometry" />
</mxCell>
<mxCell id="m1" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#4CAF50;" value="1" vertex="1">
<mxGeometry height="20" width="20" x="240" y="255" as="geometry" />
</mxCell>
<mxCell id="m2" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#4CAF50;" value="0" vertex="1">
<mxGeometry height="20" width="20" x="340" y="255" as="geometry" />
</mxCell>
<mxCell id="m3" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#4CAF50;" value="1" vertex="1">
<mxGeometry height="20" width="20" x="440" y="255" as="geometry" />
</mxCell>
<mxCell id="m4" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#4CAF50;" value="1" vertex="1">
<mxGeometry height="20" width="20" x="540" y="255" as="geometry" />
</mxCell>
<mxCell id="m5" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#4CAF50;" value="0" vertex="1">
<mxGeometry height="20" width="20" x="640" y="255" as="geometry" />
</mxCell>
<mxCell id="m6" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#4CAF50;" value="1" vertex="1">
<mxGeometry height="20" width="20" x="740" y="255" as="geometry" />
</mxCell>
<mxCell id="m7" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#4CAF50;" value="0" vertex="1">
<mxGeometry height="20" width="20" x="840" y="255" as="geometry" />
</mxCell>
<mxCell id="s0" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#9C27B0;" value="1" vertex="1">
<mxGeometry height="20" width="20" x="145" y="355" as="geometry" />
</mxCell>
<mxCell id="s1" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#9C27B0;" value="0" vertex="1">
<mxGeometry height="20" width="20" x="240" y="355" as="geometry" />
</mxCell>
<mxCell id="s2" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#9C27B0;" value="1" vertex="1">
<mxGeometry height="20" width="20" x="340" y="355" as="geometry" />
</mxCell>
<mxCell id="s3" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#9C27B0;" value="0" vertex="1">
<mxGeometry height="20" width="20" x="440" y="355" as="geometry" />
</mxCell>
<mxCell id="s4" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#9C27B0;" value="0" vertex="1">
<mxGeometry height="20" width="20" x="540" y="355" as="geometry" />
</mxCell>
<mxCell id="s5" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#9C27B0;" value="1" vertex="1">
<mxGeometry height="20" width="20" x="640" y="355" as="geometry" />
</mxCell>
<mxCell id="s6" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#9C27B0;" value="0" vertex="1">
<mxGeometry height="20" width="20" x="740" y="355" as="geometry" />
</mxCell>
<mxCell id="s7" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#9C27B0;" value="1" vertex="1">
<mxGeometry height="20" width="20" x="840" y="355" as="geometry" />
</mxCell>
<mxCell id="hex_mosi" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;fontColor=#4CAF50;" value="0x5A" vertex="1">
<mxGeometry height="20" width="80" x="500" y="235" as="geometry" />
</mxCell>
<mxCell id="hex_miso" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;fontColor=#9C27B0;" value="0xA5" vertex="1">
<mxGeometry height="20" width="80" x="500" y="425" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="rtClmdoBArHgyKanjyNo" name="QSPI">
<mxGraphModel dx="2020" dy="1975" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="wEdIyZ0tWglLBkD2GxOT-1" parent="1" style="points=[];gridColor=#e0e0e0;gridSize=20;spacingTop=20;spacingLeft=20;spacingBottom=20;spacingRight=20;html=1;" value="" vertex="1">
<mxGeometry height="440" width="1990" x="10" y="10" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-2" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1;" value="QSPI Fast Read Dual Output (命令 0x3B)" vertex="1">
<mxGeometry height="30" width="500" x="610" y="30" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-3" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" value="MSB" vertex="1">
<mxGeometry height="20" width="40" x="120" y="70" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-4" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" value="LSB" vertex="1">
<mxGeometry height="20" width="40" x="1870" y="70" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-5" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" value="CS" vertex="1">
<mxGeometry height="20" width="50" x="30" y="95" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-6" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" value="SCLK" vertex="1">
<mxGeometry height="20" width="50" x="30" y="195" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-7" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" value="IO0" vertex="1">
<mxGeometry height="20" width="50" x="30" y="285" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-8" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" value="IO1" vertex="1">
<mxGeometry height="20" width="50" x="30" y="385" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-9" edge="1" parent="1" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="510" y="190" as="sourcePoint" />
<mxPoint x="510" y="430" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-10" edge="1" parent="1" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="910" y="190" as="sourcePoint" />
<mxPoint x="910" y="430" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-11" edge="1" parent="1" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="1310" y="190" as="sourcePoint" />
<mxPoint x="1310" y="430" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-12" edge="1" parent="1" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="1710" y="190" as="sourcePoint" />
<mxPoint x="1710" y="430" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-13" edge="1" parent="1" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#FF5722;rounded=0;endArrow=none;" value="">
<mxGeometry as="geometry">
<Array as="points">
<mxPoint x="100" y="90" />
<mxPoint x="100" y="120" />
<mxPoint x="1960" y="120" />
<mxPoint x="1960" y="90" />
</Array>
<mxPoint x="90" y="90" as="sourcePoint" />
<mxPoint x="1970" y="90" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-14" edge="1" parent="1" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#2196F3;rounded=0;endArrow=none;" value="">
<mxGeometry as="geometry">
<Array as="points">
<mxPoint x="110" y="220" />
<mxPoint x="135" y="220" />
<mxPoint x="135" y="190" />
<mxPoint x="160" y="190" />
<mxPoint x="160" y="220" />
<mxPoint x="185" y="220" />
<mxPoint x="185" y="190" />
<mxPoint x="210" y="190" />
<mxPoint x="210" y="220" />
<mxPoint x="235" y="220" />
<mxPoint x="235" y="190" />
<mxPoint x="260" y="190" />
<mxPoint x="260" y="220" />
<mxPoint x="285" y="220" />
<mxPoint x="285" y="190" />
<mxPoint x="310" y="190" />
<mxPoint x="310" y="220" />
<mxPoint x="335" y="220" />
<mxPoint x="335" y="190" />
<mxPoint x="360" y="190" />
<mxPoint x="360" y="220" />
<mxPoint x="385" y="220" />
<mxPoint x="385" y="190" />
<mxPoint x="410" y="190" />
<mxPoint x="410" y="220" />
<mxPoint x="435" y="220" />
<mxPoint x="435" y="190" />
<mxPoint x="460" y="190" />
<mxPoint x="460" y="220" />
<mxPoint x="485" y="220" />
<mxPoint x="485" y="190" />
<mxPoint x="510" y="190" />
<mxPoint x="510" y="220" />
<mxPoint x="535" y="220" />
<mxPoint x="535" y="190" />
<mxPoint x="560" y="190" />
<mxPoint x="560" y="220" />
<mxPoint x="585" y="220" />
<mxPoint x="585" y="190" />
<mxPoint x="610" y="190" />
<mxPoint x="610" y="220" />
<mxPoint x="635" y="220" />
<mxPoint x="635" y="190" />
<mxPoint x="660" y="190" />
<mxPoint x="660" y="220" />
<mxPoint x="685" y="220" />
<mxPoint x="685" y="190" />
<mxPoint x="710" y="190" />
<mxPoint x="710" y="220" />
<mxPoint x="735" y="220" />
<mxPoint x="735" y="190" />
<mxPoint x="760" y="190" />
<mxPoint x="760" y="220" />
<mxPoint x="785" y="220" />
<mxPoint x="785" y="190" />
<mxPoint x="810" y="190" />
<mxPoint x="810" y="220" />
<mxPoint x="835" y="220" />
<mxPoint x="835" y="190" />
<mxPoint x="860" y="190" />
<mxPoint x="860" y="220" />
<mxPoint x="885" y="220" />
<mxPoint x="885" y="190" />
<mxPoint x="910" y="190" />
<mxPoint x="910" y="220" />
<mxPoint x="935" y="220" />
<mxPoint x="935" y="190" />
<mxPoint x="960" y="190" />
<mxPoint x="960" y="220" />
<mxPoint x="985" y="220" />
<mxPoint x="985" y="190" />
<mxPoint x="1010" y="190" />
<mxPoint x="1010" y="220" />
<mxPoint x="1035" y="220" />
<mxPoint x="1035" y="190" />
<mxPoint x="1060" y="190" />
<mxPoint x="1060" y="220" />
<mxPoint x="1085" y="220" />
<mxPoint x="1085" y="190" />
<mxPoint x="1110" y="190" />
<mxPoint x="1110" y="220" />
<mxPoint x="1135" y="220" />
<mxPoint x="1135" y="190" />
<mxPoint x="1160" y="190" />
<mxPoint x="1160" y="220" />
<mxPoint x="1185" y="220" />
<mxPoint x="1185" y="190" />
<mxPoint x="1210" y="190" />
<mxPoint x="1210" y="220" />
<mxPoint x="1235" y="220" />
<mxPoint x="1235" y="190" />
<mxPoint x="1260" y="190" />
<mxPoint x="1260" y="220" />
<mxPoint x="1285" y="220" />
<mxPoint x="1285" y="190" />
<mxPoint x="1310" y="190" />
<mxPoint x="1310" y="220" />
<mxPoint x="1335" y="220" />
<mxPoint x="1335" y="190" />
<mxPoint x="1360" y="190" />
<mxPoint x="1360" y="220" />
<mxPoint x="1385" y="220" />
<mxPoint x="1385" y="190" />
<mxPoint x="1410" y="190" />
<mxPoint x="1410" y="220" />
<mxPoint x="1435" y="220" />
<mxPoint x="1435" y="190" />
<mxPoint x="1460" y="190" />
<mxPoint x="1460" y="220" />
<mxPoint x="1485" y="220" />
<mxPoint x="1485" y="190" />
<mxPoint x="1510" y="190" />
<mxPoint x="1510" y="220" />
<mxPoint x="1535" y="220" />
<mxPoint x="1535" y="190" />
<mxPoint x="1560" y="190" />
<mxPoint x="1560" y="220" />
<mxPoint x="1585" y="220" />
<mxPoint x="1585" y="190" />
<mxPoint x="1610" y="190" />
<mxPoint x="1610" y="220" />
<mxPoint x="1635" y="220" />
<mxPoint x="1635" y="190" />
<mxPoint x="1660" y="190" />
<mxPoint x="1660" y="220" />
<mxPoint x="1685" y="220" />
<mxPoint x="1685" y="190" />
<mxPoint x="1710" y="190" />
<mxPoint x="1710" y="220" />
<mxPoint x="1735" y="220" />
<mxPoint x="1735" y="190" />
<mxPoint x="1760" y="190" />
<mxPoint x="1760" y="220" />
<mxPoint x="1785" y="220" />
<mxPoint x="1785" y="190" />
<mxPoint x="1810" y="190" />
<mxPoint x="1810" y="220" />
<mxPoint x="1835" y="220" />
<mxPoint x="1835" y="190" />
<mxPoint x="1860" y="190" />
<mxPoint x="1860" y="220" />
<mxPoint x="1885" y="220" />
<mxPoint x="1885" y="190" />
<mxPoint x="1910" y="190" />
<mxPoint x="1910" y="220" />
</Array>
<mxPoint x="90" y="220" as="sourcePoint" />
<mxPoint x="1960" y="220" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-15" edge="1" parent="1" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#4CAF50;rounded=0;endArrow=none;" value="">
<mxGeometry as="geometry">
<Array as="points">
<mxPoint x="110" y="320" />
<mxPoint x="160" y="320" />
<mxPoint x="210" y="320" />
<mxPoint x="210" y="290" />
<mxPoint x="260" y="290" />
<mxPoint x="310" y="290" />
<mxPoint x="360" y="290" />
<mxPoint x="360" y="320" />
<mxPoint x="410" y="320" />
<mxPoint x="410" y="290" />
<mxPoint x="460" y="290" />
<mxPoint x="510" y="290" />
<mxPoint x="510" y="320" />
<mxPoint x="560" y="320" />
<mxPoint x="610" y="320" />
<mxPoint x="660" y="320" />
<mxPoint x="660" y="290" />
<mxPoint x="710" y="290" />
<mxPoint x="710" y="320" />
<mxPoint x="760" y="320" />
<mxPoint x="810" y="320" />
<mxPoint x="810" y="290" />
<mxPoint x="860" y="290" />
<mxPoint x="860" y="320" />
<mxPoint x="910" y="320" />
<mxPoint x="960" y="320" />
<mxPoint x="1010" y="320" />
<mxPoint x="1010" y="290" />
<mxPoint x="1060" y="290" />
<mxPoint x="1110" y="290" />
<mxPoint x="1110" y="320" />
<mxPoint x="1160" y="320" />
<mxPoint x="1160" y="290" />
<mxPoint x="1210" y="290" />
<mxPoint x="1210" y="320" />
<mxPoint x="1260" y="320" />
<mxPoint x="1310" y="320" />
<mxPoint x="1360" y="320" />
<mxPoint x="1360" y="290" />
<mxPoint x="1410" y="290" />
<mxPoint x="1410" y="320" />
<mxPoint x="1460" y="320" />
<mxPoint x="1460" y="290" />
<mxPoint x="1510" y="290" />
<mxPoint x="1510" y="320" />
<mxPoint x="1560" y="320" />
<mxPoint x="1560" y="290" />
<mxPoint x="1610" y="290" />
<mxPoint x="1660" y="290" />
<mxPoint x="1660" y="320" />
<mxPoint x="1710" y="320" />
<mxPoint x="1760" y="320" />
<mxPoint x="1810" y="320" />
<mxPoint x="1860" y="320" />
<mxPoint x="1910" y="320" />
</Array>
<mxPoint x="90" y="320" as="sourcePoint" />
<mxPoint x="1960" y="320" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-16" edge="1" parent="1" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#9C27B0;rounded=0;endArrow=none;" value="">
<mxGeometry as="geometry">
<Array as="points">
<mxPoint x="110" y="420" />
<mxPoint x="160" y="420" />
<mxPoint x="210" y="420" />
<mxPoint x="260" y="420" />
<mxPoint x="310" y="420" />
<mxPoint x="360" y="420" />
<mxPoint x="410" y="420" />
<mxPoint x="460" y="420" />
<mxPoint x="510" y="420" />
<mxPoint x="560" y="420" />
<mxPoint x="610" y="420" />
<mxPoint x="660" y="420" />
<mxPoint x="710" y="420" />
<mxPoint x="760" y="420" />
<mxPoint x="810" y="420" />
<mxPoint x="860" y="420" />
<mxPoint x="910" y="420" />
<mxPoint x="960" y="420" />
<mxPoint x="1010" y="420" />
<mxPoint x="1060" y="420" />
<mxPoint x="1110" y="420" />
<mxPoint x="1160" y="420" />
<mxPoint x="1210" y="420" />
<mxPoint x="1260" y="420" />
<mxPoint x="1310" y="420" />
<mxPoint x="1360" y="420" />
<mxPoint x="1410" y="420" />
<mxPoint x="1460" y="420" />
<mxPoint x="1510" y="420" />
<mxPoint x="1560" y="420" />
<mxPoint x="1610" y="420" />
<mxPoint x="1660" y="420" />
<mxPoint x="1710" y="420" />
<mxPoint x="1710" y="390" />
<mxPoint x="1760" y="390" />
<mxPoint x="1810" y="390" />
<mxPoint x="1860" y="390" />
<mxPoint x="1910" y="390" />
</Array>
<mxPoint x="90" y="420" as="sourcePoint" />
<mxPoint x="1960" y="390" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-17" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" value="0" vertex="1">
<mxGeometry height="20" width="20" x="125" y="265" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-18" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" value="0" vertex="1">
<mxGeometry height="20" width="20" x="175" y="265" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-19" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" value="1" vertex="1">
<mxGeometry height="20" width="20" x="225" y="265" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-20" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" value="1" vertex="1">
<mxGeometry height="20" width="20" x="275" y="265" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-21" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" value="1" vertex="1">
<mxGeometry height="20" width="20" x="325" y="265" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-22" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" value="0" vertex="1">
<mxGeometry height="20" width="20" x="375" y="265" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-23" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" value="1" vertex="1">
<mxGeometry height="20" width="20" x="425" y="265" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-24" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" value="1" vertex="1">
<mxGeometry height="20" width="20" x="475" y="265" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-25" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#4CAF50;" value="命令 (0x3B)" vertex="1">
<mxGeometry height="20" width="120" x="250" y="245" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-26" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#666666;" value="地址 [23:16]" vertex="1">
<mxGeometry height="20" width="120" x="650" y="245" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-27" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#666666;" value="地址 [15:8]" vertex="1">
<mxGeometry height="20" width="120" x="1050" y="245" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-28" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#666666;" value="地址 [7:0]" vertex="1">
<mxGeometry height="20" width="120" x="1450" y="245" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-29" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#2196F3;" value="数据 (Dual)" vertex="1">
<mxGeometry height="20" width="120" x="1750" y="245" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-30" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" value="D0" vertex="1">
<mxGeometry height="20" width="20" x="1725" y="265" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-31" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#9C27B0;" value="D1" vertex="1">
<mxGeometry height="20" width="20" x="1725" y="365" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-32" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" value="D2" vertex="1">
<mxGeometry height="20" width="20" x="1775" y="265" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-33" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#9C27B0;" value="D3" vertex="1">
<mxGeometry height="20" width="20" x="1775" y="365" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-34" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" value="D4" vertex="1">
<mxGeometry height="20" width="20" x="1825" y="265" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-35" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#9C27B0;" value="D5" vertex="1">
<mxGeometry height="20" width="20" x="1825" y="365" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-36" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" value="D6" vertex="1">
<mxGeometry height="20" width="20" x="1875" y="265" as="geometry" />
</mxCell>
<mxCell id="wEdIyZ0tWglLBkD2GxOT-37" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#9C27B0;" value="D7" vertex="1">
<mxGeometry height="20" width="20" x="1875" y="365" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="R7-S-4U9xjG8aP-ICxNY" name="第 3 页">
<mxGraphModel dx="1426" dy="1394" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-1" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1;" value="QSPI Quad I/O Fast Read (命令 0xEB)" vertex="1">
<mxGeometry height="30" width="400" x="300" y="60" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-2" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" value="MSB" vertex="1">
<mxGeometry height="20" width="40" x="110" y="100" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-3" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" value="LSB" vertex="1">
<mxGeometry height="20" width="40" x="810" y="100" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-4" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" value="CS" vertex="1">
<mxGeometry height="20" width="50" x="20" y="125" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-5" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" value="SCLK" vertex="1">
<mxGeometry height="20" width="50" x="20" y="225" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-6" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" value="IO0" vertex="1">
<mxGeometry height="20" width="50" x="20" y="315" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-7" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" value="IO1" vertex="1">
<mxGeometry height="20" width="50" x="20" y="415" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-8" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" value="IO2" vertex="1">
<mxGeometry height="20" width="50" x="20" y="515" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-9" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" value="IO3" vertex="1">
<mxGeometry height="20" width="50" x="20" y="615" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-10" edge="1" parent="1" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="500" y="220" as="sourcePoint" />
<mxPoint x="500" y="660" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-11" edge="1" parent="1" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="650" y="220" as="sourcePoint" />
<mxPoint x="650" y="660" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-12" edge="1" parent="1" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="750" y="220" as="sourcePoint" />
<mxPoint x="750" y="660" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-13" edge="1" parent="1" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#FF5722;rounded=0;endArrow=none;" value="">
<mxGeometry as="geometry">
<Array as="points">
<mxPoint x="90" y="120" />
<mxPoint x="90" y="150" />
<mxPoint x="900" y="150" />
<mxPoint x="900" y="120" />
</Array>
<mxPoint x="80" y="120" as="sourcePoint" />
<mxPoint x="910" y="120" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-14" edge="1" parent="1" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#2196F3;rounded=0;endArrow=none;" value="">
<mxGeometry as="geometry">
<Array as="points">
<mxPoint x="100" y="250" />
<mxPoint x="125" y="250" />
<mxPoint x="125" y="220" />
<mxPoint x="150" y="220" />
<mxPoint x="150" y="250" />
<mxPoint x="175" y="250" />
<mxPoint x="175" y="220" />
<mxPoint x="200" y="220" />
<mxPoint x="200" y="250" />
<mxPoint x="225" y="250" />
<mxPoint x="225" y="220" />
<mxPoint x="250" y="220" />
<mxPoint x="250" y="250" />
<mxPoint x="275" y="250" />
<mxPoint x="275" y="220" />
<mxPoint x="300" y="220" />
<mxPoint x="300" y="250" />
<mxPoint x="325" y="250" />
<mxPoint x="325" y="220" />
<mxPoint x="350" y="220" />
<mxPoint x="350" y="250" />
<mxPoint x="375" y="250" />
<mxPoint x="375" y="220" />
<mxPoint x="400" y="220" />
<mxPoint x="400" y="250" />
<mxPoint x="425" y="250" />
<mxPoint x="425" y="220" />
<mxPoint x="450" y="220" />
<mxPoint x="450" y="250" />
<mxPoint x="475" y="250" />
<mxPoint x="475" y="220" />
<mxPoint x="500" y="220" />
<mxPoint x="500" y="250" />
<mxPoint x="525" y="250" />
<mxPoint x="525" y="220" />
<mxPoint x="550" y="220" />
<mxPoint x="550" y="250" />
<mxPoint x="575" y="250" />
<mxPoint x="575" y="220" />
<mxPoint x="600" y="220" />
<mxPoint x="600" y="250" />
<mxPoint x="625" y="250" />
<mxPoint x="625" y="220" />
<mxPoint x="650" y="220" />
<mxPoint x="650" y="250" />
<mxPoint x="675" y="250" />
<mxPoint x="675" y="220" />
<mxPoint x="700" y="220" />
<mxPoint x="700" y="250" />
<mxPoint x="725" y="250" />
<mxPoint x="725" y="220" />
<mxPoint x="750" y="220" />
<mxPoint x="750" y="250" />
<mxPoint x="775" y="250" />
<mxPoint x="775" y="220" />
<mxPoint x="800" y="220" />
<mxPoint x="800" y="250" />
<mxPoint x="825" y="250" />
<mxPoint x="825" y="220" />
<mxPoint x="850" y="220" />
<mxPoint x="850" y="250" />
</Array>
<mxPoint x="80" y="250" as="sourcePoint" />
<mxPoint x="900" y="250" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-15" edge="1" parent="1" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#4CAF50;rounded=0;endArrow=none;" value="">
<mxGeometry as="geometry">
<Array as="points">
<mxPoint x="100" y="320" />
<mxPoint x="150" y="320" />
<mxPoint x="200" y="320" />
<mxPoint x="250" y="320" />
<mxPoint x="250" y="350" />
<mxPoint x="300" y="350" />
<mxPoint x="300" y="320" />
<mxPoint x="350" y="320" />
<mxPoint x="350" y="350" />
<mxPoint x="400" y="350" />
<mxPoint x="400" y="320" />
<mxPoint x="450" y="320" />
<mxPoint x="500" y="320" />
<mxPoint x="500" y="350" />
<mxPoint x="550" y="350" />
<mxPoint x="600" y="350" />
<mxPoint x="650" y="350" />
<mxPoint x="700" y="350" />
<mxPoint x="750" y="350" />
<mxPoint x="750" y="320" />
<mxPoint x="800" y="320" />
<mxPoint x="850" y="320" />
</Array>
<mxPoint x="80" y="320" as="sourcePoint" />
<mxPoint x="900" y="320" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-16" edge="1" parent="1" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#9C27B0;rounded=0;endArrow=none;" value="">
<mxGeometry as="geometry">
<Array as="points">
<mxPoint x="100" y="450" />
<mxPoint x="150" y="450" />
<mxPoint x="200" y="450" />
<mxPoint x="250" y="450" />
<mxPoint x="300" y="450" />
<mxPoint x="350" y="450" />
<mxPoint x="400" y="450" />
<mxPoint x="450" y="450" />
<mxPoint x="500" y="450" />
<mxPoint x="550" y="450" />
<mxPoint x="600" y="450" />
<mxPoint x="650" y="450" />
<mxPoint x="700" y="450" />
<mxPoint x="750" y="450" />
<mxPoint x="800" y="450" />
<mxPoint x="850" y="450" />
</Array>
<mxPoint x="80" y="450" as="sourcePoint" />
<mxPoint x="900" y="450" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-17" edge="1" parent="1" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#FFC107;rounded=0;endArrow=none;" value="">
<mxGeometry as="geometry">
<Array as="points">
<mxPoint x="100" y="550" />
<mxPoint x="150" y="550" />
<mxPoint x="200" y="550" />
<mxPoint x="250" y="550" />
<mxPoint x="300" y="550" />
<mxPoint x="350" y="550" />
<mxPoint x="400" y="550" />
<mxPoint x="450" y="550" />
<mxPoint x="500" y="550" />
<mxPoint x="550" y="550" />
<mxPoint x="550" y="520" />
<mxPoint x="600" y="520" />
<mxPoint x="650" y="520" />
<mxPoint x="650" y="550" />
<mxPoint x="700" y="550" />
<mxPoint x="750" y="550" />
<mxPoint x="750" y="520" />
<mxPoint x="800" y="520" />
<mxPoint x="850" y="520" />
</Array>
<mxPoint x="80" y="550" as="sourcePoint" />
<mxPoint x="900" y="520" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-18" edge="1" parent="1" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#607D8B;rounded=0;endArrow=none;" value="">
<mxGeometry as="geometry">
<Array as="points">
<mxPoint x="100" y="650" />
<mxPoint x="150" y="650" />
<mxPoint x="200" y="650" />
<mxPoint x="250" y="650" />
<mxPoint x="300" y="650" />
<mxPoint x="350" y="650" />
<mxPoint x="400" y="650" />
<mxPoint x="450" y="650" />
<mxPoint x="500" y="650" />
<mxPoint x="500" y="620" />
<mxPoint x="550" y="620" />
<mxPoint x="550" y="650" />
<mxPoint x="600" y="650" />
<mxPoint x="600" y="620" />
<mxPoint x="650" y="620" />
<mxPoint x="650" y="650" />
<mxPoint x="700" y="650" />
<mxPoint x="750" y="650" />
<mxPoint x="800" y="650" />
<mxPoint x="850" y="650" />
</Array>
<mxPoint x="80" y="650" as="sourcePoint" />
<mxPoint x="900" y="650" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-19" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#4CAF50;" value="命令 (0xEB)" vertex="1">
<mxGeometry height="20" width="120" x="240" y="275" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-20" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#666666;" value="地址 (Quad)" vertex="1">
<mxGeometry height="20" width="120" x="515" y="275" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-21" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#666666;" value="空周期 (2)" vertex="1">
<mxGeometry height="20" width="120" x="640" y="275" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-22" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#2196F3;" value="数据 (Quad 0xAA)" vertex="1">
<mxGeometry height="20" width="120" x="740" y="275" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-23" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" value="1" vertex="1">
<mxGeometry height="20" width="20" x="115" y="295" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-24" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" value="1" vertex="1">
<mxGeometry height="20" width="20" x="165" y="295" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-25" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" value="1" vertex="1">
<mxGeometry height="20" width="20" x="215" y="295" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-26" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" value="0" vertex="1">
<mxGeometry height="20" width="20" x="265" y="295" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-27" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" value="1" vertex="1">
<mxGeometry height="20" width="20" x="315" y="295" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-28" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" value="0" vertex="1">
<mxGeometry height="20" width="20" x="365" y="295" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-29" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" value="1" vertex="1">
<mxGeometry height="20" width="20" x="415" y="295" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-30" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" value="1" vertex="1">
<mxGeometry height="20" width="20" x="465" y="295" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-31" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" value="A23" vertex="1">
<mxGeometry height="20" width="30" x="510" y="575" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-32" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" value="A19" vertex="1">
<mxGeometry height="20" width="30" x="560" y="575" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-33" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" value="A15" vertex="1">
<mxGeometry height="20" width="30" x="610" y="575" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-34" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" value="A22" vertex="1">
<mxGeometry height="20" width="30" x="510" y="480" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-35" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" value="A18" vertex="1">
<mxGeometry height="20" width="30" x="560" y="480" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-36" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" value="A14" vertex="1">
<mxGeometry height="20" width="30" x="610" y="480" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-37" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#FFC107;" value="A21" vertex="1">
<mxGeometry height="20" width="30" x="510" y="395" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-38" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#FFC107;" value="A17" vertex="1">
<mxGeometry height="20" width="30" x="560" y="395" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-39" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#FFC107;" value="A13" vertex="1">
<mxGeometry height="20" width="30" x="610" y="395" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-40" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#607D8B;" value="A20" vertex="1">
<mxGeometry height="20" width="30" x="510" y="295" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-41" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#607D8B;" value="A16" vertex="1">
<mxGeometry height="20" width="30" x="560" y="295" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-42" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#607D8B;" value="A12" vertex="1">
<mxGeometry height="20" width="30" x="610" y="295" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-43" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" value="D0" vertex="1">
<mxGeometry height="20" width="20" x="765" y="295" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-44" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#4CAF50;" value="D4" vertex="1">
<mxGeometry height="20" width="20" x="810" y="295" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-45" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" value="D1" vertex="1">
<mxGeometry height="20" width="20" x="765" y="480" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-46" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#9C27B0;" value="D5" vertex="1">
<mxGeometry height="20" width="20" x="807" y="480" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-47" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#FFC107;" value="D2" vertex="1">
<mxGeometry height="20" width="20" x="760" y="395" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-48" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#FFC107;" value="D6" vertex="1">
<mxGeometry height="20" width="20" x="807" y="395" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-49" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#607D8B;" value="D3" vertex="1">
<mxGeometry height="20" width="20" x="760" y="575" as="geometry" />
</mxCell>
<mxCell id="Rpu2YiTbEjEEDBTAPRj_-50" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontColor=#607D8B;" value="D7" vertex="1">
<mxGeometry height="20" width="20" x="807" y="575" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 411 KiB

View File

@@ -0,0 +1,197 @@
import xml.etree.ElementTree as ET
def make_mxfile():
# 基础参数
y_cs_high, y_cs_low = 80, 110
y_sclk_high, y_sclk_low = 180, 210
y_mosi_high, y_mosi_low = 280, 310
y_miso_high, y_miso_low = 380, 410
# 8个bit周期每个100px从x=100开始到x=900结束
rise_edges = [150, 250, 350, 450, 550, 650, 750, 850]
fall_edges = [190, 290, 390, 490, 590, 690, 790, 890]
# MOSI: 0x5A = 0b01011010, MSB first
mosi_bits = [0, 1, 0, 1, 1, 0, 1, 0]
# MISO: 0xA5 = 0b10100101, MSB first
miso_bits = [1, 0, 1, 0, 0, 1, 0, 1]
lines = []
lines.append('<?xml version="1.0" encoding="UTF-8"?>')
lines.append('<mxfile host="app.diagrams.net" modified="2024-05-25T00:00:00.000Z" agent="AI" version="21.0.0" type="device">')
lines.append(' <diagram name="SPI Waveform" id="spi_waveform">')
lines.append(' <mxGraphModel dx="1000" dy="600" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1000" pageHeight="600" math="0" shadow="0">')
lines.append(' <root>')
lines.append(' <mxCell id="0"/>')
lines.append(' <mxCell id="1" parent="0"/>')
# 背景网格
lines.append(' <mxCell id="grid" value="" style="points=[];gridColor=#e0e0e0;gridSize=20;spacingTop=20;spacingLeft=20;spacingBottom=20;spacingRight=20;html=1;" vertex="1" parent="1">')
lines.append(' <mxGeometry x="0" y="0" width="1000" height="600" as="geometry"/>')
lines.append(' </mxCell>')
# 标题
lines.append(' <mxCell id="title" value="SPI 全双工传输 (模式 0: CPOL=0, CPHA=0)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1;" vertex="1" parent="1">')
lines.append(' <mxGeometry x="300" y="20" width="400" height="30" as="geometry"/>')
lines.append(' </mxCell>')
# MSB / LSB
lines.append(' <mxCell id="msb" value="MSB" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" vertex="1" parent="1">')
lines.append(' <mxGeometry x="130" y="60" width="40" height="20" as="geometry"/>')
lines.append(' </mxCell>')
lines.append(' <mxCell id="lsb" value="LSB" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" vertex="1" parent="1">')
lines.append(' <mxGeometry x="880" y="60" width="40" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# 信号标签
for label, y, eid in [("CS", 85, "label_cs"), ("SCLK", 185, "label_sclk"),
("MOSI", 275, "label_mosi"), ("MISO", 365, "label_miso")]:
lines.append(f' <mxCell id="{eid}" value="{label}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="20" y="{y}" width="50" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# 垂直参考虚线(放在每个上升沿采样点)
for i, x in enumerate(rise_edges):
lines.append(f' <mxCell id="vl_{x}" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">')
lines.append(' <mxGeometry width="50" height="50" relative="1" as="geometry">')
lines.append(f' <mxPoint x="{x}" y="180" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{x}" y="420" as="targetPoint"/>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# CS 波形
cs_points = [
(80, y_cs_high), (90, y_cs_high), (90, y_cs_low), (910, y_cs_low),
(910, y_cs_high), (920, y_cs_high)
]
lines.append(' <mxCell id="cs" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#FF5722;rounded=0;endArrow=none;" edge="1" parent="1">')
lines.append(' <mxGeometry relative="0" as="geometry">')
lines.append(f' <mxPoint x="{cs_points[0][0]}" y="{cs_points[0][1]}" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{cs_points[-1][0]}" y="{cs_points[-1][1]}" as="targetPoint"/>')
lines.append(' <Array as="points">')
for x, y in cs_points[1:-1]:
lines.append(f' <mxPoint x="{x}" y="{y}"/>')
lines.append(' </Array>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# SCLK 波形
sclk_pts = [(80, y_sclk_low), (100, y_sclk_low)]
for rise, fall in zip(rise_edges, fall_edges):
sclk_pts.extend([
(rise, y_sclk_low),
(rise, y_sclk_high),
(fall, y_sclk_high),
(fall, y_sclk_low),
])
sclk_pts.append((920, y_sclk_low))
lines.append(' <mxCell id="sclk" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#2196F3;rounded=0;endArrow=none;" edge="1" parent="1">')
lines.append(' <mxGeometry relative="0" as="geometry">')
lines.append(f' <mxPoint x="{sclk_pts[0][0]}" y="{sclk_pts[0][1]}" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{sclk_pts[-1][0]}" y="{sclk_pts[-1][1]}" as="targetPoint"/>')
lines.append(' <Array as="points">')
for x, y in sclk_pts[1:-1]:
lines.append(f' <mxPoint x="{x}" y="{y}"/>')
lines.append(' </Array>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# MOSI 波形
mosi_start_y = y_mosi_high if mosi_bits[0] else y_mosi_low
mosi_pts = [(80, mosi_start_y), (100, mosi_start_y)]
for i, bit in enumerate(mosi_bits):
y_level = y_mosi_high if bit else y_mosi_low
end_x = fall_edges[i] if i < len(fall_edges) else 900
mosi_pts.append((end_x, y_level))
if i + 1 < len(mosi_bits):
y_next = y_mosi_high if mosi_bits[i+1] else y_mosi_low
if y_next != y_level:
mosi_pts.append((end_x, y_next))
mosi_pts.append((920, mosi_pts[-1][1]))
lines.append(' <mxCell id="mosi" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#4CAF50;rounded=0;endArrow=none;" edge="1" parent="1">')
lines.append(' <mxGeometry relative="0" as="geometry">')
lines.append(f' <mxPoint x="{mosi_pts[0][0]}" y="{mosi_pts[0][1]}" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{mosi_pts[-1][0]}" y="{mosi_pts[-1][1]}" as="targetPoint"/>')
lines.append(' <Array as="points">')
for x, y in mosi_pts[1:-1]:
lines.append(f' <mxPoint x="{x}" y="{y}"/>')
lines.append(' </Array>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# MISO 波形 — 修复sourcePoint 与第一个中间点同 y避免斜线
miso_start_y = y_miso_high if miso_bits[0] else y_miso_low
miso_pts = [(80, miso_start_y), (100, miso_start_y)]
for i, bit in enumerate(miso_bits):
y_level = y_miso_high if bit else y_miso_low
end_x = fall_edges[i] if i < len(fall_edges) else 900
miso_pts.append((end_x, y_level))
if i + 1 < len(miso_bits):
y_next = y_miso_high if miso_bits[i+1] else y_miso_low
if y_next != y_level:
miso_pts.append((end_x, y_next))
miso_pts.append((920, miso_pts[-1][1]))
lines.append(' <mxCell id="miso" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#9C27B0;rounded=0;endArrow=none;" edge="1" parent="1">')
lines.append(' <mxGeometry relative="0" as="geometry">')
lines.append(f' <mxPoint x="{miso_pts[0][0]}" y="{miso_pts[0][1]}" as="sourcePoint"/>')
lines.append(f' <mxPoint x="{miso_pts[-1][0]}" y="{miso_pts[-1][1]}" as="targetPoint"/>')
lines.append(' <Array as="points">')
for x, y in miso_pts[1:-1]:
lines.append(f' <mxPoint x="{x}" y="{y}"/>')
lines.append(' </Array>')
lines.append(' </mxGeometry>')
lines.append(' </mxCell>')
# MOSI 数据位标签
mosi_centers = [145, 240, 340, 440, 540, 640, 740, 840]
for i, (bit, cx) in enumerate(zip(mosi_bits, mosi_centers)):
lines.append(f' <mxCell id="m{i}" value="{bit}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#4CAF50;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{cx}" y="255" width="20" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# MISO 数据位标签
miso_centers = [145, 240, 340, 440, 540, 640, 740, 840]
for i, (bit, cx) in enumerate(zip(miso_bits, miso_centers)):
lines.append(f' <mxCell id="s{i}" value="{bit}" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#9C27B0;" vertex="1" parent="1">')
lines.append(f' <mxGeometry x="{cx}" y="355" width="20" height="20" as="geometry"/>')
lines.append(' </mxCell>')
# 数据包标注
lines.append(' <mxCell id="hex_mosi" value="0x5A" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;fontColor=#4CAF50;" vertex="1" parent="1">')
lines.append(' <mxGeometry x="500" y="235" width="80" height="20" as="geometry"/>')
lines.append(' </mxCell>')
lines.append(' <mxCell id="hex_miso" value="0xA5" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;fontColor=#9C27B0;" vertex="1" parent="1">')
lines.append(' <mxGeometry x="500" y="425" width="80" height="20" as="geometry"/>')
lines.append(' </mxCell>')
lines.append(' </root>')
lines.append(' </mxGraphModel>')
lines.append(' </diagram>')
lines.append('</mxfile>')
return "\n".join(lines)
xml_content = make_mxfile()
output_path = "SPI_Waveform_CPHA0_Corrected.drawio"
with open(output_path, "w", encoding="utf-8") as f:
f.write(xml_content)
# 验证 MISO 起始点
import re
with open(output_path, "r", encoding="utf-8") as f:
content = f.read()
match = re.search(r'id="miso".*?<Array as="points">(.*?)</Array>', content, re.DOTALL)
if match:
pts = re.findall(r'<mxPoint x="(\d+)" y="(\d+)"/>', match.group(1))
print("MISO 点:")
for x, y in pts[:4]:
print(f" ({x}, {y})")
src = re.search(r'id="miso".*?<mxPoint x="(\d+)" y="(\d+)" as="sourcePoint"/>', content)
if src:
print(f"sourcePoint: ({src.group(1)}, {src.group(2)})")
print("\n文件已保存:", output_path)

View File

@@ -0,0 +1,396 @@
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2024-05-25T00:00:00.000Z" agent="AI" version="21.0.0" type="device">
<diagram name="QSPI Waveform" id="qspi_waveform">
<mxGraphModel dx="2000" dy="600" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2000" pageHeight="600" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="grid" value="" style="points=[];gridColor=#e0e0e0;gridSize=20;spacingTop=20;spacingLeft=20;spacingBottom=20;spacingRight=20;html=1;" vertex="1" parent="1">
<mxGeometry x="0" y="0" width="2100" height="600" as="geometry"/>
</mxCell>
<mxCell id="title" value="QSPI Fast Read Dual Output (命令 0x3B)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="600" y="20" width="500" height="30" as="geometry"/>
</mxCell>
<mxCell id="msb" value="MSB" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="110" y="60" width="40" height="20" as="geometry"/>
</mxCell>
<mxCell id="lsb" value="LSB" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontColor=#666666;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="1860" y="60" width="40" height="20" as="geometry"/>
</mxCell>
<mxCell id="label_cs" value="CS" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="85" width="50" height="20" as="geometry"/>
</mxCell>
<mxCell id="label_sclk" value="SCLK" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="185" width="50" height="20" as="geometry"/>
</mxCell>
<mxCell id="label_io0" value="IO0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="275" width="50" height="20" as="geometry"/>
</mxCell>
<mxCell id="label_io1" value="IO1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="375" width="50" height="20" as="geometry"/>
</mxCell>
<mxCell id="vl_cmd_addr" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="500" y="180" as="sourcePoint"/>
<mxPoint x="500" y="420" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="vl_addr_mid1" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="900" y="180" as="sourcePoint"/>
<mxPoint x="900" y="420" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="vl_addr_mid2" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1300" y="180" as="sourcePoint"/>
<mxPoint x="1300" y="420" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="vl_addr_data" value="" style="endArrow=none;html=1;strokeWidth=1;strokeColor=#CCCCCC;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1700" y="180" as="sourcePoint"/>
<mxPoint x="1700" y="420" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="cs" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#FF5722;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="80" as="sourcePoint"/>
<mxPoint x="1960" y="80" as="targetPoint"/>
<Array as="points">
<mxPoint x="90" y="80"/>
<mxPoint x="90" y="110"/>
<mxPoint x="1950" y="110"/>
<mxPoint x="1950" y="80"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="sclk" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#2196F3;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="210" as="sourcePoint"/>
<mxPoint x="1950" y="210" as="targetPoint"/>
<Array as="points">
<mxPoint x="100" y="210"/>
<mxPoint x="125" y="210"/>
<mxPoint x="125" y="180"/>
<mxPoint x="150" y="180"/>
<mxPoint x="150" y="210"/>
<mxPoint x="175" y="210"/>
<mxPoint x="175" y="180"/>
<mxPoint x="200" y="180"/>
<mxPoint x="200" y="210"/>
<mxPoint x="225" y="210"/>
<mxPoint x="225" y="180"/>
<mxPoint x="250" y="180"/>
<mxPoint x="250" y="210"/>
<mxPoint x="275" y="210"/>
<mxPoint x="275" y="180"/>
<mxPoint x="300" y="180"/>
<mxPoint x="300" y="210"/>
<mxPoint x="325" y="210"/>
<mxPoint x="325" y="180"/>
<mxPoint x="350" y="180"/>
<mxPoint x="350" y="210"/>
<mxPoint x="375" y="210"/>
<mxPoint x="375" y="180"/>
<mxPoint x="400" y="180"/>
<mxPoint x="400" y="210"/>
<mxPoint x="425" y="210"/>
<mxPoint x="425" y="180"/>
<mxPoint x="450" y="180"/>
<mxPoint x="450" y="210"/>
<mxPoint x="475" y="210"/>
<mxPoint x="475" y="180"/>
<mxPoint x="500" y="180"/>
<mxPoint x="500" y="210"/>
<mxPoint x="525" y="210"/>
<mxPoint x="525" y="180"/>
<mxPoint x="550" y="180"/>
<mxPoint x="550" y="210"/>
<mxPoint x="575" y="210"/>
<mxPoint x="575" y="180"/>
<mxPoint x="600" y="180"/>
<mxPoint x="600" y="210"/>
<mxPoint x="625" y="210"/>
<mxPoint x="625" y="180"/>
<mxPoint x="650" y="180"/>
<mxPoint x="650" y="210"/>
<mxPoint x="675" y="210"/>
<mxPoint x="675" y="180"/>
<mxPoint x="700" y="180"/>
<mxPoint x="700" y="210"/>
<mxPoint x="725" y="210"/>
<mxPoint x="725" y="180"/>
<mxPoint x="750" y="180"/>
<mxPoint x="750" y="210"/>
<mxPoint x="775" y="210"/>
<mxPoint x="775" y="180"/>
<mxPoint x="800" y="180"/>
<mxPoint x="800" y="210"/>
<mxPoint x="825" y="210"/>
<mxPoint x="825" y="180"/>
<mxPoint x="850" y="180"/>
<mxPoint x="850" y="210"/>
<mxPoint x="875" y="210"/>
<mxPoint x="875" y="180"/>
<mxPoint x="900" y="180"/>
<mxPoint x="900" y="210"/>
<mxPoint x="925" y="210"/>
<mxPoint x="925" y="180"/>
<mxPoint x="950" y="180"/>
<mxPoint x="950" y="210"/>
<mxPoint x="975" y="210"/>
<mxPoint x="975" y="180"/>
<mxPoint x="1000" y="180"/>
<mxPoint x="1000" y="210"/>
<mxPoint x="1025" y="210"/>
<mxPoint x="1025" y="180"/>
<mxPoint x="1050" y="180"/>
<mxPoint x="1050" y="210"/>
<mxPoint x="1075" y="210"/>
<mxPoint x="1075" y="180"/>
<mxPoint x="1100" y="180"/>
<mxPoint x="1100" y="210"/>
<mxPoint x="1125" y="210"/>
<mxPoint x="1125" y="180"/>
<mxPoint x="1150" y="180"/>
<mxPoint x="1150" y="210"/>
<mxPoint x="1175" y="210"/>
<mxPoint x="1175" y="180"/>
<mxPoint x="1200" y="180"/>
<mxPoint x="1200" y="210"/>
<mxPoint x="1225" y="210"/>
<mxPoint x="1225" y="180"/>
<mxPoint x="1250" y="180"/>
<mxPoint x="1250" y="210"/>
<mxPoint x="1275" y="210"/>
<mxPoint x="1275" y="180"/>
<mxPoint x="1300" y="180"/>
<mxPoint x="1300" y="210"/>
<mxPoint x="1325" y="210"/>
<mxPoint x="1325" y="180"/>
<mxPoint x="1350" y="180"/>
<mxPoint x="1350" y="210"/>
<mxPoint x="1375" y="210"/>
<mxPoint x="1375" y="180"/>
<mxPoint x="1400" y="180"/>
<mxPoint x="1400" y="210"/>
<mxPoint x="1425" y="210"/>
<mxPoint x="1425" y="180"/>
<mxPoint x="1450" y="180"/>
<mxPoint x="1450" y="210"/>
<mxPoint x="1475" y="210"/>
<mxPoint x="1475" y="180"/>
<mxPoint x="1500" y="180"/>
<mxPoint x="1500" y="210"/>
<mxPoint x="1525" y="210"/>
<mxPoint x="1525" y="180"/>
<mxPoint x="1550" y="180"/>
<mxPoint x="1550" y="210"/>
<mxPoint x="1575" y="210"/>
<mxPoint x="1575" y="180"/>
<mxPoint x="1600" y="180"/>
<mxPoint x="1600" y="210"/>
<mxPoint x="1625" y="210"/>
<mxPoint x="1625" y="180"/>
<mxPoint x="1650" y="180"/>
<mxPoint x="1650" y="210"/>
<mxPoint x="1675" y="210"/>
<mxPoint x="1675" y="180"/>
<mxPoint x="1700" y="180"/>
<mxPoint x="1700" y="210"/>
<mxPoint x="1725" y="210"/>
<mxPoint x="1725" y="180"/>
<mxPoint x="1750" y="180"/>
<mxPoint x="1750" y="210"/>
<mxPoint x="1775" y="210"/>
<mxPoint x="1775" y="180"/>
<mxPoint x="1800" y="180"/>
<mxPoint x="1800" y="210"/>
<mxPoint x="1825" y="210"/>
<mxPoint x="1825" y="180"/>
<mxPoint x="1850" y="180"/>
<mxPoint x="1850" y="210"/>
<mxPoint x="1875" y="210"/>
<mxPoint x="1875" y="180"/>
<mxPoint x="1900" y="180"/>
<mxPoint x="1900" y="210"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="io0" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#4CAF50;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="310" as="sourcePoint"/>
<mxPoint x="1950" y="310" as="targetPoint"/>
<Array as="points">
<mxPoint x="100" y="310"/>
<mxPoint x="150" y="310"/>
<mxPoint x="200" y="310"/>
<mxPoint x="200" y="280"/>
<mxPoint x="250" y="280"/>
<mxPoint x="300" y="280"/>
<mxPoint x="350" y="280"/>
<mxPoint x="350" y="310"/>
<mxPoint x="400" y="310"/>
<mxPoint x="400" y="280"/>
<mxPoint x="450" y="280"/>
<mxPoint x="500" y="280"/>
<mxPoint x="500" y="310"/>
<mxPoint x="550" y="310"/>
<mxPoint x="600" y="310"/>
<mxPoint x="650" y="310"/>
<mxPoint x="650" y="280"/>
<mxPoint x="700" y="280"/>
<mxPoint x="700" y="310"/>
<mxPoint x="750" y="310"/>
<mxPoint x="800" y="310"/>
<mxPoint x="800" y="280"/>
<mxPoint x="850" y="280"/>
<mxPoint x="850" y="310"/>
<mxPoint x="900" y="310"/>
<mxPoint x="950" y="310"/>
<mxPoint x="1000" y="310"/>
<mxPoint x="1000" y="280"/>
<mxPoint x="1050" y="280"/>
<mxPoint x="1100" y="280"/>
<mxPoint x="1100" y="310"/>
<mxPoint x="1150" y="310"/>
<mxPoint x="1150" y="280"/>
<mxPoint x="1200" y="280"/>
<mxPoint x="1200" y="310"/>
<mxPoint x="1250" y="310"/>
<mxPoint x="1300" y="310"/>
<mxPoint x="1350" y="310"/>
<mxPoint x="1350" y="280"/>
<mxPoint x="1400" y="280"/>
<mxPoint x="1400" y="310"/>
<mxPoint x="1450" y="310"/>
<mxPoint x="1450" y="280"/>
<mxPoint x="1500" y="280"/>
<mxPoint x="1500" y="310"/>
<mxPoint x="1550" y="310"/>
<mxPoint x="1550" y="280"/>
<mxPoint x="1600" y="280"/>
<mxPoint x="1650" y="280"/>
<mxPoint x="1650" y="310"/>
<mxPoint x="1700" y="310"/>
<mxPoint x="1750" y="310"/>
<mxPoint x="1800" y="310"/>
<mxPoint x="1850" y="310"/>
<mxPoint x="1900" y="310"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="io1" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#9C27B0;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="410" as="sourcePoint"/>
<mxPoint x="1950" y="380" as="targetPoint"/>
<Array as="points">
<mxPoint x="100" y="410"/>
<mxPoint x="150" y="410"/>
<mxPoint x="200" y="410"/>
<mxPoint x="250" y="410"/>
<mxPoint x="300" y="410"/>
<mxPoint x="350" y="410"/>
<mxPoint x="400" y="410"/>
<mxPoint x="450" y="410"/>
<mxPoint x="500" y="410"/>
<mxPoint x="550" y="410"/>
<mxPoint x="600" y="410"/>
<mxPoint x="650" y="410"/>
<mxPoint x="700" y="410"/>
<mxPoint x="750" y="410"/>
<mxPoint x="800" y="410"/>
<mxPoint x="850" y="410"/>
<mxPoint x="900" y="410"/>
<mxPoint x="950" y="410"/>
<mxPoint x="1000" y="410"/>
<mxPoint x="1050" y="410"/>
<mxPoint x="1100" y="410"/>
<mxPoint x="1150" y="410"/>
<mxPoint x="1200" y="410"/>
<mxPoint x="1250" y="410"/>
<mxPoint x="1300" y="410"/>
<mxPoint x="1350" y="410"/>
<mxPoint x="1400" y="410"/>
<mxPoint x="1450" y="410"/>
<mxPoint x="1500" y="410"/>
<mxPoint x="1550" y="410"/>
<mxPoint x="1600" y="410"/>
<mxPoint x="1650" y="410"/>
<mxPoint x="1700" y="410"/>
<mxPoint x="1700" y="380"/>
<mxPoint x="1750" y="380"/>
<mxPoint x="1800" y="380"/>
<mxPoint x="1850" y="380"/>
<mxPoint x="1900" y="380"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="cmd0" value="0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="115" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd1" value="0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="165" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd2" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="215" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd3" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="265" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd4" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="315" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd5" value="0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="365" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd6" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="415" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="cmd7" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="465" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="stage_命令 (" value="命令 (0x3B)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="240" y="235" width="120" height="20" as="geometry"/>
</mxCell>
<mxCell id="stage_地址 [" value="地址 [23:16]" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#666666;" vertex="1" parent="1">
<mxGeometry x="640" y="235" width="120" height="20" as="geometry"/>
</mxCell>
<mxCell id="stage_地址 [" value="地址 [15:8]" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#666666;" vertex="1" parent="1">
<mxGeometry x="1040" y="235" width="120" height="20" as="geometry"/>
</mxCell>
<mxCell id="stage_地址 [" value="地址 [7:0]" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#666666;" vertex="1" parent="1">
<mxGeometry x="1440" y="235" width="120" height="20" as="geometry"/>
</mxCell>
<mxCell id="stage_数据 (" value="数据 (Dual)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=13;fontStyle=1;fontColor=#2196F3;" vertex="1" parent="1">
<mxGeometry x="1740" y="235" width="120" height="20" as="geometry"/>
</mxCell>
<mxCell id="d0_0" value="D0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="1715" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="d1_0" value="D1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="1715" y="355" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="d0_1" value="D2" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="1765" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="d1_1" value="D3" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="1765" y="355" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="d0_2" value="D4" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="1815" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="d1_2" value="D5" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="1815" y="355" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="d0_3" value="D6" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#4CAF50;" vertex="1" parent="1">
<mxGeometry x="1865" y="255" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="d1_3" value="D7" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#9C27B0;" vertex="1" parent="1">
<mxGeometry x="1865" y="355" width="20" height="20" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

BIN
docs/绘图/ops 作用.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 710 KiB

154
docs/绘图/test.drawio Normal file
View File

@@ -0,0 +1,154 @@
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2024-05-20T10:00:00.000Z" agent="Drawio_Waveform_Generator" version="24.0.0">
<diagram id="qspi_fastread_0xeb" name="QSPI_FastRead_0xEB">
<mxGraphModel dx="1100" dy="700" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="700" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<!-- 标题 -->
<mxCell id="title" value="Quad I/O Fast Read (0xEB) Timing Diagram" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1" vertex="1" parent="1">
<mxGeometry x="100" y="20" width="900" height="30" as="geometry"/>
</mxCell>
<!-- 信号标签 -->
<mxCell id="lbl_cs" value="CS" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;fontSize=12;fontStyle=1" vertex="1" parent="1"><mxGeometry x="20" y="95" width="60" height="20" as="geometry"/></mxCell>
<mxCell id="lbl_sclk" value="SCLK" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;fontSize=12;fontStyle=1" vertex="1" parent="1"><mxGeometry x="20" y="195" width="60" height="20" as="geometry"/></mxCell>
<mxCell id="lbl_io0" value="IO0" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;fontSize=12;fontStyle=1" vertex="1" parent="1"><mxGeometry x="20" y="295" width="60" height="20" as="geometry"/></mxCell>
<mxCell id="lbl_io1" value="IO1" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;fontSize=12;fontStyle=1" vertex="1" parent="1"><mxGeometry x="20" y="395" width="60" height="20" as="geometry"/></mxCell>
<mxCell id="lbl_io2" value="IO2" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;fontSize=12;fontStyle=1" vertex="1" parent="1"><mxGeometry x="20" y="495" width="60" height="20" as="geometry"/></mxCell>
<mxCell id="lbl_io3" value="IO3" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;fontSize=12;fontStyle=1" vertex="1" parent="1"><mxGeometry x="20" y="595" width="60" height="20" as="geometry"/></mxCell>
<!-- MSB/LSB 标记 -->
<mxCell id="msb" value="MSB" style="text;html=1;strokeColor=none;fillColor=none;align=center;fontSize=10;fontStyle=2" vertex="1" parent="1"><mxGeometry x="100" y="260" width="40" height="20" as="geometry"/></mxCell>
<mxCell id="lsb" value="LSB" style="text;html=1;strokeColor=none;fillColor=none;align=center;fontSize=10;fontStyle=2" vertex="1" parent="1"><mxGeometry x="980" y="260" width="40" height="20" as="geometry"/></mxCell>
<!-- 阶段分界虚线 -->
<mxCell id="div_cmd_addr" value="" style="endArrow=none;dashed=1;strokeWidth=1;strokeColor=#888888" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="580" y="80" as="sourcePoint"/><mxPoint x="580" y="610" as="targetPoint"/></mxGeometry></mxCell>
<mxCell id="div_addr_dummy" value="" style="endArrow=none;dashed=1;strokeWidth=1;strokeColor=#888888" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="760" y="80" as="sourcePoint"/><mxPoint x="760" y="610" as="targetPoint"/></mxGeometry></mxCell>
<mxCell id="div_dummy_data" value="" style="endArrow=none;dashed=1;strokeWidth=1;strokeColor=#888888" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="880" y="80" as="sourcePoint"/><mxPoint x="880" y="610" as="targetPoint"/></mxGeometry></mxCell>
<!-- 阶段名称 -->
<mxCell id="ph_cmd" value="Command" style="text;html=1;strokeColor=none;fillColor=none;align=center;fontSize=10;fontStyle=2" vertex="1" parent="1"><mxGeometry x="300" y="60" width="60" height="20" as="geometry"/></mxCell>
<mxCell id="ph_addr" value="Address" style="text;html=1;strokeColor=none;fillColor=none;align=center;fontSize=10;fontStyle=2" vertex="1" parent="1"><mxGeometry x="650" y="60" width="60" height="20" as="geometry"/></mxCell>
<mxCell id="ph_dummy" value="Dummy" style="text;html=1;strokeColor=none;fillColor=none;align=center;fontSize=10;fontStyle=2" vertex="1" parent="1"><mxGeometry x="800" y="60" width="60" height="20" as="geometry"/></mxCell>
<mxCell id="ph_data" value="Data" style="text;html=1;strokeColor=none;fillColor=none;align=center;fontSize=10;fontStyle=2" vertex="1" parent="1"><mxGeometry x="920" y="60" width="60" height="20" as="geometry"/></mxCell>
<!-- 波形 Edge 生成 -->
<!-- CS -->
<mxCell id="cs" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#E63946;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="80" as="sourcePoint"/><mxPoint x="1010" y="80" as="targetPoint"/>
<Array as="points">
<mxPoint x="90" y="80"/><mxPoint x="90" y="110"/>
<mxPoint x="1000" y="110"/><mxPoint x="1000" y="80"/>
</Array>
</mxGeometry>
</mxCell>
<!-- SCLK -->
<mxCell id="sclk" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#1D3557;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="210" as="sourcePoint"/><mxPoint x="1050" y="210" as="targetPoint"/>
<Array as="points">
<mxPoint x="100" y="210"/>
<mxPoint x="130" y="210"/><mxPoint x="130" y="180"/><mxPoint x="160" y="180"/><mxPoint x="160" y="210"/>
<mxPoint x="190" y="210"/><mxPoint x="190" y="180"/><mxPoint x="220" y="180"/><mxPoint x="220" y="210"/>
<mxPoint x="250" y="210"/><mxPoint x="250" y="180"/><mxPoint x="280" y="180"/><mxPoint x="280" y="210"/>
<mxPoint x="310" y="210"/><mxPoint x="310" y="180"/><mxPoint x="340" y="180"/><mxPoint x="340" y="210"/>
<mxPoint x="370" y="210"/><mxPoint x="370" y="180"/><mxPoint x="400" y="180"/><mxPoint x="400" y="210"/>
<mxPoint x="430" y="210"/><mxPoint x="430" y="180"/><mxPoint x="460" y="180"/><mxPoint x="460" y="210"/>
<mxPoint x="490" y="210"/><mxPoint x="490" y="180"/><mxPoint x="520" y="180"/><mxPoint x="520" y="210"/>
<mxPoint x="550" y="210"/><mxPoint x="550" y="180"/><mxPoint x="580" y="180"/><mxPoint x="580" y="210"/>
<mxPoint x="610" y="210"/><mxPoint x="610" y="180"/><mxPoint x="640" y="180"/><mxPoint x="640" y="210"/>
<mxPoint x="670" y="210"/><mxPoint x="670" y="180"/><mxPoint x="700" y="180"/><mxPoint x="700" y="210"/>
<mxPoint x="730" y="210"/><mxPoint x="730" y="180"/><mxPoint x="760" y="180"/><mxPoint x="760" y="210"/>
<mxPoint x="790" y="210"/><mxPoint x="790" y="180"/><mxPoint x="820" y="180"/><mxPoint x="820" y="210"/>
<mxPoint x="850" y="210"/><mxPoint x="850" y="180"/><mxPoint x="880" y="180"/><mxPoint x="880" y="210"/>
<mxPoint x="910" y="210"/><mxPoint x="910" y="180"/><mxPoint x="940" y="180"/><mxPoint x="940" y="210"/>
<mxPoint x="970" y="210"/><mxPoint x="970" y="180"/><mxPoint x="1000" y="180"/><mxPoint x="1000" y="210"/>
<mxPoint x="1050" y="210"/>
</Array>
</mxGeometry>
</mxCell>
<!-- IO0 (Command: 11101011, Addr/Dummy/Data: 0) -->
<mxCell id="io0" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#2A9D8F;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="280" as="sourcePoint"/><mxPoint x="1050" y="310" as="targetPoint"/>
<Array as="points">
<mxPoint x="100" y="280"/>
<mxPoint x="160" y="280"/><mxPoint x="220" y="280"/><mxPoint x="280" y="280"/>
<mxPoint x="280" y="310"/><mxPoint x="340" y="310"/>
<mxPoint x="340" y="280"/><mxPoint x="400" y="280"/>
<mxPoint x="400" y="310"/><mxPoint x="460" y="310"/>
<mxPoint x="460" y="280"/><mxPoint x="520" y="280"/>
<mxPoint x="520" y="310"/><mxPoint x="580" y="310"/>
<mxPoint x="640" y="310"/><mxPoint x="700" y="310"/><mxPoint x="760" y="310"/>
<mxPoint x="820" y="310"/><mxPoint x="880" y="310"/>
<mxPoint x="940" y="310"/><mxPoint x="1000" y="310"/>
<mxPoint x="1050" y="310"/>
</Array>
</mxGeometry>
</mxCell>
<!-- IO1 (Idle:0, Addr:101, Dummy:00, Data:11) -->
<mxCell id="io1" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#E9C46A;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="410" as="sourcePoint"/><mxPoint x="1050" y="380" as="targetPoint"/>
<Array as="points">
<mxPoint x="100" y="410"/><mxPoint x="580" y="410"/>
<mxPoint x="580" y="380"/><mxPoint x="640" y="380"/>
<mxPoint x="640" y="410"/><mxPoint x="700" y="410"/>
<mxPoint x="700" y="380"/><mxPoint x="760" y="380"/>
<mxPoint x="760" y="410"/><mxPoint x="820" y="410"/>
<mxPoint x="880" y="410"/><mxPoint x="880" y="380"/>
<mxPoint x="940" y="380"/><mxPoint x="1000" y="380"/>
<mxPoint x="1050" y="380"/>
</Array>
</mxGeometry>
</mxCell>
<!-- IO2 (Idle:0, Addr:010, Dummy:00, Data:00) -->
<mxCell id="io2" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#F4A261;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="510" as="sourcePoint"/><mxPoint x="1050" y="510" as="targetPoint"/>
<Array as="points">
<mxPoint x="100" y="510"/><mxPoint x="580" y="510"/>
<mxPoint x="580" y="510"/><mxPoint x="640" y="510"/>
<mxPoint x="640" y="480"/><mxPoint x="700" y="480"/>
<mxPoint x="700" y="510"/><mxPoint x="760" y="510"/>
<mxPoint x="820" y="510"/><mxPoint x="880" y="510"/>
<mxPoint x="940" y="510"/><mxPoint x="1000" y="510"/>
<mxPoint x="1050" y="510"/>
</Array>
</mxGeometry>
</mxCell>
<!-- IO3 (Idle:0, Addr:110, Dummy:00, Data:10) -->
<mxCell id="io3" value="" style="edgeStyle=none;html=1;strokeWidth=2;strokeColor=#264653;rounded=0;endArrow=none;" edge="1" parent="1">
<mxGeometry relative="0" as="geometry">
<mxPoint x="80" y="610" as="sourcePoint"/><mxPoint x="1050" y="610" as="targetPoint"/>
<Array as="points">
<mxPoint x="100" y="610"/><mxPoint x="580" y="610"/>
<mxPoint x="580" y="580"/><mxPoint x="640" y="580"/>
<mxPoint x="640" y="580"/><mxPoint x="700" y="580"/>
<mxPoint x="700" y="610"/><mxPoint x="760" y="610"/>
<mxPoint x="820" y="610"/><mxPoint x="880" y="610"/>
<mxPoint x="880" y="580"/><mxPoint x="940" y="580"/>
<mxPoint x="940" y="610"/><mxPoint x="1000" y="610"/>
<mxPoint x="1050" y="610"/>
</Array>
</mxGeometry>
</mxCell>
<!-- 数据位标签 (示例) -->
<mxCell id="bit_cmd7" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;fontSize=10" vertex="1" parent="1"><mxGeometry x="140" y="265" width="10" height="10" as="geometry"/></mxCell>
<mxCell id="bit_cmd0" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;fontSize=10" vertex="1" parent="1"><mxGeometry x="560" y="265" width="10" height="10" as="geometry"/></mxCell>
<mxCell id="bit_data0" value="D0" style="text;html=1;strokeColor=none;fillColor=none;align=center;fontSize=10" vertex="1" parent="1"><mxGeometry x="890" y="265" width="20" height="10" as="geometry"/></mxCell>
<mxCell id="bit_data7" value="D7" style="text;html=1;strokeColor=none;fillColor=none;align=center;fontSize=10" vertex="1" parent="1"><mxGeometry x="980" y="265" width="20" height="10" as="geometry"/></mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

View File

@@ -0,0 +1,65 @@
<mxfile host="Electron" agent="AI-Drawio-Replicator">
<diagram id="page-1" name="传感器工厂模式">
<mxGraphModel dx="2204" dy="2155" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1400" pageHeight="900" background="#f0f8ff" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e6f2ff;strokeColor=#6699cc;strokeWidth=2;shadow=1;fontSize=14;fontFamily=Times New Roman;" value="&lt;div style=&quot;display:flex;align-items:center;justify-content:center;gap:15px;font-size:20px;font-weight:bold;&quot;&gt;&lt;div style=&quot;font-size:40px;&quot;&gt;📱&lt;/div&gt;&lt;div&gt;应用层&lt;br&gt;&lt;span style=&quot;font-size:16px;font-weight:normal;&quot;&gt;(调用者)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="100" width="220" x="20" y="120" as="geometry" />
</mxCell>
<mxCell id="3" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Times New Roman;" value="&lt;div style=&quot;font-size: 18px; line-height: 1.6;&quot;&gt;sensor = &lt;span style=&quot;color:#0066cc;font-weight:bold;&quot;&gt;sensor_create&lt;/span&gt;(SENSOR_DS18B20);&lt;br&gt;sensor-&amp;gt;read(); &lt;span style=&quot;color:#666666;&quot;&gt;// 不关心具体实现&lt;/span&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="100" width="350" x="250" y="120" as="geometry" />
</mxCell>
<mxCell id="4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e6f9f2;strokeColor=#33cc99;strokeWidth=3;shadow=1;fontSize=14;fontFamily=Times New Roman;" value="&lt;div style=&quot;display:flex;align-items:center;justify-content:center;gap:15px;font-size:24px;font-weight:bold;&quot;&gt;&lt;div style=&quot;font-size:40px;&quot;&gt;🏭&lt;/div&gt;&lt;div&gt;工厂函数&lt;/div&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="100" width="280" x="230" y="320" as="geometry" />
</mxCell>
<mxCell id="5" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Times New Roman;" value="&lt;div style=&quot;font-size:16px;&quot;&gt;根据类型参数,选择并返回对应的操作集合&lt;/div&gt;" vertex="1">
<mxGeometry height="30" width="350" x="380" y="280" as="geometry" />
</mxCell>
<mxCell id="6" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e6f2ff;strokeColor=#6699cc;strokeWidth=3;shadow=1;fontSize=14;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="280" width="700" x="20" y="540" as="geometry" />
</mxCell>
<mxCell id="7" parent="6" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f7ff;strokeColor=#6699cc;strokeWidth=2;fontSize=14;fontFamily=Times New Roman;" value="&lt;div style=&quot;font-size:24px;font-weight:bold;text-align:center;&quot;&gt;传感器操作接口&lt;/div&gt;" vertex="1">
<mxGeometry height="50" width="600" x="50" y="20" as="geometry" />
</mxCell>
<mxCell id="8" parent="6" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f7ff;strokeColor=#6699cc;strokeWidth=2;fontSize=14;fontFamily=Times New Roman;" value="&lt;div style=&quot;display:flex;align-items:center;justify-content:center;gap:10px;font-size:20px;font-weight:bold;&quot;&gt;&lt;div style=&quot;font-size:36px;&quot;&gt;🌡️&lt;/div&gt;&lt;div&gt;DS18B20&lt;br&gt;&lt;span style=&quot;font-size: 16px; font-weight: normal;&quot;&gt;.init&lt;br&gt;.read&lt;br&gt;.deinit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="160" width="180" x="50" y="100" as="geometry" />
</mxCell>
<mxCell id="9" parent="6" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e6f9f2;strokeColor=#33cc99;strokeWidth=2;fontSize=14;fontFamily=Times New Roman;" value="&lt;div style=&quot;display:flex;align-items:center;justify-content:center;gap:10px;font-size:20px;font-weight:bold;&quot;&gt;&lt;div style=&quot;font-size:36px;&quot;&gt;🌡️&lt;/div&gt;&lt;div&gt;NTC&lt;br&gt;&lt;span style=&quot;font-size: 16px; font-weight: normal;&quot;&gt;.init&lt;br&gt;.read&lt;br&gt;.deinit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="160" width="180" x="260" y="100" as="geometry" />
</mxCell>
<mxCell id="10" parent="6" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f7ff;strokeColor=#6699cc;strokeWidth=2;fontSize=14;fontFamily=Times New Roman;" value="&lt;div style=&quot;display:flex;align-items:center;justify-content:center;gap:10px;font-size:20px;font-weight:bold;&quot;&gt;&lt;div style=&quot;font-size:36px;&quot;&gt;🌡️&lt;/div&gt;&lt;div&gt;PT100&lt;br&gt;&lt;span style=&quot;font-size: 16px; font-weight: normal;&quot;&gt;.init&lt;br&gt;.read&lt;br&gt;.deinit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="160" width="180" x="470" y="100" as="geometry" />
</mxCell>
<mxCell id="11" edge="1" parent="1" source="2" style="endArrow=classic;html=1;strokeColor=#336699;strokeWidth=2;labelPosition=top;verticalAlign=bottom;labelBackgroundColor=#ffffff;edgeStyle=orthogonalEdgeStyle;fontFamily=Times New Roman;" target="4" value="&lt;div style=&quot;font-size:16px;&quot;&gt;调用工厂函数&lt;/div&gt;">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<Array as="points">
<mxPoint x="130" y="370" />
</Array>
<mxPoint x="130" y="220" as="sourcePoint" />
<mxPoint x="320" y="320" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="12" edge="1" parent="1" source="4" style="endArrow=classic;html=1;strokeColor=#33cc99;strokeWidth=3;labelPosition=right;verticalAlign=middle;labelBackgroundColor=#ffffff;fontFamily=Times New Roman;" target="6" value="&lt;div style=&quot;font-size:16px;&quot;&gt;返回具体实例&lt;/div&gt;">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="460" y="420" as="sourcePoint" />
<mxPoint x="460" y="540" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3jtoW8cGR1RTCXEpEOqW-14" edge="1" parent="1" style="endArrow=classic;html=1;strokeColor=#336699;strokeWidth=2;labelPosition=top;verticalAlign=bottom;labelBackgroundColor=#ffffff;edgeStyle=orthogonalEdgeStyle;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontFamily=Times New Roman;" target="4" value="&lt;div style=&quot;font-size:16px;&quot;&gt;&lt;br&gt;&lt;/div&gt;">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint as="offset" />
<Array as="points">
<mxPoint x="370" y="270" />
</Array>
<mxPoint x="130" y="270" as="sourcePoint" />
<mxPoint x="320" y="420" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="13" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=32;fontFamily=Times New Roman;" value="📄" vertex="1">
<mxGeometry height="40" width="40" x="260" y="251" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 896 KiB

View File

@@ -0,0 +1,101 @@
<mxfile host="Electron" agent="AI-Drawio-Replicator">
<diagram id="page-1" name="嵌入式系统分层架构">
<mxGraphModel dx="3030" dy="2963" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1400" pageHeight="900" background="#ffffff" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="Cv1bTN4lYfAtcs4RRTld-33" parent="1" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};size=65;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);strokeWidth=3;fontSize=20;" value="传感器采集模块" vertex="1">
<mxGeometry height="680" width="150" x="70" y="110" as="geometry" />
</mxCell>
<mxCell id="Cv1bTN4lYfAtcs4RRTld-34" parent="1" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};size=65;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);strokeWidth=3;fontSize=20;" value="事件队列" vertex="1">
<mxGeometry height="680" width="150" x="493" y="110" as="geometry" />
</mxCell>
<mxCell id="Cv1bTN4lYfAtcs4RRTld-35" parent="1" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};size=65;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);strokeWidth=3;fontSize=20;" value="事件分发器" vertex="1">
<mxGeometry height="680" width="150" x="699" y="110" as="geometry" />
</mxCell>
<mxCell id="Cv1bTN4lYfAtcs4RRTld-36" parent="1" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};size=65;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);strokeWidth=3;fontSize=20;" value="数据滤波模块" vertex="1">
<mxGeometry height="680" width="150" x="995" y="110" as="geometry" />
</mxCell>
<mxCell id="Cv1bTN4lYfAtcs4RRTld-37" parent="1" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};size=65;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);strokeWidth=3;fontSize=20;" value="Flash存储模块" vertex="1">
<mxGeometry height="680" width="150" x="1195" y="110" as="geometry" />
</mxCell>
<mxCell id="Cv1bTN4lYfAtcs4RRTld-38" parent="1" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};size=65;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);strokeWidth=3;fontSize=20;" value="LCD显示模块" vertex="1">
<mxGeometry height="680" width="150" x="1395" y="110" as="geometry" />
</mxCell>
<mxCell id="Cv1bTN4lYfAtcs4RRTld-39" parent="1" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};size=65;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);strokeWidth=3;fontSize=20;" value="Modbus上传模块" vertex="1">
<mxGeometry height="680" width="150" x="1595" y="110" as="geometry" />
</mxCell>
<mxCell id="Cv1bTN4lYfAtcs4RRTld-40" edge="1" parent="1" source="Cv1bTN4lYfAtcs4RRTld-33" style="verticalAlign=bottom;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;endArrow=block;strokeWidth=3;fontSize=20;" target="Cv1bTN4lYfAtcs4RRTld-34" value="投递【温度采集完成事件】(带温度值、时间戳)">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="365" y="217" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Cv1bTN4lYfAtcs4RRTld-41" edge="1" parent="1" source="Cv1bTN4lYfAtcs4RRTld-35" style="verticalAlign=bottom;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;endArrow=block;strokeWidth=3;fontSize=20;" target="Cv1bTN4lYfAtcs4RRTld-34" value="轮询/阻塞获取事件">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="683" y="269" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Cv1bTN4lYfAtcs4RRTld-42" edge="1" parent="1" source="Cv1bTN4lYfAtcs4RRTld-35" style="verticalAlign=bottom;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;endArrow=block;strokeWidth=3;fontSize=20;" target="Cv1bTN4lYfAtcs4RRTld-36" value="分发事件,调用注册的处理函数">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="931" y="321" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Cv1bTN4lYfAtcs4RRTld-43" edge="1" parent="1" source="Cv1bTN4lYfAtcs4RRTld-36" style="verticalAlign=bottom;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;dashed=1;dashPattern=2 3;endArrow=block;strokeWidth=3;fontSize=20;" target="Cv1bTN4lYfAtcs4RRTld-35" value="处理完成">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="934" y="373" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Cv1bTN4lYfAtcs4RRTld-44" edge="1" parent="1" source="Cv1bTN4lYfAtcs4RRTld-35" style="verticalAlign=bottom;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;endArrow=block;strokeWidth=3;fontSize=20;" target="Cv1bTN4lYfAtcs4RRTld-37" value="分发事件,调用注册的处理函数">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1031" y="425" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Cv1bTN4lYfAtcs4RRTld-45" edge="1" parent="1" source="Cv1bTN4lYfAtcs4RRTld-37" style="verticalAlign=bottom;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;dashed=1;dashPattern=2 3;endArrow=block;strokeWidth=3;fontSize=20;" target="Cv1bTN4lYfAtcs4RRTld-35" value="处理完成">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1034" y="477" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Cv1bTN4lYfAtcs4RRTld-46" edge="1" parent="1" source="Cv1bTN4lYfAtcs4RRTld-35" style="verticalAlign=bottom;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;endArrow=block;strokeWidth=3;fontSize=20;" target="Cv1bTN4lYfAtcs4RRTld-38" value="分发事件,调用注册的处理函数">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1131" y="529" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Cv1bTN4lYfAtcs4RRTld-47" edge="1" parent="1" source="Cv1bTN4lYfAtcs4RRTld-38" style="verticalAlign=bottom;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;dashed=1;dashPattern=2 3;endArrow=block;strokeWidth=3;fontSize=20;" target="Cv1bTN4lYfAtcs4RRTld-35" value="处理完成">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1134" y="581" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Cv1bTN4lYfAtcs4RRTld-48" edge="1" parent="1" source="Cv1bTN4lYfAtcs4RRTld-35" style="verticalAlign=bottom;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;endArrow=block;strokeWidth=3;fontSize=20;" target="Cv1bTN4lYfAtcs4RRTld-39" value="分发事件,调用注册的处理函数">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1231" y="633" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Cv1bTN4lYfAtcs4RRTld-49" edge="1" parent="1" source="Cv1bTN4lYfAtcs4RRTld-39" style="verticalAlign=bottom;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;dashed=1;dashPattern=2 3;endArrow=block;strokeWidth=3;fontSize=20;" target="Cv1bTN4lYfAtcs4RRTld-35" value="处理完成">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1234" y="685" />
</Array>
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,680 @@
<mxfile host="Electron" agent="AI-Drawio-Replicator">
<diagram id="hw-arch" name="Hardware Architecture">
<mxGraphModel dx="2424" dy="3197" grid="1" gridSize="5" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" background="#ffffff" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="B37HkNnOgrgZiHbc5-xt-83" parent="1" style="rounded=0;whiteSpace=wrap;html=1;container=1;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="700" width="1070" x="70" y="-683" as="geometry" />
</mxCell>
<mxCell id="19" parent="B37HkNnOgrgZiHbc5-xt-83" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=14;fontStyle=1;align=center;verticalAlign=top;spacingTop=5;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="370" width="595.99" x="240" y="155" as="geometry" />
</mxCell>
<mxCell id="20" parent="19" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;fontSize=10;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="370" width="89.01" as="geometry" />
</mxCell>
<mxCell id="23" parent="19" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;fontColor=#000000;fontSize=10;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="75" width="505.99" x="89.01" y="295" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-214" parent="19" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;BSP&amp;nbsp;&lt;/font&gt;&lt;div&gt;&lt;font style=&quot;font-size: 18px;&quot;&gt;板级支持&lt;/font&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="68.57" width="90" y="298" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-215" parent="19" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;Driver&lt;br&gt;驱动&lt;/font&gt;" vertex="1">
<mxGeometry height="68.57" width="89.01" x="-0.01" y="226.43" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-223" parent="19" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;HAL&lt;br&gt;硬件抽象&lt;/font&gt;" vertex="1">
<mxGeometry height="68.57" width="89.01" x="0.99" y="148.21" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-224" parent="19" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;fontColor=#000000;fontSize=10;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="75" width="505.99" x="89" y="220" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-225" parent="19" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;fontColor=#000000;fontSize=10;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="75" width="505.99" x="89" y="145" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-226" parent="19" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;fontColor=#000000;fontSize=10;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="75" width="505.99" x="89" y="70" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-227" parent="19" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;Service&lt;br&gt;服务层&lt;/font&gt;" vertex="1">
<mxGeometry height="68.57" width="89.01" x="0.9900000000000091" y="73.21000000000001" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-228" parent="19" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;APP&lt;br&gt;应用层&lt;/font&gt;" vertex="1">
<mxGeometry height="68.57" width="89.01" x="-0.009999999999990905" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-229" parent="19" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;fontColor=#000000;fontSize=10;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="75" width="505.99" x="89" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-230" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="时钟配置" vertex="1">
<mxGeometry height="42" width="60" x="100" y="311.5" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-231" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="IO分配" vertex="1">
<mxGeometry height="42" width="60" x="186" y="311.5" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-232" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="中断向量" vertex="1">
<mxGeometry height="42" width="60" x="272" y="311.5" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-233" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="定时器" vertex="1">
<mxGeometry height="42" width="60" x="358" y="311.29" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-234" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="DMA" vertex="1">
<mxGeometry height="42" width="60" x="444" y="311.28999999999996" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-235" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="中断向量" vertex="1">
<mxGeometry height="42" width="60" x="530" y="311.5" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-236" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="SPI" vertex="1">
<mxGeometry height="42" width="60" x="100" y="239.72000000000003" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-256" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="IIC" vertex="1">
<mxGeometry height="42" width="60" x="186" y="239.72000000000003" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-257" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="RS485" vertex="1">
<mxGeometry height="42" width="60" x="272" y="239.70999999999998" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-258" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="UART" vertex="1">
<mxGeometry height="42" width="60" x="358" y="239.72000000000003" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-259" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="16并行采集" vertex="1">
<mxGeometry height="42" width="60" x="444" y="239.72000000000003" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-260" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="16并行采集" vertex="1">
<mxGeometry height="42" width="60" x="530" y="239.72000000000003" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-261" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="屏蔽芯片差异统一接口" vertex="1">
<mxGeometry height="42" width="490" x="100" y="164" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-262" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="104" vertex="1">
<mxGeometry height="42" width="60" x="100" y="86.5" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-263" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="101" vertex="1">
<mxGeometry height="42" width="60" x="186" y="86.5" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-264" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="显示协议" vertex="1">
<mxGeometry height="42" width="60" x="272" y="86.5" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-265" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="按键协议" vertex="1">
<mxGeometry height="42" width="60" x="358" y="86.5" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-266" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="按键协议" vertex="1">
<mxGeometry height="42" width="60" x="444" y="88" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-267" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="图像界面" vertex="1">
<mxGeometry height="42" width="60" x="100" y="13.289999999999964" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-268" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="保护" vertex="1">
<mxGeometry height="42" width="60" x="186" y="13.289999999999964" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-269" parent="19" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="响应主站" vertex="1">
<mxGeometry height="42" width="60" x="272" y="13.289999999999964" as="geometry" />
</mxCell>
<mxCell id="18" parent="B37HkNnOgrgZiHbc5-xt-83" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;b&gt;TPT3232E&lt;/b&gt;&lt;br&gt;RS232 Transceiver" vertex="1">
<mxGeometry height="73.76" width="100" x="5" y="15.999999999999998" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-90" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-83" style="group;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="158.29999999999995" width="195" x="310" y="525" as="geometry" />
</mxCell>
<mxCell id="26" parent="B37HkNnOgrgZiHbc5-xt-90" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b&gt;存储芯片&lt;/b&gt;&lt;/div&gt;&lt;b&gt;GD5F2GQ5UE&lt;/b&gt;&lt;br&gt;SPI FLASH" vertex="1">
<mxGeometry height="90.92" width="195" y="67.38" as="geometry" />
</mxCell>
<mxCell id="36" edge="1" parent="B37HkNnOgrgZiHbc5-xt-90" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;" value="CLK">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="115" y="0.0014285714286188522" as="sourcePoint" />
<mxPoint x="115" y="67.37648648648667" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-85" edge="1" parent="B37HkNnOgrgZiHbc5-xt-90" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;" value="&lt;font&gt;MISO&lt;/font&gt;">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="79.86000000000001" y="0.37999999999999545" as="sourcePoint" />
<mxPoint x="79.86000000000001" y="67.38" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-86" edge="1" parent="B37HkNnOgrgZiHbc5-xt-90" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;" value="&lt;font&gt;MOSI&lt;/font&gt;">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="45" y="0.37999999999999545" as="sourcePoint" />
<mxPoint x="45" y="67.38" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-87" edge="1" parent="B37HkNnOgrgZiHbc5-xt-90" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;" value="WP">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="150" y="0.37999999999999545" as="sourcePoint" />
<mxPoint x="150" y="67.38" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-88" edge="1" parent="B37HkNnOgrgZiHbc5-xt-90" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;" value="&lt;font&gt;CS&lt;/font&gt;">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="10" as="sourcePoint" />
<mxPoint x="10" y="67" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-89" edge="1" parent="B37HkNnOgrgZiHbc5-xt-90" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;" value="HOLD">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="185" as="sourcePoint" />
<mxPoint x="185" y="67" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-110" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-83" style="group;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="158.87" width="93.93" x="695" y="524" as="geometry" />
</mxCell>
<mxCell id="27" parent="B37HkNnOgrgZiHbc5-xt-110" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b&gt;时钟模块&lt;/b&gt;&lt;/div&gt;&lt;b&gt;SD2506API-G&lt;/b&gt;&lt;br&gt;RTC Clock" vertex="1">
<mxGeometry height="91.87" width="93.93" y="67" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-91" edge="1" parent="B37HkNnOgrgZiHbc5-xt-110" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;entryX=0.323;entryY=0.01;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Times New Roman;" target="27" value="SCL">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="30" as="sourcePoint" />
<mxPoint x="30" y="67" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-92" edge="1" parent="B37HkNnOgrgZiHbc5-xt-110" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=0.667;exitY=1.001;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.323;entryY=0.01;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Times New Roman;" value="SDA">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="60.16000000000008" y="0.5728571428570604" as="sourcePoint" />
<mxPoint x="60" y="67.20000000000005" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-168" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-83" style="group" value="" vertex="1">
<mxGeometry height="280.54" width="216.06999999999994" x="835" y="209" as="geometry" />
</mxCell>
<mxCell id="28" parent="B37HkNnOgrgZiHbc5-xt-168" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b&gt;模拟量采样芯片&lt;/b&gt;&lt;/div&gt;&lt;b&gt;TPAFE5160&lt;/b&gt;" vertex="1">
<mxGeometry height="280.54" width="166.07" x="50" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-102" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="260" as="sourcePoint" />
<mxPoint x="50" y="260" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-104" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-102" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D0&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-106" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="250" as="sourcePoint" />
<mxPoint x="50" y="250" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-107" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-106" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D1&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-108" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="240" as="sourcePoint" />
<mxPoint x="50" y="240" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-109" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-108" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D2&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-111" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="230" as="sourcePoint" />
<mxPoint x="50" y="230" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-112" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-111" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D3&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-113" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="220" as="sourcePoint" />
<mxPoint x="50" y="220" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-114" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-113" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D4&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-115" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="210" as="sourcePoint" />
<mxPoint x="50" y="210" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-116" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-115" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D5&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-117" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="200" as="sourcePoint" />
<mxPoint x="50" y="200" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-118" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-117" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D6&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-119" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="190" as="sourcePoint" />
<mxPoint x="50" y="190" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-120" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-119" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D7&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-121" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="180" as="sourcePoint" />
<mxPoint x="50" y="180" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-122" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-121" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D8&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-123" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="169.92000000000002" as="sourcePoint" />
<mxPoint x="50" y="169.92000000000002" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-124" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-123" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D9&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-125" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="160" as="sourcePoint" />
<mxPoint x="50" y="160" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-126" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-125" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D10&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-127" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="150" as="sourcePoint" />
<mxPoint x="50" y="150" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-128" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-127" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D11&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-129" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="140" as="sourcePoint" />
<mxPoint x="50" y="140" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-130" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-129" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D12&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-131" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="130" as="sourcePoint" />
<mxPoint x="50" y="130" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-132" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-131" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D13&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-133" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="120" as="sourcePoint" />
<mxPoint x="50" y="120" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-134" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-133" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D14&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-135" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="110" as="sourcePoint" />
<mxPoint x="50" y="110" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-136" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-135" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;D15&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-137" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=1;startArrow=none;startFill=0;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="50" as="sourcePoint" />
<mxPoint x="50" y="50" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-138" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-137" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;CONVST&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint x="-10" y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-145" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="60" as="sourcePoint" />
<mxPoint x="50" y="60" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-146" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-145" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;BUSY&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-147" edge="1" parent="B37HkNnOgrgZiHbc5-xt-168" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;exitX=1.001;exitY=0.52;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint y="70" as="sourcePoint" />
<mxPoint x="50" y="70" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-148" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-147" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 7px;&quot;&gt;FRST&lt;/font&gt;" vertex="1">
<mxGeometry relative="1" x="0.1927" as="geometry">
<mxPoint y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="14" parent="B37HkNnOgrgZiHbc5-xt-83" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;b&gt;网络变压器&lt;/b&gt;" vertex="1">
<mxGeometry height="75.49" width="70" x="770" y="19.51" as="geometry" />
</mxCell>
<mxCell id="13" parent="B37HkNnOgrgZiHbc5-xt-83" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b&gt;网络交换机&lt;/b&gt;&lt;/div&gt;&lt;b&gt;RTL8305NBI-CG&lt;/b&gt;" vertex="1">
<mxGeometry height="75" width="140" x="882" y="19.51" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-153" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="15" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endWidth=7.741935483870967;endSize=2.85;startSize=2.85;width=4.354838709677419;startArrow=classic;startFill=1;startWidth=7.181795448862215;" target="14" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="670" y="57.17500000000012" as="sourcePoint" />
<mxPoint x="710" y="57.17039215686275" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-154" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endWidth=7.741935483870967;endSize=2.85;startSize=2.85;width=4.354838709677419;startArrow=classic;startFill=1;startWidth=7.181795448862215;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="840" y="57.09460784313736" as="sourcePoint" />
<mxPoint x="880" y="57.089999999999996" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-166" parent="B37HkNnOgrgZiHbc5-xt-83" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(237, 237, 237));&quot;&gt;光耦隔离器&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;FOC-817SC&lt;/b&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="75.49" width="70" x="520" y="21.240000000000002" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-169" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-83" style="group" value="" vertex="1">
<mxGeometry height="137.14736694677867" width="130" x="600" y="19.51" as="geometry" />
</mxCell>
<mxCell id="15" parent="B37HkNnOgrgZiHbc5-xt-169" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;b&gt;CH395F&lt;/b&gt;&lt;br&gt;ETH Controller" vertex="1">
<mxGeometry height="75.49" width="130" as="geometry" />
</mxCell>
<mxCell id="33" edge="1" parent="B37HkNnOgrgZiHbc5-xt-169" source="19" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0.631;exitY=0.001;exitDx=0;exitDy=0;exitPerimeter=0;" value="CS">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="15.370000000000005" y="137.1428571428571" as="sourcePoint" />
<mxPoint x="14.997831963993235" y="75.48549019607844" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-150" edge="1" parent="B37HkNnOgrgZiHbc5-xt-169" source="19" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0.689;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;" value="MOSI">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="50.37216803600677" y="137.14736694677867" as="sourcePoint" />
<mxPoint x="50" y="75.49000000000001" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-151" edge="1" parent="B37HkNnOgrgZiHbc5-xt-169" source="19" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0.749;exitY=-0.001;exitDx=0;exitDy=0;exitPerimeter=0;" value="MISO">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="85.37216803600677" y="137.14736694677867" as="sourcePoint" />
<mxPoint x="85" y="75.49000000000001" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-152" edge="1" parent="B37HkNnOgrgZiHbc5-xt-169" source="19" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0.807;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;" value="SCK">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="120.37216803600677" y="137.14736694677867" as="sourcePoint" />
<mxPoint x="120" y="75.49000000000001" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-170" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="16" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=0;startArrow=classic;startFill=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" target="B37HkNnOgrgZiHbc5-xt-166" value="DIR">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="150" y="57.09" as="sourcePoint" />
<mxPoint x="100" y="57.09" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-171" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="B37HkNnOgrgZiHbc5-xt-166" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0.5;exitY=1;exitDx=0;exitDy=0;endFill=0;startArrow=classic;startFill=1;entryX=0.53;entryY=0.001;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;entryPerimeter=0;" target="19" value="DIR">
<mxGeometry height="50" relative="1" width="50" x="-0.0243" as="geometry">
<mxPoint as="offset" />
<mxPoint x="135" y="216" as="sourcePoint" />
<mxPoint x="80" y="216.09000000000003" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-177" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-83" style="group" value="" vertex="1">
<mxGeometry height="75.49" width="80" x="112" y="274" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-182" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-177" style="group" value="" vertex="1">
<mxGeometry height="75.49" width="80" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-172" parent="B37HkNnOgrgZiHbc5-xt-182" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(237, 237, 237));&quot;&gt;数字隔离器&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;CA-IS3722HS&lt;/b&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="75.49" width="80" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-175" edge="1" parent="B37HkNnOgrgZiHbc5-xt-182" source="19" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=-0.003;exitY=0.367;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;exitPerimeter=0;" target="B37HkNnOgrgZiHbc5-xt-172" value="TX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="100" y="-12.99750000000006" as="sourcePoint" />
<mxPoint x="149.03999999999996" y="-12.902857142857215" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-176" edge="1" parent="B37HkNnOgrgZiHbc5-xt-182" source="19" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;endFill=0;startArrow=classic;startFill=1;entryX=1;entryY=0.75;entryDx=0;entryDy=0;exitX=-0.001;exitY=0.468;exitDx=0;exitDy=0;exitPerimeter=0;" target="B37HkNnOgrgZiHbc5-xt-172" value="RX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="155" y="57" as="sourcePoint" />
<mxPoint x="135" y="45" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-183" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-83" style="group" value="" vertex="1">
<mxGeometry height="75.49" width="80" x="112" y="366" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-184" connectable="0" parent="B37HkNnOgrgZiHbc5-xt-183" style="group" value="" vertex="1">
<mxGeometry height="75.49" width="80" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-185" parent="B37HkNnOgrgZiHbc5-xt-184" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(237, 237, 237));&quot;&gt;数字隔离器&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;CA-IS3722HS&lt;/b&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="75.49" width="80" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-186" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="19" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0;exitY=0.616;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;exitPerimeter=0;" target="B37HkNnOgrgZiHbc5-xt-185" value="TX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="185" y="353.00249999999994" as="sourcePoint" />
<mxPoint x="234.03999999999996" y="353.0971428571428" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-187" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="19" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;endFill=0;startArrow=classic;startFill=1;entryX=1;entryY=0.75;entryDx=0;entryDy=0;exitX=0.002;exitY=0.717;exitDx=0;exitDy=0;exitPerimeter=0;" target="B37HkNnOgrgZiHbc5-xt-185" value="RX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="267" y="423" as="sourcePoint" />
<mxPoint x="247" y="411" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-188" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=-0.003;exitY=0.367;exitDx=0;exitDy=0;entryX=0.791;entryY=1.003;entryDx=0;entryDy=0;exitPerimeter=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;entryPerimeter=0;" target="18" value="TX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="112" y="291" as="sourcePoint" />
<mxPoint x="65" y="291" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-189" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="B37HkNnOgrgZiHbc5-xt-172" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;endFill=0;startArrow=classic;startFill=1;entryX=0.6;entryY=0.995;entryDx=0;entryDy=0;exitX=0;exitY=0.75;exitDx=0;exitDy=0;entryPerimeter=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;" target="18" value="RX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="93" y="349" as="sourcePoint" />
<mxPoint x="45" y="350" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-190" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="B37HkNnOgrgZiHbc5-xt-185" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0;exitY=0.25;exitDx=0;exitDy=0;entryX=0.384;entryY=1.004;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;entryPerimeter=0;" target="18" value="TX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="109" y="411" as="sourcePoint" />
<mxPoint x="25" y="615" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-191" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="B37HkNnOgrgZiHbc5-xt-185" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;endFill=0;startArrow=classic;startFill=1;entryX=0.191;entryY=0.993;entryDx=0;entryDy=0;exitX=0;exitY=0.75;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;entryPerimeter=0;" target="18" value="RX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="112" y="436" as="sourcePoint" />
<mxPoint x="45" y="602" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-160" parent="B37HkNnOgrgZiHbc5-xt-83" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(237, 237, 237));&quot;&gt;数字隔离器&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;CA-IS3722HS&lt;/b&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="75.49" width="80" x="255" y="21.240000000000002" as="geometry" />
</mxCell>
<mxCell id="16" parent="B37HkNnOgrgZiHbc5-xt-83" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9fc5e8;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;b&gt;TP8485E-SR&lt;/b&gt;&lt;br&gt;RS485 Transceiver" vertex="1">
<mxGeometry height="75.49" width="95" x="380" y="21.24" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-162" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="20" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0.399;exitY=0.004;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;" target="B37HkNnOgrgZiHbc5-xt-160" value="TX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="355.37216803600677" y="158.38736694677866" as="sourcePoint" />
<mxPoint x="355" y="96.72999999999999" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-163" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="19" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0.127;exitY=0.003;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;startArrow=classic;startFill=1;entryX=0.75;entryY=1;entryDx=0;entryDy=0;" target="B37HkNnOgrgZiHbc5-xt-160" value="RX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="415.37216803600677" y="157.89736694677865" as="sourcePoint" />
<mxPoint x="415" y="96.24" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-164" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="B37HkNnOgrgZiHbc5-xt-160" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;" target="16" value="TX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="305.37216803600677" y="112.89736694677866" as="sourcePoint" />
<mxPoint x="305" y="51.239999999999995" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-165" edge="1" parent="B37HkNnOgrgZiHbc5-xt-83" source="B37HkNnOgrgZiHbc5-xt-160" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=1;exitY=0.75;exitDx=0;exitDy=0;endFill=0;startArrow=classic;startFill=1;entryX=0;entryY=0.75;entryDx=0;entryDy=0;" target="16" value="RX">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="300.37216803600677" y="127.89736694677866" as="sourcePoint" />
<mxPoint x="300" y="66.24" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-157" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;container=1;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" value="" vertex="1">
<mxGeometry height="960" width="85" x="5" y="-823" as="geometry" />
</mxCell>
<mxCell id="3" parent="B37HkNnOgrgZiHbc5-xt-157" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 21px;&quot;&gt;接口层&lt;/font&gt;" vertex="1">
<mxGeometry height="68.57142857142856" width="85" y="45.279999999999994" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-204" parent="B37HkNnOgrgZiHbc5-xt-157" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 21px;&quot;&gt;功能层&lt;/font&gt;" vertex="1">
<mxGeometry height="68.57142857142856" width="85" y="445.71428571428567" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-213" parent="B37HkNnOgrgZiHbc5-xt-157" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;fontStyle=1;fontColor=#000000;direction=west;fontFamily=Times New Roman;" value="&lt;font style=&quot;font-size: 21px;&quot;&gt;电源层&lt;/font&gt;" vertex="1">
<mxGeometry height="68.57142857142856" width="85" y="875" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-84" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;container=1;" value="" vertex="1">
<mxGeometry height="140" width="1050" x="90" y="-823" as="geometry" />
</mxCell>
<mxCell id="10" parent="B37HkNnOgrgZiHbc5-xt-84" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;b&gt;RS485&lt;/b&gt;&lt;br&gt;Interface" vertex="1">
<mxGeometry height="68.62745098039215" width="101.94174757281553" x="368.53580437346886" y="19.999803921568628" as="geometry" />
</mxCell>
<mxCell id="8" parent="B37HkNnOgrgZiHbc5-xt-84" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b&gt;带网络变压器的网口&lt;/b&gt;&lt;/div&gt;&lt;b&gt;HY911105AE&lt;/b&gt;" vertex="1">
<mxGeometry height="70" width="103.03738317757009" x="819.392523364486" y="20" as="geometry" />
</mxCell>
<mxCell id="9" parent="B37HkNnOgrgZiHbc5-xt-84" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b&gt;带网络变压器的网口&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;HY911105AE&lt;/b&gt;" vertex="1">
<mxGeometry height="70" width="103.03738317757009" x="940.0934579439253" y="20" as="geometry" />
</mxCell>
<mxCell id="12" parent="B37HkNnOgrgZiHbc5-xt-84" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;b&gt;RS232-2&lt;/b&gt;&lt;br&gt;Interface" vertex="1">
<mxGeometry height="68.62745098039215" width="112.13592233009709" x="127.57447600036294" y="19.994901960784333" as="geometry" />
</mxCell>
<mxCell id="11" parent="B37HkNnOgrgZiHbc5-xt-84" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;b&gt;RS232-1&lt;/b&gt;&lt;br&gt;Interface" vertex="1">
<mxGeometry height="68.62745098039215" width="112.13592233009709" x="4.902540604300866" y="19.99627450980394" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-149" parent="B37HkNnOgrgZiHbc5-xt-84" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;b&gt;RJ45 网口&lt;/b&gt;" vertex="1">
<mxGeometry height="70" width="103.03738317757009" x="255.14018691588785" y="20" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-203" parent="B37HkNnOgrgZiHbc5-xt-84" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;b&gt;96个板级接口&lt;/b&gt;" vertex="1">
<mxGeometry height="68.63" width="309.1121495327103" x="490.6542056074766" y="20" as="geometry" />
</mxCell>
<mxCell id="43" edge="1" parent="1" source="16" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontFamily=Times New Roman;exitX=0.5;exitY=0;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;" target="10" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-155" edge="1" parent="1" source="8" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;endWidth=7.741935483870967;endSize=2.85;startSize=2.85;width=4.354838709677419;startArrow=classic;startFill=1;startWidth=7.181795448862215;" target="13" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="910" y="-669.4853921568626" as="sourcePoint" />
<mxPoint x="950" y="-669.49" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-156" edge="1" parent="1" source="9" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;endWidth=7.741935483870967;endSize=2.85;startSize=2.85;width=4.354838709677419;startArrow=classic;startFill=1;startWidth=7.181795448862215;" target="13" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="1080" y="-669.49" as="sourcePoint" />
<mxPoint x="1080" y="-609.49" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-196" edge="1" parent="1" source="18" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0.25;exitY=0;exitDx=0;exitDy=0;entryX=0.216;entryY=0.998;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;entryPerimeter=0;" target="11" value="TX1">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="288" y="-592" as="sourcePoint" />
<mxPoint x="260" y="-793" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-197" edge="1" parent="1" source="18" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;endFill=0;startArrow=classic;startFill=1;entryX=0.592;entryY=0.998;entryDx=0;entryDy=0;exitX=0.4;exitY=0.015;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;exitPerimeter=0;entryPerimeter=0;" target="11" value="RX1">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="227" y="-486" as="sourcePoint" />
<mxPoint x="180" y="-728" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-201" edge="1" parent="1" source="18" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;entryX=0.25;entryY=1;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;exitX=0.75;exitY=0;exitDx=0;exitDy=0;" target="B37HkNnOgrgZiHbc5-xt-149" value="TX2">
<mxGeometry height="50" relative="1" width="50" x="0.5481" as="geometry">
<mxPoint as="offset" />
<Array as="points">
<mxPoint x="170" y="-708" />
<mxPoint x="376" y="-708" />
</Array>
<mxPoint x="250" y="-708" as="sourcePoint" />
<mxPoint x="325" y="-709" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-198" edge="1" parent="1" source="18" style="endArrow=classic;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;exitX=0.571;exitY=0;exitDx=0;exitDy=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;exitPerimeter=0;" target="12" value="TX2">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<Array as="points">
<mxPoint x="170" y="-668" />
<mxPoint x="170" y="-708" />
<mxPoint x="249" y="-708" />
</Array>
<mxPoint x="255" y="-622" as="sourcePoint" />
<mxPoint x="259" y="-688" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-202" edge="1" parent="1" source="18" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;endFill=0;startArrow=classic;startFill=1;entryX=0.75;entryY=1;entryDx=0;entryDy=0;exitX=0.846;exitY=-0.011;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;exitPerimeter=0;" target="B37HkNnOgrgZiHbc5-xt-149" value="RX2">
<mxGeometry height="50" relative="1" width="50" x="0.178" as="geometry">
<mxPoint as="offset" />
<Array as="points">
<mxPoint x="180" y="-693" />
<mxPoint x="429" y="-693" />
</Array>
<mxPoint x="285" y="-632" as="sourcePoint" />
<mxPoint x="411" y="-698" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-199" edge="1" parent="1" source="18" style="endArrow=none;html=1;strokeColor=#000000;strokeWidth=1;fontSize=10;fontFamily=Times New Roman;endFill=0;startArrow=classic;startFill=1;entryX=0.75;entryY=1;entryDx=0;entryDy=0;exitX=0.847;exitY=0;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;exitPerimeter=0;" target="12" value="RX2">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<Array as="points">
<mxPoint x="180" y="-693" />
<mxPoint x="306" y="-693" />
</Array>
<mxPoint x="250" y="-621" as="sourcePoint" />
<mxPoint x="267" y="-688" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-205" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="" vertex="1">
<mxGeometry height="120" width="1070" x="90" y="17" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-209" edge="1" parent="1" source="B37HkNnOgrgZiHbc5-xt-207" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="B37HkNnOgrgZiHbc5-xt-208" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-207" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b&gt;&lt;font style=&quot;font-size: 15px;&quot;&gt;数字 3.3V 供电2&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;&lt;b&gt;CJT1117B-3.3&lt;/b&gt;&lt;/span&gt;" vertex="1">
<mxGeometry height="70" width="130" x="708" y="52" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-211" edge="1" parent="1" source="B37HkNnOgrgZiHbc5-xt-208" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="B37HkNnOgrgZiHbc5-xt-210" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-208" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;span style=&quot;font-size: 15px;&quot;&gt;&lt;b&gt;隔离电源&lt;/b&gt;&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;&lt;b&gt;B0505S&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="70" width="100" x="420" y="52" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-210" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b&gt;&lt;font style=&quot;font-size: 15px;&quot;&gt;隔离 3.3V 供电&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="70" width="125" x="105" y="52" as="geometry" />
</mxCell>
<mxCell id="B37HkNnOgrgZiHbc5-xt-212" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f6b26b;strokeColor=#000000;fontColor=#000000;fontSize=11;fontFamily=Times New Roman;" value="&lt;div&gt;&lt;b&gt;&lt;font style=&quot;font-size: 15px;&quot;&gt;数字 3.3V 供电1&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;&lt;b&gt;CJT1117B-3.3&lt;/b&gt;&lt;/span&gt;" vertex="1">
<mxGeometry height="70" width="130" x="1010" y="52" as="geometry" />
</mxCell>
<mxCell id="9d8ulXwPflIB5cv3h3x3-43" edge="1" parent="1" source="B37HkNnOgrgZiHbc5-xt-149" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="B37HkNnOgrgZiHbc5-xt-160" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

View File

@@ -0,0 +1,79 @@
<mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/29.6.6 Chrome/144.0.7559.236 Electron/40.8.4 Safari/537.36" version="29.6.6">
<diagram id="STM32-CH395-交换机拓扑" name="Page-1">
<mxGraphModel dx="1224" dy="1185" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1200" pageHeight="800" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="stm32" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#333333;fontSize=14;fontWeight=bold;" value="STM32F407" vertex="1">
<mxGeometry height="60" width="120" x="80" y="280" as="geometry" />
</mxCell>
<mxCell id="ch395" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#333333;fontSize=14;fontWeight=bold;" value="CH395F" vertex="1">
<mxGeometry height="60" width="120" x="280" y="280" as="geometry" />
</mxCell>
<mxCell id="switch" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e8f4f8;strokeColor=#333333;fontSize=14;fontWeight=bold;" value="&lt;p&gt;RTL8305NBI-CG&lt;/p&gt;" vertex="1">
<mxGeometry height="260" width="140" x="480" y="180" as="geometry" />
</mxCell>
<mxCell id="uplinkLabel" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;fontSize=12;" value="上行口" vertex="1">
<mxGeometry height="20" width="50" x="420" y="280" as="geometry" />
</mxCell>
<mxCell id="transformer1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#333333;fontSize=12;" value="网络变压器1" vertex="1">
<mxGeometry height="40" width="120" x="700" y="180" as="geometry" />
</mxCell>
<mxCell id="transformer2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#333333;fontSize=12;" value="网络变压器2" vertex="1">
<mxGeometry height="40" width="120" x="700" y="290" as="geometry" />
</mxCell>
<mxCell id="transformer3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#333333;fontSize=12;" value="网络变压器3" vertex="1">
<mxGeometry height="40" width="120" x="700" y="400" as="geometry" />
</mxCell>
<mxCell id="rj45_1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2e6;strokeColor=#333333;fontSize=12;fontWeight=bold;" value="RJ45-1" vertex="1">
<mxGeometry height="40" width="100" x="900" y="180" as="geometry" />
</mxCell>
<mxCell id="rj45_2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2e6;strokeColor=#333333;fontSize=12;fontWeight=bold;" value="RJ45-2" vertex="1">
<mxGeometry height="40" width="100" x="900" y="290" as="geometry" />
</mxCell>
<mxCell id="rj45_3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2e6;strokeColor=#333333;fontSize=12;fontWeight=bold;" value="RJ45-3" vertex="1">
<mxGeometry height="40" width="100" x="900" y="400" as="geometry" />
</mxCell>
<mxCell id="note1" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=12;" value="(主站通信)" vertex="1">
<mxGeometry height="40" width="120" x="1010" y="180" as="geometry" />
</mxCell>
<mxCell id="note2" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=12;" value="(本地调试/级联)" vertex="1">
<mxGeometry height="40" width="120" x="1010" y="290" as="geometry" />
</mxCell>
<mxCell id="note3" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=12;" value="(备用/扩展)" vertex="1">
<mxGeometry height="40" width="120" x="1010" y="400" as="geometry" />
</mxCell>
<mxCell id="conn1" edge="1" parent="1" source="stm32" style="endArrow=block;startArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;labelPosition=top;verticalAlign=top;fontSize=12;" target="ch395" value="SPI/并口">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="conn2" edge="1" parent="1" source="ch395" style="endArrow=block;startArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;labelPosition=top;verticalAlign=top;fontSize=12;" target="switch" value="RMII/MII">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="conn3" edge="1" parent="1" source="switch" style="endArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;labelPosition=top;verticalAlign=top;fontSize=12;" target="transformer1" value="下行口1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="620" y="200" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="conn4" edge="1" parent="1" source="transformer1" style="endArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;" target="rj45_1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="conn5" edge="1" parent="1" source="switch" style="endArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;labelPosition=top;verticalAlign=top;fontSize=12;" target="transformer2" value="下行口2">
<mxGeometry relative="1" as="geometry">
<mxPoint x="620" y="310" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="conn6" edge="1" parent="1" source="transformer2" style="endArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;" target="rj45_2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="conn7" edge="1" parent="1" source="switch" style="endArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;labelPosition=top;verticalAlign=top;fontSize=12;" target="transformer3" value="下行口3">
<mxGeometry relative="1" as="geometry">
<mxPoint x="620" y="420" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="conn8" edge="1" parent="1" source="transformer3" style="endArrow=block;html=1;edgeStyle=orthogonalEdgeStyle;" target="rj45_3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

View File

@@ -0,0 +1,61 @@
<mxfile host="Electron" agent="AI-Drawio-Replicator">
<diagram id="page-1" name="传感器OPS架构">
<mxGraphModel dx="2020" dy="1975" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" background="#ffffff" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f7ff;strokeColor=#2b579a;strokeWidth=2;fontSize=14;fontFamily=Times New Roman;" value="&lt;div style=&quot;display:flex;align-items:center;justify-content:center;gap:20px;font-size:24px;font-weight:bold;&quot;&gt;&lt;div style=&quot;font-size:48px;color:#2b579a;&quot;&gt;👤&lt;/div&gt;&lt;div&gt;调用者 / 上层&lt;br&gt;&lt;span style=&quot;font-size:18px;font-weight:normal;&quot;&gt;(只认识 sensor_ops&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="120" width="620" x="270" y="90" as="geometry" />
</mxCell>
<mxCell id="3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f9f9;strokeColor=#2385bb;strokeWidth=3;fontSize=14;fontFamily=Times New Roman;" value="&lt;div style=&quot;display:flex;align-items:center;justify-content:center;gap:20px;font-size:28px;font-weight:bold;&quot;&gt;&lt;div style=&quot;font-size:48px;color:#2385bb;&quot;&gt;🏷️&lt;/div&gt;&lt;div&gt;ops 句柄&lt;br&gt;&lt;span style=&quot;font-size: 22px; font-weight: normal;&quot;&gt;{ init, read, close }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="120" width="380" x="390" y="340" as="geometry" />
</mxCell>
<mxCell id="4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f7ff;strokeColor=#2b579a;strokeWidth=2;fontSize=14;fontFamily=Times New Roman;" value="&lt;div style=&quot;display:flex;align-items:center;justify-content:center;gap:15px;font-size:22px;font-weight:bold;&quot;&gt;&lt;div style=&quot;font-size:48px;color:#2b579a;&quot;&gt;🌡️&lt;/div&gt;&lt;div&gt;温度传感器&lt;br&gt;&lt;span style=&quot;font-size: 18px; font-weight: normal;&quot;&gt;temp_read()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="100" width="250" x="210" y="620" as="geometry" />
</mxCell>
<mxCell id="5" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f7ff;strokeColor=#2b579a;strokeWidth=2;fontSize=14;fontFamily=Times New Roman;" value="&lt;div style=&quot;display:flex;align-items:center;justify-content:center;gap:15px;font-size:22px;font-weight:bold;&quot;&gt;&lt;div style=&quot;font-size:48px;color:#2b579a;&quot;&gt;🔲&lt;/div&gt;&lt;div&gt;加速度传感器&lt;br&gt;&lt;span style=&quot;font-size: 18px; font-weight: normal;&quot;&gt;accel_read()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="100" width="250" x="700" y="620" as="geometry" />
</mxCell>
<mxCell id="6" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Times New Roman;" value="&lt;div style=&quot;font-size:20px;color:#2b579a;font-weight:bold;&quot;&gt;接口边界&lt;/div&gt;" vertex="1">
<mxGeometry height="30" width="120" x="860" y="385" as="geometry" />
</mxCell>
<mxCell id="7" edge="1" parent="1" style="endArrow=none;html=1;strokeColor=#2b579a;strokeWidth=2;dashed=1;dashPattern=4 4;fontFamily=Times New Roman;startArrow=block;startFill=1;endFill=0;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="790" y="399.58" as="sourcePoint" />
<mxPoint x="870" y="399.58" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="8" edge="1" parent="1" source="2" style="endArrow=classic;html=1;strokeColor=#1a365d;strokeWidth=3;labelPosition=top;verticalAlign=bottom;labelBackgroundColor=#ffffff;fontFamily=Times New Roman;" target="3" value="&lt;div style=&quot;font-size: 20px;&quot;&gt;ops-&amp;gt;read(ctx, &amp;amp;v)&lt;/div&gt;">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="580" y="210" as="sourcePoint" />
<mxPoint x="580" y="340" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="9" edge="1" parent="1" style="html=1;strokeColor=#1a365d;strokeWidth=3;fontFamily=Times New Roman;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="580" y="460" as="sourcePoint" />
<mxPoint x="580" y="540" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="10" parent="1" style="ellipse;whiteSpace=wrap;html=1;fillColor=#1a365d;strokeColor=#1a365d;strokeWidth=2;fontFamily=Times New Roman;" value="" vertex="1">
<mxGeometry height="20" width="20" x="570" y="535" as="geometry" />
</mxCell>
<mxCell id="11" edge="1" parent="1" style="endArrow=classic;html=1;strokeColor=#1a365d;strokeWidth=3;edgeStyle=orthogonalEdgeStyle;rounded=0;curved=0;fontFamily=Times New Roman;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="4" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="580" y="545" as="sourcePoint" />
<mxPoint x="325" y="620" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="12" edge="1" parent="1" style="endArrow=classic;html=1;strokeColor=#1a365d;strokeWidth=3;rounded=0;edgeStyle=orthogonalEdgeStyle;fontFamily=Times New Roman;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="5" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="580" y="545" as="sourcePoint" />
<mxPoint x="835" y="620" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="13" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;labelBackgroundColor=#ffffff;fontFamily=Times New Roman;" value="&lt;div style=&quot;font-size:18px;&quot;&gt;函数指针实际指向&lt;/div&gt;" vertex="1">
<mxGeometry height="30" width="200" x="630" y="500" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,260 @@
<mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/29.6.6 Chrome/144.0.7559.236 Electron/40.8.4 Safari/537.36" version="29.6.6">
<diagram id="配电自动化系统架构" name="Page-1">
<mxGraphModel dx="2949" dy="2693" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1200" pageHeight="1000" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="externalBox" parent="1" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fillColor=#d5e8d4;strokeColor=#82b366;" value="&lt;div&gt;&lt;font style=&quot;font-size: 20px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 20px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;b style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));&quot;&gt;&lt;font style=&quot;color: rgb(255, 0, 0); font-size: 20px;&quot;&gt;外部系统&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="120" width="970" x="-1160" y="-970" as="geometry" />
</mxCell>
<mxCell id="sys1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;b&gt;&lt;font style=&quot;font-size: 16px;&quot;&gt;上一级调度自动化系统&lt;/font&gt;&lt;/b&gt;" vertex="1">
<mxGeometry height="80" width="180" x="-1050" y="-950" as="geometry" />
</mxCell>
<mxCell id="sys2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" value="&lt;b&gt;&lt;font style=&quot;font-size: 16px;&quot;&gt;配电GIS系统&lt;/font&gt;&lt;/b&gt;" vertex="1">
<mxGeometry height="80" width="150" x="-830" y="-950" as="geometry" />
</mxCell>
<mxCell id="sys3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="&lt;b&gt;&lt;font style=&quot;font-size: 16px;&quot;&gt;生产管理系统&lt;/font&gt;&lt;/b&gt;" vertex="1">
<mxGeometry height="80" width="150" x="-630" y="-950" as="geometry" />
</mxCell>
<mxCell id="sysDot" parent="1" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;fillColor=none;" value="……" vertex="1">
<mxGeometry height="80" width="80" x="-468" y="-950" as="geometry" />
</mxCell>
<mxCell id="sys4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="&lt;b&gt;&lt;font style=&quot;font-size: 16px;&quot;&gt;营销管理信息系统&lt;/font&gt;&lt;/b&gt;" vertex="1">
<mxGeometry height="80" width="180" x="-380" y="-950" as="geometry" />
</mxCell>
<mxCell id="bus" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" value="&lt;font style=&quot;font-size: 16px;&quot;&gt;信息交互总线&lt;/font&gt;" vertex="1">
<mxGeometry height="50" width="970" x="-1160" y="-830" as="geometry" />
</mxCell>
<mxCell id="levelBox" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="" vertex="1">
<mxGeometry height="580" width="80" x="-1160" y="-760" as="geometry" />
</mxCell>
<mxCell id="level3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;fillColor=none;rotation=270;align=center;verticalAlign=middle;" value="终端层" vertex="1">
<mxGeometry height="350" width="80" x="-548" y="-420" as="geometry" />
</mxCell>
<mxCell id="daBox" parent="1" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;align=right;verticalAlign=top;fillColor=#f8cecc;strokeColor=#b85450;" value="&lt;b&gt;&lt;font style=&quot;font-size: 24px;&quot;&gt;配电自动化系统&lt;/font&gt;&lt;/b&gt;" vertex="1">
<mxGeometry height="580" width="870" x="-1060" y="-760" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-15" parent="1" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;align=right;verticalAlign=top;fillColor=#fff2cc;strokeColor=#d6b656;" value="" vertex="1">
<mxGeometry height="120" width="870" x="-1060" y="-550" as="geometry" />
</mxCell>
<mxCell id="mainStation" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 16px;&quot;&gt;配电主站&lt;/font&gt;" vertex="1">
<mxGeometry height="60" width="220" x="-785" y="-730" as="geometry" />
</mxCell>
<mxCell id="subOptional" parent="1" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;fillColor=none;align=left;" value="(可选)" vertex="1">
<mxGeometry height="50" width="100" x="-1050" y="-506" as="geometry" />
</mxCell>
<mxCell id="subStation1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 16px;&quot;&gt;配电子站&lt;/font&gt;" vertex="1">
<mxGeometry height="50" width="180" x="-970" y="-510" as="geometry" />
</mxCell>
<mxCell id="subDot" parent="1" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;fillColor=none;" value="&lt;font style=&quot;font-size: 19px;&quot;&gt;&lt;b&gt;……&lt;/b&gt;&lt;/font&gt;" vertex="1">
<mxGeometry height="50" width="80" x="-750" y="-510" as="geometry" />
</mxCell>
<mxCell id="subStation2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 16px;&quot;&gt;配电子站&lt;/font&gt;" vertex="1">
<mxGeometry height="50" width="180" x="-628" y="-510" as="geometry" />
</mxCell>
<mxCell id="dot1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;fillColor=none;" value="……" vertex="1">
<mxGeometry height="120" width="40" x="-870" y="-330" as="geometry" />
</mxCell>
<mxCell id="dot2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;fillColor=none;" value="……" vertex="1">
<mxGeometry height="120" width="40" x="-500" y="-330" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-39" parent="1" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;align=right;verticalAlign=top;fillColor=#ffe6cc;strokeColor=#d79b00;" value="" vertex="1">
<mxGeometry height="250" width="870" x="-1060" y="-430" as="geometry" />
</mxCell>
<mxCell id="dtu3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="DTU" vertex="1">
<mxGeometry height="40" width="80" x="-300" y="-330" as="geometry" />
</mxCell>
<mxCell id="switchStation" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="开关站" vertex="1">
<mxGeometry height="60" width="80" x="-300" y="-270" as="geometry" />
</mxCell>
<mxCell id="connDtu3Station" edge="1" parent="1" source="dtu3" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" target="switchStation" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="&lt;font style=&quot;color: rgb(255, 0, 0); font-size: 20px;&quot;&gt;&lt;b style=&quot;&quot;&gt;主站层&lt;/b&gt;&lt;/font&gt;" vertex="1">
<mxGeometry height="210" width="80" x="-1160" y="-760" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="&lt;font style=&quot;color: rgb(255, 0, 0); font-size: 20px;&quot;&gt;&lt;b&gt;子站层&lt;/b&gt;&lt;/font&gt;" vertex="1">
<mxGeometry height="120" width="80" x="-1160" y="-550" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" value="&lt;font style=&quot;color: rgb(255, 0, 0); font-size: 20px;&quot;&gt;&lt;b&gt;终端层&lt;/b&gt;&lt;/font&gt;" vertex="1">
<mxGeometry height="250" width="80" x="-1160" y="-430" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-6" parent="1" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.twoWayArrow;dy=0.61;dx=8.88;rounded=1;strokeColor=default;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=default;rotation=90;" value="" vertex="1">
<mxGeometry height="12" width="42.13" x="-981.07" y="-855.06" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-8" parent="1" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.twoWayArrow;dy=0.61;dx=8.88;rounded=1;strokeColor=default;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=default;rotation=90;" value="" vertex="1">
<mxGeometry height="12" width="42.13" x="-769.9950000000001" y="-855.055" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-9" parent="1" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.twoWayArrow;dy=0.61;dx=8.88;rounded=1;strokeColor=default;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=default;rotation=90;" value="" vertex="1">
<mxGeometry height="12" width="42.13" x="-576.065" y="-855.055" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-10" parent="1" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.twoWayArrow;dy=0.61;dx=8.88;rounded=1;strokeColor=default;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=default;rotation=90;" value="" vertex="1">
<mxGeometry height="12" width="42.13" x="-311.06500000000005" y="-855.055" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-11" connectable="0" parent="1" style="group" value="" vertex="1">
<mxGeometry height="120" width="80" x="-1050" y="-330" as="geometry" />
</mxCell>
<mxCell id="ftu1" parent="TAB8QF-LWpK9W7XexfLk-11" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" value="FTU" vertex="1">
<mxGeometry height="40" width="80" as="geometry" />
</mxCell>
<mxCell id="poleSwitch1" parent="TAB8QF-LWpK9W7XexfLk-11" style="rounded=0;whiteSpace=wrap;html=1;" value="柱上开关" vertex="1">
<mxGeometry height="60" width="80" y="60" as="geometry" />
</mxCell>
<mxCell id="connFtu1Switch" edge="1" parent="TAB8QF-LWpK9W7XexfLk-11" source="ftu1" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" target="poleSwitch1" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-12" connectable="0" parent="1" style="group" value="" vertex="1">
<mxGeometry height="120" width="80" x="-950" y="-330" as="geometry" />
</mxCell>
<mxCell id="ttu1" parent="TAB8QF-LWpK9W7XexfLk-12" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="TTU" vertex="1">
<mxGeometry height="40" width="80" as="geometry" />
</mxCell>
<mxCell id="transformer1" parent="TAB8QF-LWpK9W7XexfLk-12" style="rounded=0;whiteSpace=wrap;html=1;" value="配电变压器" vertex="1">
<mxGeometry height="60" width="80" y="60" as="geometry" />
</mxCell>
<mxCell id="connTtu1Trans" edge="1" parent="TAB8QF-LWpK9W7XexfLk-12" source="ttu1" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" target="transformer1" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-13" connectable="0" parent="1" style="group" value="" vertex="1">
<mxGeometry height="120" width="80" x="-820" y="-330" as="geometry" />
</mxCell>
<mxCell id="ftu2" parent="TAB8QF-LWpK9W7XexfLk-13" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" value="FTU" vertex="1">
<mxGeometry height="40" width="80" as="geometry" />
</mxCell>
<mxCell id="poleSwitch2" parent="TAB8QF-LWpK9W7XexfLk-13" style="rounded=0;whiteSpace=wrap;html=1;" value="柱上开关" vertex="1">
<mxGeometry height="60" width="80" y="60" as="geometry" />
</mxCell>
<mxCell id="connFtu2Switch" edge="1" parent="TAB8QF-LWpK9W7XexfLk-13" source="ftu2" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" target="poleSwitch2" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-14" connectable="0" parent="1" style="group" value="" vertex="1">
<mxGeometry height="120" width="80" x="-697" y="-330" as="geometry" />
</mxCell>
<mxCell id="dtu1" parent="TAB8QF-LWpK9W7XexfLk-14" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="DTU" vertex="1">
<mxGeometry height="40" width="80" as="geometry" />
</mxCell>
<mxCell id="ringCab1" parent="TAB8QF-LWpK9W7XexfLk-14" style="rounded=0;whiteSpace=wrap;html=1;" value="环网柜" vertex="1">
<mxGeometry height="60" width="80" y="60" as="geometry" />
</mxCell>
<mxCell id="connDtu1Cab" edge="1" parent="TAB8QF-LWpK9W7XexfLk-14" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" value="">
<mxGeometry relative="1" as="geometry">
<mxPoint x="39" y="40" as="sourcePoint" />
<mxPoint x="39" y="60" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-34" edge="1" parent="1" source="TAB8QF-LWpK9W7XexfLk-17" style="edgeStyle=none;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endArrow=none;endFill=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" target="subStation2" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-17" parent="1" style="ellipse;whiteSpace=wrap;html=1;rounded=1;strokeColor=default;align=center;verticalAlign=middle;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=default;" value="&lt;font style=&quot;font-size: 16px;&quot;&gt;通信网(骨干层)&lt;/font&gt;" vertex="1">
<mxGeometry height="50" width="680" x="-1015" y="-620" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-19" connectable="0" parent="1" style="group" value="" vertex="1">
<mxGeometry height="120" width="80" x="-586" y="-330" as="geometry" />
</mxCell>
<mxCell id="dtu2" parent="TAB8QF-LWpK9W7XexfLk-19" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="DTU" vertex="1">
<mxGeometry height="40" width="80" as="geometry" />
</mxCell>
<mxCell id="ringCab2" parent="TAB8QF-LWpK9W7XexfLk-19" style="rounded=0;whiteSpace=wrap;html=1;" value="环网柜" vertex="1">
<mxGeometry height="60" width="80" y="60" as="geometry" />
</mxCell>
<mxCell id="connDtu2Cab" edge="1" parent="TAB8QF-LWpK9W7XexfLk-19" source="dtu2" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" target="ringCab2" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-20" connectable="0" parent="1" style="group" value="" vertex="1">
<mxGeometry height="120" width="80" x="-450" y="-330" as="geometry" />
</mxCell>
<mxCell id="ftu3" parent="TAB8QF-LWpK9W7XexfLk-20" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" value="FTU" vertex="1">
<mxGeometry height="40" width="80" as="geometry" />
</mxCell>
<mxCell id="poleSwitch3" parent="TAB8QF-LWpK9W7XexfLk-20" style="rounded=0;whiteSpace=wrap;html=1;" value="柱上开关" vertex="1">
<mxGeometry height="60" width="80" y="60" as="geometry" />
</mxCell>
<mxCell id="connFtu3Switch" edge="1" parent="TAB8QF-LWpK9W7XexfLk-20" source="ftu3" style="endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;" target="poleSwitch3" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-25" edge="1" parent="1" source="TAB8QF-LWpK9W7XexfLk-21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;fontFamily=Helvetica;fontSize=12;fontColor=default;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endArrow=none;endFill=0;" target="ftu1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1010" y="-390" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-21" parent="1" style="ellipse;whiteSpace=wrap;html=1;rounded=1;strokeColor=default;align=center;verticalAlign=middle;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=default;" value="&lt;font style=&quot;font-size: 16px;&quot;&gt;通信网(接入层)&lt;/font&gt;" vertex="1">
<mxGeometry height="40" width="230" x="-1000" y="-410" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-24" parent="1" style="ellipse;whiteSpace=wrap;html=1;rounded=1;strokeColor=default;align=center;verticalAlign=middle;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=default;" value="&lt;font style=&quot;font-size: 16px;&quot;&gt;通信网(接入层)&lt;/font&gt;" vertex="1">
<mxGeometry height="40" width="230" x="-650" y="-410" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-26" edge="1" parent="1" source="TAB8QF-LWpK9W7XexfLk-21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;fontFamily=Helvetica;fontSize=12;fontColor=default;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endArrow=none;endFill=0;" target="ttu1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-910" y="-370" />
</Array>
<mxPoint x="-847.5" y="-335" as="sourcePoint" />
<mxPoint x="-852.5" y="-275" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-27" edge="1" parent="1" source="TAB8QF-LWpK9W7XexfLk-21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;fontFamily=Helvetica;fontSize=12;fontColor=default;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endArrow=none;endFill=0;" target="ftu2">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-775" y="-330" />
</Array>
<mxPoint x="-900" y="-360" as="sourcePoint" />
<mxPoint x="-920" y="-320" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-28" edge="1" parent="1" source="TAB8QF-LWpK9W7XexfLk-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;fontFamily=Helvetica;fontSize=12;fontColor=default;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endArrow=none;endFill=0;" target="dtu1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-657" y="-390" />
</Array>
<mxPoint x="-775" y="-360" as="sourcePoint" />
<mxPoint x="-780" y="-300" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-29" edge="1" parent="1" source="TAB8QF-LWpK9W7XexfLk-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;fontFamily=Helvetica;fontSize=12;fontColor=default;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endArrow=none;endFill=0;" target="dtu2">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-546" y="-370" />
</Array>
<mxPoint x="-653" y="-370" as="sourcePoint" />
<mxPoint x="-660" y="-310" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-30" edge="1" parent="1" source="TAB8QF-LWpK9W7XexfLk-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;fontFamily=Helvetica;fontSize=12;fontColor=default;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endArrow=none;endFill=0;" target="ftu3">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-410" y="-390" />
</Array>
<mxPoint x="-539" y="-360" as="sourcePoint" />
<mxPoint x="-550" y="-320" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-31" parent="1" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.twoWayArrow;dy=0.61;dx=8.88;rounded=1;strokeColor=default;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=default;rotation=90;" value="" vertex="1">
<mxGeometry height="10" width="50" x="-905" y="-439" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-33" parent="1" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.twoWayArrow;dy=0.61;dx=8.88;rounded=1;strokeColor=default;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=default;rotation=90;" value="" vertex="1">
<mxGeometry height="10" width="50" x="-556" y="-440" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-36" edge="1" parent="1" source="TAB8QF-LWpK9W7XexfLk-17" style="edgeStyle=none;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endArrow=none;endFill=0;exitX=1;exitY=1;exitDx=0;exitDy=0;" target="dtu3" value="">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-590" y="-540" as="sourcePoint" />
<mxPoint x="-463" y="-480" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-35" edge="1" parent="1" source="TAB8QF-LWpK9W7XexfLk-17" style="edgeStyle=none;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endArrow=none;endFill=0;exitX=0.266;exitY=0.94;exitDx=0;exitDy=0;exitPerimeter=0;" target="subStation1" value="">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-580" y="-540" as="sourcePoint" />
<mxPoint x="-453" y="-480" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-37" parent="1" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.twoWayArrow;dy=0.61;dx=8.88;rounded=1;strokeColor=default;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=default;rotation=90;" value="" vertex="1">
<mxGeometry height="12" width="49.53" x="-699.75" y="-759.76" as="geometry" />
</mxCell>
<mxCell id="TAB8QF-LWpK9W7XexfLk-38" parent="1" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.twoWayArrow;dy=0.61;dx=8.88;rounded=1;strokeColor=default;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=default;rotation=90;" value="" vertex="1">
<mxGeometry height="12" width="49.53" x="-699.765" y="-649.995" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>