Added EEPROM_PAGE EDBG memory type and aligned both EEPROM_PAGE and EEPROM_ATOMIC memory types
This commit is contained in:
@@ -139,6 +139,12 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
|
|||||||
*/
|
*/
|
||||||
EEPROM_ATOMIC = 0xC4,
|
EEPROM_ATOMIC = 0xC4,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The EEPROM_PAGE memory type can be used to read and write to EEPROM whilst the target is in
|
||||||
|
* programming mode.
|
||||||
|
*/
|
||||||
|
EEPROM_PAGE = 0xB1,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The FLASH_PAGE memory type can be used to read and write full flash pages on the target.
|
* The FLASH_PAGE memory type can be used to read and write full flash pages on the target.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -624,10 +624,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
|
|||||||
TargetMemorySize bytes,
|
TargetMemorySize bytes,
|
||||||
const std::set<Targets::TargetMemoryAddressRange>& excludedAddressRanges
|
const std::set<Targets::TargetMemoryAddressRange>& excludedAddressRanges
|
||||||
) {
|
) {
|
||||||
if (
|
if (this->programmingModeEnabled && memoryType == TargetMemoryType::RAM) {
|
||||||
this->programmingModeEnabled
|
|
||||||
&& (memoryType == TargetMemoryType::RAM || memoryType == TargetMemoryType::EEPROM)
|
|
||||||
) {
|
|
||||||
throw Exception("Cannot access RAM or EEPROM when programming mode is enabled");
|
throw Exception("Cannot access RAM or EEPROM when programming mode is enabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -666,7 +663,10 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TargetMemoryType::EEPROM: {
|
case TargetMemoryType::EEPROM: {
|
||||||
avr8MemoryType = Avr8MemoryType::EEPROM;
|
// For JTAG targets, we must use the EEPROM_PAGE memory type when in programming mode.
|
||||||
|
avr8MemoryType = (this->configVariant == Avr8ConfigVariant::MEGAJTAG && this->programmingModeEnabled)
|
||||||
|
? Avr8MemoryType::EEPROM_PAGE
|
||||||
|
: Avr8MemoryType::EEPROM;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
break;
|
break;
|
||||||
@@ -1535,6 +1535,8 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
|
|||||||
|| memoryType == Avr8MemoryType::SPM
|
|| memoryType == Avr8MemoryType::SPM
|
||||||
|| memoryType == Avr8MemoryType::APPL_FLASH
|
|| memoryType == Avr8MemoryType::APPL_FLASH
|
||||||
|| memoryType == Avr8MemoryType::BOOT_FLASH
|
|| memoryType == Avr8MemoryType::BOOT_FLASH
|
||||||
|
|| memoryType == Avr8MemoryType::EEPROM_ATOMIC
|
||||||
|
|| memoryType == Avr8MemoryType::EEPROM_PAGE
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1553,6 +1555,13 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
|
|||||||
alignTo = this->targetParameters.flashPageSize.value();
|
alignTo = this->targetParameters.flashPageSize.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
memoryType == Avr8MemoryType::EEPROM_ATOMIC
|
||||||
|
|| memoryType == Avr8MemoryType::EEPROM_PAGE
|
||||||
|
) {
|
||||||
|
alignTo = this->targetParameters.eepromPageSize.value();
|
||||||
|
}
|
||||||
|
|
||||||
if (this->maximumMemoryAccessSizePerRequest.has_value() && alignTo > this->maximumMemoryAccessSizePerRequest) {
|
if (this->maximumMemoryAccessSizePerRequest.has_value() && alignTo > this->maximumMemoryAccessSizePerRequest) {
|
||||||
throw Exception(
|
throw Exception(
|
||||||
"Cannot align memory address - alignment size exceeds the maximum memory access size per request."
|
"Cannot align memory address - alignment size exceeds the maximum memory access size per request."
|
||||||
@@ -1583,6 +1592,13 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
|
|||||||
alignTo = this->targetParameters.flashPageSize.value();
|
alignTo = this->targetParameters.flashPageSize.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
memoryType == Avr8MemoryType::EEPROM_ATOMIC
|
||||||
|
|| memoryType == Avr8MemoryType::EEPROM_PAGE
|
||||||
|
) {
|
||||||
|
alignTo = this->targetParameters.eepromPageSize.value();
|
||||||
|
}
|
||||||
|
|
||||||
if ((bytes % alignTo) != 0) {
|
if ((bytes % alignTo) != 0) {
|
||||||
return static_cast<TargetMemorySize>(std::ceil(
|
return static_cast<TargetMemorySize>(std::ceil(
|
||||||
static_cast<float>(bytes) / static_cast<float>(alignTo)
|
static_cast<float>(bytes) / static_cast<float>(alignTo)
|
||||||
@@ -1603,8 +1619,11 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
|
|||||||
return this->targetParameters.flashPageSize.value();
|
return this->targetParameters.flashPageSize.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (memoryType == Avr8MemoryType::EEPROM_ATOMIC) {
|
if (
|
||||||
// This EEPROM memory type requires single page access.
|
memoryType == Avr8MemoryType::EEPROM_ATOMIC
|
||||||
|
|| memoryType == Avr8MemoryType::EEPROM_PAGE
|
||||||
|
) {
|
||||||
|
// These EEPROM memory types requires single page access.
|
||||||
return this->targetParameters.eepromPageSize.value();
|
return this->targetParameters.eepromPageSize.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user