Add KiCad module carrier PCB draft
Introduce an editable KiCad 10 schematic and routed two-layer 82 × 80 mm layout with local provisional footprints, validation tooling, and component research. Keep the RS-232 male-module mapping and mechanical clearances explicitly provisional pending hardware verification.
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"$schema": "https://schemas.kicad.org/erc.v1.json",
|
||||
"coordinate_units": "mm",
|
||||
"date": "2026-09-20T20:14:47",
|
||||
"ignored_checks": [
|
||||
{
|
||||
"description": "Global label only appears once in the schematic",
|
||||
"key": "single_global_label"
|
||||
},
|
||||
{
|
||||
"description": "Four connection points are joined together",
|
||||
"key": "four_way_junction"
|
||||
},
|
||||
{
|
||||
"description": "SPICE model issue",
|
||||
"key": "simulation_model_issue"
|
||||
},
|
||||
{
|
||||
"description": "Assigned footprint doesn't match footprint filters",
|
||||
"key": "footprint_filter"
|
||||
}
|
||||
],
|
||||
"included_severities": [
|
||||
"error",
|
||||
"warning"
|
||||
],
|
||||
"kicad_version": "10.0.6",
|
||||
"sheets": [
|
||||
{
|
||||
"path": "/",
|
||||
"uuid_path": "/c86e0d56-4290-5f2b-b790-14926c8cdeea",
|
||||
"violations": []
|
||||
}
|
||||
],
|
||||
"source": "serial-carrier.kicad_sch"
|
||||
}
|
||||
@@ -0,0 +1,232 @@
|
||||
{
|
||||
"+3V3": [
|
||||
[
|
||||
"U1",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"U1",
|
||||
"2"
|
||||
],
|
||||
[
|
||||
"U2",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"DS1",
|
||||
"2"
|
||||
],
|
||||
[
|
||||
"R1",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"R2",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"R3",
|
||||
"1"
|
||||
]
|
||||
],
|
||||
"BTN_NEXT": [
|
||||
[
|
||||
"U1",
|
||||
"20"
|
||||
],
|
||||
[
|
||||
"R3",
|
||||
"2"
|
||||
],
|
||||
[
|
||||
"SW3",
|
||||
"1"
|
||||
]
|
||||
],
|
||||
"BTN_PREVIOUS": [
|
||||
[
|
||||
"U1",
|
||||
"16"
|
||||
],
|
||||
[
|
||||
"R1",
|
||||
"2"
|
||||
],
|
||||
[
|
||||
"SW1",
|
||||
"1"
|
||||
]
|
||||
],
|
||||
"BTN_SELECT": [
|
||||
[
|
||||
"U1",
|
||||
"19"
|
||||
],
|
||||
[
|
||||
"R2",
|
||||
"2"
|
||||
],
|
||||
[
|
||||
"SW2",
|
||||
"1"
|
||||
]
|
||||
],
|
||||
"GND": [
|
||||
[
|
||||
"U1",
|
||||
"22"
|
||||
],
|
||||
[
|
||||
"U1",
|
||||
"23"
|
||||
],
|
||||
[
|
||||
"U1",
|
||||
"43"
|
||||
],
|
||||
[
|
||||
"U1",
|
||||
"44"
|
||||
],
|
||||
[
|
||||
"U2",
|
||||
"2"
|
||||
],
|
||||
[
|
||||
"DS1",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"SW1",
|
||||
"2"
|
||||
],
|
||||
[
|
||||
"SW2",
|
||||
"2"
|
||||
],
|
||||
[
|
||||
"SW3",
|
||||
"2"
|
||||
]
|
||||
],
|
||||
"OLED_SCL": [
|
||||
[
|
||||
"U1",
|
||||
"18"
|
||||
],
|
||||
[
|
||||
"DS1",
|
||||
"3"
|
||||
]
|
||||
],
|
||||
"OLED_SDA": [
|
||||
[
|
||||
"U1",
|
||||
"17"
|
||||
],
|
||||
[
|
||||
"DS1",
|
||||
"4"
|
||||
]
|
||||
],
|
||||
"RS_CTS": [
|
||||
[
|
||||
"U1",
|
||||
"9"
|
||||
],
|
||||
[
|
||||
"U2",
|
||||
"9"
|
||||
]
|
||||
],
|
||||
"RS_DCD": [
|
||||
[
|
||||
"U1",
|
||||
"4"
|
||||
],
|
||||
[
|
||||
"U2",
|
||||
"3"
|
||||
]
|
||||
],
|
||||
"RS_DSR": [
|
||||
[
|
||||
"U1",
|
||||
"5"
|
||||
],
|
||||
[
|
||||
"U2",
|
||||
"7"
|
||||
]
|
||||
],
|
||||
"RS_DTR": [
|
||||
[
|
||||
"U1",
|
||||
"7"
|
||||
],
|
||||
[
|
||||
"U2",
|
||||
"6"
|
||||
]
|
||||
],
|
||||
"RS_OFF_N": [
|
||||
[
|
||||
"U1",
|
||||
"15"
|
||||
],
|
||||
[
|
||||
"U2",
|
||||
"12"
|
||||
]
|
||||
],
|
||||
"RS_RI": [
|
||||
[
|
||||
"U1",
|
||||
"6"
|
||||
],
|
||||
[
|
||||
"U2",
|
||||
"10"
|
||||
]
|
||||
],
|
||||
"RS_RTS": [
|
||||
[
|
||||
"U1",
|
||||
"8"
|
||||
],
|
||||
[
|
||||
"U2",
|
||||
"8"
|
||||
]
|
||||
],
|
||||
"RS_RX": [
|
||||
[
|
||||
"U1",
|
||||
"11"
|
||||
],
|
||||
[
|
||||
"U2",
|
||||
"4"
|
||||
]
|
||||
],
|
||||
"RS_TX": [
|
||||
[
|
||||
"U1",
|
||||
"10"
|
||||
],
|
||||
[
|
||||
"U2",
|
||||
"5"
|
||||
]
|
||||
],
|
||||
"RS_VALID": [
|
||||
[
|
||||
"U1",
|
||||
"12"
|
||||
],
|
||||
[
|
||||
"U2",
|
||||
"11"
|
||||
]
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 96 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 252 KiB |
File diff suppressed because it is too large
Load Diff
|
After Width: | Height: | Size: 152 KiB |
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"$schema": "https://schemas.kicad.org/drc.v1.json",
|
||||
"coordinate_units": "mm",
|
||||
"date": "2026-09-20T23:07:29",
|
||||
"ignored_checks": [
|
||||
{
|
||||
"description": "Footprint has no courtyard defined",
|
||||
"key": "missing_courtyard"
|
||||
},
|
||||
{
|
||||
"description": "Track endpoint not centered on via",
|
||||
"key": "track_not_centered_on_via"
|
||||
},
|
||||
{
|
||||
"description": "Tuning profile track geometries",
|
||||
"key": "tuning_profile_track_geometries"
|
||||
},
|
||||
{
|
||||
"description": "Footprint doesn't match symbol's footprint filters",
|
||||
"key": "footprint_filters_mismatch"
|
||||
},
|
||||
{
|
||||
"description": "Footprint component type doesn't match footprint pads",
|
||||
"key": "footprint_type_mismatch"
|
||||
}
|
||||
],
|
||||
"included_severities": [
|
||||
"error",
|
||||
"warning",
|
||||
"exclusion"
|
||||
],
|
||||
"kicad_version": "10.0.6",
|
||||
"schematic_parity": [
|
||||
{
|
||||
"description": "Carrier:MAX3243_Reference_Provisional stimmt nicht mit dem Footprint des Symbols () überein.",
|
||||
"items": [
|
||||
{
|
||||
"description": "Footprint U2",
|
||||
"pos": {
|
||||
"x": 143.0,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "812387f6-6524-459e-8102-fe9c55122668"
|
||||
}
|
||||
],
|
||||
"severity": "warning",
|
||||
"type": "footprint_symbol_mismatch"
|
||||
}
|
||||
],
|
||||
"source": "serial-carrier.kicad_pcb",
|
||||
"unconnected_items": [],
|
||||
"violations": []
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"$schema": "https://schemas.kicad.org/drc.v1.json",
|
||||
"coordinate_units": "mm",
|
||||
"date": "2026-09-20T22:50:33",
|
||||
"ignored_checks": [
|
||||
{
|
||||
"description": "Footprint has no courtyard defined",
|
||||
"key": "missing_courtyard"
|
||||
},
|
||||
{
|
||||
"description": "Track endpoint not centered on via",
|
||||
"key": "track_not_centered_on_via"
|
||||
},
|
||||
{
|
||||
"description": "Tuning profile track geometries",
|
||||
"key": "tuning_profile_track_geometries"
|
||||
},
|
||||
{
|
||||
"description": "Footprint doesn't match symbol's footprint filters",
|
||||
"key": "footprint_filters_mismatch"
|
||||
},
|
||||
{
|
||||
"description": "Footprint component type doesn't match footprint pads",
|
||||
"key": "footprint_type_mismatch"
|
||||
}
|
||||
],
|
||||
"included_severities": [
|
||||
"error",
|
||||
"warning",
|
||||
"exclusion"
|
||||
],
|
||||
"kicad_version": "10.0.6",
|
||||
"schematic_parity": [],
|
||||
"source": "serial-carrier.kicad_pcb",
|
||||
"unconnected_items": [],
|
||||
"violations": []
|
||||
}
|
||||
@@ -0,0 +1,911 @@
|
||||
{
|
||||
"$schema": "https://schemas.kicad.org/drc.v1.json",
|
||||
"coordinate_units": "mm",
|
||||
"date": "2026-09-20T22:39:18",
|
||||
"ignored_checks": [
|
||||
{
|
||||
"description": "Footprint has no courtyard defined",
|
||||
"key": "missing_courtyard"
|
||||
},
|
||||
{
|
||||
"description": "Track endpoint not centered on via",
|
||||
"key": "track_not_centered_on_via"
|
||||
},
|
||||
{
|
||||
"description": "Tuning profile track geometries",
|
||||
"key": "tuning_profile_track_geometries"
|
||||
},
|
||||
{
|
||||
"description": "Footprint doesn't match symbol's footprint filters",
|
||||
"key": "footprint_filters_mismatch"
|
||||
},
|
||||
{
|
||||
"description": "Footprint component type doesn't match footprint pads",
|
||||
"key": "footprint_type_mismatch"
|
||||
}
|
||||
],
|
||||
"included_severities": [
|
||||
"error",
|
||||
"warning"
|
||||
],
|
||||
"kicad_version": "10.0.6",
|
||||
"schematic_parity": [],
|
||||
"source": "serial-carrier.kicad_pcb",
|
||||
"unconnected_items": [
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 19 [/BTN_SELECT] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 149.72
|
||||
},
|
||||
"uuid": "f7b9badd-1db5-4575-9da8-979a7c8f3946"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/BTN_SELECT] von SW2",
|
||||
"pos": {
|
||||
"x": 155.0,
|
||||
"y": 168.0
|
||||
},
|
||||
"uuid": "574d93e4-d3fc-4c28-b2d5-4e7d8682c22f"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/BTN_SELECT] von SW2",
|
||||
"pos": {
|
||||
"x": 155.0,
|
||||
"y": 168.0
|
||||
},
|
||||
"uuid": "574d93e4-d3fc-4c28-b2d5-4e7d8682c22f"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/BTN_SELECT] von SW2",
|
||||
"pos": {
|
||||
"x": 161.5,
|
||||
"y": 168.0
|
||||
},
|
||||
"uuid": "0398530b-79dc-45b1-886c-51343182e1d3"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/BTN_SELECT] von SW2",
|
||||
"pos": {
|
||||
"x": 161.5,
|
||||
"y": 168.0
|
||||
},
|
||||
"uuid": "0398530b-79dc-45b1-886c-51343182e1d3"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/BTN_SELECT] von R2",
|
||||
"pos": {
|
||||
"x": 161.62,
|
||||
"y": 134.0
|
||||
},
|
||||
"uuid": "c118f27f-8ad4-4abe-b9c0-a30a22fe60c9"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 22 [/GND] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 157.34
|
||||
},
|
||||
"uuid": "9d509ec2-7588-4c77-9146-8d03c8646e37"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 44 [/GND] von U1",
|
||||
"pos": {
|
||||
"x": 133.4,
|
||||
"y": 157.34
|
||||
},
|
||||
"uuid": "91b9e8e9-7e2c-43ab-b2ef-ec8ba16a25f1"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 23 [/GND] von U1",
|
||||
"pos": {
|
||||
"x": 133.4,
|
||||
"y": 104.0
|
||||
},
|
||||
"uuid": "b66490f6-5d60-415d-babb-215c70511b77"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/GND] von U2",
|
||||
"pos": {
|
||||
"x": 145.54,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "7744910d-b37b-4fd5-a46a-95ee262d2a08"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 43 [/GND] von U1",
|
||||
"pos": {
|
||||
"x": 133.4,
|
||||
"y": 154.8
|
||||
},
|
||||
"uuid": "23b353d7-7ede-43a0-a655-57496d4f8aee"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/GND] von DS1",
|
||||
"pos": {
|
||||
"x": 152.19,
|
||||
"y": 137.5
|
||||
},
|
||||
"uuid": "0d95ad6d-f278-4240-9618-08ad8fcb5e1c"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 44 [/GND] von U1",
|
||||
"pos": {
|
||||
"x": 133.4,
|
||||
"y": 157.34
|
||||
},
|
||||
"uuid": "91b9e8e9-7e2c-43ab-b2ef-ec8ba16a25f1"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 43 [/GND] von U1",
|
||||
"pos": {
|
||||
"x": 133.4,
|
||||
"y": 154.8
|
||||
},
|
||||
"uuid": "23b353d7-7ede-43a0-a655-57496d4f8aee"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/GND] von SW1",
|
||||
"pos": {
|
||||
"x": 143.0,
|
||||
"y": 172.5
|
||||
},
|
||||
"uuid": "cc9a376c-9410-4f75-a7a6-3a849cc384b3"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/GND] von SW1",
|
||||
"pos": {
|
||||
"x": 149.5,
|
||||
"y": 172.5
|
||||
},
|
||||
"uuid": "24c82a41-4f9f-4c94-aaaf-2a3df71bbd08"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/GND] von SW1",
|
||||
"pos": {
|
||||
"x": 143.0,
|
||||
"y": 172.5
|
||||
},
|
||||
"uuid": "cc9a376c-9410-4f75-a7a6-3a849cc384b3"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 44 [/GND] von U1",
|
||||
"pos": {
|
||||
"x": 133.4,
|
||||
"y": 157.34
|
||||
},
|
||||
"uuid": "91b9e8e9-7e2c-43ab-b2ef-ec8ba16a25f1"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/GND] von SW1",
|
||||
"pos": {
|
||||
"x": 149.5,
|
||||
"y": 172.5
|
||||
},
|
||||
"uuid": "24c82a41-4f9f-4c94-aaaf-2a3df71bbd08"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/GND] von SW2",
|
||||
"pos": {
|
||||
"x": 155.0,
|
||||
"y": 172.5
|
||||
},
|
||||
"uuid": "970e56ae-cc93-46cd-8807-ccc9cf082aa1"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/GND] von DS1",
|
||||
"pos": {
|
||||
"x": 152.19,
|
||||
"y": 137.5
|
||||
},
|
||||
"uuid": "0d95ad6d-f278-4240-9618-08ad8fcb5e1c"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/GND] von U2",
|
||||
"pos": {
|
||||
"x": 145.54,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "7744910d-b37b-4fd5-a46a-95ee262d2a08"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/GND] von SW2",
|
||||
"pos": {
|
||||
"x": 155.0,
|
||||
"y": 172.5
|
||||
},
|
||||
"uuid": "970e56ae-cc93-46cd-8807-ccc9cf082aa1"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/GND] von SW2",
|
||||
"pos": {
|
||||
"x": 161.5,
|
||||
"y": 172.5
|
||||
},
|
||||
"uuid": "2f44f580-c7e4-4f03-ba46-49605735875c"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/GND] von SW2",
|
||||
"pos": {
|
||||
"x": 161.5,
|
||||
"y": 172.5
|
||||
},
|
||||
"uuid": "2f44f580-c7e4-4f03-ba46-49605735875c"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/GND] von SW3",
|
||||
"pos": {
|
||||
"x": 167.0,
|
||||
"y": 172.5
|
||||
},
|
||||
"uuid": "3cdbd911-6e07-4f86-8887-5953fa3d2a01"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/GND] von SW3",
|
||||
"pos": {
|
||||
"x": 167.0,
|
||||
"y": 172.5
|
||||
},
|
||||
"uuid": "3cdbd911-6e07-4f86-8887-5953fa3d2a01"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/GND] von SW3",
|
||||
"pos": {
|
||||
"x": 173.5,
|
||||
"y": 172.5
|
||||
},
|
||||
"uuid": "8e780381-cbfb-4f62-ae3b-8b0b8fa2a6a8"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/+3V3] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 104.0
|
||||
},
|
||||
"uuid": "9aaad355-039f-439b-9cd7-308d07ace02e"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/+3V3] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 106.54
|
||||
},
|
||||
"uuid": "2c8cc7c5-7b73-4bc2-a384-b3a5ac459c92"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/+3V3] von U2",
|
||||
"pos": {
|
||||
"x": 143.0,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "f8aafd85-e635-47cd-ba22-ddf4a036d1cd"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/+3V3] von R1",
|
||||
"pos": {
|
||||
"x": 143.0,
|
||||
"y": 134.0
|
||||
},
|
||||
"uuid": "56ff90bc-b894-4f81-8274-7a34384229e7"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/+3V3] von U2",
|
||||
"pos": {
|
||||
"x": 143.0,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "f8aafd85-e635-47cd-ba22-ddf4a036d1cd"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/+3V3] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 106.54
|
||||
},
|
||||
"uuid": "2c8cc7c5-7b73-4bc2-a384-b3a5ac459c92"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/+3V3] von R2",
|
||||
"pos": {
|
||||
"x": 154.0,
|
||||
"y": 134.0
|
||||
},
|
||||
"uuid": "73a249ed-c3b1-46fb-afd5-f8bfe0e3fa65"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/+3V3] von R1",
|
||||
"pos": {
|
||||
"x": 143.0,
|
||||
"y": 134.0
|
||||
},
|
||||
"uuid": "56ff90bc-b894-4f81-8274-7a34384229e7"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/+3V3] von DS1",
|
||||
"pos": {
|
||||
"x": 154.73,
|
||||
"y": 137.5
|
||||
},
|
||||
"uuid": "62a98206-7a36-4b20-a201-d4ca10b404df"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/+3V3] von R2",
|
||||
"pos": {
|
||||
"x": 154.0,
|
||||
"y": 134.0
|
||||
},
|
||||
"uuid": "73a249ed-c3b1-46fb-afd5-f8bfe0e3fa65"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/+3V3] von DS1",
|
||||
"pos": {
|
||||
"x": 154.73,
|
||||
"y": 137.5
|
||||
},
|
||||
"uuid": "62a98206-7a36-4b20-a201-d4ca10b404df"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/+3V3] von R3",
|
||||
"pos": {
|
||||
"x": 165.0,
|
||||
"y": 134.0
|
||||
},
|
||||
"uuid": "72b8a1ea-1fa7-480b-8122-aceb08f4bb4b"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 4 [/RS_DCD] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 111.62
|
||||
},
|
||||
"uuid": "d9f0d2af-a701-43e9-9d1e-58a6c7cb5250"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 3 [/RS_DCD] von U2",
|
||||
"pos": {
|
||||
"x": 148.08,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "d589a6a4-0d53-4c2a-8f68-fb4407d9f10e"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 5 [/RS_DSR] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 114.16
|
||||
},
|
||||
"uuid": "0ceca603-53a8-4a53-85cc-f7f8e7be90e4"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 7 [/RS_DSR] von U2",
|
||||
"pos": {
|
||||
"x": 158.24,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "e2d6b2cb-6025-490c-8371-d7cc34ac37f6"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 6 [/RS_RI] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 116.7
|
||||
},
|
||||
"uuid": "f35f1696-b778-437b-8cce-67b8c4d5f5d0"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 10 [/RS_RI] von U2",
|
||||
"pos": {
|
||||
"x": 165.86,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "e28de6f2-fb85-4849-ba1a-e98e2a231492"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 7 [/RS_DTR] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 119.24
|
||||
},
|
||||
"uuid": "354ab122-85b1-4c9c-9385-d5091fe12303"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 6 [/RS_DTR] von U2",
|
||||
"pos": {
|
||||
"x": 155.7,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "81e8ad67-4bdc-4f57-90b1-68cff6a95261"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 8 [/RS_RTS] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 121.78
|
||||
},
|
||||
"uuid": "55162730-46fd-465d-a1c5-20aed09ed534"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 8 [/RS_RTS] von U2",
|
||||
"pos": {
|
||||
"x": 160.78,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "5c304724-2bc6-409d-9c59-2e40adc557b9"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 9 [/RS_CTS] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 124.32
|
||||
},
|
||||
"uuid": "f75c20f8-d3b5-4c3b-9919-cb044b2da5c3"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 9 [/RS_CTS] von U2",
|
||||
"pos": {
|
||||
"x": 163.32,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "a8411036-6859-4041-84b8-2c80c326c58e"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 10 [/RS_TX] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 126.86
|
||||
},
|
||||
"uuid": "22c323db-7146-44af-951b-04a1d7dbb2fe"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 5 [/RS_TX] von U2",
|
||||
"pos": {
|
||||
"x": 153.16,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "f919098b-4ad7-4600-9e8b-3375a1cff050"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 11 [/RS_RX] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 129.4
|
||||
},
|
||||
"uuid": "6573852d-5714-4c8d-8793-0be87f5a052a"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 4 [/RS_RX] von U2",
|
||||
"pos": {
|
||||
"x": 150.62,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "3d90cce4-14d8-46a0-b560-09524f11698f"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 12 [/RS_VALID] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 131.94
|
||||
},
|
||||
"uuid": "2fbc596b-c88f-4fc6-aa94-5dad4fcac9cc"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 11 [/RS_VALID] von U2",
|
||||
"pos": {
|
||||
"x": 168.4,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "9ad42f44-160f-4aa5-bcf0-a4466c090438"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 15 [/RS_OFF_N] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 139.56
|
||||
},
|
||||
"uuid": "34e1afe9-b3fc-4d3a-9e33-38b32244f19e"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 12 [/RS_OFF_N] von U2",
|
||||
"pos": {
|
||||
"x": 170.94,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "a43ba2f2-477d-4850-87de-e1591119d5ae"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/BTN_PREVIOUS] von SW1",
|
||||
"pos": {
|
||||
"x": 143.0,
|
||||
"y": 168.0
|
||||
},
|
||||
"uuid": "5214c011-545b-4ae7-9cdb-852ade815805"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/BTN_PREVIOUS] von SW1",
|
||||
"pos": {
|
||||
"x": 149.5,
|
||||
"y": 168.0
|
||||
},
|
||||
"uuid": "84202d30-b2fe-4170-8146-69b68d3b82a1"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/BTN_PREVIOUS] von SW1",
|
||||
"pos": {
|
||||
"x": 149.5,
|
||||
"y": 168.0
|
||||
},
|
||||
"uuid": "84202d30-b2fe-4170-8146-69b68d3b82a1"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/BTN_PREVIOUS] von R1",
|
||||
"pos": {
|
||||
"x": 150.62,
|
||||
"y": 134.0
|
||||
},
|
||||
"uuid": "8237f507-f5c7-4eb6-9aa1-f46af2981e7c"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/BTN_PREVIOUS] von R1",
|
||||
"pos": {
|
||||
"x": 150.62,
|
||||
"y": 134.0
|
||||
},
|
||||
"uuid": "8237f507-f5c7-4eb6-9aa1-f46af2981e7c"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 16 [/BTN_PREVIOUS] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 142.1
|
||||
},
|
||||
"uuid": "fc705960-92fa-4d8f-bb0e-ce2b82d1e7fc"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 17 [/OLED_SDA] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 144.64
|
||||
},
|
||||
"uuid": "1f91549c-5cb2-465f-86df-b2f1b0c16ed8"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 4 [/OLED_SDA] von DS1",
|
||||
"pos": {
|
||||
"x": 159.81,
|
||||
"y": 137.5
|
||||
},
|
||||
"uuid": "91a4dcef-1b36-4e3d-a15c-c4578077c27b"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 18 [/OLED_SCL] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 147.18
|
||||
},
|
||||
"uuid": "1c55fd03-0b3e-494f-a37b-6e0b3496cfc9"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 3 [/OLED_SCL] von DS1",
|
||||
"pos": {
|
||||
"x": 157.27,
|
||||
"y": 137.5
|
||||
},
|
||||
"uuid": "704668d0-88bf-4b51-840a-60a35804fafd"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 20 [/BTN_NEXT] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 152.26
|
||||
},
|
||||
"uuid": "e7159c90-4e8d-4b21-8e84-a7f59f793440"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/BTN_NEXT] von SW3",
|
||||
"pos": {
|
||||
"x": 167.0,
|
||||
"y": 168.0
|
||||
},
|
||||
"uuid": "c67d0b07-c47f-48b3-9e79-7aed82edbbfc"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/BTN_NEXT] von SW3",
|
||||
"pos": {
|
||||
"x": 167.0,
|
||||
"y": 168.0
|
||||
},
|
||||
"uuid": "c67d0b07-c47f-48b3-9e79-7aed82edbbfc"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/BTN_NEXT] von SW3",
|
||||
"pos": {
|
||||
"x": 173.5,
|
||||
"y": 168.0
|
||||
},
|
||||
"uuid": "62f3da3b-8297-4232-92ee-88f3ce4a7d36"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 1 [/BTN_NEXT] von SW3",
|
||||
"pos": {
|
||||
"x": 173.5,
|
||||
"y": 168.0
|
||||
},
|
||||
"uuid": "62f3da3b-8297-4232-92ee-88f3ce4a7d36"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 2 [/BTN_NEXT] von R3",
|
||||
"pos": {
|
||||
"x": 172.62,
|
||||
"y": 134.0
|
||||
},
|
||||
"uuid": "9e9dfe49-4b68-472b-a86c-bfcee913a81b"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
}
|
||||
],
|
||||
"violations": []
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"immutable_geometry_nets_pads_linkage_preserved": true,
|
||||
"board_sha256": "03b69c4084dba328b11e2373c219e8fe462bcb3add934cf9f527214b21bd9cb6",
|
||||
"independent_min_different_net_or_npth_clearance_mm": 0.2749999999999886,
|
||||
"closest_items": [
|
||||
"R2.2:c118f27f-8ad4-4abe-b9c0-a30a22fe60c9",
|
||||
"99fb402a-445b-4eba-aedf-76b7f0cad042"
|
||||
],
|
||||
"min_copper_or_npth_edge_gap_mm": 0.5250000000000057,
|
||||
"min_rf_gap_mm": 0.025000000000005684,
|
||||
"min_via_to_other_drilled_hole_gap_mm": 0.8401754250991242,
|
||||
"track_width_counts": {
|
||||
"0.25": 425,
|
||||
"0.5": 144
|
||||
},
|
||||
"routed_length_mm_by_net": {
|
||||
"/BTN_SELECT": 95.16152954766495,
|
||||
"/GND": 152.2615364335217,
|
||||
"/+3V3": 106.94219089103528,
|
||||
"/RS_DCD": 47.76152984055992,
|
||||
"/RS_DSR": 56.835284377834164,
|
||||
"/RS_RI": 66.02000635033798,
|
||||
"/RS_DTR": 52.162796381301995,
|
||||
"/RS_RTS": 56.23655121147421,
|
||||
"/RS_CTS": 58.073809511675655,
|
||||
"/RS_TX": 47.51030692030297,
|
||||
"/RS_RX": 43.90406233625865,
|
||||
"/RS_VALID": 64.36573922778403,
|
||||
"/RS_OFF_N": 67.05000417516253,
|
||||
"/BTN_PREVIOUS": 86.95076506672746,
|
||||
"/OLED_SDA": 54.781626385188304,
|
||||
"/OLED_SCL": 53.30787155502609,
|
||||
"/BTN_NEXT": 106.4266552277327
|
||||
},
|
||||
"tracks": 569,
|
||||
"vias": 20,
|
||||
"copper_zones": 0,
|
||||
"drc_freshly_run": true,
|
||||
"drc_violations": 0,
|
||||
"unconnected_items": 0,
|
||||
"drc_ignored_checks": [
|
||||
{
|
||||
"description": "Footprint has no courtyard defined",
|
||||
"key": "missing_courtyard"
|
||||
},
|
||||
{
|
||||
"description": "Track endpoint not centered on via",
|
||||
"key": "track_not_centered_on_via"
|
||||
},
|
||||
{
|
||||
"description": "Tuning profile track geometries",
|
||||
"key": "tuning_profile_track_geometries"
|
||||
},
|
||||
{
|
||||
"description": "Footprint doesn't match symbol's footprint filters",
|
||||
"key": "footprint_filters_mismatch"
|
||||
},
|
||||
{
|
||||
"description": "Footprint component type doesn't match footprint pads",
|
||||
"key": "footprint_type_mismatch"
|
||||
}
|
||||
],
|
||||
"overwrite_guard_tests": [
|
||||
{
|
||||
"args": [
|
||||
"--route"
|
||||
],
|
||||
"exit_code": 2,
|
||||
"reason": "route_pcb_draft.py: error: --route requires --overwrite; back up manual routing first"
|
||||
},
|
||||
{
|
||||
"args": [
|
||||
"--route",
|
||||
"--overwrite"
|
||||
],
|
||||
"exit_code": 2,
|
||||
"reason": "route_pcb_draft.py: error: existing routing protected; --replace-routes required even for preview"
|
||||
},
|
||||
{
|
||||
"args": [],
|
||||
"exit_code": 2,
|
||||
"reason": "route_pcb_draft.py: error: existing routing protected; --replace-routes required even for preview"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
#!/usr/bin/python3
|
||||
"""Read-only draft audit; needs pcbnew, numpy, shapely and kicad-cli.
|
||||
Writes fresh DRC and audit JSON reports, never modifies the board.
|
||||
|
||||
Independent continuous centreline/radius checks complement KiCad DRC. Restricted
|
||||
here to the existing circle/axis-aligned rectangular THT pads and straight tracks.
|
||||
"""
|
||||
from collections import Counter
|
||||
import hashlib
|
||||
import importlib.util
|
||||
import json
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
|
||||
import pcbnew as p
|
||||
from shapely.geometry import Point, LineString, Polygon, box
|
||||
|
||||
ROOT = Path(__file__).resolve().parent.parent
|
||||
spec = importlib.util.spec_from_file_location('router', ROOT / 'route_pcb_draft.py')
|
||||
r = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(r)
|
||||
board = p.LoadBoard(str(r.PCB))
|
||||
original = p.LoadBoard(str(ROOT / 'validation/pcb-routing-input.kicad_pcb'))
|
||||
assert r.identity(board) == r.identity(original), 'immutable source geometry/linkage changed'
|
||||
items, holes = [], []
|
||||
for f in board.GetFootprints():
|
||||
for pad in f.Pads():
|
||||
xy = r.pos(pad)
|
||||
assert pad.GetOrientationDegrees() % 90 == 0
|
||||
assert pad.GetShape() in (p.PAD_SHAPE_CIRCLE, p.PAD_SHAPE_RECT)
|
||||
if pad.GetShape() == p.PAD_SHAPE_CIRCLE:
|
||||
assert pad.GetSize().x == pad.GetSize().y
|
||||
geom, radius = Point(xy), p.ToMM(pad.GetSize().x) / 2
|
||||
else:
|
||||
bb = pad.GetBoundingBox()
|
||||
geom = box(p.ToMM(bb.GetX()), p.ToMM(bb.GetY()),
|
||||
p.ToMM(bb.GetRight()), p.ToMM(bb.GetBottom()))
|
||||
radius = 0
|
||||
label = f.GetReference() + '.' + pad.GetNumber() + ':' + pad.m_Uuid.AsString()
|
||||
layers = {l for l in r.LAYERS if pad.IsOnLayer(l)}
|
||||
items.append((label, pad.GetNetCode(), layers, geom, radius))
|
||||
if pad.GetDrillSize().x:
|
||||
assert pad.GetDrillSize().x == pad.GetDrillSize().y
|
||||
holes.append((label, Point(xy), p.ToMM(pad.GetDrillSize().x) / 2, False))
|
||||
track_lengths = Counter()
|
||||
widths = Counter()
|
||||
for t in board.GetTracks():
|
||||
is_via = isinstance(t, p.PCB_VIA)
|
||||
if is_via:
|
||||
geom, radius, layers = Point(r.pos(t)), p.ToMM(t.GetWidth(p.F_Cu)) / 2, set(r.LAYERS)
|
||||
assert abs(radius - 0.35) < 1e-8 and t.GetDrillValue() == r.mm(0.3)
|
||||
holes.append((t.m_Uuid.AsString(), geom, 0.15, True))
|
||||
else:
|
||||
geom = LineString([(p.ToMM(t.GetStart().x), p.ToMM(t.GetStart().y)),
|
||||
(p.ToMM(t.GetEnd().x), p.ToMM(t.GetEnd().y))])
|
||||
radius, layers = p.ToMM(t.GetWidth()) / 2, {t.GetLayer()}
|
||||
expected = 0.5 if t.GetNetname() in ('/+3V3', '/GND') else 0.25
|
||||
assert abs(2 * radius - expected) < 1e-8
|
||||
widths[str(2 * radius)] += 1
|
||||
track_lengths[t.GetNetname()] += geom.length
|
||||
items.append((t.m_Uuid.AsString(), t.GetNetCode(), layers, geom, radius))
|
||||
|
||||
min_clearance = float('inf')
|
||||
closest = None
|
||||
for i, a in enumerate(items):
|
||||
for b in items[i + 1:]:
|
||||
if not a[2].intersection(b[2]) or (a[1] and a[1] == b[1]):
|
||||
continue
|
||||
distance = a[3].distance(b[3]) - a[4] - b[4]
|
||||
if distance < min_clearance:
|
||||
min_clearance, closest = distance, (a[0], b[0])
|
||||
assert min_clearance >= 0.25 - 1e-6, (min_clearance, closest)
|
||||
outline = Polygon([(100,100),(182,100),(182,180),(136,180),(136,161),(100,161)])
|
||||
rf = box(110, 100, 131, 113)
|
||||
min_edge, min_rf = float('inf'), float('inf')
|
||||
for label, net, layers, geom, radius in items:
|
||||
assert outline.covers(geom), label
|
||||
edge_gap = outline.boundary.distance(geom) - radius
|
||||
rf_gap = rf.distance(geom) - radius
|
||||
min_edge, min_rf = min(min_edge, edge_gap), min(min_rf, rf_gap)
|
||||
assert edge_gap >= 0.5 - 1e-6, (label, edge_gap)
|
||||
assert rf_gap > 0, (label, rf_gap)
|
||||
min_via_hole_gap = float('inf')
|
||||
for i, a in enumerate(holes):
|
||||
for b in holes[i + 1:]:
|
||||
if not (a[3] or b[3]):
|
||||
continue
|
||||
gap = a[1].distance(b[1]) - a[2] - b[2]
|
||||
min_via_hole_gap = min(min_via_hole_gap, gap)
|
||||
assert gap >= 0.25 - 1e-6, (a[0], b[0], gap)
|
||||
|
||||
# Refusal paths must leave the routed board byte-for-byte unchanged.
|
||||
before = r.PCB.read_bytes()
|
||||
guards = []
|
||||
for args in (['--route'], ['--route', '--overwrite'], []):
|
||||
result = subprocess.run(['/usr/bin/python3', '-B', str(ROOT/'route_pcb_draft.py'), *args],
|
||||
capture_output=True, text=True, timeout=20)
|
||||
assert result.returncode == 2, (args, result.stdout, result.stderr)
|
||||
assert r.PCB.read_bytes() == before
|
||||
guards.append({'args': args, 'exit_code': result.returncode,
|
||||
'reason': result.stderr.splitlines()[-1]})
|
||||
subprocess.run(['kicad-cli', 'pcb', 'drc', '--format', 'json', '--all-track-errors',
|
||||
'--severity-all', '--exit-code-violations', '-o',
|
||||
str(ROOT/'validation/pcb-routing-drc.json'), str(r.PCB)],
|
||||
check=True, timeout=60)
|
||||
assert r.PCB.read_bytes() == before, 'board changed during audit'
|
||||
drc = json.loads(ROOT.joinpath('validation/pcb-routing-drc.json').read_text())
|
||||
assert not drc['violations'] and not drc['unconnected_items']
|
||||
report = dict(immutable_geometry_nets_pads_linkage_preserved=True,
|
||||
board_sha256=hashlib.sha256(before).hexdigest(),
|
||||
independent_min_different_net_or_npth_clearance_mm=min_clearance,
|
||||
closest_items=closest, min_copper_or_npth_edge_gap_mm=min_edge,
|
||||
min_rf_gap_mm=min_rf, min_via_to_other_drilled_hole_gap_mm=min_via_hole_gap,
|
||||
track_width_counts=widths, routed_length_mm_by_net=track_lengths,
|
||||
tracks=sum(not isinstance(t,p.PCB_VIA) for t in board.GetTracks()),
|
||||
vias=sum(isinstance(t,p.PCB_VIA) for t in board.GetTracks()),
|
||||
copper_zones=sum(not z.GetIsRuleArea() for z in board.Zones()),
|
||||
drc_freshly_run=True,
|
||||
drc_violations=len(drc['violations']), unconnected_items=len(drc['unconnected_items']),
|
||||
drc_ignored_checks=drc['ignored_checks'], overwrite_guard_tests=guards)
|
||||
ROOT.joinpath('validation/pcb-routing-check.json').write_text(json.dumps(report, indent=2)+'\n')
|
||||
print(json.dumps(report, indent=2))
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"$schema": "https://schemas.kicad.org/drc.v1.json",
|
||||
"coordinate_units": "mm",
|
||||
"date": "2026-09-20T23:07:33",
|
||||
"ignored_checks": [
|
||||
{
|
||||
"description": "Footprint has no courtyard defined",
|
||||
"key": "missing_courtyard"
|
||||
},
|
||||
{
|
||||
"description": "Track endpoint not centered on via",
|
||||
"key": "track_not_centered_on_via"
|
||||
},
|
||||
{
|
||||
"description": "Tuning profile track geometries",
|
||||
"key": "tuning_profile_track_geometries"
|
||||
},
|
||||
{
|
||||
"description": "Footprint doesn't match symbol's footprint filters",
|
||||
"key": "footprint_filters_mismatch"
|
||||
},
|
||||
{
|
||||
"description": "Footprint component type doesn't match footprint pads",
|
||||
"key": "footprint_type_mismatch"
|
||||
}
|
||||
],
|
||||
"included_severities": [
|
||||
"error",
|
||||
"warning",
|
||||
"exclusion"
|
||||
],
|
||||
"kicad_version": "10.0.6",
|
||||
"schematic_parity": [],
|
||||
"source": "serial-carrier.kicad_pcb",
|
||||
"unconnected_items": [],
|
||||
"violations": []
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
/builddir/build/BUILD/kicad-10.0.6-build/kicad-10.0.6/include/properties/property.h(607): assert "m_choices.GetCount() > 0" failed in PROPERTY_ENUM(): No enum choices defined
|
||||
/builddir/build/BUILD/kicad-10.0.6-build/kicad-10.0.6/include/properties/property.h(607): assert "m_choices.GetCount() > 0" failed in PROPERTY_ENUM(): No enum choices defined
|
||||
/builddir/build/BUILD/kicad-10.0.6-build/kicad-10.0.6/include/properties/property.h(607): assert "m_choices.GetCount() > 0" failed in PROPERTY_ENUM(): No enum choices defined
|
||||
{"net": "/+3V3", "start": "U1.1", "end": "U1.2", "start_mm": [108.0, 104.0], "end_mm": [108.0, 106.54], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 52}
|
||||
{"net": "/+3V3", "start": "R2.1", "end": "DS1.2", "start_mm": [154.0, 134.0], "end_mm": [154.73, 137.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 911}
|
||||
{"net": "/+3V3", "start": "U2.1", "end": "R1.1", "start_mm": [143.0, 130.0], "end_mm": [143.0, 134.0], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 81}
|
||||
{"net": "/BTN_NEXT", "start": "SW3.1", "end": "SW3.1", "start_mm": [167.0, 168.0], "end_mm": [173.5, 168.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 131}
|
||||
{"net": "/BTN_PREVIOUS", "start": "SW1.1", "end": "SW1.1", "start_mm": [149.5, 168.0], "end_mm": [143.0, 168.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 131}
|
||||
{"net": "/BTN_SELECT", "start": "SW2.1", "end": "SW2.1", "start_mm": [155.0, 168.0], "end_mm": [161.5, 168.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 131}
|
||||
{"net": "/+3V3", "start": "DS1.2", "end": "R3.1", "start_mm": [154.73, 137.5], "end_mm": [165.0, 134.0], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 5139}
|
||||
{"net": "/+3V3", "start": "R1.1", "end": "R2.1", "start_mm": [143.0, 134.0], "end_mm": [154.0, 134.0], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 14153}
|
||||
{"net": "/BTN_SELECT", "start": "SW2.1", "end": "R2.2", "start_mm": [161.5, 168.0], "end_mm": [161.62, 134.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 2039}
|
||||
{"net": "/BTN_NEXT", "start": "SW3.1", "end": "R3.2", "start_mm": [173.5, 168.0], "end_mm": [172.62, 134.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 12615}
|
||||
{"net": "/BTN_PREVIOUS", "start": "R1.2", "end": "SW1.1", "start_mm": [150.62, 134.0], "end_mm": [149.5, 168.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 15179}
|
||||
{"net": "/+3V3", "start": "U1.2", "end": "U2.1", "start_mm": [108.0, 106.54], "end_mm": [143.0, 130.0], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 894511}
|
||||
{"net": "/RS_RX", "start": "U1.11", "end": "U2.4", "start_mm": [108.0, 129.4], "end_mm": [150.62, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 51516}
|
||||
{"net": "/BTN_PREVIOUS", "start": "U1.16", "end": "R1.2", "start_mm": [108.0, 142.1], "end_mm": [150.62, 134.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 94479}
|
||||
{"net": "/RS_DCD", "start": "U1.4", "end": "U2.3", "start_mm": [108.0, 111.62], "end_mm": [148.08, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 266031}
|
||||
{"net": "/RS_TX", "start": "U1.10", "end": "U2.5", "start_mm": [108.0, 126.86], "end_mm": [153.16, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 175689}
|
||||
{"net": "/RS_DTR", "start": "U1.7", "end": "U2.6", "start_mm": [108.0, 119.24], "end_mm": [155.7, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 326823}
|
||||
{"net": "/OLED_SCL", "start": "U1.18", "end": "DS1.3", "start_mm": [108.0, 147.18], "end_mm": [157.27, 137.5], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 82557}
|
||||
{"net": "/BTN_SELECT", "start": "SW2.1", "end": "U1.19", "start_mm": [155.0, 168.0], "end_mm": [108.0, 149.72], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 147997}
|
||||
{"net": "/OLED_SDA", "start": "U1.17", "end": "DS1.4", "start_mm": [108.0, 144.64], "end_mm": [159.81, 137.5], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 266428}
|
||||
{"net": "/RS_DSR", "start": "U1.5", "end": "U2.7", "start_mm": [108.0, 114.16], "end_mm": [158.24, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 372014}
|
||||
{"net": "/RS_RTS", "start": "U1.8", "end": "U2.8", "start_mm": [108.0, 121.78], "end_mm": [160.78, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 298514}
|
||||
{"net": "/RS_CTS", "start": "U1.9", "end": "U2.9", "start_mm": [108.0, 124.32], "end_mm": [163.32, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 265272}
|
||||
{"net": "/RS_RI", "start": "U1.6", "end": "U2.10", "start_mm": [108.0, 116.7], "end_mm": [165.86, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 332506}
|
||||
{"net": "/RS_VALID", "start": "U1.12", "end": "U2.11", "start_mm": [108.0, 131.94], "end_mm": [168.4, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 348384}
|
||||
{"net": "/BTN_NEXT", "start": "U1.20", "end": "SW3.1", "start_mm": [108.0, 152.26], "end_mm": [167.0, 168.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 272795}
|
||||
{"net": "/RS_OFF_N", "start": "U1.15", "end": "U2.12", "start_mm": [108.0, 139.56], "end_mm": [170.94, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 351630}
|
||||
{"net": "/GND", "start": "U1.44", "end": "U1.43", "start_mm": [133.4, 157.34], "end_mm": [133.4, 154.8], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 52}
|
||||
{"net": "/GND", "start": "SW2.2", "end": "SW1.2", "start_mm": [155.0, 172.5], "end_mm": [149.5, 172.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 111}
|
||||
{"net": "/GND", "start": "SW2.2", "end": "SW3.2", "start_mm": [161.5, 172.5], "end_mm": [167.0, 172.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 111}
|
||||
{"net": "/GND", "start": "SW2.2", "end": "SW2.2", "start_mm": [155.0, 172.5], "end_mm": [161.5, 172.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 131}
|
||||
{"net": "/GND", "start": "SW3.2", "end": "SW3.2", "start_mm": [167.0, 172.5], "end_mm": [173.5, 172.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 131}
|
||||
{"net": "/GND", "start": "SW1.2", "end": "SW1.2", "start_mm": [149.5, 172.5], "end_mm": [143.0, 172.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 131}
|
||||
{"net": "/GND", "start": "DS1.1", "end": "U2.2", "start_mm": [152.19, 137.5], "end_mm": [145.54, 130.0], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 17468}
|
||||
{"net": "/GND", "start": "SW1.2", "end": "U1.44", "start_mm": [143.0, 172.5], "end_mm": [133.4, 157.34], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 27488}
|
||||
{"net": "/GND", "start": "U1.44", "end": "U1.22", "start_mm": [133.4, 157.34], "end_mm": [108.0, 157.34], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 73753}
|
||||
{"net": "/GND", "start": "U1.43", "end": "DS1.1", "start_mm": [133.4, 154.8], "end_mm": [152.19, 137.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 54021}
|
||||
{"net": "/GND", "start": "U2.2", "end": "U1.23", "start_mm": [145.54, 130.0], "end_mm": [133.4, 104.0], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 98250}
|
||||
{
|
||||
"draft_only": true,
|
||||
"saved": false,
|
||||
"grid_mm": 0.05,
|
||||
"clearance_mm": 0.25,
|
||||
"safety_margin_mm": 0.02,
|
||||
"via_diameter_mm": 0.7,
|
||||
"via_drill_mm": 0.3,
|
||||
"elapsed_seconds": 27.992941715005145,
|
||||
"routed_tree_edges": 38,
|
||||
"total_tree_edges": 38,
|
||||
"tracks": 569,
|
||||
"vias": 20,
|
||||
"immutable_identity_sha256": "81def52e6c1d574b4d3ab1a5859a5266b893df0ea6c5b9aa7d7b688cc4a98519",
|
||||
"input_sha256": "bf94b6c9b00c43a97f933054758a2c9d6541981ae09f2f285dcdb567bd73d9b1",
|
||||
"validation": "KiCad DRC must be run separately; tree-edge counts are not DRC connectivity"
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,244 @@
|
||||
{
|
||||
"$schema": "https://schemas.kicad.org/drc.v1.json",
|
||||
"coordinate_units": "mm",
|
||||
"date": "2026-09-20T22:43:07",
|
||||
"ignored_checks": [
|
||||
{
|
||||
"description": "Footprint has no courtyard defined",
|
||||
"key": "missing_courtyard"
|
||||
},
|
||||
{
|
||||
"description": "Track endpoint not centered on via",
|
||||
"key": "track_not_centered_on_via"
|
||||
},
|
||||
{
|
||||
"description": "Tuning profile track geometries",
|
||||
"key": "tuning_profile_track_geometries"
|
||||
},
|
||||
{
|
||||
"description": "Footprint doesn't match symbol's footprint filters",
|
||||
"key": "footprint_filters_mismatch"
|
||||
},
|
||||
{
|
||||
"description": "Footprint component type doesn't match footprint pads",
|
||||
"key": "footprint_type_mismatch"
|
||||
}
|
||||
],
|
||||
"included_severities": [
|
||||
"error",
|
||||
"warning"
|
||||
],
|
||||
"kicad_version": "10.0.6",
|
||||
"schematic_parity": [],
|
||||
"source": "serial-carrier.kicad_pcb",
|
||||
"unconnected_items": [
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 5 [/RS_DSR] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 114.16
|
||||
},
|
||||
"uuid": "0ceca603-53a8-4a53-85cc-f7f8e7be90e4"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 7 [/RS_DSR] von U2",
|
||||
"pos": {
|
||||
"x": 158.24,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "e2d6b2cb-6025-490c-8371-d7cc34ac37f6"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 6 [/RS_RI] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 116.7
|
||||
},
|
||||
"uuid": "f35f1696-b778-437b-8cce-67b8c4d5f5d0"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 10 [/RS_RI] von U2",
|
||||
"pos": {
|
||||
"x": 165.86,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "e28de6f2-fb85-4849-ba1a-e98e2a231492"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 7 [/RS_DTR] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 119.24
|
||||
},
|
||||
"uuid": "354ab122-85b1-4c9c-9385-d5091fe12303"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 6 [/RS_DTR] von U2",
|
||||
"pos": {
|
||||
"x": 155.7,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "81e8ad67-4bdc-4f57-90b1-68cff6a95261"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 8 [/RS_RTS] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 121.78
|
||||
},
|
||||
"uuid": "55162730-46fd-465d-a1c5-20aed09ed534"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 8 [/RS_RTS] von U2",
|
||||
"pos": {
|
||||
"x": 160.78,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "5c304724-2bc6-409d-9c59-2e40adc557b9"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 9 [/RS_CTS] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 124.32
|
||||
},
|
||||
"uuid": "f75c20f8-d3b5-4c3b-9919-cb044b2da5c3"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 9 [/RS_CTS] von U2",
|
||||
"pos": {
|
||||
"x": 163.32,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "a8411036-6859-4041-84b8-2c80c326c58e"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 10 [/RS_TX] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 126.86
|
||||
},
|
||||
"uuid": "22c323db-7146-44af-951b-04a1d7dbb2fe"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 5 [/RS_TX] von U2",
|
||||
"pos": {
|
||||
"x": 153.16,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "f919098b-4ad7-4600-9e8b-3375a1cff050"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 11 [/RS_RX] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 129.4
|
||||
},
|
||||
"uuid": "6573852d-5714-4c8d-8793-0be87f5a052a"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 4 [/RS_RX] von U2",
|
||||
"pos": {
|
||||
"x": 150.62,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "3d90cce4-14d8-46a0-b560-09524f11698f"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 12 [/RS_VALID] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 131.94
|
||||
},
|
||||
"uuid": "2fbc596b-c88f-4fc6-aa94-5dad4fcac9cc"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 11 [/RS_VALID] von U2",
|
||||
"pos": {
|
||||
"x": 168.4,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "9ad42f44-160f-4aa5-bcf0-a4466c090438"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 15 [/RS_OFF_N] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 139.56
|
||||
},
|
||||
"uuid": "34e1afe9-b3fc-4d3a-9e33-38b32244f19e"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 12 [/RS_OFF_N] von U2",
|
||||
"pos": {
|
||||
"x": 170.94,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "a43ba2f2-477d-4850-87de-e1591119d5ae"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
}
|
||||
],
|
||||
"violations": []
|
||||
}
|
||||
@@ -0,0 +1,221 @@
|
||||
{
|
||||
"$schema": "https://schemas.kicad.org/drc.v1.json",
|
||||
"coordinate_units": "mm",
|
||||
"date": "2026-09-20T22:46:03",
|
||||
"ignored_checks": [
|
||||
{
|
||||
"description": "Footprint has no courtyard defined",
|
||||
"key": "missing_courtyard"
|
||||
},
|
||||
{
|
||||
"description": "Track endpoint not centered on via",
|
||||
"key": "track_not_centered_on_via"
|
||||
},
|
||||
{
|
||||
"description": "Tuning profile track geometries",
|
||||
"key": "tuning_profile_track_geometries"
|
||||
},
|
||||
{
|
||||
"description": "Footprint doesn't match symbol's footprint filters",
|
||||
"key": "footprint_filters_mismatch"
|
||||
},
|
||||
{
|
||||
"description": "Footprint component type doesn't match footprint pads",
|
||||
"key": "footprint_type_mismatch"
|
||||
}
|
||||
],
|
||||
"included_severities": [
|
||||
"error",
|
||||
"warning"
|
||||
],
|
||||
"kicad_version": "10.0.6",
|
||||
"schematic_parity": [],
|
||||
"source": "serial-carrier.kicad_pcb",
|
||||
"unconnected_items": [
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 5 [/RS_DSR] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 114.16
|
||||
},
|
||||
"uuid": "0ceca603-53a8-4a53-85cc-f7f8e7be90e4"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 7 [/RS_DSR] von U2",
|
||||
"pos": {
|
||||
"x": 158.24,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "e2d6b2cb-6025-490c-8371-d7cc34ac37f6"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 6 [/RS_RI] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 116.7
|
||||
},
|
||||
"uuid": "f35f1696-b778-437b-8cce-67b8c4d5f5d0"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 10 [/RS_RI] von U2",
|
||||
"pos": {
|
||||
"x": 165.86,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "e28de6f2-fb85-4849-ba1a-e98e2a231492"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 8 [/RS_RTS] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 121.78
|
||||
},
|
||||
"uuid": "55162730-46fd-465d-a1c5-20aed09ed534"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 8 [/RS_RTS] von U2",
|
||||
"pos": {
|
||||
"x": 160.78,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "5c304724-2bc6-409d-9c59-2e40adc557b9"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 9 [/RS_CTS] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 124.32
|
||||
},
|
||||
"uuid": "f75c20f8-d3b5-4c3b-9919-cb044b2da5c3"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 9 [/RS_CTS] von U2",
|
||||
"pos": {
|
||||
"x": 163.32,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "a8411036-6859-4041-84b8-2c80c326c58e"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 12 [/RS_VALID] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 131.94
|
||||
},
|
||||
"uuid": "2fbc596b-c88f-4fc6-aa94-5dad4fcac9cc"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 11 [/RS_VALID] von U2",
|
||||
"pos": {
|
||||
"x": 168.4,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "9ad42f44-160f-4aa5-bcf0-a4466c090438"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 15 [/RS_OFF_N] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 139.56
|
||||
},
|
||||
"uuid": "34e1afe9-b3fc-4d3a-9e33-38b32244f19e"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 12 [/RS_OFF_N] von U2",
|
||||
"pos": {
|
||||
"x": 170.94,
|
||||
"y": 130.0
|
||||
},
|
||||
"uuid": "a43ba2f2-477d-4850-87de-e1591119d5ae"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 17 [/OLED_SDA] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 144.64
|
||||
},
|
||||
"uuid": "1f91549c-5cb2-465f-86df-b2f1b0c16ed8"
|
||||
},
|
||||
{
|
||||
"description": "Durchsteckpad 4 [/OLED_SDA] von DS1",
|
||||
"pos": {
|
||||
"x": 159.81,
|
||||
"y": 137.5
|
||||
},
|
||||
"uuid": "91a4dcef-1b36-4e3d-a15c-c4578077c27b"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
},
|
||||
{
|
||||
"description": "Missing connection between items",
|
||||
"items": [
|
||||
{
|
||||
"description": "Durchsteckpad 20 [/BTN_NEXT] von U1",
|
||||
"pos": {
|
||||
"x": 108.0,
|
||||
"y": 152.26
|
||||
},
|
||||
"uuid": "e7159c90-4e8d-4b21-8e84-a7f59f793440"
|
||||
},
|
||||
{
|
||||
"description": "Leiterbahn [/BTN_NEXT] auf F.Cu, Länge 6,5000 mm",
|
||||
"pos": {
|
||||
"x": 167.0,
|
||||
"y": 168.0
|
||||
},
|
||||
"uuid": "97cfdf4d-f068-4e4a-8684-aae638a809ad"
|
||||
}
|
||||
],
|
||||
"severity": "error",
|
||||
"type": "unconnected_items"
|
||||
}
|
||||
],
|
||||
"violations": []
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
/builddir/build/BUILD/kicad-10.0.6-build/kicad-10.0.6/include/properties/property.h(607): assert "m_choices.GetCount() > 0" failed in PROPERTY_ENUM(): No enum choices defined
|
||||
/builddir/build/BUILD/kicad-10.0.6-build/kicad-10.0.6/include/properties/property.h(607): assert "m_choices.GetCount() > 0" failed in PROPERTY_ENUM(): No enum choices defined
|
||||
/builddir/build/BUILD/kicad-10.0.6-build/kicad-10.0.6/include/properties/property.h(607): assert "m_choices.GetCount() > 0" failed in PROPERTY_ENUM(): No enum choices defined
|
||||
{"net": "/+3V3", "start": "U1.1", "end": "U1.2", "start_mm": [108.0, 104.0], "end_mm": [108.0, 106.54], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 26}
|
||||
{"net": "/+3V3", "start": "R2.1", "end": "DS1.2", "start_mm": [154.0, 134.0], "end_mm": [154.73, 137.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 239}
|
||||
{"net": "/+3V3", "start": "U2.1", "end": "R1.1", "start_mm": [143.0, 130.0], "end_mm": [143.0, 134.0], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 41}
|
||||
{"net": "/BTN_NEXT", "start": "SW3.1", "end": "SW3.1", "start_mm": [167.0, 168.0], "end_mm": [173.5, 168.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 66}
|
||||
{"net": "/BTN_PREVIOUS", "start": "SW1.1", "end": "SW1.1", "start_mm": [149.5, 168.0], "end_mm": [143.0, 168.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 66}
|
||||
{"net": "/BTN_SELECT", "start": "SW2.1", "end": "SW2.1", "start_mm": [155.0, 168.0], "end_mm": [161.5, 168.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 66}
|
||||
{"net": "/+3V3", "start": "DS1.2", "end": "R3.1", "start_mm": [154.73, 137.5], "end_mm": [165.0, 134.0], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 1334}
|
||||
{"net": "/+3V3", "start": "R1.1", "end": "R2.1", "start_mm": [143.0, 134.0], "end_mm": [154.0, 134.0], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 3711}
|
||||
{"net": "/BTN_SELECT", "start": "SW2.1", "end": "R2.2", "start_mm": [161.5, 168.0], "end_mm": [161.62, 134.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 681}
|
||||
{"net": "/BTN_NEXT", "start": "SW3.1", "end": "R3.2", "start_mm": [173.5, 168.0], "end_mm": [172.62, 134.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 3329}
|
||||
{"net": "/BTN_PREVIOUS", "start": "R1.2", "end": "SW1.1", "start_mm": [150.62, 134.0], "end_mm": [149.5, 168.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 3971}
|
||||
{"net": "/+3V3", "start": "U1.2", "end": "U2.1", "start_mm": [108.0, 106.54], "end_mm": [143.0, 130.0], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 224476}
|
||||
{"net": "/RS_RX", "start": "U1.11", "end": "U2.4", "start_mm": [108.0, 129.4], "end_mm": [150.62, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 274662}
|
||||
{"net": "/BTN_PREVIOUS", "start": "U1.16", "end": "R1.2", "start_mm": [108.0, 142.1], "end_mm": [150.62, 134.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 227867}
|
||||
{"net": "/RS_DCD", "start": "U1.4", "end": "U2.3", "start_mm": [108.0, 111.62], "end_mm": [148.08, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 201896}
|
||||
{"net": "/RS_TX", "start": "U1.10", "end": "U2.5", "start_mm": [108.0, 126.86], "end_mm": [153.16, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 271117}
|
||||
{"net": "/RS_DTR", "start": "U1.7", "end": "U2.6", "start_mm": [108.0, 119.24], "end_mm": [155.7, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 307013}
|
||||
{"net": "/OLED_SCL", "start": "U1.18", "end": "DS1.3", "start_mm": [108.0, 147.18], "end_mm": [157.27, 137.5], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 127246}
|
||||
{"net": "/BTN_SELECT", "start": "SW2.1", "end": "U1.19", "start_mm": [155.0, 168.0], "end_mm": [108.0, 149.72], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 73189}
|
||||
{"net": "/OLED_SDA", "start": "U1.17", "end": "DS1.4", "start_mm": [108.0, 144.64], "end_mm": [159.81, 137.5], "routed": false, "width_mm": 0.25, "power_fallback": false, "expansions": 272010}
|
||||
{"net": "/RS_DSR", "start": "U1.5", "end": "U2.7", "start_mm": [108.0, 114.16], "end_mm": [158.24, 130.0], "routed": false, "width_mm": 0.25, "power_fallback": false, "expansions": 272046}
|
||||
{"net": "/RS_RTS", "start": "U1.8", "end": "U2.8", "start_mm": [108.0, 121.78], "end_mm": [160.78, 130.0], "routed": false, "width_mm": 0.25, "power_fallback": false, "expansions": 272010}
|
||||
{"net": "/RS_CTS", "start": "U1.9", "end": "U2.9", "start_mm": [108.0, 124.32], "end_mm": [163.32, 130.0], "routed": false, "width_mm": 0.25, "power_fallback": false, "expansions": 272000}
|
||||
{"net": "/RS_RI", "start": "U1.6", "end": "U2.10", "start_mm": [108.0, 116.7], "end_mm": [165.86, 130.0], "routed": false, "width_mm": 0.25, "power_fallback": false, "expansions": 272008}
|
||||
{"net": "/RS_VALID", "start": "U1.12", "end": "U2.11", "start_mm": [108.0, 131.94], "end_mm": [168.4, 130.0], "routed": false, "width_mm": 0.25, "power_fallback": false, "expansions": 272015}
|
||||
{"net": "/BTN_NEXT", "start": "U1.20", "end": "SW3.1", "start_mm": [108.0, 152.26], "end_mm": [167.0, 168.0], "routed": false, "width_mm": 0.25, "power_fallback": false, "expansions": 272010}
|
||||
{"net": "/RS_OFF_N", "start": "U1.15", "end": "U2.12", "start_mm": [108.0, 139.56], "end_mm": [170.94, 130.0], "routed": false, "width_mm": 0.25, "power_fallback": false, "expansions": 272010}
|
||||
{"net": "/GND", "start": "U1.44", "end": "U1.43", "start_mm": [133.4, 157.34], "end_mm": [133.4, 154.8], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 26}
|
||||
{"net": "/GND", "start": "SW2.2", "end": "SW1.2", "start_mm": [155.0, 172.5], "end_mm": [149.5, 172.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 56}
|
||||
{"net": "/GND", "start": "SW2.2", "end": "SW3.2", "start_mm": [161.5, 172.5], "end_mm": [167.0, 172.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 56}
|
||||
{"net": "/GND", "start": "SW2.2", "end": "SW2.2", "start_mm": [155.0, 172.5], "end_mm": [161.5, 172.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 66}
|
||||
{"net": "/GND", "start": "SW3.2", "end": "SW3.2", "start_mm": [167.0, 172.5], "end_mm": [173.5, 172.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 66}
|
||||
{"net": "/GND", "start": "SW1.2", "end": "SW1.2", "start_mm": [149.5, 172.5], "end_mm": [143.0, 172.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 66}
|
||||
{"net": "/GND", "start": "DS1.1", "end": "U2.2", "start_mm": [152.19, 137.5], "end_mm": [145.54, 130.0], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 3234}
|
||||
{"net": "/GND", "start": "SW1.2", "end": "U1.44", "start_mm": [143.0, 172.5], "end_mm": [133.4, 157.34], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 29110}
|
||||
{"net": "/GND", "start": "U1.44", "end": "U1.22", "start_mm": [133.4, 157.34], "end_mm": [108.0, 157.34], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 16915}
|
||||
{"net": "/GND", "start": "U1.43", "end": "DS1.1", "start_mm": [133.4, 154.8], "end_mm": [152.19, 137.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 57470}
|
||||
{"net": "/GND", "start": "U2.2", "end": "U1.23", "start_mm": [145.54, 130.0], "end_mm": [133.4, 104.0], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 34158}
|
||||
22:45:50: Debug: Adding duplicate image handler for 'PNG file'
|
||||
22:45:50: Debug: Adding duplicate image handler for 'JPEG file'
|
||||
22:45:50: Debug: Adding duplicate image handler for 'TIFF file'
|
||||
22:45:50: Debug: Adding duplicate image handler for 'GIF file'
|
||||
22:45:50: Debug: Adding duplicate image handler for 'PNM file'
|
||||
22:45:50: Debug: Adding duplicate image handler for 'PCX file'
|
||||
22:45:50: Debug: Adding duplicate image handler for 'IFF file'
|
||||
22:45:50: Debug: Adding duplicate image handler for 'Windows icon file'
|
||||
22:45:50: Debug: Adding duplicate image handler for 'Windows cursor file'
|
||||
22:45:50: Debug: Adding duplicate image handler for 'Windows animated cursor file'
|
||||
22:45:50: Debug: Adding duplicate image handler for 'TGA file'
|
||||
22:45:50: Debug: Adding duplicate image handler for 'XPM file'
|
||||
{
|
||||
"draft_only": true,
|
||||
"saved": true,
|
||||
"grid_mm": 0.1,
|
||||
"clearance_mm": 0.25,
|
||||
"safety_margin_mm": 0.04,
|
||||
"via_diameter_mm": 0.7,
|
||||
"via_drill_mm": 0.3,
|
||||
"elapsed_seconds": 20.799824999005068,
|
||||
"routed_tree_edges": 30,
|
||||
"total_tree_edges": 38,
|
||||
"tracks": 248,
|
||||
"vias": 13,
|
||||
"immutable_identity_sha256": "81def52e6c1d574b4d3ab1a5859a5266b893df0ea6c5b9aa7d7b688cc4a98519",
|
||||
"input_sha256": "ab3f0775dee575a11d06f80996169f5097dfff672b69152ad9b559707f70009b",
|
||||
"validation": "KiCad DRC must be run separately; tree-edge counts are not DRC connectivity"
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
/builddir/build/BUILD/kicad-10.0.6-build/kicad-10.0.6/include/properties/property.h(607): assert "m_choices.GetCount() > 0" failed in PROPERTY_ENUM(): No enum choices defined
|
||||
/builddir/build/BUILD/kicad-10.0.6-build/kicad-10.0.6/include/properties/property.h(607): assert "m_choices.GetCount() > 0" failed in PROPERTY_ENUM(): No enum choices defined
|
||||
/builddir/build/BUILD/kicad-10.0.6-build/kicad-10.0.6/include/properties/property.h(607): assert "m_choices.GetCount() > 0" failed in PROPERTY_ENUM(): No enum choices defined
|
||||
{"net": "/+3V3", "start": "U1.1", "end": "U1.2", "start_mm": [108.0, 104.0], "end_mm": [108.0, 106.54], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 52}
|
||||
{"net": "/+3V3", "start": "R2.1", "end": "DS1.2", "start_mm": [154.0, 134.0], "end_mm": [154.73, 137.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 911}
|
||||
{"net": "/+3V3", "start": "U2.1", "end": "R1.1", "start_mm": [143.0, 130.0], "end_mm": [143.0, 134.0], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 81}
|
||||
{"net": "/BTN_NEXT", "start": "SW3.1", "end": "SW3.1", "start_mm": [167.0, 168.0], "end_mm": [173.5, 168.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 131}
|
||||
{"net": "/BTN_PREVIOUS", "start": "SW1.1", "end": "SW1.1", "start_mm": [149.5, 168.0], "end_mm": [143.0, 168.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 131}
|
||||
{"net": "/BTN_SELECT", "start": "SW2.1", "end": "SW2.1", "start_mm": [155.0, 168.0], "end_mm": [161.5, 168.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 131}
|
||||
{"net": "/+3V3", "start": "DS1.2", "end": "R3.1", "start_mm": [154.73, 137.5], "end_mm": [165.0, 134.0], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 5139}
|
||||
{"net": "/+3V3", "start": "R1.1", "end": "R2.1", "start_mm": [143.0, 134.0], "end_mm": [154.0, 134.0], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 14153}
|
||||
{"net": "/BTN_SELECT", "start": "SW2.1", "end": "R2.2", "start_mm": [161.5, 168.0], "end_mm": [161.62, 134.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 2039}
|
||||
{"net": "/BTN_NEXT", "start": "SW3.1", "end": "R3.2", "start_mm": [173.5, 168.0], "end_mm": [172.62, 134.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 12615}
|
||||
{"net": "/BTN_PREVIOUS", "start": "R1.2", "end": "SW1.1", "start_mm": [150.62, 134.0], "end_mm": [149.5, 168.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 15179}
|
||||
{"net": "/+3V3", "start": "U1.2", "end": "U2.1", "start_mm": [108.0, 106.54], "end_mm": [143.0, 130.0], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 894511}
|
||||
{"net": "/RS_RX", "start": "U1.11", "end": "U2.4", "start_mm": [108.0, 129.4], "end_mm": [150.62, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 51516}
|
||||
{"net": "/BTN_PREVIOUS", "start": "U1.16", "end": "R1.2", "start_mm": [108.0, 142.1], "end_mm": [150.62, 134.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 94479}
|
||||
{"net": "/RS_DCD", "start": "U1.4", "end": "U2.3", "start_mm": [108.0, 111.62], "end_mm": [148.08, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 266031}
|
||||
{"net": "/RS_TX", "start": "U1.10", "end": "U2.5", "start_mm": [108.0, 126.86], "end_mm": [153.16, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 175689}
|
||||
{"net": "/RS_DTR", "start": "U1.7", "end": "U2.6", "start_mm": [108.0, 119.24], "end_mm": [155.7, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 326823}
|
||||
{"net": "/OLED_SCL", "start": "U1.18", "end": "DS1.3", "start_mm": [108.0, 147.18], "end_mm": [157.27, 137.5], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 82557}
|
||||
{"net": "/BTN_SELECT", "start": "SW2.1", "end": "U1.19", "start_mm": [155.0, 168.0], "end_mm": [108.0, 149.72], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 147997}
|
||||
{"net": "/OLED_SDA", "start": "U1.17", "end": "DS1.4", "start_mm": [108.0, 144.64], "end_mm": [159.81, 137.5], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 266428}
|
||||
{"net": "/RS_DSR", "start": "U1.5", "end": "U2.7", "start_mm": [108.0, 114.16], "end_mm": [158.24, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 372014}
|
||||
{"net": "/RS_RTS", "start": "U1.8", "end": "U2.8", "start_mm": [108.0, 121.78], "end_mm": [160.78, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 298514}
|
||||
{"net": "/RS_CTS", "start": "U1.9", "end": "U2.9", "start_mm": [108.0, 124.32], "end_mm": [163.32, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 265272}
|
||||
{"net": "/RS_RI", "start": "U1.6", "end": "U2.10", "start_mm": [108.0, 116.7], "end_mm": [165.86, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 332506}
|
||||
{"net": "/RS_VALID", "start": "U1.12", "end": "U2.11", "start_mm": [108.0, 131.94], "end_mm": [168.4, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 348384}
|
||||
{"net": "/BTN_NEXT", "start": "U1.20", "end": "SW3.1", "start_mm": [108.0, 152.26], "end_mm": [167.0, 168.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 272795}
|
||||
{"net": "/RS_OFF_N", "start": "U1.15", "end": "U2.12", "start_mm": [108.0, 139.56], "end_mm": [170.94, 130.0], "routed": true, "width_mm": 0.25, "power_fallback": false, "expansions": 351630}
|
||||
{"net": "/GND", "start": "U1.44", "end": "U1.43", "start_mm": [133.4, 157.34], "end_mm": [133.4, 154.8], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 52}
|
||||
{"net": "/GND", "start": "SW2.2", "end": "SW1.2", "start_mm": [155.0, 172.5], "end_mm": [149.5, 172.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 111}
|
||||
{"net": "/GND", "start": "SW2.2", "end": "SW3.2", "start_mm": [161.5, 172.5], "end_mm": [167.0, 172.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 111}
|
||||
{"net": "/GND", "start": "SW2.2", "end": "SW2.2", "start_mm": [155.0, 172.5], "end_mm": [161.5, 172.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 131}
|
||||
{"net": "/GND", "start": "SW3.2", "end": "SW3.2", "start_mm": [167.0, 172.5], "end_mm": [173.5, 172.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 131}
|
||||
{"net": "/GND", "start": "SW1.2", "end": "SW1.2", "start_mm": [149.5, 172.5], "end_mm": [143.0, 172.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 131}
|
||||
{"net": "/GND", "start": "DS1.1", "end": "U2.2", "start_mm": [152.19, 137.5], "end_mm": [145.54, 130.0], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 17468}
|
||||
{"net": "/GND", "start": "SW1.2", "end": "U1.44", "start_mm": [143.0, 172.5], "end_mm": [133.4, 157.34], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 27488}
|
||||
{"net": "/GND", "start": "U1.44", "end": "U1.22", "start_mm": [133.4, 157.34], "end_mm": [108.0, 157.34], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 73753}
|
||||
{"net": "/GND", "start": "U1.43", "end": "DS1.1", "start_mm": [133.4, 154.8], "end_mm": [152.19, 137.5], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 54021}
|
||||
{"net": "/GND", "start": "U2.2", "end": "U1.23", "start_mm": [145.54, 130.0], "end_mm": [133.4, 104.0], "routed": true, "width_mm": 0.5, "power_fallback": false, "expansions": 98250}
|
||||
22:47:09: Debug: Adding duplicate image handler for 'PNG file'
|
||||
22:47:09: Debug: Adding duplicate image handler for 'JPEG file'
|
||||
22:47:09: Debug: Adding duplicate image handler for 'TIFF file'
|
||||
22:47:09: Debug: Adding duplicate image handler for 'GIF file'
|
||||
22:47:09: Debug: Adding duplicate image handler for 'PNM file'
|
||||
22:47:09: Debug: Adding duplicate image handler for 'PCX file'
|
||||
22:47:09: Debug: Adding duplicate image handler for 'IFF file'
|
||||
22:47:09: Debug: Adding duplicate image handler for 'Windows icon file'
|
||||
22:47:09: Debug: Adding duplicate image handler for 'Windows cursor file'
|
||||
22:47:09: Debug: Adding duplicate image handler for 'Windows animated cursor file'
|
||||
22:47:09: Debug: Adding duplicate image handler for 'TGA file'
|
||||
22:47:09: Debug: Adding duplicate image handler for 'XPM file'
|
||||
{
|
||||
"draft_only": true,
|
||||
"saved": true,
|
||||
"grid_mm": 0.05,
|
||||
"clearance_mm": 0.25,
|
||||
"safety_margin_mm": 0.02,
|
||||
"via_diameter_mm": 0.7,
|
||||
"via_drill_mm": 0.3,
|
||||
"elapsed_seconds": 26.517815405000874,
|
||||
"routed_tree_edges": 38,
|
||||
"total_tree_edges": 38,
|
||||
"tracks": 569,
|
||||
"vias": 20,
|
||||
"immutable_identity_sha256": "81def52e6c1d574b4d3ab1a5859a5266b893df0ea6c5b9aa7d7b688cc4a98519",
|
||||
"input_sha256": "41643d6089dae5ef2eee1a2071a6d11ae4c00f3c922eddfeaafff619fc5fab19",
|
||||
"validation": "KiCad DRC must be run separately; tree-edge counts are not DRC connectivity"
|
||||
}
|
||||
@@ -0,0 +1,665 @@
|
||||
{
|
||||
"draft_only": true,
|
||||
"saved": true,
|
||||
"grid_mm": 0.05,
|
||||
"clearance_mm": 0.25,
|
||||
"safety_margin_mm": 0.02,
|
||||
"via_diameter_mm": 0.7,
|
||||
"via_drill_mm": 0.3,
|
||||
"elapsed_seconds": 26.517815405000874,
|
||||
"connections": [
|
||||
{
|
||||
"net": "/+3V3",
|
||||
"start": "U1.1",
|
||||
"end": "U1.2",
|
||||
"start_mm": [
|
||||
108.0,
|
||||
104.0
|
||||
],
|
||||
"end_mm": [
|
||||
108.0,
|
||||
106.54
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.5,
|
||||
"power_fallback": false,
|
||||
"expansions": 52
|
||||
},
|
||||
{
|
||||
"net": "/+3V3",
|
||||
"start": "R2.1",
|
||||
"end": "DS1.2",
|
||||
"start_mm": [
|
||||
154.0,
|
||||
134.0
|
||||
],
|
||||
"end_mm": [
|
||||
154.73,
|
||||
137.5
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.5,
|
||||
"power_fallback": false,
|
||||
"expansions": 911
|
||||
},
|
||||
{
|
||||
"net": "/+3V3",
|
||||
"start": "U2.1",
|
||||
"end": "R1.1",
|
||||
"start_mm": [
|
||||
143.0,
|
||||
130.0
|
||||
],
|
||||
"end_mm": [
|
||||
143.0,
|
||||
134.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.5,
|
||||
"power_fallback": false,
|
||||
"expansions": 81
|
||||
},
|
||||
{
|
||||
"net": "/BTN_NEXT",
|
||||
"start": "SW3.1",
|
||||
"end": "SW3.1",
|
||||
"start_mm": [
|
||||
167.0,
|
||||
168.0
|
||||
],
|
||||
"end_mm": [
|
||||
173.5,
|
||||
168.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 131
|
||||
},
|
||||
{
|
||||
"net": "/BTN_PREVIOUS",
|
||||
"start": "SW1.1",
|
||||
"end": "SW1.1",
|
||||
"start_mm": [
|
||||
149.5,
|
||||
168.0
|
||||
],
|
||||
"end_mm": [
|
||||
143.0,
|
||||
168.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 131
|
||||
},
|
||||
{
|
||||
"net": "/BTN_SELECT",
|
||||
"start": "SW2.1",
|
||||
"end": "SW2.1",
|
||||
"start_mm": [
|
||||
155.0,
|
||||
168.0
|
||||
],
|
||||
"end_mm": [
|
||||
161.5,
|
||||
168.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 131
|
||||
},
|
||||
{
|
||||
"net": "/+3V3",
|
||||
"start": "DS1.2",
|
||||
"end": "R3.1",
|
||||
"start_mm": [
|
||||
154.73,
|
||||
137.5
|
||||
],
|
||||
"end_mm": [
|
||||
165.0,
|
||||
134.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.5,
|
||||
"power_fallback": false,
|
||||
"expansions": 5139
|
||||
},
|
||||
{
|
||||
"net": "/+3V3",
|
||||
"start": "R1.1",
|
||||
"end": "R2.1",
|
||||
"start_mm": [
|
||||
143.0,
|
||||
134.0
|
||||
],
|
||||
"end_mm": [
|
||||
154.0,
|
||||
134.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.5,
|
||||
"power_fallback": false,
|
||||
"expansions": 14153
|
||||
},
|
||||
{
|
||||
"net": "/BTN_SELECT",
|
||||
"start": "SW2.1",
|
||||
"end": "R2.2",
|
||||
"start_mm": [
|
||||
161.5,
|
||||
168.0
|
||||
],
|
||||
"end_mm": [
|
||||
161.62,
|
||||
134.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 2039
|
||||
},
|
||||
{
|
||||
"net": "/BTN_NEXT",
|
||||
"start": "SW3.1",
|
||||
"end": "R3.2",
|
||||
"start_mm": [
|
||||
173.5,
|
||||
168.0
|
||||
],
|
||||
"end_mm": [
|
||||
172.62,
|
||||
134.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 12615
|
||||
},
|
||||
{
|
||||
"net": "/BTN_PREVIOUS",
|
||||
"start": "R1.2",
|
||||
"end": "SW1.1",
|
||||
"start_mm": [
|
||||
150.62,
|
||||
134.0
|
||||
],
|
||||
"end_mm": [
|
||||
149.5,
|
||||
168.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 15179
|
||||
},
|
||||
{
|
||||
"net": "/+3V3",
|
||||
"start": "U1.2",
|
||||
"end": "U2.1",
|
||||
"start_mm": [
|
||||
108.0,
|
||||
106.54
|
||||
],
|
||||
"end_mm": [
|
||||
143.0,
|
||||
130.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.5,
|
||||
"power_fallback": false,
|
||||
"expansions": 894511
|
||||
},
|
||||
{
|
||||
"net": "/RS_RX",
|
||||
"start": "U1.11",
|
||||
"end": "U2.4",
|
||||
"start_mm": [
|
||||
108.0,
|
||||
129.4
|
||||
],
|
||||
"end_mm": [
|
||||
150.62,
|
||||
130.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 51516
|
||||
},
|
||||
{
|
||||
"net": "/BTN_PREVIOUS",
|
||||
"start": "U1.16",
|
||||
"end": "R1.2",
|
||||
"start_mm": [
|
||||
108.0,
|
||||
142.1
|
||||
],
|
||||
"end_mm": [
|
||||
150.62,
|
||||
134.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 94479
|
||||
},
|
||||
{
|
||||
"net": "/RS_DCD",
|
||||
"start": "U1.4",
|
||||
"end": "U2.3",
|
||||
"start_mm": [
|
||||
108.0,
|
||||
111.62
|
||||
],
|
||||
"end_mm": [
|
||||
148.08,
|
||||
130.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 266031
|
||||
},
|
||||
{
|
||||
"net": "/RS_TX",
|
||||
"start": "U1.10",
|
||||
"end": "U2.5",
|
||||
"start_mm": [
|
||||
108.0,
|
||||
126.86
|
||||
],
|
||||
"end_mm": [
|
||||
153.16,
|
||||
130.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 175689
|
||||
},
|
||||
{
|
||||
"net": "/RS_DTR",
|
||||
"start": "U1.7",
|
||||
"end": "U2.6",
|
||||
"start_mm": [
|
||||
108.0,
|
||||
119.24
|
||||
],
|
||||
"end_mm": [
|
||||
155.7,
|
||||
130.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 326823
|
||||
},
|
||||
{
|
||||
"net": "/OLED_SCL",
|
||||
"start": "U1.18",
|
||||
"end": "DS1.3",
|
||||
"start_mm": [
|
||||
108.0,
|
||||
147.18
|
||||
],
|
||||
"end_mm": [
|
||||
157.27,
|
||||
137.5
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 82557
|
||||
},
|
||||
{
|
||||
"net": "/BTN_SELECT",
|
||||
"start": "SW2.1",
|
||||
"end": "U1.19",
|
||||
"start_mm": [
|
||||
155.0,
|
||||
168.0
|
||||
],
|
||||
"end_mm": [
|
||||
108.0,
|
||||
149.72
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 147997
|
||||
},
|
||||
{
|
||||
"net": "/OLED_SDA",
|
||||
"start": "U1.17",
|
||||
"end": "DS1.4",
|
||||
"start_mm": [
|
||||
108.0,
|
||||
144.64
|
||||
],
|
||||
"end_mm": [
|
||||
159.81,
|
||||
137.5
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 266428
|
||||
},
|
||||
{
|
||||
"net": "/RS_DSR",
|
||||
"start": "U1.5",
|
||||
"end": "U2.7",
|
||||
"start_mm": [
|
||||
108.0,
|
||||
114.16
|
||||
],
|
||||
"end_mm": [
|
||||
158.24,
|
||||
130.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 372014
|
||||
},
|
||||
{
|
||||
"net": "/RS_RTS",
|
||||
"start": "U1.8",
|
||||
"end": "U2.8",
|
||||
"start_mm": [
|
||||
108.0,
|
||||
121.78
|
||||
],
|
||||
"end_mm": [
|
||||
160.78,
|
||||
130.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 298514
|
||||
},
|
||||
{
|
||||
"net": "/RS_CTS",
|
||||
"start": "U1.9",
|
||||
"end": "U2.9",
|
||||
"start_mm": [
|
||||
108.0,
|
||||
124.32
|
||||
],
|
||||
"end_mm": [
|
||||
163.32,
|
||||
130.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 265272
|
||||
},
|
||||
{
|
||||
"net": "/RS_RI",
|
||||
"start": "U1.6",
|
||||
"end": "U2.10",
|
||||
"start_mm": [
|
||||
108.0,
|
||||
116.7
|
||||
],
|
||||
"end_mm": [
|
||||
165.86,
|
||||
130.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 332506
|
||||
},
|
||||
{
|
||||
"net": "/RS_VALID",
|
||||
"start": "U1.12",
|
||||
"end": "U2.11",
|
||||
"start_mm": [
|
||||
108.0,
|
||||
131.94
|
||||
],
|
||||
"end_mm": [
|
||||
168.4,
|
||||
130.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 348384
|
||||
},
|
||||
{
|
||||
"net": "/BTN_NEXT",
|
||||
"start": "U1.20",
|
||||
"end": "SW3.1",
|
||||
"start_mm": [
|
||||
108.0,
|
||||
152.26
|
||||
],
|
||||
"end_mm": [
|
||||
167.0,
|
||||
168.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 272795
|
||||
},
|
||||
{
|
||||
"net": "/RS_OFF_N",
|
||||
"start": "U1.15",
|
||||
"end": "U2.12",
|
||||
"start_mm": [
|
||||
108.0,
|
||||
139.56
|
||||
],
|
||||
"end_mm": [
|
||||
170.94,
|
||||
130.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.25,
|
||||
"power_fallback": false,
|
||||
"expansions": 351630
|
||||
},
|
||||
{
|
||||
"net": "/GND",
|
||||
"start": "U1.44",
|
||||
"end": "U1.43",
|
||||
"start_mm": [
|
||||
133.4,
|
||||
157.34
|
||||
],
|
||||
"end_mm": [
|
||||
133.4,
|
||||
154.8
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.5,
|
||||
"power_fallback": false,
|
||||
"expansions": 52
|
||||
},
|
||||
{
|
||||
"net": "/GND",
|
||||
"start": "SW2.2",
|
||||
"end": "SW1.2",
|
||||
"start_mm": [
|
||||
155.0,
|
||||
172.5
|
||||
],
|
||||
"end_mm": [
|
||||
149.5,
|
||||
172.5
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.5,
|
||||
"power_fallback": false,
|
||||
"expansions": 111
|
||||
},
|
||||
{
|
||||
"net": "/GND",
|
||||
"start": "SW2.2",
|
||||
"end": "SW3.2",
|
||||
"start_mm": [
|
||||
161.5,
|
||||
172.5
|
||||
],
|
||||
"end_mm": [
|
||||
167.0,
|
||||
172.5
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.5,
|
||||
"power_fallback": false,
|
||||
"expansions": 111
|
||||
},
|
||||
{
|
||||
"net": "/GND",
|
||||
"start": "SW2.2",
|
||||
"end": "SW2.2",
|
||||
"start_mm": [
|
||||
155.0,
|
||||
172.5
|
||||
],
|
||||
"end_mm": [
|
||||
161.5,
|
||||
172.5
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.5,
|
||||
"power_fallback": false,
|
||||
"expansions": 131
|
||||
},
|
||||
{
|
||||
"net": "/GND",
|
||||
"start": "SW3.2",
|
||||
"end": "SW3.2",
|
||||
"start_mm": [
|
||||
167.0,
|
||||
172.5
|
||||
],
|
||||
"end_mm": [
|
||||
173.5,
|
||||
172.5
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.5,
|
||||
"power_fallback": false,
|
||||
"expansions": 131
|
||||
},
|
||||
{
|
||||
"net": "/GND",
|
||||
"start": "SW1.2",
|
||||
"end": "SW1.2",
|
||||
"start_mm": [
|
||||
149.5,
|
||||
172.5
|
||||
],
|
||||
"end_mm": [
|
||||
143.0,
|
||||
172.5
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.5,
|
||||
"power_fallback": false,
|
||||
"expansions": 131
|
||||
},
|
||||
{
|
||||
"net": "/GND",
|
||||
"start": "DS1.1",
|
||||
"end": "U2.2",
|
||||
"start_mm": [
|
||||
152.19,
|
||||
137.5
|
||||
],
|
||||
"end_mm": [
|
||||
145.54,
|
||||
130.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.5,
|
||||
"power_fallback": false,
|
||||
"expansions": 17468
|
||||
},
|
||||
{
|
||||
"net": "/GND",
|
||||
"start": "SW1.2",
|
||||
"end": "U1.44",
|
||||
"start_mm": [
|
||||
143.0,
|
||||
172.5
|
||||
],
|
||||
"end_mm": [
|
||||
133.4,
|
||||
157.34
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.5,
|
||||
"power_fallback": false,
|
||||
"expansions": 27488
|
||||
},
|
||||
{
|
||||
"net": "/GND",
|
||||
"start": "U1.44",
|
||||
"end": "U1.22",
|
||||
"start_mm": [
|
||||
133.4,
|
||||
157.34
|
||||
],
|
||||
"end_mm": [
|
||||
108.0,
|
||||
157.34
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.5,
|
||||
"power_fallback": false,
|
||||
"expansions": 73753
|
||||
},
|
||||
{
|
||||
"net": "/GND",
|
||||
"start": "U1.43",
|
||||
"end": "DS1.1",
|
||||
"start_mm": [
|
||||
133.4,
|
||||
154.8
|
||||
],
|
||||
"end_mm": [
|
||||
152.19,
|
||||
137.5
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.5,
|
||||
"power_fallback": false,
|
||||
"expansions": 54021
|
||||
},
|
||||
{
|
||||
"net": "/GND",
|
||||
"start": "U2.2",
|
||||
"end": "U1.23",
|
||||
"start_mm": [
|
||||
145.54,
|
||||
130.0
|
||||
],
|
||||
"end_mm": [
|
||||
133.4,
|
||||
104.0
|
||||
],
|
||||
"routed": true,
|
||||
"width_mm": 0.5,
|
||||
"power_fallback": false,
|
||||
"expansions": 98250
|
||||
}
|
||||
],
|
||||
"routed_tree_edges": 38,
|
||||
"total_tree_edges": 38,
|
||||
"tracks": 569,
|
||||
"vias": 20,
|
||||
"immutable_identity_sha256": "81def52e6c1d574b4d3ab1a5859a5266b893df0ea6c5b9aa7d7b688cc4a98519",
|
||||
"input_sha256": "41643d6089dae5ef2eee1a2071a6d11ae4c00f3c922eddfeaafff619fc5fab19",
|
||||
"validation": "KiCad DRC must be run separately; tree-edge counts are not DRC connectivity"
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
# Two-layer draft routing result
|
||||
|
||||
Date: 2026-09-20. KiCad 10.0.6; system `/usr/bin/python3`.
|
||||
|
||||
## Saved result
|
||||
|
||||
Actual copper routing is saved in `../serial-carrier.kicad_pcb`, not just a preview
|
||||
or an exported proposal. **38/38 required spanning-tree connections across 17
|
||||
multi-pad nets routed; KiCad reports 0 unconnected items, 0 errors, 0 warnings.**
|
||||
Intentional single-pad `unconnected-(...)` nets retain their original names and
|
||||
are not connected to anything else.
|
||||
|
||||
- Two copper layers, F.Cu and B.Cu.
|
||||
- 569 straight track segments: 425 at 0.25 mm for signals and 144 at 0.5 mm for
|
||||
+3V3/GND. No narrow power-track fallback was necessary.
|
||||
- 20 through vias, 0.7 mm copper diameter / 0.3 mm drill.
|
||||
- No copper pours: all ground connections were routed explicitly.
|
||||
- Original RF rule area, x110..131 / y100..113 mm on both copper layers, preserved.
|
||||
No tracks, vias or fills enter the reservation. Minimum copper-to-reservation
|
||||
gap measured independently is 0.025 mm; this is geometric compliance with the
|
||||
specified provisional boundary, **not validation of an antenna's RF needs**.
|
||||
- All 9 electrical footprints and 4 standalone mounting footprints preserved.
|
||||
Pad positions, shapes, sizes, drills, types, nets, functions, pin types and UUIDs;
|
||||
footprint placement, orientation, library IDs, values, UUIDs and schematic UUID
|
||||
paths; net table, outline and RF rule-area geometry/flags match the input.
|
||||
- Generator, README, schematic, project and libraries were not edited by routing.
|
||||
No external network dependency or manufacturing exports were used.
|
||||
|
||||
## Validation performed
|
||||
|
||||
From `hardware/PCB`:
|
||||
|
||||
```sh
|
||||
kicad-cli pcb drc --format json --refill-zones --save-board -o validation/pcb-routing-drc.json serial-carrier.kicad_pcb
|
||||
kicad-cli pcb drc --format json --all-track-errors --severity-all --exit-code-violations -o validation/pcb-routing-all-drc.json serial-carrier.kicad_pcb
|
||||
/usr/bin/python3 -B validation/pcb-routing-check.py
|
||||
```
|
||||
|
||||
Both DRC runs: **0 violations and 0 unconnected items**. No DRC settings or
|
||||
exclusions were added or changed. Existing project rules specify 0.25 mm minimum
|
||||
clearance, 0.5 mm copper-edge clearance, 0.25 mm minimum track width and 0.7 mm
|
||||
minimum via diameter.
|
||||
|
||||
Independent continuous-geometry audit (`pcb-routing-check.json`):
|
||||
|
||||
| Check | Measured minimum | Requirement |
|
||||
|---|---:|---:|
|
||||
| Different-net copper / copper-to-NPTH clearance | 0.275 mm | 0.25 mm |
|
||||
| Copper or NPTH edge to board edge | 0.525 mm | 0.5 mm |
|
||||
| Copper / NPTH edge to RF reserve | 0.025 mm | No intersection |
|
||||
| Via drill edge to another drilled hole edge | 0.840175 mm | 0.25 mm |
|
||||
|
||||
The audit uses exact straight-line/point/rectangle distance calculations with
|
||||
copper radii, rather than the router's raster masks. It also verifies dimensions,
|
||||
source-preservation invariants, and three overwrite-refusal cases. Requires
|
||||
locally installed `pcbnew`, NumPy and Shapely; the router itself only needs
|
||||
`pcbnew` and NumPy.
|
||||
|
||||
DRC still honors the project's pre-existing ignored checks:
|
||||
`missing_courtyard`, `track_not_centered_on_via`,
|
||||
`tuning_profile_track_geometries`, `footprint_filters_mismatch`, and
|
||||
`footprint_type_mismatch`. `--severity-all` does not enable ignored checks.
|
||||
The routing subtask compared electrical UUID linkage and pad-net assignments
|
||||
with the input board. Subsequent integration also ran fresh schematic-parity DRC
|
||||
and added missing symbol metadata fields to the PCB without changing copper.
|
||||
That check reports exactly one expected U2 footprint warning (provisional PCB
|
||||
footprint versus intentionally blank schematic assignment); no net mismatch.
|
||||
See `pcb-parity-drc.json` and `pcb-validation-summary.json`.
|
||||
|
||||
## Method and bounded passes
|
||||
|
||||
`../route_pcb_draft.py` uses a two-layer 8-direction raster A* search, an explicit
|
||||
via cost, exact-pad-centre terminal stubs, conservative foreign-copper and hole
|
||||
obstacles, and only collinear path compression. It preserves the L-shaped edge
|
||||
and RF reservation. Per-net minimum spanning trees connect every physical pad,
|
||||
including duplicate switch contacts; short links precede longer links and GND is
|
||||
last. It does not optimize return-current paths, topology or total via count.
|
||||
|
||||
1. Initial 0.1 mm raster / 0.04 mm safety margin / 250,000 expansions per search:
|
||||
29/38 connections; DRC 0 violations, 9 unconnected.
|
||||
2. Increased search allowance to 1,200,000 expansions: 30/38; DRC 0 violations,
|
||||
8 unconnected. Some raster header passages were blocked, not just expensive.
|
||||
3. Final 0.05 mm raster / 0.02 mm additional safety margin, with 0.25 mm physical
|
||||
clearance unchanged: 38/38 in approximately 26.5 seconds; DRC fully connected.
|
||||
Each pass had a 240-second routing deadline. No unresolved routing remains.
|
||||
|
||||
A KiCad Python binding ownership problem in the first replacement attempt caused
|
||||
an exception/segfault before any board save. Replacement now uses `board.Delete`
|
||||
instead of `board.Remove`; the subsequent save and no-save rerun both passed.
|
||||
The known startup PROPERTY_ENUM assertions do not prevent validation.
|
||||
|
||||
## Rerun safety
|
||||
|
||||
By default the script never saves. The existing routed board is protected even
|
||||
from a preview unless `--replace-routes` is given. A preview can be run with:
|
||||
|
||||
```sh
|
||||
/usr/bin/python3 -B route_pcb_draft.py --replace-routes --seconds 240
|
||||
```
|
||||
|
||||
This exact no-save workflow was tested: it again found 38/38 connections, 569
|
||||
segments and 20 vias, and left the board byte-for-byte unchanged.
|
||||
|
||||
**The following command discards all existing/manual tracks and vias**, then
|
||||
replaces them with fresh draft routing. Back up manual work first:
|
||||
|
||||
```sh
|
||||
/usr/bin/python3 -B route_pcb_draft.py --route --overwrite --replace-routes --seconds 240 --max-expansions 1200000
|
||||
```
|
||||
|
||||
The script refuses a PCB-editor lock, unexpected outline/RF/board structure,
|
||||
unsupported pad orientation/layers, unapproved existing routes, or detected board
|
||||
changes before save. Candidate serialization must preserve immutable geometry
|
||||
and linkage before replacing the board. It deliberately does not run DRC itself:
|
||||
rerun the validation commands after any routing change. Runtime/expansion limits
|
||||
can produce a partial board; inspect both the run report and actual DRC, not just
|
||||
the script exit status.
|
||||
|
||||
## Evidence and remaining limitations
|
||||
|
||||
- `pcb-routing-input.kicad_pcb`: unrouted input snapshot, after baseline DRC save.
|
||||
- `pcb-routing-baseline.json`: 38 unconnected / no violations before routing.
|
||||
- `pcb-routing-pass1-drc.json`, `pcb-routing-pass2-drc.json`: intermediate DRC.
|
||||
- `pcb-routing-pass2.log`, `pcb-routing-pass3.log`: bounded routing progress.
|
||||
- `pcb-routing-run.json`: final saved-route metrics and connection list.
|
||||
- `pcb-routing-drc.json`, `pcb-routing-all-drc.json`: final KiCad DRC evidence.
|
||||
- `pcb-routing-check.py`, `pcb-routing-check.json`: repeatable independent audit.
|
||||
- `pcb-routing-dry-run.log`: successful final no-save reproduction.
|
||||
|
||||
Routing-only DRC-saved snapshot SHA-256 (before integration copied schematic
|
||||
metadata fields): `bf94b6c9b00c43a97f933054758a2c9d6541981ae09f2f285dcdb567bd73d9b1`.
|
||||
The current post-integration hash is recorded by `pcb-routing-check.json`;
|
||||
geometry, pad-net linkage and copper are unchanged by the metadata copy.
|
||||
|
||||
**Still DRAFT / NOT FOR FABRICATION.** Provisional module/connector geometry,
|
||||
antenna envelope, assembly/courtyard clearances, USB access, male RS-232 connector
|
||||
fit, physical pin mapping, power integrity, EMI and hardware operation are not
|
||||
qualified by routing or DRC. All previously documented mechanical/electrical
|
||||
release gates remain. No physical-device or manufacturing validation performed.
|
||||
@@ -0,0 +1,604 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<export version="E">
|
||||
<design>
|
||||
<source>/home/mscholz/Repos/ESP32_serial_swiss_army_knife/hardware/PCB/serial-carrier.kicad_sch</source>
|
||||
<date>2026-09-20T23:07:27</date>
|
||||
<tool>Eeschema 10.0.6-1.fc44</tool>
|
||||
<sheet number="1" name="/" tstamps="/">
|
||||
<title_block>
|
||||
<title>ESP32 Serial Swiss Army Knife - Module Carrier</title>
|
||||
<company/>
|
||||
<rev>A0 DRAFT</rev>
|
||||
<date>2026-09-20</date>
|
||||
<source>serial-carrier.kicad_sch</source>
|
||||
<comment number="1" value="Not fabrication-ready: provisional module footprints and male RS-232 mapping"/>
|
||||
<comment number="2" value=""/>
|
||||
<comment number="3" value=""/>
|
||||
<comment number="4" value=""/>
|
||||
<comment number="5" value=""/>
|
||||
<comment number="6" value=""/>
|
||||
<comment number="7" value=""/>
|
||||
<comment number="8" value=""/>
|
||||
<comment number="9" value=""/>
|
||||
</title_block>
|
||||
</sheet>
|
||||
</design>
|
||||
<components>
|
||||
<comp ref="DS1">
|
||||
<value>128x64 I2C OLED / 0x3C</value>
|
||||
<footprint>Carrier:OLED_26mm_I2C_Provisional</footprint>
|
||||
<fields>
|
||||
<field name="Status">Module outline/header/display user fit-verified; pad/drill fit provisional</field>
|
||||
<field name="Footprint">Carrier:OLED_26mm_I2C_Provisional</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description"/>
|
||||
</fields>
|
||||
<libsource lib="Carrier" part="OLED_I2C_26mm" description="User fit-verified 26 mm OLED; front/top header GND VCC SCL SDA"/>
|
||||
<property name="Status" value="Module outline/header/display user fit-verified; pad/drill fit provisional"/>
|
||||
<property name="Sheetname" value="serial-carrier"/>
|
||||
<property name="Sheetfile" value="serial-carrier.kicad_sch"/>
|
||||
<sheetpath names="/" tstamps="/"/>
|
||||
<tstamps>0ae411c1-94cc-5551-9037-1d59c01a8ee5</tstamps>
|
||||
<units>
|
||||
<unit name="A">
|
||||
<pins>
|
||||
<pin num="1"/>
|
||||
<pin num="2"/>
|
||||
<pin num="3"/>
|
||||
<pin num="4"/>
|
||||
</pins>
|
||||
</unit>
|
||||
</units>
|
||||
</comp>
|
||||
<comp ref="R1">
|
||||
<value>2.2k 1%</value>
|
||||
<footprint>Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal</footprint>
|
||||
<fields>
|
||||
<field name="Rating">At least 0.125 W; exact resistor MPN pending</field>
|
||||
<field name="Footprint">Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description"/>
|
||||
</fields>
|
||||
<libsource lib="Carrier" part="R" description="Resistor, axial DIN0207 footprint; exact MPN pending"/>
|
||||
<property name="Rating" value="At least 0.125 W; exact resistor MPN pending"/>
|
||||
<property name="Sheetname" value="serial-carrier"/>
|
||||
<property name="Sheetfile" value="serial-carrier.kicad_sch"/>
|
||||
<sheetpath names="/" tstamps="/"/>
|
||||
<tstamps>defb78eb-632f-5f9d-a59d-dffbb1d31dec</tstamps>
|
||||
<units>
|
||||
<unit name="A">
|
||||
<pins>
|
||||
<pin num="1"/>
|
||||
<pin num="2"/>
|
||||
</pins>
|
||||
</unit>
|
||||
</units>
|
||||
</comp>
|
||||
<comp ref="R2">
|
||||
<value>2.2k 1%</value>
|
||||
<footprint>Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal</footprint>
|
||||
<fields>
|
||||
<field name="Rating">At least 0.125 W; exact resistor MPN pending</field>
|
||||
<field name="Footprint">Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description"/>
|
||||
</fields>
|
||||
<libsource lib="Carrier" part="R" description="Resistor, axial DIN0207 footprint; exact MPN pending"/>
|
||||
<property name="Rating" value="At least 0.125 W; exact resistor MPN pending"/>
|
||||
<property name="Sheetname" value="serial-carrier"/>
|
||||
<property name="Sheetfile" value="serial-carrier.kicad_sch"/>
|
||||
<sheetpath names="/" tstamps="/"/>
|
||||
<tstamps>405055c0-35ab-5334-ad4d-30d45c5ef6f2</tstamps>
|
||||
<units>
|
||||
<unit name="A">
|
||||
<pins>
|
||||
<pin num="1"/>
|
||||
<pin num="2"/>
|
||||
</pins>
|
||||
</unit>
|
||||
</units>
|
||||
</comp>
|
||||
<comp ref="R3">
|
||||
<value>2.2k 1%</value>
|
||||
<footprint>Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal</footprint>
|
||||
<fields>
|
||||
<field name="Rating">At least 0.125 W; exact resistor MPN pending</field>
|
||||
<field name="Footprint">Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description"/>
|
||||
</fields>
|
||||
<libsource lib="Carrier" part="R" description="Resistor, axial DIN0207 footprint; exact MPN pending"/>
|
||||
<property name="Rating" value="At least 0.125 W; exact resistor MPN pending"/>
|
||||
<property name="Sheetname" value="serial-carrier"/>
|
||||
<property name="Sheetfile" value="serial-carrier.kicad_sch"/>
|
||||
<sheetpath names="/" tstamps="/"/>
|
||||
<tstamps>78f9a74f-5d91-5687-b50e-68176333df23</tstamps>
|
||||
<units>
|
||||
<unit name="A">
|
||||
<pins>
|
||||
<pin num="1"/>
|
||||
<pin num="2"/>
|
||||
</pins>
|
||||
</unit>
|
||||
</units>
|
||||
</comp>
|
||||
<comp ref="SW1">
|
||||
<value>B3F-1000</value>
|
||||
<footprint>Button_Switch_THT:SW_TH_Tactile_Omron_B3F-100x</footprint>
|
||||
<fields>
|
||||
<field name="Manufacturer">Omron</field>
|
||||
<field name="MPN">B3F-1000</field>
|
||||
<field name="Function">Previous / back</field>
|
||||
<field name="Procurement">Live stock not verified</field>
|
||||
<field name="Footprint">Button_Switch_THT:SW_TH_Tactile_Omron_B3F-100x</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description"/>
|
||||
</fields>
|
||||
<libsource lib="Carrier" part="SW_NO" description="Normally open contact; footprint duplicates pads 1 and 2 for internally common terminal pairs"/>
|
||||
<property name="Manufacturer" value="Omron"/>
|
||||
<property name="MPN" value="B3F-1000"/>
|
||||
<property name="Function" value="Previous / back"/>
|
||||
<property name="Procurement" value="Live stock not verified"/>
|
||||
<property name="Sheetname" value="serial-carrier"/>
|
||||
<property name="Sheetfile" value="serial-carrier.kicad_sch"/>
|
||||
<sheetpath names="/" tstamps="/"/>
|
||||
<tstamps>dd5f1f75-0093-55fc-9814-437ed26871eb</tstamps>
|
||||
<units>
|
||||
<unit name="A">
|
||||
<pins>
|
||||
<pin num="1"/>
|
||||
<pin num="2"/>
|
||||
</pins>
|
||||
</unit>
|
||||
</units>
|
||||
</comp>
|
||||
<comp ref="SW2">
|
||||
<value>B3F-1000</value>
|
||||
<footprint>Button_Switch_THT:SW_TH_Tactile_Omron_B3F-100x</footprint>
|
||||
<fields>
|
||||
<field name="Manufacturer">Omron</field>
|
||||
<field name="MPN">B3F-1000</field>
|
||||
<field name="Function">Select / confirm</field>
|
||||
<field name="Procurement">Live stock not verified</field>
|
||||
<field name="Footprint">Button_Switch_THT:SW_TH_Tactile_Omron_B3F-100x</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description"/>
|
||||
</fields>
|
||||
<libsource lib="Carrier" part="SW_NO" description="Normally open contact; footprint duplicates pads 1 and 2 for internally common terminal pairs"/>
|
||||
<property name="Manufacturer" value="Omron"/>
|
||||
<property name="MPN" value="B3F-1000"/>
|
||||
<property name="Function" value="Select / confirm"/>
|
||||
<property name="Procurement" value="Live stock not verified"/>
|
||||
<property name="Sheetname" value="serial-carrier"/>
|
||||
<property name="Sheetfile" value="serial-carrier.kicad_sch"/>
|
||||
<sheetpath names="/" tstamps="/"/>
|
||||
<tstamps>c522a716-55a4-584d-a12e-ab135b4c08eb</tstamps>
|
||||
<units>
|
||||
<unit name="A">
|
||||
<pins>
|
||||
<pin num="1"/>
|
||||
<pin num="2"/>
|
||||
</pins>
|
||||
</unit>
|
||||
</units>
|
||||
</comp>
|
||||
<comp ref="SW3">
|
||||
<value>B3F-1000</value>
|
||||
<footprint>Button_Switch_THT:SW_TH_Tactile_Omron_B3F-100x</footprint>
|
||||
<fields>
|
||||
<field name="Manufacturer">Omron</field>
|
||||
<field name="MPN">B3F-1000</field>
|
||||
<field name="Function">Next</field>
|
||||
<field name="Procurement">Live stock not verified</field>
|
||||
<field name="Footprint">Button_Switch_THT:SW_TH_Tactile_Omron_B3F-100x</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description"/>
|
||||
</fields>
|
||||
<libsource lib="Carrier" part="SW_NO" description="Normally open contact; footprint duplicates pads 1 and 2 for internally common terminal pairs"/>
|
||||
<property name="Manufacturer" value="Omron"/>
|
||||
<property name="MPN" value="B3F-1000"/>
|
||||
<property name="Function" value="Next"/>
|
||||
<property name="Procurement" value="Live stock not verified"/>
|
||||
<property name="Sheetname" value="serial-carrier"/>
|
||||
<property name="Sheetfile" value="serial-carrier.kicad_sch"/>
|
||||
<sheetpath names="/" tstamps="/"/>
|
||||
<tstamps>35caa6bb-42a6-512c-848c-f1e4457aa97f</tstamps>
|
||||
<units>
|
||||
<unit name="A">
|
||||
<pins>
|
||||
<pin num="1"/>
|
||||
<pin num="2"/>
|
||||
</pins>
|
||||
</unit>
|
||||
</units>
|
||||
</comp>
|
||||
<comp ref="U1">
|
||||
<value>HW678 / S3-N16R8</value>
|
||||
<footprint>Carrier:HW678_2x22_Provisional</footprint>
|
||||
<fields>
|
||||
<field name="Status">Header geometry nominal; outline/antenna clearance pending</field>
|
||||
<field name="Pin_numbering">Left 1-22; right 23-44; both top-to-bottom, antenna up</field>
|
||||
<field name="Footprint">Carrier:HW678_2x22_Provisional</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description"/>
|
||||
</fields>
|
||||
<libsource lib="Carrier" part="HW678_N16R8" description="HW-678 V0.0.0 / N16R8 carrier interface; project numbering; onboard USB/regulator retained"/>
|
||||
<property name="Status" value="Header geometry nominal; outline/antenna clearance pending"/>
|
||||
<property name="Pin_numbering" value="Left 1-22; right 23-44; both top-to-bottom, antenna up"/>
|
||||
<property name="Sheetname" value="serial-carrier"/>
|
||||
<property name="Sheetfile" value="serial-carrier.kicad_sch"/>
|
||||
<sheetpath names="/" tstamps="/"/>
|
||||
<tstamps>3ab265d0-7fd3-5891-94eb-d39426c6a8a3</tstamps>
|
||||
<units>
|
||||
<unit name="A">
|
||||
<pins>
|
||||
<pin num="1"/>
|
||||
<pin num="2"/>
|
||||
<pin num="3"/>
|
||||
<pin num="4"/>
|
||||
<pin num="5"/>
|
||||
<pin num="6"/>
|
||||
<pin num="7"/>
|
||||
<pin num="8"/>
|
||||
<pin num="9"/>
|
||||
<pin num="10"/>
|
||||
<pin num="11"/>
|
||||
<pin num="12"/>
|
||||
<pin num="13"/>
|
||||
<pin num="14"/>
|
||||
<pin num="15"/>
|
||||
<pin num="16"/>
|
||||
<pin num="17"/>
|
||||
<pin num="18"/>
|
||||
<pin num="19"/>
|
||||
<pin num="20"/>
|
||||
<pin num="21"/>
|
||||
<pin num="22"/>
|
||||
<pin num="23"/>
|
||||
<pin num="24"/>
|
||||
<pin num="25"/>
|
||||
<pin num="26"/>
|
||||
<pin num="27"/>
|
||||
<pin num="28"/>
|
||||
<pin num="29"/>
|
||||
<pin num="30"/>
|
||||
<pin num="31"/>
|
||||
<pin num="32"/>
|
||||
<pin num="33"/>
|
||||
<pin num="34"/>
|
||||
<pin num="35"/>
|
||||
<pin num="36"/>
|
||||
<pin num="37"/>
|
||||
<pin num="38"/>
|
||||
<pin num="39"/>
|
||||
<pin num="40"/>
|
||||
<pin num="41"/>
|
||||
<pin num="42"/>
|
||||
<pin num="43"/>
|
||||
<pin num="44"/>
|
||||
</pins>
|
||||
</unit>
|
||||
</units>
|
||||
</comp>
|
||||
<comp ref="U2">
|
||||
<value>Adafruit MAX3243 / male 6253</value>
|
||||
<fields>
|
||||
<field name="Status">VERIFY male header numbering; footprint intentionally unassigned</field>
|
||||
<field name="Datasheet_source">adafruit-research.md; reference female 5988 CAD</field>
|
||||
<field name="Footprint"/>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description"/>
|
||||
</fields>
|
||||
<libsource lib="Carrier" part="MAX3243_Module_Reference" description="Adafruit male 6253 intended; physical numbering from published female 5988 CAD, VERIFY MALE"/>
|
||||
<property name="Status" value="VERIFY male header numbering; footprint intentionally unassigned"/>
|
||||
<property name="Datasheet_source" value="adafruit-research.md; reference female 5988 CAD"/>
|
||||
<property name="Sheetname" value="serial-carrier"/>
|
||||
<property name="Sheetfile" value="serial-carrier.kicad_sch"/>
|
||||
<sheetpath names="/" tstamps="/"/>
|
||||
<tstamps>1127195e-e393-5d1d-9119-b25d10556144</tstamps>
|
||||
<units>
|
||||
<unit name="A">
|
||||
<pins>
|
||||
<pin num="1"/>
|
||||
<pin num="2"/>
|
||||
<pin num="3"/>
|
||||
<pin num="4"/>
|
||||
<pin num="5"/>
|
||||
<pin num="6"/>
|
||||
<pin num="7"/>
|
||||
<pin num="8"/>
|
||||
<pin num="9"/>
|
||||
<pin num="10"/>
|
||||
<pin num="11"/>
|
||||
<pin num="12"/>
|
||||
</pins>
|
||||
</unit>
|
||||
</units>
|
||||
</comp>
|
||||
</components>
|
||||
<libparts>
|
||||
<libpart lib="Carrier" part="HW678_N16R8">
|
||||
<description>HW-678 V0.0.0 / N16R8 carrier interface; project numbering; onboard USB/regulator retained</description>
|
||||
<fields>
|
||||
<field name="Reference">U</field>
|
||||
<field name="Value">HW678_N16R8</field>
|
||||
<field name="Footprint">Carrier:HW678_2x22_Provisional</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description">HW-678 V0.0.0 / N16R8 carrier interface; project numbering; onboard USB/regulator retained</field>
|
||||
</fields>
|
||||
<pins>
|
||||
<pin num="1" name="3V3" type="power_out"/>
|
||||
<pin num="2" name="3V3" type="passive"/>
|
||||
<pin num="3" name="EN" type="input"/>
|
||||
<pin num="4" name="GPIO4" type="input"/>
|
||||
<pin num="5" name="GPIO5" type="input"/>
|
||||
<pin num="6" name="GPIO6" type="input"/>
|
||||
<pin num="7" name="GPIO7" type="output"/>
|
||||
<pin num="8" name="GPIO15" type="output"/>
|
||||
<pin num="9" name="GPIO16" type="input"/>
|
||||
<pin num="10" name="GPIO17" type="output"/>
|
||||
<pin num="11" name="GPIO18" type="input"/>
|
||||
<pin num="12" name="GPIO8" type="input"/>
|
||||
<pin num="13" name="GPIO3" type="bidirectional"/>
|
||||
<pin num="14" name="GPIO46" type="bidirectional"/>
|
||||
<pin num="15" name="GPIO9" type="bidirectional"/>
|
||||
<pin num="16" name="GPIO10" type="input"/>
|
||||
<pin num="17" name="GPIO11" type="bidirectional"/>
|
||||
<pin num="18" name="GPIO12" type="output"/>
|
||||
<pin num="19" name="GPIO13" type="input"/>
|
||||
<pin num="20" name="GPIO14" type="input"/>
|
||||
<pin num="21" name="5V" type="passive"/>
|
||||
<pin num="22" name="GND" type="power_out"/>
|
||||
<pin num="23" name="GND" type="passive"/>
|
||||
<pin num="24" name="GPIO43" type="bidirectional"/>
|
||||
<pin num="25" name="GPIO44" type="bidirectional"/>
|
||||
<pin num="26" name="GPIO1" type="bidirectional"/>
|
||||
<pin num="27" name="GPIO2" type="bidirectional"/>
|
||||
<pin num="28" name="GPIO42" type="bidirectional"/>
|
||||
<pin num="29" name="GPIO41" type="bidirectional"/>
|
||||
<pin num="30" name="GPIO40" type="bidirectional"/>
|
||||
<pin num="31" name="GPIO39" type="bidirectional"/>
|
||||
<pin num="32" name="GPIO38" type="bidirectional"/>
|
||||
<pin num="33" name="GPIO37" type="bidirectional"/>
|
||||
<pin num="34" name="GPIO36" type="bidirectional"/>
|
||||
<pin num="35" name="GPIO35" type="bidirectional"/>
|
||||
<pin num="36" name="GPIO0" type="bidirectional"/>
|
||||
<pin num="37" name="GPIO45" type="bidirectional"/>
|
||||
<pin num="38" name="GPIO48" type="bidirectional"/>
|
||||
<pin num="39" name="GPIO47" type="bidirectional"/>
|
||||
<pin num="40" name="GPIO21" type="bidirectional"/>
|
||||
<pin num="41" name="GPIO20" type="bidirectional"/>
|
||||
<pin num="42" name="GPIO19" type="bidirectional"/>
|
||||
<pin num="43" name="GND" type="passive"/>
|
||||
<pin num="44" name="GND" type="passive"/>
|
||||
</pins>
|
||||
</libpart>
|
||||
<libpart lib="Carrier" part="MAX3243_Module_Reference">
|
||||
<description>Adafruit male 6253 intended; physical numbering from published female 5988 CAD, VERIFY MALE</description>
|
||||
<fields>
|
||||
<field name="Reference">U</field>
|
||||
<field name="Value">MAX3243_Module_Reference</field>
|
||||
<field name="Footprint"/>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description">Adafruit male 6253 intended; physical numbering from published female 5988 CAD, VERIFY MALE</field>
|
||||
</fields>
|
||||
<pins>
|
||||
<pin num="1" name="Vin" type="power_in"/>
|
||||
<pin num="2" name="GND" type="power_in"/>
|
||||
<pin num="3" name="DCD" type="output"/>
|
||||
<pin num="4" name="RX" type="output"/>
|
||||
<pin num="5" name="TX" type="input"/>
|
||||
<pin num="6" name="DTR" type="input"/>
|
||||
<pin num="7" name="DSR" type="output"/>
|
||||
<pin num="8" name="RTS" type="input"/>
|
||||
<pin num="9" name="CTS" type="output"/>
|
||||
<pin num="10" name="RI" type="output"/>
|
||||
<pin num="11" name="VLD" type="output"/>
|
||||
<pin num="12" name="OFF_N" type="input"/>
|
||||
</pins>
|
||||
</libpart>
|
||||
<libpart lib="Carrier" part="OLED_I2C_26mm">
|
||||
<description>User fit-verified 26 mm OLED; front/top header GND VCC SCL SDA</description>
|
||||
<fields>
|
||||
<field name="Reference">DS</field>
|
||||
<field name="Value">OLED_I2C_26mm</field>
|
||||
<field name="Footprint">Carrier:OLED_26mm_I2C_Provisional</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description">User fit-verified 26 mm OLED; front/top header GND VCC SCL SDA</field>
|
||||
</fields>
|
||||
<pins>
|
||||
<pin num="1" name="GND" type="power_in"/>
|
||||
<pin num="2" name="VCC" type="power_in"/>
|
||||
<pin num="3" name="SCL" type="input"/>
|
||||
<pin num="4" name="SDA" type="bidirectional"/>
|
||||
</pins>
|
||||
</libpart>
|
||||
<libpart lib="Carrier" part="R">
|
||||
<description>Resistor, axial DIN0207 footprint; exact MPN pending</description>
|
||||
<fields>
|
||||
<field name="Reference">R</field>
|
||||
<field name="Value">R</field>
|
||||
<field name="Footprint">Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description">Resistor, axial DIN0207 footprint; exact MPN pending</field>
|
||||
</fields>
|
||||
<pins>
|
||||
<pin num="1" name="" type="passive"/>
|
||||
<pin num="2" name="" type="passive"/>
|
||||
</pins>
|
||||
</libpart>
|
||||
<libpart lib="Carrier" part="SW_NO">
|
||||
<description>Normally open contact; footprint duplicates pads 1 and 2 for internally common terminal pairs</description>
|
||||
<fields>
|
||||
<field name="Reference">SW</field>
|
||||
<field name="Value">SW_NO</field>
|
||||
<field name="Footprint">Button_Switch_THT:SW_TH_Tactile_Omron_B3F-100x</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description">Normally open contact; footprint duplicates pads 1 and 2 for internally common terminal pairs</field>
|
||||
</fields>
|
||||
<pins>
|
||||
<pin num="1" name="" type="passive"/>
|
||||
<pin num="2" name="" type="passive"/>
|
||||
</pins>
|
||||
</libpart>
|
||||
</libparts>
|
||||
<libraries>
|
||||
<library logical="Carrier">
|
||||
<uri>${KIPRJMOD}/Carrier.kicad_sym</uri>
|
||||
</library>
|
||||
</libraries>
|
||||
<nets>
|
||||
<net code="1" name="/+3V3" class="Power">
|
||||
<node ref="DS1" pin="2" pinfunction="VCC_2" pintype="power_in"/>
|
||||
<node ref="R1" pin="1" pintype="passive"/>
|
||||
<node ref="R2" pin="1" pintype="passive"/>
|
||||
<node ref="R3" pin="1" pintype="passive"/>
|
||||
<node ref="U1" pin="1" pinfunction="3V3_1" pintype="power_out"/>
|
||||
<node ref="U1" pin="2" pinfunction="3V3_2" pintype="passive"/>
|
||||
<node ref="U2" pin="1" pinfunction="Vin_1" pintype="power_in"/>
|
||||
</net>
|
||||
<net code="2" name="/BTN_NEXT" class="Default">
|
||||
<node ref="R3" pin="2" pintype="passive"/>
|
||||
<node ref="SW3" pin="1" pintype="passive"/>
|
||||
<node ref="U1" pin="20" pinfunction="GPIO14_20" pintype="input"/>
|
||||
</net>
|
||||
<net code="3" name="/BTN_PREVIOUS" class="Default">
|
||||
<node ref="R1" pin="2" pintype="passive"/>
|
||||
<node ref="SW1" pin="1" pintype="passive"/>
|
||||
<node ref="U1" pin="16" pinfunction="GPIO10_16" pintype="input"/>
|
||||
</net>
|
||||
<net code="4" name="/BTN_SELECT" class="Default">
|
||||
<node ref="R2" pin="2" pintype="passive"/>
|
||||
<node ref="SW2" pin="1" pintype="passive"/>
|
||||
<node ref="U1" pin="19" pinfunction="GPIO13_19" pintype="input"/>
|
||||
</net>
|
||||
<net code="5" name="/GND" class="Power">
|
||||
<node ref="DS1" pin="1" pinfunction="GND_1" pintype="power_in"/>
|
||||
<node ref="SW1" pin="2" pintype="passive"/>
|
||||
<node ref="SW2" pin="2" pintype="passive"/>
|
||||
<node ref="SW3" pin="2" pintype="passive"/>
|
||||
<node ref="U1" pin="22" pinfunction="GND_22" pintype="power_out"/>
|
||||
<node ref="U1" pin="23" pinfunction="GND_23" pintype="passive"/>
|
||||
<node ref="U1" pin="43" pinfunction="GND_43" pintype="passive"/>
|
||||
<node ref="U1" pin="44" pinfunction="GND_44" pintype="passive"/>
|
||||
<node ref="U2" pin="2" pinfunction="GND_2" pintype="power_in"/>
|
||||
</net>
|
||||
<net code="6" name="/OLED_SCL" class="Default">
|
||||
<node ref="DS1" pin="3" pinfunction="SCL_3" pintype="input"/>
|
||||
<node ref="U1" pin="18" pinfunction="GPIO12_18" pintype="output"/>
|
||||
</net>
|
||||
<net code="7" name="/OLED_SDA" class="Default">
|
||||
<node ref="DS1" pin="4" pinfunction="SDA_4" pintype="bidirectional"/>
|
||||
<node ref="U1" pin="17" pinfunction="GPIO11_17" pintype="bidirectional"/>
|
||||
</net>
|
||||
<net code="8" name="/RS_CTS" class="Default">
|
||||
<node ref="U1" pin="9" pinfunction="GPIO16_9" pintype="input"/>
|
||||
<node ref="U2" pin="9" pinfunction="CTS_9" pintype="output"/>
|
||||
</net>
|
||||
<net code="9" name="/RS_DCD" class="Default">
|
||||
<node ref="U1" pin="4" pinfunction="GPIO4_4" pintype="input"/>
|
||||
<node ref="U2" pin="3" pinfunction="DCD_3" pintype="output"/>
|
||||
</net>
|
||||
<net code="10" name="/RS_DSR" class="Default">
|
||||
<node ref="U1" pin="5" pinfunction="GPIO5_5" pintype="input"/>
|
||||
<node ref="U2" pin="7" pinfunction="DSR_7" pintype="output"/>
|
||||
</net>
|
||||
<net code="11" name="/RS_DTR" class="Default">
|
||||
<node ref="U1" pin="7" pinfunction="GPIO7_7" pintype="output"/>
|
||||
<node ref="U2" pin="6" pinfunction="DTR_6" pintype="input"/>
|
||||
</net>
|
||||
<net code="12" name="/RS_OFF_N" class="Default">
|
||||
<node ref="U1" pin="15" pinfunction="GPIO9_15" pintype="bidirectional"/>
|
||||
<node ref="U2" pin="12" pinfunction="OFF_N_12" pintype="input"/>
|
||||
</net>
|
||||
<net code="13" name="/RS_RI" class="Default">
|
||||
<node ref="U1" pin="6" pinfunction="GPIO6_6" pintype="input"/>
|
||||
<node ref="U2" pin="10" pinfunction="RI_10" pintype="output"/>
|
||||
</net>
|
||||
<net code="14" name="/RS_RTS" class="Default">
|
||||
<node ref="U1" pin="8" pinfunction="GPIO15_8" pintype="output"/>
|
||||
<node ref="U2" pin="8" pinfunction="RTS_8" pintype="input"/>
|
||||
</net>
|
||||
<net code="15" name="/RS_RX" class="Default">
|
||||
<node ref="U1" pin="11" pinfunction="GPIO18_11" pintype="input"/>
|
||||
<node ref="U2" pin="4" pinfunction="RX_4" pintype="output"/>
|
||||
</net>
|
||||
<net code="16" name="/RS_TX" class="Default">
|
||||
<node ref="U1" pin="10" pinfunction="GPIO17_10" pintype="output"/>
|
||||
<node ref="U2" pin="5" pinfunction="TX_5" pintype="input"/>
|
||||
</net>
|
||||
<net code="17" name="/RS_VALID" class="Default">
|
||||
<node ref="U1" pin="12" pinfunction="GPIO8_12" pintype="input"/>
|
||||
<node ref="U2" pin="11" pinfunction="VLD_11" pintype="output"/>
|
||||
</net>
|
||||
<net code="18" name="unconnected-(U1-5V-Pad21)" class="Default">
|
||||
<node ref="U1" pin="21" pinfunction="5V_21" pintype="passive+no_connect"/>
|
||||
</net>
|
||||
<net code="19" name="unconnected-(U1-EN-Pad3)" class="Default">
|
||||
<node ref="U1" pin="3" pinfunction="EN_3" pintype="input+no_connect"/>
|
||||
</net>
|
||||
<net code="20" name="unconnected-(U1-GPIO0-Pad36)" class="Default">
|
||||
<node ref="U1" pin="36" pinfunction="GPIO0_36" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="21" name="unconnected-(U1-GPIO1-Pad26)" class="Default">
|
||||
<node ref="U1" pin="26" pinfunction="GPIO1_26" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="22" name="unconnected-(U1-GPIO2-Pad27)" class="Default">
|
||||
<node ref="U1" pin="27" pinfunction="GPIO2_27" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="23" name="unconnected-(U1-GPIO3-Pad13)" class="Default">
|
||||
<node ref="U1" pin="13" pinfunction="GPIO3_13" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="24" name="unconnected-(U1-GPIO19-Pad42)" class="Default">
|
||||
<node ref="U1" pin="42" pinfunction="GPIO19_42" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="25" name="unconnected-(U1-GPIO20-Pad41)" class="Default">
|
||||
<node ref="U1" pin="41" pinfunction="GPIO20_41" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="26" name="unconnected-(U1-GPIO21-Pad40)" class="Default">
|
||||
<node ref="U1" pin="40" pinfunction="GPIO21_40" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="27" name="unconnected-(U1-GPIO35-Pad35)" class="Default">
|
||||
<node ref="U1" pin="35" pinfunction="GPIO35_35" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="28" name="unconnected-(U1-GPIO36-Pad34)" class="Default">
|
||||
<node ref="U1" pin="34" pinfunction="GPIO36_34" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="29" name="unconnected-(U1-GPIO37-Pad33)" class="Default">
|
||||
<node ref="U1" pin="33" pinfunction="GPIO37_33" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="30" name="unconnected-(U1-GPIO38-Pad32)" class="Default">
|
||||
<node ref="U1" pin="32" pinfunction="GPIO38_32" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="31" name="unconnected-(U1-GPIO39-Pad31)" class="Default">
|
||||
<node ref="U1" pin="31" pinfunction="GPIO39_31" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="32" name="unconnected-(U1-GPIO40-Pad30)" class="Default">
|
||||
<node ref="U1" pin="30" pinfunction="GPIO40_30" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="33" name="unconnected-(U1-GPIO41-Pad29)" class="Default">
|
||||
<node ref="U1" pin="29" pinfunction="GPIO41_29" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="34" name="unconnected-(U1-GPIO42-Pad28)" class="Default">
|
||||
<node ref="U1" pin="28" pinfunction="GPIO42_28" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="35" name="unconnected-(U1-GPIO43-Pad24)" class="Default">
|
||||
<node ref="U1" pin="24" pinfunction="GPIO43_24" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="36" name="unconnected-(U1-GPIO44-Pad25)" class="Default">
|
||||
<node ref="U1" pin="25" pinfunction="GPIO44_25" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="37" name="unconnected-(U1-GPIO45-Pad37)" class="Default">
|
||||
<node ref="U1" pin="37" pinfunction="GPIO45_37" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="38" name="unconnected-(U1-GPIO46-Pad14)" class="Default">
|
||||
<node ref="U1" pin="14" pinfunction="GPIO46_14" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="39" name="unconnected-(U1-GPIO47-Pad39)" class="Default">
|
||||
<node ref="U1" pin="39" pinfunction="GPIO47_39" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="40" name="unconnected-(U1-GPIO48-Pad38)" class="Default">
|
||||
<node ref="U1" pin="38" pinfunction="GPIO48_38" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
</nets>
|
||||
</export>
|
||||
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"carrier_bounds_mm": [
|
||||
82,
|
||||
80
|
||||
],
|
||||
"copper_layers": 2,
|
||||
"draft_thickness_mm": 1.6,
|
||||
"electrical_footprints": 9,
|
||||
"proposed_M3_mounts": 4,
|
||||
"physical_DRC_violations": 0,
|
||||
"unconnected_items": 0,
|
||||
"schematic_pad_nets_match": true,
|
||||
"known_parity_warning": "U2 provisional female-reference footprint assigned on PCB only; schematic footprint intentionally blank",
|
||||
"ignored_DRC_checks": [
|
||||
{
|
||||
"description": "Footprint has no courtyard defined",
|
||||
"key": "missing_courtyard"
|
||||
},
|
||||
{
|
||||
"description": "Track endpoint not centered on via",
|
||||
"key": "track_not_centered_on_via"
|
||||
},
|
||||
{
|
||||
"description": "Tuning profile track geometries",
|
||||
"key": "tuning_profile_track_geometries"
|
||||
},
|
||||
{
|
||||
"description": "Footprint doesn't match symbol's footprint filters",
|
||||
"key": "footprint_filters_mismatch"
|
||||
},
|
||||
{
|
||||
"description": "Footprint component type doesn't match footprint pads",
|
||||
"key": "footprint_type_mismatch"
|
||||
}
|
||||
],
|
||||
"not_validated": [
|
||||
"male module pin map/fit",
|
||||
"assembly envelope and heights",
|
||||
"header/socket fit",
|
||||
"RF performance and antenna clearance",
|
||||
"power/return-path integrity",
|
||||
"USB power path",
|
||||
"OLED pull-ups",
|
||||
"fabrication process",
|
||||
"hardware operation"
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 127 KiB |
File diff suppressed because it is too large
Load Diff
|
After Width: | Height: | Size: 1.3 MiB |
@@ -0,0 +1,604 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<export version="E">
|
||||
<design>
|
||||
<source>/home/mscholz/Repos/ESP32_serial_swiss_army_knife/hardware/PCB/serial-carrier.kicad_sch</source>
|
||||
<date>2026-09-20T20:14:45</date>
|
||||
<tool>Eeschema 10.0.6-1.fc44</tool>
|
||||
<sheet number="1" name="/" tstamps="/">
|
||||
<title_block>
|
||||
<title>ESP32 Serial Swiss Army Knife - Module Carrier</title>
|
||||
<company/>
|
||||
<rev>A0 DRAFT</rev>
|
||||
<date>2026-09-20</date>
|
||||
<source>serial-carrier.kicad_sch</source>
|
||||
<comment number="1" value="Not fabrication-ready: provisional module footprints and male RS-232 mapping"/>
|
||||
<comment number="2" value=""/>
|
||||
<comment number="3" value=""/>
|
||||
<comment number="4" value=""/>
|
||||
<comment number="5" value=""/>
|
||||
<comment number="6" value=""/>
|
||||
<comment number="7" value=""/>
|
||||
<comment number="8" value=""/>
|
||||
<comment number="9" value=""/>
|
||||
</title_block>
|
||||
</sheet>
|
||||
</design>
|
||||
<components>
|
||||
<comp ref="DS1">
|
||||
<value>128x64 I2C OLED / 0x3C</value>
|
||||
<footprint>Carrier:OLED_26mm_I2C_Provisional</footprint>
|
||||
<fields>
|
||||
<field name="Status">Module outline/header/display user fit-verified; pad/drill fit provisional</field>
|
||||
<field name="Footprint">Carrier:OLED_26mm_I2C_Provisional</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description"/>
|
||||
</fields>
|
||||
<libsource lib="Carrier" part="OLED_I2C_26mm" description="User fit-verified 26 mm OLED; front/top header GND VCC SCL SDA"/>
|
||||
<property name="Status" value="Module outline/header/display user fit-verified; pad/drill fit provisional"/>
|
||||
<property name="Sheetname" value="serial-carrier"/>
|
||||
<property name="Sheetfile" value="serial-carrier.kicad_sch"/>
|
||||
<sheetpath names="/" tstamps="/"/>
|
||||
<tstamps>0ae411c1-94cc-5551-9037-1d59c01a8ee5</tstamps>
|
||||
<units>
|
||||
<unit name="A">
|
||||
<pins>
|
||||
<pin num="1"/>
|
||||
<pin num="2"/>
|
||||
<pin num="3"/>
|
||||
<pin num="4"/>
|
||||
</pins>
|
||||
</unit>
|
||||
</units>
|
||||
</comp>
|
||||
<comp ref="R1">
|
||||
<value>2.2k 1%</value>
|
||||
<footprint>Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal</footprint>
|
||||
<fields>
|
||||
<field name="Rating">At least 0.125 W; exact resistor MPN pending</field>
|
||||
<field name="Footprint">Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description"/>
|
||||
</fields>
|
||||
<libsource lib="Carrier" part="R" description="Resistor, axial DIN0207 footprint; exact MPN pending"/>
|
||||
<property name="Rating" value="At least 0.125 W; exact resistor MPN pending"/>
|
||||
<property name="Sheetname" value="serial-carrier"/>
|
||||
<property name="Sheetfile" value="serial-carrier.kicad_sch"/>
|
||||
<sheetpath names="/" tstamps="/"/>
|
||||
<tstamps>defb78eb-632f-5f9d-a59d-dffbb1d31dec</tstamps>
|
||||
<units>
|
||||
<unit name="A">
|
||||
<pins>
|
||||
<pin num="1"/>
|
||||
<pin num="2"/>
|
||||
</pins>
|
||||
</unit>
|
||||
</units>
|
||||
</comp>
|
||||
<comp ref="R2">
|
||||
<value>2.2k 1%</value>
|
||||
<footprint>Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal</footprint>
|
||||
<fields>
|
||||
<field name="Rating">At least 0.125 W; exact resistor MPN pending</field>
|
||||
<field name="Footprint">Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description"/>
|
||||
</fields>
|
||||
<libsource lib="Carrier" part="R" description="Resistor, axial DIN0207 footprint; exact MPN pending"/>
|
||||
<property name="Rating" value="At least 0.125 W; exact resistor MPN pending"/>
|
||||
<property name="Sheetname" value="serial-carrier"/>
|
||||
<property name="Sheetfile" value="serial-carrier.kicad_sch"/>
|
||||
<sheetpath names="/" tstamps="/"/>
|
||||
<tstamps>405055c0-35ab-5334-ad4d-30d45c5ef6f2</tstamps>
|
||||
<units>
|
||||
<unit name="A">
|
||||
<pins>
|
||||
<pin num="1"/>
|
||||
<pin num="2"/>
|
||||
</pins>
|
||||
</unit>
|
||||
</units>
|
||||
</comp>
|
||||
<comp ref="R3">
|
||||
<value>2.2k 1%</value>
|
||||
<footprint>Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal</footprint>
|
||||
<fields>
|
||||
<field name="Rating">At least 0.125 W; exact resistor MPN pending</field>
|
||||
<field name="Footprint">Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description"/>
|
||||
</fields>
|
||||
<libsource lib="Carrier" part="R" description="Resistor, axial DIN0207 footprint; exact MPN pending"/>
|
||||
<property name="Rating" value="At least 0.125 W; exact resistor MPN pending"/>
|
||||
<property name="Sheetname" value="serial-carrier"/>
|
||||
<property name="Sheetfile" value="serial-carrier.kicad_sch"/>
|
||||
<sheetpath names="/" tstamps="/"/>
|
||||
<tstamps>78f9a74f-5d91-5687-b50e-68176333df23</tstamps>
|
||||
<units>
|
||||
<unit name="A">
|
||||
<pins>
|
||||
<pin num="1"/>
|
||||
<pin num="2"/>
|
||||
</pins>
|
||||
</unit>
|
||||
</units>
|
||||
</comp>
|
||||
<comp ref="SW1">
|
||||
<value>B3F-1000</value>
|
||||
<footprint>Button_Switch_THT:SW_TH_Tactile_Omron_B3F-100x</footprint>
|
||||
<fields>
|
||||
<field name="Manufacturer">Omron</field>
|
||||
<field name="MPN">B3F-1000</field>
|
||||
<field name="Function">Previous / back</field>
|
||||
<field name="Procurement">Live stock not verified</field>
|
||||
<field name="Footprint">Button_Switch_THT:SW_TH_Tactile_Omron_B3F-100x</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description"/>
|
||||
</fields>
|
||||
<libsource lib="Carrier" part="SW_NO" description="Normally open contact; footprint duplicates pads 1 and 2 for internally common terminal pairs"/>
|
||||
<property name="Manufacturer" value="Omron"/>
|
||||
<property name="MPN" value="B3F-1000"/>
|
||||
<property name="Function" value="Previous / back"/>
|
||||
<property name="Procurement" value="Live stock not verified"/>
|
||||
<property name="Sheetname" value="serial-carrier"/>
|
||||
<property name="Sheetfile" value="serial-carrier.kicad_sch"/>
|
||||
<sheetpath names="/" tstamps="/"/>
|
||||
<tstamps>dd5f1f75-0093-55fc-9814-437ed26871eb</tstamps>
|
||||
<units>
|
||||
<unit name="A">
|
||||
<pins>
|
||||
<pin num="1"/>
|
||||
<pin num="2"/>
|
||||
</pins>
|
||||
</unit>
|
||||
</units>
|
||||
</comp>
|
||||
<comp ref="SW2">
|
||||
<value>B3F-1000</value>
|
||||
<footprint>Button_Switch_THT:SW_TH_Tactile_Omron_B3F-100x</footprint>
|
||||
<fields>
|
||||
<field name="Manufacturer">Omron</field>
|
||||
<field name="MPN">B3F-1000</field>
|
||||
<field name="Function">Select / confirm</field>
|
||||
<field name="Procurement">Live stock not verified</field>
|
||||
<field name="Footprint">Button_Switch_THT:SW_TH_Tactile_Omron_B3F-100x</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description"/>
|
||||
</fields>
|
||||
<libsource lib="Carrier" part="SW_NO" description="Normally open contact; footprint duplicates pads 1 and 2 for internally common terminal pairs"/>
|
||||
<property name="Manufacturer" value="Omron"/>
|
||||
<property name="MPN" value="B3F-1000"/>
|
||||
<property name="Function" value="Select / confirm"/>
|
||||
<property name="Procurement" value="Live stock not verified"/>
|
||||
<property name="Sheetname" value="serial-carrier"/>
|
||||
<property name="Sheetfile" value="serial-carrier.kicad_sch"/>
|
||||
<sheetpath names="/" tstamps="/"/>
|
||||
<tstamps>c522a716-55a4-584d-a12e-ab135b4c08eb</tstamps>
|
||||
<units>
|
||||
<unit name="A">
|
||||
<pins>
|
||||
<pin num="1"/>
|
||||
<pin num="2"/>
|
||||
</pins>
|
||||
</unit>
|
||||
</units>
|
||||
</comp>
|
||||
<comp ref="SW3">
|
||||
<value>B3F-1000</value>
|
||||
<footprint>Button_Switch_THT:SW_TH_Tactile_Omron_B3F-100x</footprint>
|
||||
<fields>
|
||||
<field name="Manufacturer">Omron</field>
|
||||
<field name="MPN">B3F-1000</field>
|
||||
<field name="Function">Next</field>
|
||||
<field name="Procurement">Live stock not verified</field>
|
||||
<field name="Footprint">Button_Switch_THT:SW_TH_Tactile_Omron_B3F-100x</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description"/>
|
||||
</fields>
|
||||
<libsource lib="Carrier" part="SW_NO" description="Normally open contact; footprint duplicates pads 1 and 2 for internally common terminal pairs"/>
|
||||
<property name="Manufacturer" value="Omron"/>
|
||||
<property name="MPN" value="B3F-1000"/>
|
||||
<property name="Function" value="Next"/>
|
||||
<property name="Procurement" value="Live stock not verified"/>
|
||||
<property name="Sheetname" value="serial-carrier"/>
|
||||
<property name="Sheetfile" value="serial-carrier.kicad_sch"/>
|
||||
<sheetpath names="/" tstamps="/"/>
|
||||
<tstamps>35caa6bb-42a6-512c-848c-f1e4457aa97f</tstamps>
|
||||
<units>
|
||||
<unit name="A">
|
||||
<pins>
|
||||
<pin num="1"/>
|
||||
<pin num="2"/>
|
||||
</pins>
|
||||
</unit>
|
||||
</units>
|
||||
</comp>
|
||||
<comp ref="U1">
|
||||
<value>HW678 / S3-N16R8</value>
|
||||
<footprint>Carrier:HW678_2x22_Provisional</footprint>
|
||||
<fields>
|
||||
<field name="Status">Header geometry nominal; outline/antenna clearance pending</field>
|
||||
<field name="Pin_numbering">Left 1-22; right 23-44; both top-to-bottom, antenna up</field>
|
||||
<field name="Footprint">Carrier:HW678_2x22_Provisional</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description"/>
|
||||
</fields>
|
||||
<libsource lib="Carrier" part="HW678_N16R8" description="HW-678 V0.0.0 / N16R8 carrier interface; project numbering; onboard USB/regulator retained"/>
|
||||
<property name="Status" value="Header geometry nominal; outline/antenna clearance pending"/>
|
||||
<property name="Pin_numbering" value="Left 1-22; right 23-44; both top-to-bottom, antenna up"/>
|
||||
<property name="Sheetname" value="serial-carrier"/>
|
||||
<property name="Sheetfile" value="serial-carrier.kicad_sch"/>
|
||||
<sheetpath names="/" tstamps="/"/>
|
||||
<tstamps>3ab265d0-7fd3-5891-94eb-d39426c6a8a3</tstamps>
|
||||
<units>
|
||||
<unit name="A">
|
||||
<pins>
|
||||
<pin num="1"/>
|
||||
<pin num="2"/>
|
||||
<pin num="3"/>
|
||||
<pin num="4"/>
|
||||
<pin num="5"/>
|
||||
<pin num="6"/>
|
||||
<pin num="7"/>
|
||||
<pin num="8"/>
|
||||
<pin num="9"/>
|
||||
<pin num="10"/>
|
||||
<pin num="11"/>
|
||||
<pin num="12"/>
|
||||
<pin num="13"/>
|
||||
<pin num="14"/>
|
||||
<pin num="15"/>
|
||||
<pin num="16"/>
|
||||
<pin num="17"/>
|
||||
<pin num="18"/>
|
||||
<pin num="19"/>
|
||||
<pin num="20"/>
|
||||
<pin num="21"/>
|
||||
<pin num="22"/>
|
||||
<pin num="23"/>
|
||||
<pin num="24"/>
|
||||
<pin num="25"/>
|
||||
<pin num="26"/>
|
||||
<pin num="27"/>
|
||||
<pin num="28"/>
|
||||
<pin num="29"/>
|
||||
<pin num="30"/>
|
||||
<pin num="31"/>
|
||||
<pin num="32"/>
|
||||
<pin num="33"/>
|
||||
<pin num="34"/>
|
||||
<pin num="35"/>
|
||||
<pin num="36"/>
|
||||
<pin num="37"/>
|
||||
<pin num="38"/>
|
||||
<pin num="39"/>
|
||||
<pin num="40"/>
|
||||
<pin num="41"/>
|
||||
<pin num="42"/>
|
||||
<pin num="43"/>
|
||||
<pin num="44"/>
|
||||
</pins>
|
||||
</unit>
|
||||
</units>
|
||||
</comp>
|
||||
<comp ref="U2">
|
||||
<value>Adafruit MAX3243 / male 6253</value>
|
||||
<fields>
|
||||
<field name="Status">VERIFY male header numbering; footprint intentionally unassigned</field>
|
||||
<field name="Datasheet_source">adafruit-research.md; reference female 5988 CAD</field>
|
||||
<field name="Footprint"/>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description"/>
|
||||
</fields>
|
||||
<libsource lib="Carrier" part="MAX3243_Module_Reference" description="Adafruit male 6253 intended; physical numbering from published female 5988 CAD, VERIFY MALE"/>
|
||||
<property name="Status" value="VERIFY male header numbering; footprint intentionally unassigned"/>
|
||||
<property name="Datasheet_source" value="adafruit-research.md; reference female 5988 CAD"/>
|
||||
<property name="Sheetname" value="serial-carrier"/>
|
||||
<property name="Sheetfile" value="serial-carrier.kicad_sch"/>
|
||||
<sheetpath names="/" tstamps="/"/>
|
||||
<tstamps>1127195e-e393-5d1d-9119-b25d10556144</tstamps>
|
||||
<units>
|
||||
<unit name="A">
|
||||
<pins>
|
||||
<pin num="1"/>
|
||||
<pin num="2"/>
|
||||
<pin num="3"/>
|
||||
<pin num="4"/>
|
||||
<pin num="5"/>
|
||||
<pin num="6"/>
|
||||
<pin num="7"/>
|
||||
<pin num="8"/>
|
||||
<pin num="9"/>
|
||||
<pin num="10"/>
|
||||
<pin num="11"/>
|
||||
<pin num="12"/>
|
||||
</pins>
|
||||
</unit>
|
||||
</units>
|
||||
</comp>
|
||||
</components>
|
||||
<libparts>
|
||||
<libpart lib="Carrier" part="HW678_N16R8">
|
||||
<description>HW-678 V0.0.0 / N16R8 carrier interface; project numbering; onboard USB/regulator retained</description>
|
||||
<fields>
|
||||
<field name="Reference">U</field>
|
||||
<field name="Value">HW678_N16R8</field>
|
||||
<field name="Footprint">Carrier:HW678_2x22_Provisional</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description">HW-678 V0.0.0 / N16R8 carrier interface; project numbering; onboard USB/regulator retained</field>
|
||||
</fields>
|
||||
<pins>
|
||||
<pin num="1" name="3V3" type="power_out"/>
|
||||
<pin num="2" name="3V3" type="passive"/>
|
||||
<pin num="3" name="EN" type="input"/>
|
||||
<pin num="4" name="GPIO4" type="input"/>
|
||||
<pin num="5" name="GPIO5" type="input"/>
|
||||
<pin num="6" name="GPIO6" type="input"/>
|
||||
<pin num="7" name="GPIO7" type="output"/>
|
||||
<pin num="8" name="GPIO15" type="output"/>
|
||||
<pin num="9" name="GPIO16" type="input"/>
|
||||
<pin num="10" name="GPIO17" type="output"/>
|
||||
<pin num="11" name="GPIO18" type="input"/>
|
||||
<pin num="12" name="GPIO8" type="input"/>
|
||||
<pin num="13" name="GPIO3" type="bidirectional"/>
|
||||
<pin num="14" name="GPIO46" type="bidirectional"/>
|
||||
<pin num="15" name="GPIO9" type="bidirectional"/>
|
||||
<pin num="16" name="GPIO10" type="input"/>
|
||||
<pin num="17" name="GPIO11" type="bidirectional"/>
|
||||
<pin num="18" name="GPIO12" type="output"/>
|
||||
<pin num="19" name="GPIO13" type="input"/>
|
||||
<pin num="20" name="GPIO14" type="input"/>
|
||||
<pin num="21" name="5V" type="passive"/>
|
||||
<pin num="22" name="GND" type="power_out"/>
|
||||
<pin num="23" name="GND" type="passive"/>
|
||||
<pin num="24" name="GPIO43" type="bidirectional"/>
|
||||
<pin num="25" name="GPIO44" type="bidirectional"/>
|
||||
<pin num="26" name="GPIO1" type="bidirectional"/>
|
||||
<pin num="27" name="GPIO2" type="bidirectional"/>
|
||||
<pin num="28" name="GPIO42" type="bidirectional"/>
|
||||
<pin num="29" name="GPIO41" type="bidirectional"/>
|
||||
<pin num="30" name="GPIO40" type="bidirectional"/>
|
||||
<pin num="31" name="GPIO39" type="bidirectional"/>
|
||||
<pin num="32" name="GPIO38" type="bidirectional"/>
|
||||
<pin num="33" name="GPIO37" type="bidirectional"/>
|
||||
<pin num="34" name="GPIO36" type="bidirectional"/>
|
||||
<pin num="35" name="GPIO35" type="bidirectional"/>
|
||||
<pin num="36" name="GPIO0" type="bidirectional"/>
|
||||
<pin num="37" name="GPIO45" type="bidirectional"/>
|
||||
<pin num="38" name="GPIO48" type="bidirectional"/>
|
||||
<pin num="39" name="GPIO47" type="bidirectional"/>
|
||||
<pin num="40" name="GPIO21" type="bidirectional"/>
|
||||
<pin num="41" name="GPIO20" type="bidirectional"/>
|
||||
<pin num="42" name="GPIO19" type="bidirectional"/>
|
||||
<pin num="43" name="GND" type="passive"/>
|
||||
<pin num="44" name="GND" type="passive"/>
|
||||
</pins>
|
||||
</libpart>
|
||||
<libpart lib="Carrier" part="MAX3243_Module_Reference">
|
||||
<description>Adafruit male 6253 intended; physical numbering from published female 5988 CAD, VERIFY MALE</description>
|
||||
<fields>
|
||||
<field name="Reference">U</field>
|
||||
<field name="Value">MAX3243_Module_Reference</field>
|
||||
<field name="Footprint"/>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description">Adafruit male 6253 intended; physical numbering from published female 5988 CAD, VERIFY MALE</field>
|
||||
</fields>
|
||||
<pins>
|
||||
<pin num="1" name="Vin" type="power_in"/>
|
||||
<pin num="2" name="GND" type="power_in"/>
|
||||
<pin num="3" name="DCD" type="output"/>
|
||||
<pin num="4" name="RX" type="output"/>
|
||||
<pin num="5" name="TX" type="input"/>
|
||||
<pin num="6" name="DTR" type="input"/>
|
||||
<pin num="7" name="DSR" type="output"/>
|
||||
<pin num="8" name="RTS" type="input"/>
|
||||
<pin num="9" name="CTS" type="output"/>
|
||||
<pin num="10" name="RI" type="output"/>
|
||||
<pin num="11" name="VLD" type="output"/>
|
||||
<pin num="12" name="OFF_N" type="input"/>
|
||||
</pins>
|
||||
</libpart>
|
||||
<libpart lib="Carrier" part="OLED_I2C_26mm">
|
||||
<description>User fit-verified 26 mm OLED; front/top header GND VCC SCL SDA</description>
|
||||
<fields>
|
||||
<field name="Reference">DS</field>
|
||||
<field name="Value">OLED_I2C_26mm</field>
|
||||
<field name="Footprint">Carrier:OLED_26mm_I2C_Provisional</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description">User fit-verified 26 mm OLED; front/top header GND VCC SCL SDA</field>
|
||||
</fields>
|
||||
<pins>
|
||||
<pin num="1" name="GND" type="power_in"/>
|
||||
<pin num="2" name="VCC" type="power_in"/>
|
||||
<pin num="3" name="SCL" type="input"/>
|
||||
<pin num="4" name="SDA" type="bidirectional"/>
|
||||
</pins>
|
||||
</libpart>
|
||||
<libpart lib="Carrier" part="R">
|
||||
<description>Resistor, axial DIN0207 footprint; exact MPN pending</description>
|
||||
<fields>
|
||||
<field name="Reference">R</field>
|
||||
<field name="Value">R</field>
|
||||
<field name="Footprint">Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description">Resistor, axial DIN0207 footprint; exact MPN pending</field>
|
||||
</fields>
|
||||
<pins>
|
||||
<pin num="1" name="" type="passive"/>
|
||||
<pin num="2" name="" type="passive"/>
|
||||
</pins>
|
||||
</libpart>
|
||||
<libpart lib="Carrier" part="SW_NO">
|
||||
<description>Normally open contact; footprint duplicates pads 1 and 2 for internally common terminal pairs</description>
|
||||
<fields>
|
||||
<field name="Reference">SW</field>
|
||||
<field name="Value">SW_NO</field>
|
||||
<field name="Footprint">Button_Switch_THT:SW_TH_Tactile_Omron_B3F-100x</field>
|
||||
<field name="Datasheet"/>
|
||||
<field name="Description">Normally open contact; footprint duplicates pads 1 and 2 for internally common terminal pairs</field>
|
||||
</fields>
|
||||
<pins>
|
||||
<pin num="1" name="" type="passive"/>
|
||||
<pin num="2" name="" type="passive"/>
|
||||
</pins>
|
||||
</libpart>
|
||||
</libparts>
|
||||
<libraries>
|
||||
<library logical="Carrier">
|
||||
<uri>${KIPRJMOD}/Carrier.kicad_sym</uri>
|
||||
</library>
|
||||
</libraries>
|
||||
<nets>
|
||||
<net code="1" name="/+3V3" class="Default">
|
||||
<node ref="DS1" pin="2" pinfunction="VCC_2" pintype="power_in"/>
|
||||
<node ref="R1" pin="1" pintype="passive"/>
|
||||
<node ref="R2" pin="1" pintype="passive"/>
|
||||
<node ref="R3" pin="1" pintype="passive"/>
|
||||
<node ref="U1" pin="1" pinfunction="3V3_1" pintype="power_out"/>
|
||||
<node ref="U1" pin="2" pinfunction="3V3_2" pintype="passive"/>
|
||||
<node ref="U2" pin="1" pinfunction="Vin_1" pintype="power_in"/>
|
||||
</net>
|
||||
<net code="2" name="/BTN_NEXT" class="Default">
|
||||
<node ref="R3" pin="2" pintype="passive"/>
|
||||
<node ref="SW3" pin="1" pintype="passive"/>
|
||||
<node ref="U1" pin="20" pinfunction="GPIO14_20" pintype="input"/>
|
||||
</net>
|
||||
<net code="3" name="/BTN_PREVIOUS" class="Default">
|
||||
<node ref="R1" pin="2" pintype="passive"/>
|
||||
<node ref="SW1" pin="1" pintype="passive"/>
|
||||
<node ref="U1" pin="16" pinfunction="GPIO10_16" pintype="input"/>
|
||||
</net>
|
||||
<net code="4" name="/BTN_SELECT" class="Default">
|
||||
<node ref="R2" pin="2" pintype="passive"/>
|
||||
<node ref="SW2" pin="1" pintype="passive"/>
|
||||
<node ref="U1" pin="19" pinfunction="GPIO13_19" pintype="input"/>
|
||||
</net>
|
||||
<net code="5" name="/GND" class="Default">
|
||||
<node ref="DS1" pin="1" pinfunction="GND_1" pintype="power_in"/>
|
||||
<node ref="SW1" pin="2" pintype="passive"/>
|
||||
<node ref="SW2" pin="2" pintype="passive"/>
|
||||
<node ref="SW3" pin="2" pintype="passive"/>
|
||||
<node ref="U1" pin="22" pinfunction="GND_22" pintype="power_out"/>
|
||||
<node ref="U1" pin="23" pinfunction="GND_23" pintype="passive"/>
|
||||
<node ref="U1" pin="43" pinfunction="GND_43" pintype="passive"/>
|
||||
<node ref="U1" pin="44" pinfunction="GND_44" pintype="passive"/>
|
||||
<node ref="U2" pin="2" pinfunction="GND_2" pintype="power_in"/>
|
||||
</net>
|
||||
<net code="6" name="/OLED_SCL" class="Default">
|
||||
<node ref="DS1" pin="3" pinfunction="SCL_3" pintype="input"/>
|
||||
<node ref="U1" pin="18" pinfunction="GPIO12_18" pintype="output"/>
|
||||
</net>
|
||||
<net code="7" name="/OLED_SDA" class="Default">
|
||||
<node ref="DS1" pin="4" pinfunction="SDA_4" pintype="bidirectional"/>
|
||||
<node ref="U1" pin="17" pinfunction="GPIO11_17" pintype="bidirectional"/>
|
||||
</net>
|
||||
<net code="8" name="/RS_CTS" class="Default">
|
||||
<node ref="U1" pin="9" pinfunction="GPIO16_9" pintype="input"/>
|
||||
<node ref="U2" pin="9" pinfunction="CTS_9" pintype="output"/>
|
||||
</net>
|
||||
<net code="9" name="/RS_DCD" class="Default">
|
||||
<node ref="U1" pin="4" pinfunction="GPIO4_4" pintype="input"/>
|
||||
<node ref="U2" pin="3" pinfunction="DCD_3" pintype="output"/>
|
||||
</net>
|
||||
<net code="10" name="/RS_DSR" class="Default">
|
||||
<node ref="U1" pin="5" pinfunction="GPIO5_5" pintype="input"/>
|
||||
<node ref="U2" pin="7" pinfunction="DSR_7" pintype="output"/>
|
||||
</net>
|
||||
<net code="11" name="/RS_DTR" class="Default">
|
||||
<node ref="U1" pin="7" pinfunction="GPIO7_7" pintype="output"/>
|
||||
<node ref="U2" pin="6" pinfunction="DTR_6" pintype="input"/>
|
||||
</net>
|
||||
<net code="12" name="/RS_OFF_N" class="Default">
|
||||
<node ref="U1" pin="15" pinfunction="GPIO9_15" pintype="bidirectional"/>
|
||||
<node ref="U2" pin="12" pinfunction="OFF_N_12" pintype="input"/>
|
||||
</net>
|
||||
<net code="13" name="/RS_RI" class="Default">
|
||||
<node ref="U1" pin="6" pinfunction="GPIO6_6" pintype="input"/>
|
||||
<node ref="U2" pin="10" pinfunction="RI_10" pintype="output"/>
|
||||
</net>
|
||||
<net code="14" name="/RS_RTS" class="Default">
|
||||
<node ref="U1" pin="8" pinfunction="GPIO15_8" pintype="output"/>
|
||||
<node ref="U2" pin="8" pinfunction="RTS_8" pintype="input"/>
|
||||
</net>
|
||||
<net code="15" name="/RS_RX" class="Default">
|
||||
<node ref="U1" pin="11" pinfunction="GPIO18_11" pintype="input"/>
|
||||
<node ref="U2" pin="4" pinfunction="RX_4" pintype="output"/>
|
||||
</net>
|
||||
<net code="16" name="/RS_TX" class="Default">
|
||||
<node ref="U1" pin="10" pinfunction="GPIO17_10" pintype="output"/>
|
||||
<node ref="U2" pin="5" pinfunction="TX_5" pintype="input"/>
|
||||
</net>
|
||||
<net code="17" name="/RS_VALID" class="Default">
|
||||
<node ref="U1" pin="12" pinfunction="GPIO8_12" pintype="input"/>
|
||||
<node ref="U2" pin="11" pinfunction="VLD_11" pintype="output"/>
|
||||
</net>
|
||||
<net code="18" name="unconnected-(U1-5V-Pad21)" class="Default">
|
||||
<node ref="U1" pin="21" pinfunction="5V_21" pintype="passive+no_connect"/>
|
||||
</net>
|
||||
<net code="19" name="unconnected-(U1-EN-Pad3)" class="Default">
|
||||
<node ref="U1" pin="3" pinfunction="EN_3" pintype="input+no_connect"/>
|
||||
</net>
|
||||
<net code="20" name="unconnected-(U1-GPIO0-Pad36)" class="Default">
|
||||
<node ref="U1" pin="36" pinfunction="GPIO0_36" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="21" name="unconnected-(U1-GPIO1-Pad26)" class="Default">
|
||||
<node ref="U1" pin="26" pinfunction="GPIO1_26" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="22" name="unconnected-(U1-GPIO2-Pad27)" class="Default">
|
||||
<node ref="U1" pin="27" pinfunction="GPIO2_27" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="23" name="unconnected-(U1-GPIO3-Pad13)" class="Default">
|
||||
<node ref="U1" pin="13" pinfunction="GPIO3_13" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="24" name="unconnected-(U1-GPIO19-Pad42)" class="Default">
|
||||
<node ref="U1" pin="42" pinfunction="GPIO19_42" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="25" name="unconnected-(U1-GPIO20-Pad41)" class="Default">
|
||||
<node ref="U1" pin="41" pinfunction="GPIO20_41" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="26" name="unconnected-(U1-GPIO21-Pad40)" class="Default">
|
||||
<node ref="U1" pin="40" pinfunction="GPIO21_40" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="27" name="unconnected-(U1-GPIO35-Pad35)" class="Default">
|
||||
<node ref="U1" pin="35" pinfunction="GPIO35_35" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="28" name="unconnected-(U1-GPIO36-Pad34)" class="Default">
|
||||
<node ref="U1" pin="34" pinfunction="GPIO36_34" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="29" name="unconnected-(U1-GPIO37-Pad33)" class="Default">
|
||||
<node ref="U1" pin="33" pinfunction="GPIO37_33" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="30" name="unconnected-(U1-GPIO38-Pad32)" class="Default">
|
||||
<node ref="U1" pin="32" pinfunction="GPIO38_32" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="31" name="unconnected-(U1-GPIO39-Pad31)" class="Default">
|
||||
<node ref="U1" pin="31" pinfunction="GPIO39_31" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="32" name="unconnected-(U1-GPIO40-Pad30)" class="Default">
|
||||
<node ref="U1" pin="30" pinfunction="GPIO40_30" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="33" name="unconnected-(U1-GPIO41-Pad29)" class="Default">
|
||||
<node ref="U1" pin="29" pinfunction="GPIO41_29" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="34" name="unconnected-(U1-GPIO42-Pad28)" class="Default">
|
||||
<node ref="U1" pin="28" pinfunction="GPIO42_28" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="35" name="unconnected-(U1-GPIO43-Pad24)" class="Default">
|
||||
<node ref="U1" pin="24" pinfunction="GPIO43_24" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="36" name="unconnected-(U1-GPIO44-Pad25)" class="Default">
|
||||
<node ref="U1" pin="25" pinfunction="GPIO44_25" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="37" name="unconnected-(U1-GPIO45-Pad37)" class="Default">
|
||||
<node ref="U1" pin="37" pinfunction="GPIO45_37" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="38" name="unconnected-(U1-GPIO46-Pad14)" class="Default">
|
||||
<node ref="U1" pin="14" pinfunction="GPIO46_14" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="39" name="unconnected-(U1-GPIO47-Pad39)" class="Default">
|
||||
<node ref="U1" pin="39" pinfunction="GPIO47_39" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
<net code="40" name="unconnected-(U1-GPIO48-Pad38)" class="Default">
|
||||
<node ref="U1" pin="38" pinfunction="GPIO48_38" pintype="bidirectional+no_connect"/>
|
||||
</net>
|
||||
</nets>
|
||||
</export>
|
||||
@@ -0,0 +1,8 @@
|
||||
Native schematic validation passed.
|
||||
KiCad ERC: zero reported errors/warnings; no project exclusions added.
|
||||
17 connected nets, 9 components; exact net memberships verified.
|
||||
15 firmware GPIO definitions independently checked against exported pin functions.
|
||||
All 44 MCU header pins accounted for; USB/UART0/5V/PSRAM pins unused on carrier.
|
||||
PDF and SVG exported successfully.
|
||||
Not validated: male-module physical mapping, power budget/path, OLED pull-ups,
|
||||
selected connector fit, PCB DRC/layout, procurement, or assembled hardware.
|
||||
Reference in New Issue
Block a user