diff --git a/src/DebugToolDrivers/Microchip/MplabPickit4/MplabPickit4.cpp b/src/DebugToolDrivers/Microchip/MplabPickit4/MplabPickit4.cpp index e57e97d8..3a2a5f5f 100644 --- a/src/DebugToolDrivers/Microchip/MplabPickit4/MplabPickit4.cpp +++ b/src/DebugToolDrivers/Microchip/MplabPickit4/MplabPickit4.cpp @@ -18,6 +18,7 @@ namespace Bloom::DebugToolDrivers try { EdbgDevice::init(); + this->edbgAvr8Interface->setReactivateJtagTargetPostProgrammingMode(true); } catch (const DeviceNotFound& exception) { /* diff --git a/src/DebugToolDrivers/Microchip/MplabSnap/MplabSnap.cpp b/src/DebugToolDrivers/Microchip/MplabSnap/MplabSnap.cpp index 3a0e747f..7253cbcc 100644 --- a/src/DebugToolDrivers/Microchip/MplabSnap/MplabSnap.cpp +++ b/src/DebugToolDrivers/Microchip/MplabSnap/MplabSnap.cpp @@ -18,6 +18,7 @@ namespace Bloom::DebugToolDrivers try { EdbgDevice::init(); + this->edbgAvr8Interface->setReactivateJtagTargetPostProgrammingMode(true); } catch (const DeviceNotFound& exception) { /* diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/EdbgAvr8Interface.cpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/EdbgAvr8Interface.cpp index 708c4dc4..44df1ef2 100644 --- a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/EdbgAvr8Interface.cpp +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/EdbgAvr8Interface.cpp @@ -898,6 +898,12 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr } this->programmingModeEnabled = false; + + if (this->configVariant == Avr8ConfigVariant::MEGAJTAG && this->reactivateJtagTargetPostProgrammingMode) { + this->deactivatePhysical(); + this->targetAttached = false; + this->activate(); + } } std::map> diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/EdbgAvr8Interface.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/EdbgAvr8Interface.hpp index 40a38aeb..25d45552 100644 --- a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/EdbgAvr8Interface.hpp +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/EdbgAvr8Interface.hpp @@ -74,6 +74,10 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr this->maximumMemoryAccessSizePerRequest = maximumSize; } + void setReactivateJtagTargetPostProgrammingMode(bool reactivateJtagTargetPostProgrammingMode) { + this->reactivateJtagTargetPostProgrammingMode = reactivateJtagTargetPostProgrammingMode; + } + /* * The public methods below implement the interface defined by the Avr8Interface class. * See the comments in that class for more info on the expected behaviour of each method. @@ -328,6 +332,8 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr */ std::optional maximumMemoryAccessSizePerRequest; + bool reactivateJtagTargetPostProgrammingMode = false; + /** * We keep record of the current target state for caching purposes. We'll only refresh the target state if the * target is running. If it has already stopped, then we assume it cannot transition to a running state without