This commit is contained in:
Nav
2022-12-08 21:18:18 +00:00
parent 831021eb36
commit 304e2ab7c6
5 changed files with 43 additions and 41 deletions

View File

@@ -80,7 +80,7 @@ namespace Bloom::DebugServer::Gdb::AvrGdb::CommandPackets
* We include register and EEPROM memory in our RAM section. This allows GDB to access registers and EEPROM
* data via memory read/write packets.
*
* Like SRAM, GDB applies an offset to EEPROM addresses. We account for that offset in our ramSize.
* Like SRAM, GDB applies an offset to EEPROM addresses. We account for that offset in our ramSectionSize.
*
* The SRAM and EEPROM offsets allow for a maximum of 65KB of SRAM. But that must also accommodate the
* register addresses, which can vary in size.

View File

@@ -13,7 +13,9 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
constexpr Avr8EdbgParameter() = default;
constexpr Avr8EdbgParameter(unsigned char context, unsigned char id)
: context(context), id(id) {};
: context(context)
, id(id)
{};
};
struct Avr8EdbgParameters
@@ -129,7 +131,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
EEPROM = 0x22,
/**
* The EEPROM_ATOMIC memory type can be used to write to EEPROM memory with automatic pag erasing.
* The EEPROM_ATOMIC memory type can be used to write to EEPROM memory with automatic page erasing.
*
* It's only available for XMEGA and UPDI config variants.
*
@@ -152,7 +154,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
* The APPL_FLASH memory type can be used to read/write to the application section of the flash memory on the
* target.
*
* Only available with the XMEGA (PDI) and UPDI (PDI_1W) config variants.
* Only available with the XMEGA and UPDI config variants.
*
* When in debugging mode, only read access is permitted. Programming mode will need to be enabled before
* any attempts of writing data.

View File

@@ -13,7 +13,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames
: Avr8GenericCommandFrame()
{
/*
* The erase memory command consists of 7 bytes:
* The "Erase memory" command consists of 7 bytes:
* 1. Command ID (0x20)
* 2. Version (0x00)
* 3. Erase mode (see Avr8EraseMemoryMode enum)

View File

@@ -14,7 +14,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames
: Avr8GenericCommandFrame()
{
/*
* The write memory command consists of 12 bytes + the buffer size:
* The "Write memory" command consists of 12 bytes + the buffer size:
* 1. Command ID (0x23)
* 2. Version (0x00)
* 3. Memory type (Avr8MemoryType)
@@ -32,7 +32,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames
this->payload[5] = static_cast<unsigned char>(address >> 16);
this->payload[6] = static_cast<unsigned char>(address >> 24);
auto bytesToWrite = static_cast<std::uint32_t>(buffer.size());
const auto bytesToWrite = static_cast<std::uint32_t>(buffer.size());
this->payload[7] = static_cast<unsigned char>(bytesToWrite);
this->payload[8] = static_cast<unsigned char>(bytesToWrite >> 8);
this->payload[9] = static_cast<unsigned char>(bytesToWrite >> 16);

View File

@@ -938,7 +938,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
void EdbgAvr8Interface::setDebugWireAndJtagParameters() {
if (this->targetParameters.flashPageSize.has_value()) {
Logger::debug("Setting DEVICE_FLASH_PAGE_SIZE AVR8 parameter");
Logger::debug("Setting FLASH_PAGE_SIZE AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_FLASH_PAGE_SIZE,
this->targetParameters.flashPageSize.value()
@@ -946,7 +946,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.flashSize.has_value()) {
Logger::debug("Setting DEVICE_FLASH_SIZE AVR8 parameter");
Logger::debug("Setting FLASH_SIZE AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_FLASH_SIZE,
this->targetParameters.flashSize.value()
@@ -954,7 +954,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.flashStartAddress.has_value()) {
Logger::debug("Setting DEVICE_FLASH_BASE AVR8 parameter");
Logger::debug("Setting FLASH_BASE AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_FLASH_BASE,
this->targetParameters.flashStartAddress.value()
@@ -962,7 +962,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.ramStartAddress.has_value()) {
Logger::debug("Setting DEVICE_SRAM_START AVR8 parameter");
Logger::debug("Setting SRAM_START AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_SRAM_START,
this->targetParameters.ramStartAddress.value()
@@ -970,7 +970,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.eepromSize.has_value()) {
Logger::debug("Setting DEVICE_EEPROM_SIZE AVR8 parameter");
Logger::debug("Setting EEPROM_SIZE AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_EEPROM_SIZE,
this->targetParameters.eepromSize.value()
@@ -978,7 +978,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.eepromPageSize.has_value()) {
Logger::debug("Setting DEVICE_EEPROM_PAGE_SIZE AVR8 parameter");
Logger::debug("Setting EEPROM_PAGE_SIZE AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_EEPROM_PAGE_SIZE,
this->targetParameters.eepromPageSize.value()
@@ -986,7 +986,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.ocdRevision.has_value()) {
Logger::debug("Setting DEVICE_OCD_REVISION AVR8 parameter");
Logger::debug("Setting OCD_REVISION AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_OCD_REVISION,
this->targetParameters.ocdRevision.value()
@@ -994,7 +994,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.ocdDataRegister.has_value()) {
Logger::debug("Setting DEVICE_OCD_DATA_REGISTER AVR8 parameter");
Logger::debug("Setting OCD_DATA_REGISTER AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_OCD_DATA_REGISTER,
this->targetParameters.ocdDataRegister.value()
@@ -1002,7 +1002,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.spmcRegisterStartAddress.has_value()) {
Logger::debug("Setting DEVICE_SPMCR_REGISTER AVR8 parameter");
Logger::debug("Setting SPMCR_REGISTER AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_SPMCR_REGISTER,
this->targetParameters.spmcRegisterStartAddress.value()
@@ -1010,7 +1010,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.bootSectionStartAddress.has_value()) {
Logger::debug("Setting DEVICE_BOOT_START_ADDR AVR8 parameter");
Logger::debug("Setting BOOT_START_ADDR AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_BOOT_START_ADDR,
this->targetParameters.bootSectionStartAddress.value()
@@ -1035,7 +1035,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
auto mappedIoStartAddress = this->targetParameters.mappedIoSegmentStartAddress.value_or(0);
if (this->targetParameters.osccalAddress.has_value()) {
Logger::debug("Setting DEVICE_OSCCAL_ADDR AVR8 parameter");
Logger::debug("Setting OSCCAL_ADDR AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_OSCCAL_ADDR,
static_cast<std::uint8_t>(
@@ -1045,7 +1045,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.eepromAddressRegisterLow.has_value()) {
Logger::debug("Setting DEVICE_EEARL_ADDR AVR8 parameter");
Logger::debug("Setting EEARL_ADDR AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_EEARL_ADDR,
static_cast<std::uint8_t>(
@@ -1055,7 +1055,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.eepromAddressRegisterHigh.has_value()) {
Logger::debug("Setting DEVICE_EEARH_ADDR AVR8 parameter");
Logger::debug("Setting EEARH_ADDR AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_EEARH_ADDR,
static_cast<std::uint8_t>(
@@ -1065,7 +1065,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.eepromControlRegisterAddress.has_value()) {
Logger::debug("Setting DEVICE_EECR_ADDR AVR8 parameter");
Logger::debug("Setting EECR_ADDR AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_EECR_ADDR,
static_cast<std::uint8_t>(
@@ -1075,7 +1075,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.eepromDataRegisterAddress.has_value()) {
Logger::debug("Setting DEVICE_EEDR_ADDR AVR8 parameter");
Logger::debug("Setting EEDR_ADDR AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_EEDR_ADDR,
static_cast<std::uint8_t>(
@@ -1260,13 +1260,13 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
* for more).
*/
const auto programMemBaseAddress = this->targetParameters.programMemoryUpdiStartAddress.value();
Logger::debug("Setting DEVICE_UPDI_PROGMEM_BASE_ADDR AVR8 parameter");
Logger::debug("Setting UPDI_PROGMEM_BASE_ADDR AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_UPDI_PROGMEM_BASE_ADDR,
static_cast<std::uint16_t>(programMemBaseAddress)
);
Logger::debug("Setting DEVICE_UPDI_PROGMEM_BASE_ADDR_MSB AVR8 parameter");
Logger::debug("Setting UPDI_PROGMEM_BASE_ADDR_MSB AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_UPDI_PROGMEM_BASE_ADDR_MSB,
static_cast<std::uint8_t>(programMemBaseAddress >> 16)
@@ -1280,13 +1280,13 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
* The same applies here, for the flash page size field (DEVICE_UPDI_FLASH_PAGE_SIZE).
*/
auto flashPageSize = this->targetParameters.flashPageSize.value();
Logger::debug("Setting DEVICE_UPDI_FLASH_PAGE_SIZE AVR8 parameter");
Logger::debug("Setting UPDI_FLASH_PAGE_SIZE AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_UPDI_FLASH_PAGE_SIZE,
static_cast<std::uint8_t>(flashPageSize)
);
Logger::debug("Setting DEVICE_UPDI_FLASH_PAGE_SIZE_MSB AVR8 parameter");
Logger::debug("Setting UPDI_FLASH_PAGE_SIZE_MSB AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_UPDI_FLASH_PAGE_SIZE_MSB,
static_cast<std::uint8_t>(flashPageSize >> 8)
@@ -1294,7 +1294,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.eepromPageSize.has_value()) {
Logger::debug("Setting DEVICE_UPDI_EEPROM_PAGE_SIZE AVR8 parameter");
Logger::debug("Setting UPDI_EEPROM_PAGE_SIZE AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_UPDI_EEPROM_PAGE_SIZE,
this->targetParameters.eepromPageSize.value()
@@ -1302,7 +1302,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.nvmModuleBaseAddress.has_value()) {
Logger::debug("Setting DEVICE_UPDI_NVMCTRL_ADDR AVR8 parameter");
Logger::debug("Setting UPDI_NVMCTRL_ADDR AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_UPDI_NVMCTRL_ADDR,
this->targetParameters.nvmModuleBaseAddress.value()
@@ -1310,7 +1310,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.ocdModuleAddress.has_value()) {
Logger::debug("Setting DEVICE_UPDI_OCD_ADDR AVR8 parameter");
Logger::debug("Setting UPDI_OCD_ADDR AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_UPDI_OCD_ADDR,
this->targetParameters.ocdModuleAddress.value()
@@ -1318,7 +1318,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.flashSize.has_value()) {
Logger::debug("Setting DEVICE_UPDI_FLASH_SIZE AVR8 parameter");
Logger::debug("Setting UPDI_FLASH_SIZE AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_UPDI_FLASH_SIZE,
this->targetParameters.flashSize.value()
@@ -1326,7 +1326,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.eepromSize.has_value()) {
Logger::debug("Setting DEVICE_UPDI_EEPROM_SIZE AVR8 parameter");
Logger::debug("Setting UPDI_EEPROM_SIZE AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_UPDI_EEPROM_SIZE,
this->targetParameters.eepromSize.value()
@@ -1334,7 +1334,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.eepromStartAddress.has_value()) {
Logger::debug("Setting DEVICE_UPDI_EEPROM_BASE_ADDR AVR8 parameter");
Logger::debug("Setting UPDI_EEPROM_BASE_ADDR AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_UPDI_EEPROM_BASE_ADDR,
this->targetParameters.eepromStartAddress.value()
@@ -1342,7 +1342,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.signatureSegmentStartAddress.has_value()) {
Logger::debug("Setting DEVICE_UPDI_SIG_BASE_ADDR AVR8 parameter");
Logger::debug("Setting UPDI_SIG_BASE_ADDR AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_UPDI_SIG_BASE_ADDR,
this->targetParameters.signatureSegmentStartAddress.value()
@@ -1350,7 +1350,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.fuseSegmentStartAddress.has_value()) {
Logger::debug("Setting DEVICE_UPDI_FUSE_BASE_ADDR AVR8 parameter");
Logger::debug("Setting UPDI_FUSE_BASE_ADDR AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_UPDI_FUSE_BASE_ADDR,
this->targetParameters.fuseSegmentStartAddress.value()
@@ -1358,7 +1358,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.fuseSegmentSize.has_value()) {
Logger::debug("Setting DEVICE_UPDI_FUSE_SIZE AVR8 parameter");
Logger::debug("Setting UPDI_FUSE_SIZE AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_UPDI_FUSE_SIZE,
this->targetParameters.fuseSegmentSize.value()
@@ -1366,7 +1366,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
}
if (this->targetParameters.lockbitsSegmentStartAddress.has_value()) {
Logger::debug("Setting DEVICE_UPDI_LOCK_BASE_ADDR AVR8 parameter");
Logger::debug("Setting UPDI_LOCK_BASE_ADDR AVR8 device parameter");
this->setParameter(
Avr8EdbgParameters::DEVICE_UPDI_LOCK_BASE_ADDR,
this->targetParameters.lockbitsSegmentStartAddress.value()
@@ -1685,9 +1685,9 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
* that isn't actually the memory data (like the command ID, version bytes, etc). I could have sought the
* actual value but who has the time. It won't exceed 20 bytes. Bite me.
*/
auto singlePacketSize = static_cast<std::uint32_t>(this->edbgInterface->getUsbHidInputReportSize() - 20);
auto totalResponsePackets = std::ceil(static_cast<float>(bytes) / static_cast<float>(singlePacketSize));
auto totalReadsRequired = std::ceil(static_cast<float>(totalResponsePackets) / 2);
const auto singlePacketSize = static_cast<std::uint32_t>(this->edbgInterface->getUsbHidInputReportSize() - 20);
const auto totalResponsePackets = std::ceil(static_cast<float>(bytes) / static_cast<float>(singlePacketSize));
const auto totalReadsRequired = std::ceil(static_cast<float>(totalResponsePackets) / 2);
if (totalResponsePackets > 2) {
/*
@@ -1697,7 +1697,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
auto output = TargetMemoryBuffer();
for (float i = 1; i <= totalReadsRequired; i++) {
auto bytesToRead = static_cast<TargetMemorySize>(
const auto bytesToRead = static_cast<TargetMemorySize>(
(bytes - output.size()) > (singlePacketSize * 2)
? (singlePacketSize * 2) : bytes - output.size()
);
@@ -1707,7 +1707,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
bytesToRead,
excludedAddresses
);
output.insert(output.end(), data.begin(), data.end());
std::move(data.begin(), data.end(), std::back_inserter(output));
}
return output;