Atmega2560 (arduino) обновление прошивки, запись на flash
25 000 руб. за проект
•
безналичный расчёт, электронные деньги
Я имею на входе: Arduino IDE и atmega2560 и 256K flash на борту
апдейт сейчас происходит вот так:
avrdude -p atmega2560 -P /dev/ttyX -D -c stk500 -U flash:w:tx5.ino.with_bootloader.mega.hex
мне необходимо уйти полностью от avrdude и для этого я хочу сделать следующее:
в распоряжении у атмеги есть 256K флеша, где-то там в хвостике записан bootloader, который взаимодействует с avrdude и потом передает управление по 0 адресу (как я себе это представляю)
я хочу разбить эту память условно на две части (128K + 128K), во время работы МК прошивка загружается во вторую область (как попадет прошивка в МК не так важно) маленькими частями, после того как прошивка (все части) полностью загружена … проверяется контрольная сумма, и если она сошлась, то код прошивка из второй области копируется в первую (по нулевому адресу грубо говоря), вызывается перезапуск
для этого надо реализовать две функции
int updstore (size_t offset, size_t s, void *data);
-первый параметр, это смещение относительно начала прошивки (второй области), например 0 или 256 (байт)
-второй это размер данных, указатель на которые содержится в третьем параметре
-нулевой код возврата при успехе и 1 при ошибке
int updflash (size_t s, uint32_t crc32);
-аналогично размер (уже всей прошивки)
-и контрольная сумма в crc32
-завершается перезапуском при успехе, 1 при ошибке crc, 2 – любая другая ошибка
Я не силен в области написания прошивок для МК, но предполагаю, что код обновления «переноса» должен находится в области flash, которую не будут перезаписывать. Как этот код запишется во flash и которому будет передано управление из функции updflash() после проверки контрольной суммы - обсуждаемо
P.S. Я хочу добавить эти функции в скетч (он довольно большой и он уже существует и переписывать его нет возможности) в стандартный Arduino IDE и это все должно успешно собираться (без каких-то чрезвычайных хитростей)
Как я понимаю все это реализовано в коде загрузчиков, например https://github.com/Optiboot/optiboot или в стандартном
апдейт сейчас происходит вот так:
avrdude -p atmega2560 -P /dev/ttyX -D -c stk500 -U flash:w:tx5.ino.with_bootloader.mega.hex
мне необходимо уйти полностью от avrdude и для этого я хочу сделать следующее:
в распоряжении у атмеги есть 256K флеша, где-то там в хвостике записан bootloader, который взаимодействует с avrdude и потом передает управление по 0 адресу (как я себе это представляю)
я хочу разбить эту память условно на две части (128K + 128K), во время работы МК прошивка загружается во вторую область (как попадет прошивка в МК не так важно) маленькими частями, после того как прошивка (все части) полностью загружена … проверяется контрольная сумма, и если она сошлась, то код прошивка из второй области копируется в первую (по нулевому адресу грубо говоря), вызывается перезапуск
для этого надо реализовать две функции
int updstore (size_t offset, size_t s, void *data);
-первый параметр, это смещение относительно начала прошивки (второй области), например 0 или 256 (байт)
-второй это размер данных, указатель на которые содержится в третьем параметре
-нулевой код возврата при успехе и 1 при ошибке
int updflash (size_t s, uint32_t crc32);
-аналогично размер (уже всей прошивки)
-и контрольная сумма в crc32
-завершается перезапуском при успехе, 1 при ошибке crc, 2 – любая другая ошибка
Я не силен в области написания прошивок для МК, но предполагаю, что код обновления «переноса» должен находится в области flash, которую не будут перезаписывать. Как этот код запишется во flash и которому будет передано управление из функции updflash() после проверки контрольной суммы - обсуждаемо
P.S. Я хочу добавить эти функции в скетч (он довольно большой и он уже существует и переписывать его нет возможности) в стандартный Arduino IDE и это все должно успешно собираться (без каких-то чрезвычайных хитростей)
Как я понимаю все это реализовано в коде загрузчиков, например https://github.com/Optiboot/optiboot или в стандартном
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.