Initial CAN Physical Layer spec

This commit is contained in:
2026-09-11 19:24:15 +02:00
parent f8d111ef5c
commit f97a2c6a6c
8 changed files with 394 additions and 8 deletions
+6 -3
View File
@@ -1,6 +1,6 @@
# Architecture diagram sources
The architecture Markdown embeds these 22 SVG figures. Matching PNG previews
The architecture Markdown embeds these 23 SVG figures. Matching PNG previews
are provided for viewers that do not support SVG. Diagrams describe the working
architecture; component qualification and schematic-release requirements remain
in the parent documents.
@@ -11,6 +11,7 @@ in the parent documents.
| --- | --- |
| Power | [Sources](power-sources.svg), [protected branches](power-branches.svg) |
| Analogue acquisition | [Passive input](analog-input.svg), [thermistor](thermistor.svg), [ratiometric acquisition](ratiometric.svg) |
| Vehicle CAN FD | [Trunk, termination and service access](can-topology.svg) |
| Timing inputs | [Crank/cam interface](trigger-input.svg) |
| Deadman | [Contacts and diagnostics](deadman-inputs.svg), [permit gates](deadman-permit.svg), [output gates](deadman-outputs.svg) |
| Ignition | [Power](ignition-power.svg), [commands](ignition-command.svg), [current flag](ignition-flag.svg), [grounding](ignition-ground.svg) |
@@ -20,8 +21,10 @@ in the parent documents.
## Editing and regeneration
- The 12 block figures have editable `.drawio` sources. Open them in draw.io.
`build_blocks.py` recreates their baseline layout and `block-connections.json`.
- The 13 block figures have editable `.drawio` sources. Open them in draw.io.
`build_blocks.py` recreates the original 12 block layouts and `block-connections.json`.
The CAN topology is maintained directly in `can-topology.drawio`, with its
own `can-topology.connections.json` manifest; the builder does not overwrite it.
Running it overwrites manual layout edits, so update the generator when those
edits should be reproducible, or export the edited `.drawio` directly.
- The 10 circuit/logic figures are generated by `build_circuits.py`, with a
@@ -0,0 +1,132 @@
{
"title": "Vehicle CAN FD topology",
"source": "IO_MODULES/CAN_PHYSICAL_LAYER.md: Topology, termination, and service access",
"nodes": {
"title": {
"label": "Vehicle CAN FD \u00b7 continuous linear trunk",
"bounds": [
30,
20,
1100,
45
]
},
"subtitle": {
"label": "500 kbit/s arbitration \u00b7 2 Mbit/s data phase \u00b7 approximately 2\u20132.5 m end-to-end",
"bounds": [
30,
75,
1100,
40
]
},
"rear": {
"label": "Rear endpoint\n120 \u03a9 across CAN_H / CAN_L",
"bounds": [
30,
170,
290,
105
]
},
"ecu": {
"label": "ECU \u00b7 local PCB junction\nMid-bus connection",
"bounds": [
440,
170,
280,
105
]
},
"front": {
"label": "Front endpoint\n120 \u03a9 across CAN_H / CAN_L",
"bounds": [
840,
170,
290,
105
]
},
"distance1": {
"label": "0.5\u20131 m",
"bounds": [
320,
130,
120,
40
]
},
"distance2": {
"label": "1\u20131.5 m",
"bounds": [
720,
130,
120,
40
]
},
"ecu_note": {
"label": "ECU transceiver joins locally on PCB.\nOptional ECU 120 \u03a9 termination: OPEN in V1;\nenable only if the ECU becomes an endpoint.",
"bounds": [
340,
305,
710,
90
]
},
"service": {
"label": "Debug / service connector\nCAN_H \u00b7 CAN_L \u00b7 CAN_0V\nVery short PCB branch\nNo termination",
"bounds": [
440,
480,
350,
110
]
},
"busport": {
"label": "Same local ECU bus",
"bounds": [
60,
490,
270,
80
]
},
"foot": {
"label": "Lines above represent the CAN_H / CAN_L twisted pair, not individual conductors.\nAll nodes also share the defined CAN_0V reference. Avoid a long attached service cable.",
"bounds": [
30,
625,
1100,
55
]
}
},
"connections": [
{
"from": "rear",
"to": "ecu",
"label": ""
},
{
"from": "ecu",
"to": "front",
"label": ""
},
{
"from": "busport",
"to": "service",
"label": ""
}
],
"continuations": {
"busport": "ecu"
},
"bus_model": "Each trunk line represents the differential CAN_H/CAN_L pair. CAN_0V is a separate shared reference.",
"termination": {
"rear": "120 ohm across CAN_H/CAN_L",
"front": "120 ohm across CAN_H/CAN_L",
"ecu": "120 ohm option, solder jumper normally open; endpoint use only",
"service": "none"
}
}
+53
View File
@@ -0,0 +1,53 @@
<?xml version='1.0' encoding='utf-8'?>
<mxfile host="app.diagrams.net">
<diagram name="Vehicle CAN FD topology" id="can-topology">
<mxGraphModel page="1" pageWidth="1160" pageHeight="680">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="title" value="Vehicle CAN FD · continuous linear trunk" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=26;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f0fc;strokeColor=none;fillColor=none;align=left;" vertex="1" parent="1">
<mxGeometry x="30" y="20" width="1100" height="45" as="geometry" />
</mxCell>
<mxCell id="subtitle" value="500 kbit/s arbitration · 2 Mbit/s data phase · approximately 22.5 m end-to-end" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f0fc;strokeColor=none;fillColor=none;align=left;" vertex="1" parent="1">
<mxGeometry x="30" y="75" width="1100" height="40" as="geometry" />
</mxCell>
<mxCell id="rear" value="Rear endpoint&#10;120 Ω across CAN_H / CAN_L" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f4ed;" vertex="1" parent="1">
<mxGeometry x="30" y="170" width="290" height="105" as="geometry" />
</mxCell>
<mxCell id="ecu" value="ECU · local PCB junction&#10;Mid-bus connection" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f0fc;" vertex="1" parent="1">
<mxGeometry x="440" y="170" width="280" height="105" as="geometry" />
</mxCell>
<mxCell id="front" value="Front endpoint&#10;120 Ω across CAN_H / CAN_L" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f4ed;" vertex="1" parent="1">
<mxGeometry x="840" y="170" width="290" height="105" as="geometry" />
</mxCell>
<mxCell id="rear_ecu" source="rear" target="ecu" value="" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;startArrow=none;endArrow=none;strokeWidth=3;strokeColor=#416680;fontSize=18;fontFamily=DejaVu Sans;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ecu_front" source="ecu" target="front" value="" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;startArrow=none;endArrow=none;strokeWidth=3;strokeColor=#416680;fontSize=18;fontFamily=DejaVu Sans;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="distance1" value="0.51 m" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=17;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f0fc;strokeColor=none;fillColor=none;align=left;" vertex="1" parent="1">
<mxGeometry x="320" y="130" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="distance2" value="11.5 m" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=17;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f0fc;strokeColor=none;fillColor=none;align=left;" vertex="1" parent="1">
<mxGeometry x="720" y="130" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="ecu_note" value="ECU transceiver joins locally on PCB.&#10;Optional ECU 120 Ω termination: OPEN in V1;&#10;enable only if the ECU becomes an endpoint." style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f0fc;strokeColor=none;fillColor=none;align=left;" vertex="1" parent="1">
<mxGeometry x="340" y="305" width="710" height="90" as="geometry" />
</mxCell>
<mxCell id="service" value="Debug / service connector&#10;CAN_H · CAN_L · CAN_0V&#10;Very short PCB branch&#10;No termination" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#eef0f3;" vertex="1" parent="1">
<mxGeometry x="440" y="480" width="350" height="110" as="geometry" />
</mxCell>
<mxCell id="busport" value="Same local ECU bus" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f0fc;" vertex="1" parent="1">
<mxGeometry x="60" y="490" width="270" height="80" as="geometry" />
</mxCell>
<mxCell id="service_branch" source="busport" target="service" value="" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;startArrow=none;endArrow=none;strokeWidth=2;strokeColor=#416680;fontSize=18;fontFamily=DejaVu Sans;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="foot" value="Lines above represent the CAN_H / CAN_L twisted pair, not individual conductors.&#10;All nodes also share the defined CAN_0V reference. Avoid a long attached service cable." style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=17;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f0fc;strokeColor=none;fillColor=none;align=left;" vertex="1" parent="1">
<mxGeometry x="30" y="625" width="1100" height="55" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB