@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,332 @@
|
|
|
1
|
+
# Installation Guide for KiCad MCP Server
|
|
2
|
+
|
|
3
|
+
## Prerequisites
|
|
4
|
+
|
|
5
|
+
### System Requirements
|
|
6
|
+
- **Python**: 3.10 or higher
|
|
7
|
+
- **KiCad**: 9.0 or higher (for file compatibility)
|
|
8
|
+
- **Operating System**: Windows, macOS, or Linux
|
|
9
|
+
|
|
10
|
+
### KiCad Installation
|
|
11
|
+
|
|
12
|
+
**Linux:**
|
|
13
|
+
```bash
|
|
14
|
+
sudo apt install kicad # Ubuntu/Debian
|
|
15
|
+
sudo dnf install kicad # Fedora
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**macOS:**
|
|
19
|
+
```bash
|
|
20
|
+
brew install kicad
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Windows:**
|
|
24
|
+
Download from [KiCad website](https://www.kicad.org/download/)
|
|
25
|
+
|
|
26
|
+
## Installation Methods
|
|
27
|
+
|
|
28
|
+
### Method 1: Install from PyPI (Recommended)
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# Install core package
|
|
32
|
+
pip install kicad-mcp-server
|
|
33
|
+
|
|
34
|
+
# Or install with development dependencies
|
|
35
|
+
pip install kicad-mcp-server[dev]
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Method 2: Install from Source
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Clone repository
|
|
42
|
+
git clone https://github.com/yourusername/kicad-mcp-server.git
|
|
43
|
+
cd kicad-mcp-server
|
|
44
|
+
|
|
45
|
+
# Install in development mode
|
|
46
|
+
pip install -e .
|
|
47
|
+
|
|
48
|
+
# Or with development dependencies
|
|
49
|
+
pip install -e ".[dev]"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Method 3: Install with requirements.txt
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Install core dependencies
|
|
56
|
+
pip install -r requirements.txt
|
|
57
|
+
|
|
58
|
+
# Install development dependencies
|
|
59
|
+
pip install -r requirements-dev.txt
|
|
60
|
+
|
|
61
|
+
# Install testing dependencies (optional, for hardware testing)
|
|
62
|
+
pip install -r requirements-test.txt
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Dependency Details
|
|
66
|
+
|
|
67
|
+
### Core Dependencies (requirements.txt)
|
|
68
|
+
|
|
69
|
+
- **mcp[cli]>=1.2.0** - Model Context Protocol framework
|
|
70
|
+
- **fastmcp>=0.1.0** - Fast MCP server implementation
|
|
71
|
+
- **kicad-skip>=0.2.5** - KiCad file parsing library
|
|
72
|
+
- **pydantic>=2.0.0** - Data validation and parsing
|
|
73
|
+
- **python-dotenv>=1.0.0** - Environment variable management
|
|
74
|
+
- **jinja2>=3.1.0** - Template engine for code generation
|
|
75
|
+
|
|
76
|
+
### Development Dependencies (requirements-dev.txt)
|
|
77
|
+
|
|
78
|
+
- **pytest>=7.0.0** - Testing framework
|
|
79
|
+
- **pytest-asyncio>=0.21.0** - Async test support
|
|
80
|
+
- **pytest-cov>=4.0.0** - Code coverage reporting
|
|
81
|
+
- **black>=23.0.0** - Code formatter
|
|
82
|
+
- **ruff>=0.1.0** - Fast Python linter
|
|
83
|
+
- **mypy>=1.0.0** - Static type checker
|
|
84
|
+
|
|
85
|
+
### Testing Dependencies (requirements-test.txt)
|
|
86
|
+
|
|
87
|
+
These are optional dependencies for running hardware tests with actual hardware interaction:
|
|
88
|
+
|
|
89
|
+
- **RPi.GPIO>=0.7.0** - Raspberry Pi GPIO (ARM only)
|
|
90
|
+
- **smbus2>=0.4.0** - I2C communication
|
|
91
|
+
- **spidev>=3.5** - SPI communication (ARM only)
|
|
92
|
+
- **pyserial>=3.5** - Serial communication
|
|
93
|
+
- **mock>=4.0.0** - Mocking framework
|
|
94
|
+
|
|
95
|
+
## KiCad Integration
|
|
96
|
+
|
|
97
|
+
### Verify KiCad Installation
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
# Check KiCad version
|
|
101
|
+
kicad-cli --version
|
|
102
|
+
|
|
103
|
+
# Or check pcbnew Python module
|
|
104
|
+
python -c "import pcbnew; print(pcbnew.GetBuildVersion())"
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Path Configuration
|
|
108
|
+
|
|
109
|
+
If KiCad is not in your system PATH, you may need to add it:
|
|
110
|
+
|
|
111
|
+
**Linux/macOS:**
|
|
112
|
+
```bash
|
|
113
|
+
# Add to ~/.bashrc or ~/.zshrc
|
|
114
|
+
export PATH=$PATH:/path/to/kicad/bin
|
|
115
|
+
export PYTHONPATH=$PYTHONPATH:/path/to/kicad/lib/python3.10/site-packages
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Windows:**
|
|
119
|
+
```cmd
|
|
120
|
+
REM Add to System Environment Variables
|
|
121
|
+
set PATH=%PATH%;C:\Program Files\KiCad\bin
|
|
122
|
+
set PYTHONPATH=%PYTHONPATH%;C:\Program Files\KiCad\lib\python3.10\site-packages
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Claude Desktop Configuration
|
|
126
|
+
|
|
127
|
+
### Linux/macOS
|
|
128
|
+
|
|
129
|
+
Add to `~/.config/Claude/claude_desktop_config.json`:
|
|
130
|
+
|
|
131
|
+
```json
|
|
132
|
+
{
|
|
133
|
+
"mcpServers": {
|
|
134
|
+
"kicad": {
|
|
135
|
+
"type": "stdio",
|
|
136
|
+
"command": "python",
|
|
137
|
+
"args": ["-m", "kicad_mcp_server"],
|
|
138
|
+
"cwd": "/path/to/kicad-mcp-server",
|
|
139
|
+
"env": {
|
|
140
|
+
"PYTHONPATH": "/path/to/kicad-mcp-server/src"
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Windows
|
|
148
|
+
|
|
149
|
+
Add to `%APPDATA%\Claude\claude_desktop_config.json`:
|
|
150
|
+
|
|
151
|
+
```json
|
|
152
|
+
{
|
|
153
|
+
"mcpServers": {
|
|
154
|
+
"kicad": {
|
|
155
|
+
"type": "stdio",
|
|
156
|
+
"command": "python",
|
|
157
|
+
"args": ["-m", "kicad_mcp_server"],
|
|
158
|
+
"cwd": "C:\\path\\to\\kicad-mcp-server",
|
|
159
|
+
"env": {
|
|
160
|
+
"PYTHONPATH": "C:\\path\\to\\kicad-mcp-server\\src"
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Docker Installation
|
|
168
|
+
|
|
169
|
+
### Using Dockerfile
|
|
170
|
+
|
|
171
|
+
```dockerfile
|
|
172
|
+
FROM python:3.11-slim
|
|
173
|
+
|
|
174
|
+
# Install system dependencies
|
|
175
|
+
RUN apt-get update && apt-get install -y \
|
|
176
|
+
kicad \
|
|
177
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
178
|
+
|
|
179
|
+
# Set working directory
|
|
180
|
+
WORKDIR /app
|
|
181
|
+
|
|
182
|
+
# Copy project files
|
|
183
|
+
COPY . /app/
|
|
184
|
+
|
|
185
|
+
# Install Python dependencies
|
|
186
|
+
RUN pip install -r requirements.txt
|
|
187
|
+
|
|
188
|
+
# Run the server
|
|
189
|
+
CMD ["python", "-m", "kicad_mcp_server"]
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Build and Run
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
# Build image
|
|
196
|
+
docker build -t kicad-mcp-server .
|
|
197
|
+
|
|
198
|
+
# Run container
|
|
199
|
+
docker run -v /path/to/projects:/projects kicad-mcp-server
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## Virtual Environment (Recommended)
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
# Create virtual environment
|
|
206
|
+
python -m venv venv
|
|
207
|
+
|
|
208
|
+
# Activate virtual environment
|
|
209
|
+
# Linux/macOS:
|
|
210
|
+
source venv/bin/activate
|
|
211
|
+
# Windows:
|
|
212
|
+
venv\Scripts\activate
|
|
213
|
+
|
|
214
|
+
# Install dependencies
|
|
215
|
+
pip install -r requirements.txt
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
## Verification
|
|
219
|
+
|
|
220
|
+
### Test Installation
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
# Test MCP server
|
|
224
|
+
python -m kicad_mcp_server
|
|
225
|
+
|
|
226
|
+
# Test KiCad integration
|
|
227
|
+
python -c "import pcbnew; print('KiCad integration: OK')"
|
|
228
|
+
|
|
229
|
+
# Run tests
|
|
230
|
+
pytest tests/ -v
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Check Available Tools
|
|
234
|
+
|
|
235
|
+
```python
|
|
236
|
+
from kicad_mcp_server import server
|
|
237
|
+
|
|
238
|
+
# Get MCP server
|
|
239
|
+
mcp_server = server.create_server()
|
|
240
|
+
|
|
241
|
+
# List available tools
|
|
242
|
+
print("Available tools:")
|
|
243
|
+
for tool in mcp_server._tools.values():
|
|
244
|
+
print(f" - {tool.name}")
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## Troubleshooting
|
|
248
|
+
|
|
249
|
+
### Import Errors
|
|
250
|
+
|
|
251
|
+
**Problem:** `ImportError: No module named 'pcbnew'`
|
|
252
|
+
|
|
253
|
+
**Solution:**
|
|
254
|
+
```bash
|
|
255
|
+
# Ensure KiCad is installed and in PATH
|
|
256
|
+
which kicad-cli
|
|
257
|
+
|
|
258
|
+
# Check Python path
|
|
259
|
+
python -c "import sys; print(sys.path)"
|
|
260
|
+
|
|
261
|
+
# Reinstall with proper path
|
|
262
|
+
export PYTHONPATH=$PYTHONPATH:/path/to/kicad/lib/python3.10/site-packages
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Permission Errors
|
|
266
|
+
|
|
267
|
+
**Problem:** `Permission denied` when accessing KiCad files
|
|
268
|
+
|
|
269
|
+
**Solution:**
|
|
270
|
+
```bash
|
|
271
|
+
# Fix file permissions
|
|
272
|
+
chmod +x /path/to/kicad/bin/kicad-cli
|
|
273
|
+
|
|
274
|
+
# Or use sudo (not recommended for development)
|
|
275
|
+
sudo pip install -r requirements.txt
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### Docker Issues
|
|
279
|
+
|
|
280
|
+
**Problem:** `kicad-cli not found` in Docker
|
|
281
|
+
|
|
282
|
+
**Solution:**
|
|
283
|
+
```dockerfile
|
|
284
|
+
# Install KiCad in Dockerfile
|
|
285
|
+
RUN apt-get update && apt-get install -y kicad
|
|
286
|
+
|
|
287
|
+
# Or mount KiCad from host
|
|
288
|
+
docker run -v /usr/share/kicad:/usr/share/kicad kicad-mcp-server
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
## Updating Installation
|
|
292
|
+
|
|
293
|
+
```bash
|
|
294
|
+
# Update to latest version
|
|
295
|
+
pip install --upgrade kicad-mcp-server
|
|
296
|
+
|
|
297
|
+
# Or from source
|
|
298
|
+
git pull origin main
|
|
299
|
+
pip install -e .
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
## Uninstallation
|
|
303
|
+
|
|
304
|
+
```bash
|
|
305
|
+
# Uninstall package
|
|
306
|
+
pip uninstall kicad-mcp-server
|
|
307
|
+
|
|
308
|
+
# Clean up virtual environment
|
|
309
|
+
deactivate
|
|
310
|
+
rm -rf venv/
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
## Next Steps
|
|
314
|
+
|
|
315
|
+
After installation:
|
|
316
|
+
|
|
317
|
+
1. **Configure Claude Desktop** - See Configuration section above
|
|
318
|
+
2. **Test basic functionality** - Try analyzing a sample schematic
|
|
319
|
+
3. **Read documentation** - Check `docs/` directory for detailed guides
|
|
320
|
+
4. **Run examples** - See `examples/` directory for usage examples
|
|
321
|
+
|
|
322
|
+
## Support
|
|
323
|
+
|
|
324
|
+
- **Documentation**: See `docs/` directory
|
|
325
|
+
- **Issues**: [GitHub Issues](https://github.com/yourusername/kicad-mcp-server/issues)
|
|
326
|
+
- **Discussions**: [GitHub Discussions](https://github.com/yourusername/kicad-mcp-server/discussions)
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
**Last Updated**: 2025-01-09
|
|
331
|
+
**Python Version**: 3.10+
|
|
332
|
+
**KiCad Version**: 9.0+
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
# Pin Analysis Guide
|
|
2
|
+
|
|
3
|
+
Comprehensive guide for using KiCad MCP Server's pin analysis and configuration tools.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Pin analysis tools provide detailed information about pin functions, detect conflicts, and extract pin multiplexing configurations for embedded systems development.
|
|
8
|
+
|
|
9
|
+
## Tools
|
|
10
|
+
|
|
11
|
+
### `analyze_pin_functions(schematic_path: str, reference: str = "") -> str`
|
|
12
|
+
|
|
13
|
+
Analyze pin functions and detect peripheral assignments.
|
|
14
|
+
|
|
15
|
+
**What it does:**
|
|
16
|
+
- Identifies MCU components and their families
|
|
17
|
+
- Infers pin functions from net names (I2C, SPI, UART, GPIO)
|
|
18
|
+
- Provides MCU-specific pin mapping information
|
|
19
|
+
- Shows alternate functions for each pin
|
|
20
|
+
|
|
21
|
+
**Example:**
|
|
22
|
+
```python
|
|
23
|
+
# Analyze all components in schematic
|
|
24
|
+
result = analyze_pin_functions("board.kicad_sch")
|
|
25
|
+
|
|
26
|
+
# Analyze specific MCU
|
|
27
|
+
result = analyze_pin_functions("board.kicad_sch", reference="U1")
|
|
28
|
+
print(result)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Output includes:**
|
|
32
|
+
- Component reference and value
|
|
33
|
+
- MCU family identification
|
|
34
|
+
- Pin names and numbers
|
|
35
|
+
- Net connections
|
|
36
|
+
- Inferred peripheral functions
|
|
37
|
+
- MCU-specific alternate functions
|
|
38
|
+
- Maximum current ratings
|
|
39
|
+
- 5V tolerance information
|
|
40
|
+
|
|
41
|
+
### `detect_pin_conflicts(schematic_path: str) -> str`
|
|
42
|
+
|
|
43
|
+
Detect conflicting electrical connections in your design.
|
|
44
|
+
|
|
45
|
+
**What it detects:**
|
|
46
|
+
- Multiple outputs on same net
|
|
47
|
+
- Power-to-power connections
|
|
48
|
+
- Unconnected input pins
|
|
49
|
+
- Pin type mismatches
|
|
50
|
+
|
|
51
|
+
**Example:**
|
|
52
|
+
```python
|
|
53
|
+
conflicts = detect_pin_conflicts("board.kicad_sch")
|
|
54
|
+
if "❌" in conflicts:
|
|
55
|
+
print("Pin conflicts found:")
|
|
56
|
+
print(conflicts)
|
|
57
|
+
else:
|
|
58
|
+
print("No pin conflicts detected")
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Severity levels:**
|
|
62
|
+
- ❌ **Error**: Must fix before manufacturing (e.g., multiple outputs)
|
|
63
|
+
- ⚠️ **Warning**: Review but may be acceptable (e.g., unconnected inputs)
|
|
64
|
+
|
|
65
|
+
### `extract_pinmux_config(schematic_path: str, component_type: str = "") -> str`
|
|
66
|
+
|
|
67
|
+
Extract pin multiplexing configuration for MCUs.
|
|
68
|
+
|
|
69
|
+
**What it provides:**
|
|
70
|
+
- Pin-to-peripheral mappings
|
|
71
|
+
- Alternate function assignments
|
|
72
|
+
- GPIO configuration details
|
|
73
|
+
- MCU-specific information
|
|
74
|
+
|
|
75
|
+
**Example:**
|
|
76
|
+
```python
|
|
77
|
+
# Extract pinmux for all MCUs
|
|
78
|
+
pinmux = extract_pinmux_config("board.kicad_sch")
|
|
79
|
+
|
|
80
|
+
# Extract for specific MCU family
|
|
81
|
+
stm32_pinmux = extract_pinmux_config("board.kicad_sch", component_type="stm32")
|
|
82
|
+
print(stm32_pinmux)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Output includes:**
|
|
86
|
+
- Pin names and numbers
|
|
87
|
+
- Peripheral assignments (I2C, SPI, UART, etc.)
|
|
88
|
+
- Alternate function options
|
|
89
|
+
- Code generation suggestions
|
|
90
|
+
- MCU-specific configuration details
|
|
91
|
+
|
|
92
|
+
## Supported MCU Families
|
|
93
|
+
|
|
94
|
+
### STM32 (STM32F, STM32H, STM32L)
|
|
95
|
+
- Pin naming: PA0, PB12, etc.
|
|
96
|
+
- Alternate functions: GPIO, ADC, TIM, USART, SPI, I2C, CAN
|
|
97
|
+
- Max current: 25mA per pin
|
|
98
|
+
- 5V tolerance: No (most pins)
|
|
99
|
+
|
|
100
|
+
### ESP32 (ESP32, ESP32-S2, ESP32-S3)
|
|
101
|
+
- Pin naming: IO0, GPIO2, etc.
|
|
102
|
+
- Alternate functions: GPIO, ADC, DAC, I2C, SPI, UART, TOUCH
|
|
103
|
+
- Max current: 40mA per pin
|
|
104
|
+
- 5V tolerance: No
|
|
105
|
+
|
|
106
|
+
### nRF52 (nRF52832, nRF52840)
|
|
107
|
+
- Pin naming: P0.00, P0.01, etc.
|
|
108
|
+
- Alternate functions: GPIO, ADC, SPI, I2C, UART, PWM, QSPI
|
|
109
|
+
- Max current: 5mA per pin (typical)
|
|
110
|
+
- 5V tolerance: No
|
|
111
|
+
|
|
112
|
+
### ATmega (ATmega328P, ATmega2560)
|
|
113
|
+
- Pin naming: PD0, PD1, etc. (port + number)
|
|
114
|
+
- Alternate functions: GPIO, UART, SPI, I2C, ADC
|
|
115
|
+
- Max current: 40mA per pin
|
|
116
|
+
- 5V tolerance: Yes
|
|
117
|
+
|
|
118
|
+
### SAMD (ATSAMD21, ATSAMD51)
|
|
119
|
+
- Pin naming: PA00, PA12, etc.
|
|
120
|
+
- Alternate functions: GPIO, ADC, DAC, I2C, SPI, UART
|
|
121
|
+
- Max current: Varies by series
|
|
122
|
+
- 5V tolerance: No
|
|
123
|
+
|
|
124
|
+
### RP2040
|
|
125
|
+
- Pin naming: GPIO0, GPIO1, etc.
|
|
126
|
+
- Alternate functions: GPIO, SPI, UART, I2C, PWM, ADC
|
|
127
|
+
- Max current: 16mA per pin
|
|
128
|
+
- 5V tolerance: No
|
|
129
|
+
|
|
130
|
+
## Peripheral Function Detection
|
|
131
|
+
|
|
132
|
+
### I2C Detection
|
|
133
|
+
Net names containing:
|
|
134
|
+
- `I2C`, `TWI`
|
|
135
|
+
- `SDA`, `SCL`
|
|
136
|
+
- `I2C_SDA`, `I2C_SCL`
|
|
137
|
+
|
|
138
|
+
### SPI Detection
|
|
139
|
+
Net names containing:
|
|
140
|
+
- `SPI`
|
|
141
|
+
- `MISO`, `MOSI`, `SCK`, `CS`, `NSS`
|
|
142
|
+
- `SPI_MOSI`, `SPI_MISO`
|
|
143
|
+
|
|
144
|
+
### UART Detection
|
|
145
|
+
Net names containing:
|
|
146
|
+
- `UART`, `USART`, `SERIAL`
|
|
147
|
+
- `TX`, `RX`, `CTS`, `RTS`
|
|
148
|
+
- `UART_TX`, `UART_RX`
|
|
149
|
+
|
|
150
|
+
### GPIO Detection
|
|
151
|
+
Net names containing:
|
|
152
|
+
- `GPIO`, `IO`
|
|
153
|
+
- `PA0`, `PB12` (STM32 style)
|
|
154
|
+
- `P0.00` (nRF52 style)
|
|
155
|
+
|
|
156
|
+
## Usage Patterns
|
|
157
|
+
|
|
158
|
+
### Complete Pin Analysis Workflow
|
|
159
|
+
|
|
160
|
+
```python
|
|
161
|
+
# 1. Analyze all pins in schematic
|
|
162
|
+
pin_analysis = analyze_pin_functions("board.kicad_sch")
|
|
163
|
+
print(pin_analysis)
|
|
164
|
+
|
|
165
|
+
# 2. Check for conflicts
|
|
166
|
+
conflicts = detect_pin_conflicts("board.kicad_sch")
|
|
167
|
+
if "❌" in conflicts:
|
|
168
|
+
print("WARNING: Pin conflicts detected!")
|
|
169
|
+
print(conflicts)
|
|
170
|
+
|
|
171
|
+
# 3. Extract pinmux configuration
|
|
172
|
+
pinmux = extract_pinmux_config("board.kicad_sch", "stm32")
|
|
173
|
+
print(pinmux)
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Device Tree Generation Preparation
|
|
177
|
+
|
|
178
|
+
```python
|
|
179
|
+
# Before generating device tree, validate pin configuration
|
|
180
|
+
from kicad_mcp_server.tools.device_tree import validate_pin_configuration
|
|
181
|
+
|
|
182
|
+
validation = validate_pin_configuration("board.kicad_sch")
|
|
183
|
+
if "✅" in validation:
|
|
184
|
+
# Safe to generate device tree
|
|
185
|
+
generate_device_tree("board.kicad_sch", "stm32f4", "board.dts")
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Code Generation Workflow
|
|
189
|
+
|
|
190
|
+
```python
|
|
191
|
+
# Analyze pins for code generation
|
|
192
|
+
pinmux = extract_pinmux_config("board.kicad_sch", "esp32")
|
|
193
|
+
|
|
194
|
+
# Use pinmux info for code generation
|
|
195
|
+
# (This can be integrated into your code generator)
|
|
196
|
+
for pin_config in pinmux:
|
|
197
|
+
if pin_config['peripheral'] == 'I2C':
|
|
198
|
+
# Generate I2C initialization code
|
|
199
|
+
pass
|
|
200
|
+
elif pin_config['peripheral'] == 'SPI':
|
|
201
|
+
# Generate SPI initialization code
|
|
202
|
+
pass
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Common Scenarios
|
|
206
|
+
|
|
207
|
+
### Scenario 1: I2C Bus Analysis
|
|
208
|
+
|
|
209
|
+
```python
|
|
210
|
+
# Analyze I2C pins
|
|
211
|
+
result = analyze_pin_functions("board.kicad_sch")
|
|
212
|
+
|
|
213
|
+
# Look for I2C functionality
|
|
214
|
+
# Output will show:
|
|
215
|
+
# - SDA and SCL pins
|
|
216
|
+
# - I2C bus number
|
|
217
|
+
# - Connected devices
|
|
218
|
+
# - Alternate functions
|
|
219
|
+
|
|
220
|
+
# Extract specific I2C configuration
|
|
221
|
+
i2c_devices = extract_i2c_devices("board.kicad_sch")
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### Scenario 2: SPI Peripheral Setup
|
|
225
|
+
|
|
226
|
+
```python
|
|
227
|
+
# Analyze SPI pins
|
|
228
|
+
result = analyze_pin_functions("board.kicad_sch", reference="U1")
|
|
229
|
+
|
|
230
|
+
# Look for SPI functionality
|
|
231
|
+
# Output will show:
|
|
232
|
+
# - MOSI, MISO, SCK pins
|
|
233
|
+
# - CS pins
|
|
234
|
+
# - SPI bus number
|
|
235
|
+
# - Maximum frequency
|
|
236
|
+
|
|
237
|
+
# Extract SPI configuration
|
|
238
|
+
spi_devices = extract_spi_devices("board.kicad_sch")
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Scenario 3: GPIO Configuration
|
|
242
|
+
|
|
243
|
+
```python
|
|
244
|
+
# Get all GPIO pins
|
|
245
|
+
pinmux = extract_pinmux_config("board.kicad_sch", "stm32")
|
|
246
|
+
|
|
247
|
+
# Generate GPIO initialization code
|
|
248
|
+
for pin in pinmux['gpio_pins']:
|
|
249
|
+
print(f"GPIO: {pin['name']}")
|
|
250
|
+
print(f" Function: {pin.get('function', 'GPIO')}")
|
|
251
|
+
print(f" Max Current: {pin.get('max_current', 0)} mA")
|
|
252
|
+
print(f" 5V Tolerant: {pin.get('is_5v_tolerant', False)}")
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## Conflict Resolution
|
|
256
|
+
|
|
257
|
+
### Multiple Outputs on Same Net
|
|
258
|
+
|
|
259
|
+
```python
|
|
260
|
+
# Detect conflicts
|
|
261
|
+
conflicts = detect_pin_conflicts("board.kicad_sch")
|
|
262
|
+
|
|
263
|
+
# If multiple outputs found:
|
|
264
|
+
# 1. Identify the conflicting pins
|
|
265
|
+
# 2. Remove one output or add isolation
|
|
266
|
+
# 3. Re-run conflict detection
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### Unconnected Input Pins
|
|
270
|
+
|
|
271
|
+
```python
|
|
272
|
+
# Find unconnected inputs
|
|
273
|
+
conflicts = detect_pin_conflicts("board.kicad_sch")
|
|
274
|
+
|
|
275
|
+
# For each unconnected input:
|
|
276
|
+
# - Add pull-up/pull-down resistor if needed
|
|
277
|
+
# - Connect to appropriate signal
|
|
278
|
+
# - Or explicitly mark as unused (if design intent)
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
## Best Practices
|
|
282
|
+
|
|
283
|
+
1. **Name Your Nets**: Use descriptive net names (I2C_SDA, SPI_MOSI)
|
|
284
|
+
2. **Run Pin Analysis Early**: Check pin functions during schematic design
|
|
285
|
+
3. **Document Design Decisions**: Note why certain pins are configured
|
|
286
|
+
4. **Check for Conflicts**: Run conflict detection before PCB layout
|
|
287
|
+
5. **Verify Pinmux**: Ensure pinmux matches your firmware configuration
|
|
288
|
+
|
|
289
|
+
## Troubleshooting
|
|
290
|
+
|
|
291
|
+
**Issue:** Pin functions not detected
|
|
292
|
+
- **Solution:** Use descriptive net names (I2C_SDA, not Net-123)
|
|
293
|
+
- **Solution:** Check component value matches supported patterns
|
|
294
|
+
- **Solution:** Verify component is recognized as MCU
|
|
295
|
+
|
|
296
|
+
**Issue:** MCU family not detected
|
|
297
|
+
- **Solution:** Check component value field (e.g., "STM32F407")
|
|
298
|
+
- **Solution:** Ensure component library is properly configured
|
|
299
|
+
- **Solution:** Try specifying component_type parameter
|
|
300
|
+
|
|
301
|
+
**Issue:** False positive conflicts
|
|
302
|
+
- **Solution:** Review actual circuit design
|
|
303
|
+
- **Solution:** Some warnings may be acceptable (document them)
|
|
304
|
+
- **Solution:** Use pin-specific analysis instead of global detection
|
|
305
|
+
|
|
306
|
+
## Integration with Code Generation
|
|
307
|
+
|
|
308
|
+
```python
|
|
309
|
+
# Complete workflow for embedded development
|
|
310
|
+
from kicad_mcp_server.tools import pin_analysis, device_tree, test_generation
|
|
311
|
+
|
|
312
|
+
# 1. Analyze pins
|
|
313
|
+
pin_info = pin_analysis.analyze_pin_functions("board.kicad_sch")
|
|
314
|
+
pinmux = pin_analysis.extract_pinmux_config("board.kicad_sch", "stm32")
|
|
315
|
+
|
|
316
|
+
# 2. Check for conflicts
|
|
317
|
+
conflicts = pin_analysis.detect_pin_conflicts("board.kicad_sch")
|
|
318
|
+
assert "✅" in conflicts, "Fix pin conflicts first"
|
|
319
|
+
|
|
320
|
+
# 3. Generate device tree
|
|
321
|
+
device_tree.generate_device_tree("board.kicad_sch", "stm32f4", "board.dts")
|
|
322
|
+
|
|
323
|
+
# 4. Generate tests
|
|
324
|
+
test_generation.generate_pinmux_test("board.kicad_sch")
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
## Resources
|
|
328
|
+
|
|
329
|
+
- [STM32 Pin Multiplexing](https://www.st.com/resource/en/datasheet/)
|
|
330
|
+
- [ESP32 Pin Reference](https://docs.espressif.com/projects/esp-idf/en/latest/)
|
|
331
|
+
- [nRF52 Reference Manual](https://infocenter.nordicsemi.com/)
|
|
332
|
+
- [Device Tree Specification](https://www.devicetree.org/)
|