EasyMCU 1.0.0
Утилита для прошивки МК К1946ВМ014 по протоколу STK500v1
Загрузка...
Поиск...
Не найдено
Класс STK500v1

Класс для работы с протоколом 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()

STK500v1::~STK500v1 ( )
default

Деструктор, очевидно

Методы

◆ 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]isEepromtrue для 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()

bool STK500v1::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]isEepromtrue для EEPROM
Возвращает
true если содержимое совпадает

Объявления и описания членов классов находятся в файлах: