LINUX.ORG.RU

Вышел rf24boot v0.1

 , ,


6

5

rf24boot — открытый (GPLv2) загрузчик для микроконтроллеров, который позволяет обновлять микропрограмму «по воздуху».

Основные функции:

  • Поддержка произвольного количества разделов, каждый из которых может быть загрузочным (если это поддерживается МК).
  • Простой протокол: основная машина состояния занимает меньше 200 строк.
  • Переносимость: сделан на базе antares, потому может быть легко перенесен на другие архитектуры МК, которые поддерживаются этой системой сборки.
  • Простота настройки: все возможные параметры настраиваются через kconfig.
  • Небольшой Большой размер: Влезает в 4096 байт на архитектуре avr*.

В этой версии пока поддерживаются только 8-битные микроконтроллеры Atmel AVR (в которых есть поддержка функции bootloader и существует возможность задать секцию boot размером хотя бы 4096 байт). Поддержка STM32 будет добавлена сразу как только у автора появится время и необходимость сделать железку с stm32 и nrf24l01.

В виде usb-программатора пока используется OpenHardware проект uISP. В планах есть создание более быстрого usb-донгла на основе stm32.

*) 4096 байт это минимум, сколько я смог получить без серьезных последствий для читаемости кода и не прибивая все гвоздями к архитектуре avr.

Исходный код на GitHub

>>> Подробности в блоге автора

★★★★★

Проверено: JB ()

обновлять микропрограмму «по воздуху».

Поясни.

Влезает в 4096 байт на архитектуре avr*

*) 4096к это минимум

Так байт или килобайт.

IPR ★★★★★ ()
Ответ на: комментарий от IPR

Байт конечно, это у меня уже мозги вытекают после отладки, поправьте кто может плиз.

ncrmnt ★★★★★ ()
Ответ на: комментарий от ncrmnt

Мячта хакера Васи. Есть защита от несанкционированных попыток прошивки?

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от ncrmnt

теперь сноудену точно капец

сотрут его любимые серии симпсонов, и он от тоски на родину запросится

feofil ()
Ответ на: комментарий от feofil

сотрут его любимые серии симпсонов,

И зальют My Little Pony.

Ttt ☆☆☆☆☆ ()

не планируется ли расширение по прошивке используя внешний флеш? (почему спрашиваю - STM32 железяки имеются в нашем локальном производстве, прошиваются по воздуху в прямом смысле, ибо CC2500 на борту, соотв. без флеша и предварительного подсчета CRC стрёмно)
будет возможность - будем применять.

4096к

подправь.

dib2 ★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Есть. Собственно самое примитивное - джампер bootlock (настраивается в project settings). Когда джампер накинут, бутлодер не инициализирует rf интерфейс, сразу запуская приложение.

Ну и даже если оставить без джампера, в конфиге чтобы стартовал на n секунд после каждой перезагрузки нужно знать канал (115 штук поддерживается емнип) + адрес (5 байт). Учитывая, что сам бутлоадер при старте только слушает эфир, обнаружить его не зная, что он есть не шибко просто.

Шифрования нет, ибо тогда оно ни в какие 4к бы не влезло.

ncrmnt ★★★★★ ()
Ответ на: комментарий от ncrmnt

Через nrf24l01 модули (2.4 Ghz)

кстати, как они тебе? wifi не мешает?

dib2 ★★★★ ()
Ответ на: комментарий от dib2

В каком плане расширение? Чтобы писало еще и внешнюю флешку подключенную к таргету? Легко.

Там тупо задается сколько угодно «разделов», на каждую из которых ставятся свои параметры (size, pad, iosize), и свои функции .read/.write.

Только это платформоспецифично, так что регистрировать это дело надо src/hacks/.

ncrmnt ★★★★★ ()

на msp430 будет реально завести?

Tweaker ★★★★ ()
Ответ на: комментарий от dib2

кстати, как они тебе?

Вполне. Дешево (1$ за модуль), сердито. Правда все проклял пока портировал код со сраной дурины на чистый С, и вылавливал баги в самых нетривиальных местах.

wifi не мешает?

