Класс для работы с протоколом STK500v1 по последовательному порту
Подробнее...
#include <stk500v1.h>
|
| | STK500v1 (serialib &serialPort) |
| | ~STK500v1 ()=default |
| bool | resetMCU () |
| bool | sync () |
| bool | getSignature (std::vector< uint8_t > &sig) |
| bool | loadAddress (uint32_t byteAddress, bool isEeprom=false) |
| bool | readPage (uint16_t size, std::vector< uint8_t > &buffer, bool isEeprom=false) |
| bool | progPage (uint16_t size, const std::vector< uint8_t > &data, bool isEeprom=false) |
| bool | verifyMemory (const std::vector< uint8_t > &expected, uint32_t size, bool isEeprom=false) |
| bool | leaveProgMode () |
|
| static bool | parseHex (const std::string &filename, std::vector< uint8_t > &firmware, uint16_t pageSize) |
| static bool | saveAsHex (const std::string &filename, const std::vector< uint8_t > &data) |
| static bool | saveEepromAsHex (const std::string &filename, const std::vector< uint8_t > &data) |
Класс для работы с протоколом STK500v1 по последовательному порту
- Автор
- Влад Рябчевский
- Версия
- 1.0.0
- Дата
- 22.08.2026
Класс, реализующий работу по протоколу STK500v1 Для низкоуровневого доступа к последовательному порту используется передаваемый объект serialib.
Процесс чтения прошивки
Процесс записи прошивки
◆ STK500v1()
| STK500v1::STK500v1 |
( |
serialib & | serialPort | ) |
|
|
explicit |
Конструктор
- Аргументы
-
| [in] | serialPort | ссылка на открытый объект последовательного порта serialib |
◆ ~STK500v1()
◆ getSignature()
| bool STK500v1::getSignature |
( |
std::vector< uint8_t > & | sig | ) |
|
Чтение сигнатуры устройства (команда STK_READ_SIGN). Ожидается ответ: IN_SYNC + 3 байта сигнатуры + OK.
- Аргументы
-
| [out] | sig | вектор из 3 байт сигнатуры (например, 1E 93 08) |
- Возвращает
- true если сигнатура успешно прочитана
◆ leaveProgMode()
| bool STK500v1::leaveProgMode |
( |
| ) |
|
Выход из режима программирования (команда STK_LEAVE_PROGMODE) Результат выполнения команды не проверяется, т.к. команда не критична для целостности данных.
- Возвращает
- true
◆ loadAddress()
| bool STK500v1::loadAddress |
( |
uint32_t | byteAddress, |
|
|
bool | isEeprom = false ) |
Установка адреса в памяти программ (команда STK_LOAD_ADDRESS). Адрес передаётся в словах (значение byteAddress делится на 2).
- Аргументы
-
| [in] | byteAddress | байтовый адрес в памяти программ |
| [in] | isEeprom | режим загрузки адреса eeprom или flash. По умолчанию - flash |
- Возвращает
- true если адрес успешно установлен
◆ parseHex()
| bool STK500v1::parseHex |
( |
const std::string & | filename, |
|
|
std::vector< uint8_t > & | firmware, |
|
|
uint16_t | pageSize ) |
|
static |
Разбор файла формата HEX и преобразование в бинарный образ Поддерживаются записи типа 00 (данные), 01 (конец файла) и 04 (расширенный линейный адрес).
- Аргументы
-
| [in] | filename | путь к входному HEX-файлу |
| [out] | firmware | бинарный образ, дополненный до границы страницы |
| [in] | pageSize | размер страницы для выравнивания |
- Возвращает
- true если файл успешно разобран и содержит данные
< Базовый адрес для типов 02/04
◆ progPage()
| bool STK500v1::progPage |
( |
uint16_t | size, |
|
|
const std::vector< uint8_t > & | data, |
|
|
bool | isEeprom = false ) |
Запись страницы памяти программ (команда STK_PROG_PAGE) Перед вызовом необходимо установить адрес через loadAddress().
- Аргументы
-
| [in] | size | количество байт в странице |
| [in] | data | ссылка на данные для записи |
| [in] | isEeprom | true для EEPROM |
- Возвращает
- true если страница успешно записана
◆ readPage()
| bool STK500v1::readPage |
( |
uint16_t | size, |
|
|
std::vector< uint8_t > & | buffer, |
|
|
bool | isEeprom = false ) |
Установка адреса в памяти программ (команда STK_LOAD_ADDRESS). Адрес передаётся в словах (значение byteAddress делится на 2).
- Аргументы
-
| [in] | size | колличество байт для чтения |
| [in] | buffer | ссылка на вектор для сохранения информации |
| [in] | isEeprom | режим чтения данных eeprom или flash. По умолчанию - flash |
- Возвращает
- true если адрес успешно установлен
◆ resetMCU()
| bool STK500v1::resetMCU |
( |
| ) |
|
Выполнение аппаратного сброса микроконтроллера путём переключения сигнала DTR последовательного порта
- Возвращает
- true если сброс выполнен успешно
◆ saveAsHex()
| bool STK500v1::saveAsHex |
( |
const std::string & | filename, |
|
|
const std::vector< uint8_t > & | data ) |
|
static |
Сохранение бинарного образа в файл формата Intel HEX
◆ saveEepromAsHex()
| bool STK500v1::saveEepromAsHex |
( |
const std::string & | filename, |
|
|
const std::vector< uint8_t > & | data ) |
|
static |
Сохранение бинарного образа EEPROM в файл формата Intel HEX
◆ sync()
Синхронизация с загрузчиком командой STK_GET_SYNC. Должна вызываться после сброса микроконтроллера перед любыми другими операциями протокола.
- Возвращает
- true если получен ожидаемый ответ (IN_SYNC + OK)
◆ verifyMemory()
| bool STK500v1::verifyMemory |
( |
const std::vector< uint8_t > & | expected, |
|
|
uint32_t | size, |
|
|
bool | isEeprom = false ) |
Верификация памяти: чтение и сравнение с эталоном
- Аргументы
-
| [in] | expected | ожидаемое содержимое |
| [in] | size | размер для проверки в байтах |
| [in] | isEeprom | true для EEPROM |
- Возвращает
- true если содержимое совпадает
Объявления и описания членов классов находятся в файлах: