@hybridlabor-api/bdb-hardware-pcb 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +116 -0
- package/config/mcp/antigravity.json +22 -0
- package/config/mcp/claude.json +22 -0
- package/config/mcp/codex.toml +25 -0
- package/docs/adr/ADR-001-KICAD-OPENSCAD-MCP-STRATEGY.md +334 -0
- package/docs/review_documentation.md +121 -0
- package/installer.js +358 -0
- package/mcp_servers/kicad-mcp-server/.env.example +22 -0
- package/mcp_servers/kicad-mcp-server/.github/workflows/ci.yml +36 -0
- package/mcp_servers/kicad-mcp-server/CLAUDE.md +487 -0
- package/mcp_servers/kicad-mcp-server/README.md +316 -0
- package/mcp_servers/kicad-mcp-server/docs/DEVICE_TREE.md +416 -0
- package/mcp_servers/kicad-mcp-server/docs/INSTALLATION.md +332 -0
- package/mcp_servers/kicad-mcp-server/docs/PIN_ANALYSIS.md +332 -0
- package/mcp_servers/kicad-mcp-server/docs/README.md +240 -0
- package/mcp_servers/kicad-mcp-server/docs/TESTING.md +613 -0
- package/mcp_servers/kicad-mcp-server/docs/VALIDATION.md +268 -0
- package/mcp_servers/kicad-mcp-server/pyproject.toml +96 -0
- package/mcp_servers/kicad-mcp-server/requirements-dev.txt +16 -0
- package/mcp_servers/kicad-mcp-server/requirements-test.txt +24 -0
- package/mcp_servers/kicad-mcp-server/requirements.txt +13 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/__init__.py +3 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/__main__.py +17 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/config.py +46 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/models/__init__.py +1 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/models/types.py +87 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/__init__.py +1 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/netlist_parser.py +234 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/pcb_parser.py +375 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/pcb_parser_kicad.py +327 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/schematic_parser.py +902 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/server.py +71 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/__init__.py +1 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/arduino/connectivity_test.cpp.j2 +189 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/atmega.dts.j2 +77 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/esp32.dts.j2 +77 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/nrf52.dts.j2 +77 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/stm32f4.dts.j2 +89 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/esp_idf/test_suite.c.j2 +340 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/pytest/test_connectivity.py.j2 +147 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/st_hal/hal_test.c.j2 +313 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_gpio_test.py.j2 +99 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_i2c_test.py.j2 +117 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_pinmux_test.py.j2 +43 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_spi_test.py.j2 +94 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/unity_gpio_test.c.j2 +113 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/unity_i2c_test.c.j2 +101 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/unity_spi_test.c.j2 +94 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/unittest/test_schematic.py.j2 +172 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/__init__.py +36 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/device_tree.py +1187 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/hierarchical_analysis.py +211 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/netlist.py +320 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/parts_registry.py +142 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/pcb.py +955 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/pcb_layout.py +308 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/pin_analysis.py +765 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/project.py +196 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/schematic.py +319 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/schematic_editor.py +674 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/schematic_search.py +158 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/validation.py +866 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/visualization.py +225 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/__init__.py +1 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/file_handlers.py +65 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/kicad_cli.py +103 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/kicad_version.py +103 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/parts_registry.py +197 -0
- package/mcp_servers/kicad-mcp-server/tests/__init__.py +1 -0
- package/mcp_servers/kicad-mcp-server/tests/examples/ESP32S3_TEST.md +219 -0
- package/mcp_servers/kicad-mcp-server/tests/fixtures/README.md +65 -0
- package/mcp_servers/kicad-mcp-server/tests/fixtures/__init__.py +1 -0
- package/mcp_servers/kicad-mcp-server/tests/fixtures/example_pcb.kicad_pcb +177 -0
- package/mcp_servers/kicad-mcp-server/tests/fixtures/example_schematic.kicad_sch +145 -0
- package/mcp_servers/kicad-mcp-server/tests/fixtures/hier/child.kicad_sch +24 -0
- package/mcp_servers/kicad-mcp-server/tests/fixtures/hier/root.kicad_sch +38 -0
- package/mcp_servers/kicad-mcp-server/tests/test_tools/__init__.py +1 -0
- package/mcp_servers/kicad-mcp-server/tests/test_tools/test_hierarchical_labels.py +195 -0
- package/mcp_servers/kicad-mcp-server/tests/test_tools/test_kicad_cli.py +116 -0
- package/mcp_servers/kicad-mcp-server/tests/test_tools/test_netlist_cache_path.py +29 -0
- package/mcp_servers/kicad-mcp-server/tests/test_tools/test_schematic.py +189 -0
- package/mcp_servers/kicad-mcp-server/tests/test_tools/test_schematic_hierarchy.py +69 -0
- package/mcp_servers/kicad-mcp-server/tests/test_tools/test_visualization.py +136 -0
- package/mcp_servers/kicad-mcp-server/uv.lock +2873 -0
- package/mcp_servers/openscad-mcp-server/.dockerignore +9 -0
- package/mcp_servers/openscad-mcp-server/.github/workflows/test.yml +40 -0
- package/mcp_servers/openscad-mcp-server/Dockerfile +29 -0
- package/mcp_servers/openscad-mcp-server/LICENSE +21 -0
- package/mcp_servers/openscad-mcp-server/README.md +154 -0
- package/mcp_servers/openscad-mcp-server/docs/audit.md +56 -0
- package/mcp_servers/openscad-mcp-server/docs/docker.md +66 -0
- package/mcp_servers/openscad-mcp-server/docs/issue-followup.md +19 -0
- package/mcp_servers/openscad-mcp-server/docs/jetson.md +17 -0
- package/mcp_servers/openscad-mcp-server/glama.json +4 -0
- package/mcp_servers/openscad-mcp-server/legacy/README.md +15 -0
- package/mcp_servers/openscad-mcp-server/legacy/README.original.md +294 -0
- package/mcp_servers/openscad-mcp-server/legacy/implementation_plan.md +100 -0
- package/mcp_servers/openscad-mcp-server/legacy/old/download_sam2_checkpoint.py +115 -0
- package/mcp_servers/openscad-mcp-server/legacy/old/src/ai/sam_segmentation.py +209 -0
- package/mcp_servers/openscad-mcp-server/legacy/old/src/models/threestudio_generator.py +231 -0
- package/mcp_servers/openscad-mcp-server/legacy/old/src/workflow/image_to_model_pipeline.py +260 -0
- package/mcp_servers/openscad-mcp-server/legacy/old/test_sam2_segmentation.py +96 -0
- package/mcp_servers/openscad-mcp-server/legacy/requirements.txt +57 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/README.md +39 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/decisions/ai-driven-code-generation.md +122 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/decisions/export-formats.md +76 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/ai/ai_service.py.md +51 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/main.py.md +63 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/models/code_generator.py.md +63 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/nlp/parameter_extractor.py.md +63 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/ai/natural-language-processing.md +78 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/nlp/parameter-extraction.md +173 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/openscad/export-formats.md +91 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/openscad/openscad-basics.md +66 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/openscad/primitive-testing.md +79 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/__init__.py +0 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/ai/ai_service.py +257 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/ai/gemini_api.py +161 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/ai/venice_api.py +203 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/config.py +121 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/main.py +1456 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/main.py.new +404 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/main_remote.py +401 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/models/__init__.py +0 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/models/code_generator.py +321 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/models/cuda_mvs.py +209 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/models/scad_templates/basic_shapes.scad +144 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/nlp/__init__.py +0 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/nlp/parameter_extractor.py +388 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/openscad_wrapper/__init__.py +0 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/openscad_wrapper/wrapper.py +418 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/printer_discovery/__init__.py +1 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/printer_discovery/printer_discovery.py +471 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/remote/connection_manager.py +537 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/remote/cuda_mvs_client.py +435 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/remote/cuda_mvs_server.py +787 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/remote/error_handling.py +415 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/testing/__init__.py +0 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/testing/primitive_tester.py +203 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/testing/test_primitives.py +98 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/utils/__init__.py +1 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/utils/cad_exporter.py +241 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/utils/format_validator.py +206 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/utils/stl_exporter.py +140 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/utils/stl_repair.py +91 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/utils/stl_validator.py +123 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/visualization/__init__.py +0 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/visualization/headless_renderer.py +52 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/visualization/renderer.py +177 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/visualization/web_interface.py +639 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/workflow/image_approval.py +148 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/workflow/multi_view_to_model_pipeline.py +338 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_complete_workflow.py +374 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_cuda_mvs.py +191 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_gemini_api.py +168 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_image_approval.py +192 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_image_approval_workflow.py +251 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_image_to_model_pipeline.py +145 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_model_selection.py +41 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_multi_view_pipeline.py +290 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_primitives.sh +13 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_rabbit_direct.py +71 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_remote_cuda_mvs.py +283 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_venice_example.py +69 -0
- package/mcp_servers/openscad-mcp-server/pyproject.toml +33 -0
- package/mcp_servers/openscad-mcp-server/requirements.txt +2 -0
- package/mcp_servers/openscad-mcp-server/scad/simple_cube.scad +2 -0
- package/mcp_servers/openscad-mcp-server/scripts/test_docker.py +220 -0
- package/mcp_servers/openscad-mcp-server/src/openscad_mcp/__init__.py +3 -0
- package/mcp_servers/openscad-mcp-server/src/openscad_mcp/__main__.py +3 -0
- package/mcp_servers/openscad-mcp-server/src/openscad_mcp/engine.py +94 -0
- package/mcp_servers/openscad-mcp-server/src/openscad_mcp/geometry.py +242 -0
- package/mcp_servers/openscad-mcp-server/src/openscad_mcp/server.py +245 -0
- package/mcp_servers/openscad-mcp-server/src/openscad_mcp/service.py +190 -0
- package/mcp_servers/openscad-mcp-server/tests/conftest.py +17 -0
- package/mcp_servers/openscad-mcp-server/tests/test_engine.py +37 -0
- package/mcp_servers/openscad-mcp-server/tests/test_geometry.py +106 -0
- package/mcp_servers/openscad-mcp-server/tests/test_integration.py +172 -0
- package/mcp_servers/openscad-mcp-server/tests/test_transports.py +314 -0
- package/mcp_servers/openscad-mcp-server/uv.lock +1123 -0
- package/package.json +44 -0
- package/scripts/install_mcps.sh +86 -0
- package/scripts/openscad_wrapper.sh +62 -0
- package/scripts/run_kicad_mcp.sh +25 -0
- package/scripts/run_openscad_mcp.sh +41 -0
- package/scripts/test_mcp_connection.py +626 -0
- package/scripts/test_mcp_connection.sh +168 -0
- package/skills/code-first-hardware-design/SKILL.md +260 -0
- package/skills/pcb-constraint-definition/SKILL.md +236 -0
- package/skills/pcb-layout-routing-automation/SKILL.md +153 -0
- package/skills/pcb-validation-dfm-signoff/SKILL.md +194 -0
- package/skills/schematic-datasheet-analysis/SKILL.md +202 -0
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
# Device Tree Generation Guide
|
|
2
|
+
|
|
3
|
+
Comprehensive guide for using KiCad MCP Server's device tree generation capabilities.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Device tree generation tools automatically create Linux device tree source (.dts) files from KiCad schematics, supporting multiple SOC families and peripheral types.
|
|
8
|
+
|
|
9
|
+
## Tools
|
|
10
|
+
|
|
11
|
+
### `generate_device_tree(schematic_path: str, target_soc: str = "stm32f4", output_path: str = "") -> str`
|
|
12
|
+
|
|
13
|
+
Generate complete device tree source file from schematic.
|
|
14
|
+
|
|
15
|
+
**Supported SOC Families:**
|
|
16
|
+
- `stm32f4` - STM32F4 series (STM32F407, STM32F411, etc.)
|
|
17
|
+
- `esp32` - ESP32 series (ESP32, ESP32-S2, ESP32-S3)
|
|
18
|
+
- `nrf52` - nRF52 series (nRF52832, nRF52840)
|
|
19
|
+
- `atmega` - ATmega series (ATmega328P, ATmega2560)
|
|
20
|
+
|
|
21
|
+
**Example:**
|
|
22
|
+
```python
|
|
23
|
+
# Generate device tree for STM32F4
|
|
24
|
+
result = generate_device_tree(
|
|
25
|
+
schematic_path="board.kicad_sch",
|
|
26
|
+
target_soc="stm32f4",
|
|
27
|
+
output_path="board.dts"
|
|
28
|
+
)
|
|
29
|
+
print(result)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Output includes:**
|
|
33
|
+
- GPIO pin configurations
|
|
34
|
+
- I2C buses and devices
|
|
35
|
+
- SPI buses and devices
|
|
36
|
+
- UART/USART configurations
|
|
37
|
+
- Power domains and regulators
|
|
38
|
+
- SOC-specific configurations
|
|
39
|
+
|
|
40
|
+
### `extract_gpio_config(schematic_path: str, soc_family: str = "") -> str`
|
|
41
|
+
|
|
42
|
+
Extract GPIO pin configurations from schematic.
|
|
43
|
+
|
|
44
|
+
**Example:**
|
|
45
|
+
```python
|
|
46
|
+
# Extract all GPIO configurations
|
|
47
|
+
gpio = extract_gpio_config("board.kicad_sch")
|
|
48
|
+
|
|
49
|
+
# Extract for specific SOC
|
|
50
|
+
stm32_gpio = extract_gpio_config("board.kicad_sch", soc_family="stm32")
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Output includes:**
|
|
54
|
+
- Pin numbers and names
|
|
55
|
+
- Net connections
|
|
56
|
+
- SOC family identification
|
|
57
|
+
- Code generation suggestions
|
|
58
|
+
|
|
59
|
+
### `extract_i2c_devices(schematic_path: str) -> str`
|
|
60
|
+
|
|
61
|
+
Extract I2C bus and device configurations.
|
|
62
|
+
|
|
63
|
+
**Example:**
|
|
64
|
+
```python
|
|
65
|
+
i2c_devices = extract_i2c_devices("board.kicad_sch")
|
|
66
|
+
print(i2c_devices)
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Output includes:**
|
|
70
|
+
- I2C bus configuration
|
|
71
|
+
- Device addresses (extracted from net names)
|
|
72
|
+
- Device tree compatible strings
|
|
73
|
+
- Device tree node configurations
|
|
74
|
+
|
|
75
|
+
### `extract_spi_devices(schematic_path: str) -> str`
|
|
76
|
+
|
|
77
|
+
Extract SPI bus and device configurations.
|
|
78
|
+
|
|
79
|
+
**Example:**
|
|
80
|
+
```python
|
|
81
|
+
spi_devices = extract_spi_devices("board.kicad_sch")
|
|
82
|
+
print(spi_devices)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Output includes:**
|
|
86
|
+
- SPI bus configuration
|
|
87
|
+
- Chip select assignments
|
|
88
|
+
- Device tree compatible strings
|
|
89
|
+
- SPI frequency settings
|
|
90
|
+
|
|
91
|
+
### `extract_power_domains(schematic_path: str) -> str`
|
|
92
|
+
|
|
93
|
+
Extract power domain and regulator configurations.
|
|
94
|
+
|
|
95
|
+
**Example:**
|
|
96
|
+
```python
|
|
97
|
+
power = extract_power_domains("board.kicad_sch")
|
|
98
|
+
print(power)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**Output includes:**
|
|
102
|
+
- Regulator components
|
|
103
|
+
- Power domain assignments
|
|
104
|
+
- Voltage configurations
|
|
105
|
+
- Device tree regulator nodes
|
|
106
|
+
|
|
107
|
+
### `validate_pin_configuration(schematic_path: str) -> str`
|
|
108
|
+
|
|
109
|
+
Validate pin configuration before device tree generation.
|
|
110
|
+
|
|
111
|
+
**Example:**
|
|
112
|
+
```python
|
|
113
|
+
validation = validate_pin_configuration("board.kicad_sch")
|
|
114
|
+
if "✅" in validation:
|
|
115
|
+
# Safe to generate device tree
|
|
116
|
+
generate_device_tree("board.kicad_sch", "stm32f4", "board.dts")
|
|
117
|
+
else:
|
|
118
|
+
print("Fix validation issues first")
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Device Tree Bindings Database
|
|
122
|
+
|
|
123
|
+
### Supported Components
|
|
124
|
+
|
|
125
|
+
**Sensors:**
|
|
126
|
+
- BMP280, BME280, BMP388 (bosch,bmp280)
|
|
127
|
+
- LSM6DS3, MPU6050, MPU9250 (motion sensors)
|
|
128
|
+
- HTS221, LPS22HB (environmental sensors)
|
|
129
|
+
- DHT22, SHT30 (temperature/humidity)
|
|
130
|
+
- MAX31855 (thermocouple)
|
|
131
|
+
|
|
132
|
+
**Displays:**
|
|
133
|
+
- ST7789, ST7735, ILI9341 (TFT displays)
|
|
134
|
+
- SSD1306, SH1106 (OLED displays)
|
|
135
|
+
|
|
136
|
+
**Memory:**
|
|
137
|
+
- AT24C256 (I2C EEPROM)
|
|
138
|
+
- W25Q128, GD25Q16 (SPI Flash)
|
|
139
|
+
|
|
140
|
+
**Wireless:**
|
|
141
|
+
- ESP8266 (WiFi module)
|
|
142
|
+
- nRF24L01 (2.4GHz radio)
|
|
143
|
+
- SX1278 (LoRa radio)
|
|
144
|
+
|
|
145
|
+
**Connectivity:**
|
|
146
|
+
- CP2102, FT232RL, CH340G (USB-serial)
|
|
147
|
+
|
|
148
|
+
**Power:**
|
|
149
|
+
- TP4056 (battery charger)
|
|
150
|
+
- AXP192 (power management)
|
|
151
|
+
- LP3985, AP2112 (voltage regulators)
|
|
152
|
+
|
|
153
|
+
## Usage Patterns
|
|
154
|
+
|
|
155
|
+
### Basic Device Tree Generation
|
|
156
|
+
|
|
157
|
+
```python
|
|
158
|
+
# 1. Validate pin configuration
|
|
159
|
+
validation = validate_pin_configuration("board.kicad_sch")
|
|
160
|
+
assert "✅" in validation, "Fix validation issues first"
|
|
161
|
+
|
|
162
|
+
# 2. Generate device tree
|
|
163
|
+
result = generate_device_tree(
|
|
164
|
+
schematic_path="board.kicad_sch",
|
|
165
|
+
target_soc="stm32f4",
|
|
166
|
+
output_path="board.dts"
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
print(result)
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Multi-SOC Support
|
|
173
|
+
|
|
174
|
+
```python
|
|
175
|
+
# Generate device trees for different SOCs
|
|
176
|
+
for soc in ["stm32f4", "esp32", "nrf52"]:
|
|
177
|
+
result = generate_device_tree(
|
|
178
|
+
schematic_path="board.kicad_sch",
|
|
179
|
+
target_soc=soc,
|
|
180
|
+
output_path=f"board_{soc}.dts"
|
|
181
|
+
)
|
|
182
|
+
print(f"Generated {soc} device tree")
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Peripheral-Specific Extraction
|
|
186
|
+
|
|
187
|
+
```python
|
|
188
|
+
# Extract specific peripheral configurations
|
|
189
|
+
gpio = extract_gpio_config("board.kicad_sch", "stm32")
|
|
190
|
+
i2c = extract_i2c_devices("board.kicad_sch")
|
|
191
|
+
spi = extract_spi_devices("board.kicad_sch")
|
|
192
|
+
power = extract_power_domains("board.kicad_sch")
|
|
193
|
+
|
|
194
|
+
# Use extracted data for custom device tree
|
|
195
|
+
# (integrate into your build system)
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Schematic Requirements
|
|
199
|
+
|
|
200
|
+
### Component Naming
|
|
201
|
+
|
|
202
|
+
For best results, use standard component values:
|
|
203
|
+
|
|
204
|
+
```python
|
|
205
|
+
# Good - Recognizable components
|
|
206
|
+
"STM32F407VGT6"
|
|
207
|
+
"ESP32-WROOM-32"
|
|
208
|
+
"BMP280"
|
|
209
|
+
"SSD1306"
|
|
210
|
+
|
|
211
|
+
# Avoid - Generic names
|
|
212
|
+
"U1" # Use proper component value
|
|
213
|
+
"SENSOR" # Be specific
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Net Naming
|
|
217
|
+
|
|
218
|
+
Use descriptive net names for automatic detection:
|
|
219
|
+
|
|
220
|
+
```python
|
|
221
|
+
# I2C nets
|
|
222
|
+
"I2C1_SDA"
|
|
223
|
+
"I2C1_SCL"
|
|
224
|
+
"I2C_SENSOR_SDA_0x76" # Include I2C address
|
|
225
|
+
|
|
226
|
+
# SPI nets
|
|
227
|
+
"SPI1_MOSI"
|
|
228
|
+
"SPI1_MISO"
|
|
229
|
+
"SPI1_SCK"
|
|
230
|
+
"SPI1_CS0"
|
|
231
|
+
|
|
232
|
+
# UART nets
|
|
233
|
+
"UART1_TX"
|
|
234
|
+
"UART1_RX"
|
|
235
|
+
|
|
236
|
+
# GPIO nets
|
|
237
|
+
"GPIO_LED_STATUS"
|
|
238
|
+
"GPIO_BUTTON_RESET"
|
|
239
|
+
"PA0" # STM32 style
|
|
240
|
+
"IO0" # ESP32 style
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### I2C Address Detection
|
|
244
|
+
|
|
245
|
+
Include I2C addresses in net names:
|
|
246
|
+
|
|
247
|
+
```python
|
|
248
|
+
# Format: I2C_<name>_<address>
|
|
249
|
+
"I2C_SDA_0x76" # BMP280 at 0x76
|
|
250
|
+
"I2C_SCL_0x5A" # Device at 0x5A
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
## Device Tree Compilation
|
|
254
|
+
|
|
255
|
+
### Compile Generated Device Tree
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
# Install device tree compiler
|
|
259
|
+
sudo apt-get install device-tree-compiler
|
|
260
|
+
|
|
261
|
+
# Compile .dts to .dtb
|
|
262
|
+
dtc -I dts -O dtb -o board.dtb board.dts
|
|
263
|
+
|
|
264
|
+
# Verify compiled device tree
|
|
265
|
+
dtc -I dtb -O dts -o verify.dts board.dtb
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### Integration with Build System
|
|
269
|
+
|
|
270
|
+
```makefile
|
|
271
|
+
# Makefile
|
|
272
|
+
BOARD_DTS = board.dts
|
|
273
|
+
BOARD_DTB = board.dtb
|
|
274
|
+
|
|
275
|
+
all: $(BOARD_DTB)
|
|
276
|
+
|
|
277
|
+
$(BOARD_DTB): $(BOARD_DTS)
|
|
278
|
+
dtc -I dts -O dtb -o $@ $<
|
|
279
|
+
|
|
280
|
+
generate:
|
|
281
|
+
python -c "
|
|
282
|
+
from kicad_mcp_server.tools import device_tree
|
|
283
|
+
device_tree.generate_device_tree('board.kicad_sch', 'stm32f4', '$(BOARD_DTS)')
|
|
284
|
+
"
|
|
285
|
+
|
|
286
|
+
clean:
|
|
287
|
+
rm -f $(BOARD_DTB)
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
## Customization
|
|
291
|
+
|
|
292
|
+
### Custom Templates
|
|
293
|
+
|
|
294
|
+
Create custom device tree templates:
|
|
295
|
+
|
|
296
|
+
```python
|
|
297
|
+
# Save template as custom_soc.dts.j2
|
|
298
|
+
# In templates/device_tree/ directory
|
|
299
|
+
|
|
300
|
+
# Use custom template
|
|
301
|
+
result = generate_device_tree(
|
|
302
|
+
schematic_path="board.kicad_sch",
|
|
303
|
+
target_soc="custom_soc",
|
|
304
|
+
output_path="board.dts"
|
|
305
|
+
)
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### Custom Bindings
|
|
309
|
+
|
|
310
|
+
Add device tree bindings for new components:
|
|
311
|
+
|
|
312
|
+
```python
|
|
313
|
+
# In device_tree.py, add to DEVICE_TREE_BINDINGS
|
|
314
|
+
DEVICE_TREE_BINDINGS = {
|
|
315
|
+
"MyCategory": {
|
|
316
|
+
"MY_PART": {"compatible": "vendor,my-part"},
|
|
317
|
+
},
|
|
318
|
+
# ... existing bindings
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Post-Processing
|
|
323
|
+
|
|
324
|
+
Process generated device tree:
|
|
325
|
+
|
|
326
|
+
```python
|
|
327
|
+
# Generate device tree
|
|
328
|
+
result = generate_device_tree("board.kicad_sch", "stm32f4", "board.dts")
|
|
329
|
+
|
|
330
|
+
# Read and modify
|
|
331
|
+
with open("board.dts", "r") as f:
|
|
332
|
+
dts = f.read()
|
|
333
|
+
|
|
334
|
+
# Add custom modifications
|
|
335
|
+
dts += """
|
|
336
|
+
/* Custom additions */
|
|
337
|
+
&i2c1 {
|
|
338
|
+
my_custom_device: custom@50 {
|
|
339
|
+
compatible = "vendor,custom";
|
|
340
|
+
reg = <0x50>;
|
|
341
|
+
};
|
|
342
|
+
};
|
|
343
|
+
"""
|
|
344
|
+
|
|
345
|
+
# Write modified version
|
|
346
|
+
with open("board_custom.dts", "w") as f:
|
|
347
|
+
f.write(dts)
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
## Best Practices
|
|
351
|
+
|
|
352
|
+
1. **Validate First**: Always run validation before generation
|
|
353
|
+
2. **Use Standard Names**: Use recognizable component values and net names
|
|
354
|
+
3. **Include Addresses**: Put I2C addresses in net names
|
|
355
|
+
4. **Review Output**: Inspect generated .dts file
|
|
356
|
+
5. **Test Compilation**: Compile .dts to .dtb to verify syntax
|
|
357
|
+
6. **Version Control**: Keep both schematic and device tree in sync
|
|
358
|
+
|
|
359
|
+
## Troubleshooting
|
|
360
|
+
|
|
361
|
+
**Issue:** MCU not detected
|
|
362
|
+
- **Solution:** Check component value (e.g., "STM32F407")
|
|
363
|
+
- **Solution:** Verify component library is properly configured
|
|
364
|
+
|
|
365
|
+
**Issue:** I2C addresses not detected
|
|
366
|
+
- **Solution:** Include address in net name (e.g., "I2C_SDA_0x76")
|
|
367
|
+
- **Solution:** Use hex format (0x76, not 118)
|
|
368
|
+
|
|
369
|
+
**Issue:** Device tree won't compile
|
|
370
|
+
- **Solution:** Check for syntax errors in generated .dts
|
|
371
|
+
- **Solution:** Verify all referenced nodes exist
|
|
372
|
+
- **Solution:** Check for missing include files
|
|
373
|
+
|
|
374
|
+
**Issue:** Generated device tree missing peripherals
|
|
375
|
+
- **Solution:** Check net naming conventions
|
|
376
|
+
- **Solution:** Verify component is in bindings database
|
|
377
|
+
- **Solution:** Ensure schematic netlist is up to date
|
|
378
|
+
|
|
379
|
+
## Integration with Embedded Linux
|
|
380
|
+
|
|
381
|
+
### Complete Workflow
|
|
382
|
+
|
|
383
|
+
```python
|
|
384
|
+
# 1. Validate design
|
|
385
|
+
validate_pin_configuration("board.kicad_sch")
|
|
386
|
+
|
|
387
|
+
# 2. Generate device tree
|
|
388
|
+
generate_device_tree("board.kicad_sch", "stm32f4", "board.dts")
|
|
389
|
+
|
|
390
|
+
# 3. Compile device tree
|
|
391
|
+
import subprocess
|
|
392
|
+
subprocess.run(["dtc", "-I", "dts", "-O", "dtb", "-o", "board.dtb", "board.dts"])
|
|
393
|
+
|
|
394
|
+
# 4. Deploy to target
|
|
395
|
+
# (copy board.dtb to target system)
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### Kernel Integration
|
|
399
|
+
|
|
400
|
+
```bash
|
|
401
|
+
# Copy device tree to boot partition
|
|
402
|
+
cp board.dtb /boot/
|
|
403
|
+
|
|
404
|
+
# Update boot loader to use new device tree
|
|
405
|
+
# (varies by platform)
|
|
406
|
+
|
|
407
|
+
# Reboot and test
|
|
408
|
+
reboot
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
## Resources
|
|
412
|
+
|
|
413
|
+
- [Device Tree Specification](https://www.devicetree.org/)
|
|
414
|
+
- [Linux Device Tree Usage](https://www.kernel.org/doc/Documentation/devicetree/usage-model.txt)
|
|
415
|
+
- [Device Tree Compiler](https://github.com/dgibson/dtc)
|
|
416
|
+
- [STM32 Device Tree](https://wiki.st.com/stm32mpu/wiki/Device_tree)
|