Implement pyOCD SWD/JTAG programming support with dynamic target detection#36
Draft
andrewleech wants to merge 1 commit intoJosverl:mainfrom
Draft
Implement pyOCD SWD/JTAG programming support with dynamic target detection#36andrewleech wants to merge 1 commit intoJosverl:mainfrom
andrewleech wants to merge 1 commit intoJosverl:mainfrom
Conversation
Author
|
Hi @Josverl I'm not sure what your appetite is for large changes or if this a direction you like, but I wanted to use it so claude build it :-) Also, I haven't code reviewed this at all yet, so feel free to not look at it at all either until I do so and un-draft the PR! |
Draft
Owner
|
If you build it, you test it😜 I have found the challenge that in the HIL tests needed. I'm not sure if I have the equipment to test it. Other than that, if others can benefit from it, I think it is useful |
…ction ## Major Features Added ### pyOCD Integration - Add SWD/JTAG programming as alternative to serial bootloader methods - Support for debug probe discovery and management - Automated target chip selection using dynamic detection - Optional pyOCD dependency via `pyocd` extra ### Dynamic Target Detection - Replace hardcoded target mappings with dynamic API-based detection - Parse MCU info from `sys.implementation._machine` strings - Fuzzy matching algorithm for target selection - Direct probe-based target detection with fallback to fuzzy matching - Extensible architecture for future OpenOCD/J-Link support ### CLI Integration - Add `--method pyocd` option for explicit SWD/JTAG programming - Add `--probe-id` option for specific debug probe selection - Maintain existing serial bootloader behavior as default - Clean integration with existing flash method selection ### Architecture Improvements - Abstract debug probe layer for extensibility - Target detector abstraction with registry system - Proper error handling and fallback mechanisms - Performance optimized with caching and lazy loading ## Technical Details ### Files Added - `mpflash/flash/debug_probe.py` - Debug probe abstraction layer - `mpflash/flash/pyocd_probe.py` - pyOCD-specific probe implementation - `mpflash/flash/pyocd_flash.py` - pyOCD flash programming interface - `mpflash/flash/pyocd_targets.py` - Target detection wrapper functions - `mpflash/flash/dynamic_targets.py` - Dynamic target detection engine - `mpflash/cli_pyocd.py` - pyOCD-specific CLI commands (future) ### Files Modified - `mpflash/common.py` - Add FlashMethod enum for different programming methods - `mpflash/flash/__init__.py` - Integrate pyOCD into flash method selection - `mpflash/cli_flash.py` - Add CLI options for pyOCD method and probe selection - `pyproject.toml` - Add optional pyOCD dependency - `mpflash/cli_download.py` - Fix unused pytest import ### Key Benefits - **No hardware requirements change** - existing serial methods remain default - **Automated target selection** - no manual target configuration needed - **Extensible design** - easy to add OpenOCD, J-Link, etc. in future - **Performance optimized** - direct API calls instead of subprocess shells - **Maintainable** - eliminates hardcoded target mappings ## Usage ```bash # Existing behavior unchanged (serial bootloader methods) mpflash flash # Explicit pyOCD SWD/JTAG programming mpflash flash --method pyocd # Specific debug probe selection mpflash flash --method pyocd --probe-id stlink # Install with pyOCD support uv sync --extra pyocd ``` ## Breaking Changes None - all existing functionality preserved with same default behavior.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Major Features Added
pyOCD Integration
pyocdextraDynamic Target Detection
sys.implementation._machinestringsCLI Integration
--method pyocdoption for explicit SWD/JTAG programming--probeoption for specific debug probe selectionArchitecture Improvements
Technical Details
Files Added
mpflash/flash/debug_probe.py- Debug probe abstraction layermpflash/flash/pyocd_probe.py- pyOCD-specific probe implementationmpflash/flash/pyocd_flash.py- pyOCD flash programming interfacempflash/flash/pyocd_targets.py- Target detection wrapper functionsmpflash/flash/dynamic_targets.py- Dynamic target detection enginempflash/cli_pyocd.py- pyOCD-specific CLI commands (future)Files Modified
mpflash/common.py- Add FlashMethod enum for different programming methodsmpflash/flash/__init__.py- Integrate pyOCD into flash method selectionmpflash/cli_flash.py- Add CLI options for pyOCD method and probe selectionpyproject.toml- Add optional pyOCD dependencympflash/cli_download.py- Fix unused pytest importKey Benefits
Usage
Breaking Changes
None - all existing functionality preserved with same default behavior.