Добавляем поддержку OTA > 32Кб для MySensors

Я в данный момент строю сеть MySensors по протоколу RS485 на плате blue pill, МК - STM32F103C8T6. У него официальный размер флэш памяти - 64Кб, неофициальный - 128Кб. А в MySensors поддержка для OTA > 32Кб отсутствует. Так-же я использую дешёвую флэш микросхему M25P40-VMN6TP на 512Кб, но у ней нет очистки по 32Кб, а есть только по 64. Но в MySensors реализована только поддержка очистки секторов по 32Кб. Поэтому был добавлен новый дефайн - MY_OTA_BLOCKS, он указывает количество используемых блоков по 64Кб. Так же была модернизирована процедура readDeviceId() вместо получения двух байт на три. Если код сразу не заработал, то настоятельно рекомендую не биться головой об стену в попытках всё таки его запустить, а применить научный подход и использовать логический анализатор. С ним всегда чётко видно, что и как происходит на SPI шине. Также в зависимости от используемой SPI флэш памяти можно менять делитель шины. Он задаётся в файле SPIFlash.cpp - SPI.setClockDivider(SPI_CLOCK_DIV4); Если у вас медленный анализатор, то на время отладки рекомендуется ставить - SPI_CLOCK_DIV128. Для поддержки OTA на STM32 был написан загрузчик. Коммиты реализующие поддержку OTA на STM32 здесь. В дальнейшем попробую создать пулл реквест в основную ветку.

Written on April 22, 2019