Неа. Я специально тестил на самых зашумленных каналах (когда отлаживал случаи потери ack'а от слейва и случаи прихода мусора с коллизией CRC). Немного падает скорость, ну и рейт лучше 2MBPS юзать, так как меньше коллизий будет. Есть очень малая вероятность data corruption, но для этого надо, чтобы была мусор был с валидным адресом, коллизией CRC16 и при этом размер пакета был валидным (<32), и при этом еще не сбился мой счетчик непрерывности... (пока такого ни разу не было).

ncrmnt ★★★★★ ()
Ответ на: комментарий от Tweaker

Вполне, msp430 поддерживается антарес, вроде даже стабильно (msp430-gcc) см. README.hacking как добавить платформу. По сути тебе надо только задать разделы, рассказать как писать флеш, и сказать как достучатся до nrf24l01.

По размеру - на msp430 х.з. Сильно по разному оно оптимизируется, может быть как больше, так и меньше.

ncrmnt ★★★★★ ()
Последнее исправление: ncrmnt (всего исправлений: 1)
Ответ на: комментарий от ncrmnt

1$ за модуль

o_O. в стране майданов меньше $3 не видел.

у нас CC2500 и если встать в районе нескольких wifi передатчиков (особенно если мощные) - голову ей сносит напрочь, вплоть до зависаний, которые лечатся только через poweroff.

dib2 ★★★★ ()

Урашкиии, а есть такая фигня что бы сопрягать с компом по воздуху? Вообще было бы круто.

Dron ★★★★★ ()
Ответ на: комментарий от Dron

В виде затычки в комп пока uISP + сопли, потом сделую полноценный донгл на stm32 с балк трансферами и буферизацией.

ncrmnt ★★★★★ ()
Ответ на: комментарий от ncrmnt

К слову, я понимаю что ресурсов по avr тонна, но может посоветуешь ресурсы какие, и вообще ресурсы по железкам. И да даташиты наше всё конечно.:)

Dron ★★★★★ ()
Ответ на: комментарий от Dron

Да я собственно только HaD читаю, да сам копаюсь. И то HaD последние годы сообществом диодомигателей-дуринофагов становится. Действительно эпичного мало.

ncrmnt ★★★★★ ()
Последнее исправление: ncrmnt (всего исправлений: 1)
Ответ на: комментарий от ncrmnt

Шифрования нет, ибо тогда оно ни в какие 4к бы не влезло.

Разве простейшей маски не было бы достаточно? Какой-нибудь PRBS влезет в сто байт. Как автор - подумай, ведь это вариант.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Ну как тебе сказать... Сейчас с бутлоком, запуском приложения по таймауту и борд-специфичными хаками оно занимает 4094 из 4096. Учитывая радиус действия модулей я сомневаюсь, что кто-то будет делать атаку на бут. Впрочем, если хочешь - имплементи и шли патч, только сделай отключаемым.

ncrmnt ★★★★★ ()
Последнее исправление: ncrmnt (всего исправлений: 1)

Чем, кроме переносимости, этот проект лучше загрузчика от Arduino? Тот тоже умеет обновлять прошивку по воздуху (через XBee-совместимые модули, умеющие управлять выводом RST), но весит при этом порядка 2К (а optiboot, говорят, и того меньше). Или rf24boot может обойтись без внешнего подключения к пину RST?

AVas ()
Ответ на: комментарий от ncrmnt

И это кстати, с учетом того, что в ходе ужимания этого дела в 4к я узнал о таких флагах gcc, о которых ты не хотел бы, чтобы знали твои дети.

ncrmnt ★★★★★ ()
Ответ на: комментарий от AVas

Посмотри на цену Xbee модуля (US $33.77 )и цену nrf24l01 модуля (US $0.93). Это раз.

Загрузчик ардуины (Кстати, схренали он в 2к, там же в 1к емнип ужимается) это тупо штука висящая на уарте, про беспроводной интерфейс она ничего не знает.

Xbee, насколько помню, тебе просто уарт прокладывает по воздуху, и дергает ресет сам через DTR. Cекурности в таком решении минимум - любой с Xbee модулем подошел и перешил твою борду.

Более дешево будет посадить вместо Xbee HC-05/HC-06 блютуз модуль, секурность на уровне пина - ломается в принципе. И HC-05/HC-06 не умеют прятаться - всегда видимы по дефолту, на что тратят батарейку. Ну опять же, цена будет 5-6$ за модуль в самых конченых дешевых китаях, потреблением и функционалом эти HC-x модули не отличаются.

nrf24l01 сидят на SPI, жрут в разы меньше. Ну и можно дешево и сердито на них делать «звезду» multiceiver, что для дешевых наборов датчиков, которые пашут от батарейки годами - самое то.

ncrmnt ★★★★★ ()
Ответ на: комментарий от ncrmnt

Шифрования нет, ибо тогда оно ни в какие 4к бы не влезло.

У меня бутлоадер для ATmega32P, работающий через HopeRF-овские радиочипы, с шифрованием по XTEA, с защитой от подмены кусков прошивки (каждый пакет цепляется за криптостойкую контрольную сумму предыдущего), с возможностью делать прошивки, подходящие для закрытого перечня устройств, с поддержкой записи не только во внутренний флэш, но и во внешний SPI-ный и в EEPROM, занимал 4092 байта.

/vap

anonymous ()
Ответ на: комментарий от anonymous

HopeRF шифруют аппаратно? Подозреваю, что да ибо стоят по 13-17 баксов за модуль, надо будет глянуть мельком доку.

Хм, сделал прикидки. XTEA (decrypt) на С занимает где-то 364 байта. Если похерить переносимость avr/stm32 и прибить гвоздями к avr то влезет. Только этого нахрен не надо.

ncrmnt ★★★★★ ()
Последнее исправление: ncrmnt (всего исправлений: 2)
Ответ на: комментарий от ncrmnt

HopeRF шифруют аппаратно?

Нет, шифрование программное. XTEA и особенно RTEA - очень простые в реализации симметричные алгоритмы (буквально строки 4 на Си), и вроде бы вполне стойкие.

Модули использовались RFM12B, они гораздо дешевле $13 были, и шифрование они не умели.

/vap

anonymous ()
Ответ на: комментарий от anonymous

RM12B нашел только 5 баксов + 10 шиппинг на али, по три бакса есть на тао, но все равно по сравнению с нордиком дорого.

XTEA сейчас глянул, референс из педивикии 364 байта занимает. Влезет легко в 4К если серьезно убить переносимость и читаемость кода, забив костылями и ifdef'ами. Нафиг надо.

ncrmnt ★★★★★ ()
Последнее исправление: ncrmnt (всего исправлений: 1)
Ответ на: комментарий от ncrmnt

XTEA (decrypt) на С занимает где-то 364 байта.

Хм, у меня вроде бы больше занимал. Давно это было, не помню уже подробностей, но вроде бы я особо не утаптывал, только ключ/контекст сделал статически выделенными, а не передаваемыми в параметрах.

/vap

anonymous ()
Ответ на: комментарий от anonymous

Я взял копипаст из педивикии: http://ru.wikipedia.org/wiki/XTEA Собирал просто с такими флагами:

avr-gcc -mmcu=atmega328p -DF_CPU=8000000 -mcall-prologues -fno-tree-scev-cprop -fno-split-wide-types -fpack-struct -fshort-enums -D__DELAY_BACKWARD_COMPATIBLE__  -include /home/necromant/Dev/antares-playground/rf24-slave/include/generated/autoconf.h -Os -Wall -fdata-sections -ffunction-sections -I/home/necromant/Dev/antares-playground/rf24-slave/include -I/home/necromant/Dev/antares-playground/rf24-slave/antares/include    -MD -MP -MF xtea.o.d -c  -o xtea.o /home/necromant/Dev/antares-playground/rf24-slave/src/xtea.c 


necromant@ilwyn:~/Dev/antares-playground/rf24-slave$ avr-size build/app/xtea.o
   text    data     bss     dec     hex filename
    364       0       0     364     16c build/app/xtea.o

Собственно, этим я его с 6-7к до 4х утряс в итоге. Ну и в коде кое-какие хаки добавил. К сожалению, на avr активное использование указателей сильно разносит прошивку по размеру. Из-за этого, кстати частенько тот же код на msp430 меньше выходит по размеру.

ncrmnt ★★★★★ ()
Последнее исправление: ncrmnt (всего исправлений: 3)
Ответ на: комментарий от ncrmnt

Ну и даже если оставить без джампера, в конфиге чтобы стартовал на n секунд после каждой перезагрузки нужно знать канал (115 штук поддерживается емнип) + адрес (5 байт). Учитывая, что сам бутлоадер при старте только слушает эфир, обнаружить его не зная, что он есть не шибко просто.

Никто не ломится в закрытую дверь.
И бутлоадер слушающий никто искать не будет.
Будут искать того, кого слушает бутлоадер и маскироваться под этого «того».

anonymous ()
Ответ на: комментарий от ncrmnt

К сожалению, на avr активное использование указателей сильно разносит прошивку по размеру

У меня еще сложилось мнение, что avr-gcc тех версий (где-то 4.2.x вроде бы) иногда умудрялся разносить 32-битную арифметику совершенно неразумным образом, игнорируя простейшие возможности оптимизации.

/vap

anonymous ()
Ответ на: комментарий от anonymous

Хм, я собираю сейчас 4.7.2, но один хрен avr-gcc это вещь в себе. Особенно PSTR() и вообще PROGMEM макросы бесят. В случае необходимости делать переносимо это превращается макросовый ад. Неужели так сложно автоматом константы в прогмем складывать!

ncrmnt ★★★★★ ()

4096 байт это минимум, сколько я смог получить без серьезных последствий для читаемости кода и не прибивая все гвоздями к архитектуре avr.

Аплодирую стоя. Кстати, давно хотел себе запилить «умный дом», и вот - теперь автоматику можно спокойно разводить на чердаке.

void_ptr ★★★★ ()
Ответ на: комментарий от ncrmnt

на msp430 будет реально завести?
Вполне.

На 2553 встанет? Я просто не помню сколько в нем памяти (в составе LaunchPad заимел).

void_ptr ★★★★ ()
Последнее исправление: void_ptr (всего исправлений: 1)
Ответ на: комментарий от void_ptr

И я не знал - не знал и забыл ;), надо шит-о-даты смотреть. В общем, ждем патчей.

ncrmnt ★★★★★ ()
Последнее исправление: ncrmnt (всего исправлений: 1)
Ответ на: комментарий от ncrmnt

Неужели так сложно автоматом константы в прогмем складывать!

Да складывать-то несложно, но архитектура гарвардская, и указатели двух типов получаются - на флэш и на SRAM. Поэтому константная переменная во флэш и переменная в SRAM требуют совсем разного кода для обращения к ним. И, например, функция strcmp () не может работать со строчками во флэше, и для таких строчек приходится делать функцию strcmp_P (). И нельзя перепутать, какую вызываем.

/vap

anonymous ()
Ответ на: комментарий от anonymous

Я знаю. И все равно мне кажется это можно было бы вполне разруливать на уровне компилятора. Подозреваю, что тут уже сказалось ограничение GCC.

ncrmnt ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

примерно - «так, как привыкли обновлять свой дистр», супротив обновления девайса прошиванием, что стандартно для подобных штук.

mos ★★★★★ ()

Большой респект автору. Давно валяется куча nrf24l01 модулей без дела. Но отсутствие времени + мозговыносящий datasheet по модулям не давали возможности опробовать их в действии. А тут готовый проект без ++ и изврата.

Что касается ARM, прошу обратить внимание на NXP (LPC13xx), это сильный конкурент STM32, возможно если делать поддержку, то лучше сразу для обоих кристалов.

ASM ★★ ()
Ответ на: комментарий от ASM

прошу обратить внимание на NXP (LPC13xx)

С этим пока проблемы. rf24boot базируется на antares. Под STM32 добавить поддержку не проблема, так как поддержка stm32f1x и stm32f4x серии есть и хорошо работают в antares. А вот LPC13x поддержки в antares пока нет, и у меня сейчас не хватает времени ее добавить, да и нет железа под рукой. Потому чтобы все заработало, надо сначала портануть туда antares.

ncrmnt ★★★★★ ()

А когда-то, программируя авр'ки я задумывался только о том, как будет работать программа и само устройство. Эххх, прошли те замечательные времена. Сейчас каждый школьник имеет ардуинку.

SL_RU ★★★ ()
Ответ на: комментарий от SL_RU

Ардуину при пожилых некромантах не упоминайте - сгоряча и проклясть могут.

ncrmnt ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.