• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Манипуляции с spiff.bin

mishgan

Member
Решил поэкспериментировать. С помощью Arduino IDE создаю бинарник spiff. Открываю hex редактор и вырезаю лишнее. В итоге получается файл уменьшается с 1мб(3мб) до 200-300кБ. Форматирую SPIFFS.format() и пытаюсь залить полученный бинарник с помощью проги NodeMCU Firmware programming в адрес 0х100000 (0х300000), но почемуто это не работает. Есп не видит файлы залитые в него. Подскажите может я что-то делаю не так. Или такой метод невозможен.
 

pvvx

Активный участник сообщества
SPIFFS имеет свою разметку, которая занимает более 20..40% емкости диска.
SPIFFS не рассчитывался на диски большого объема и скорости доступа к данным/файлам. Его задачи ограничены минимальным использованием RAM в системе, за счет понижения скорости обработки, а так-же распределением количества перезаписей секторов flash на весь объем диска.
Диск в 1МБ для алгоритмов SPIFFS уже не оптимален при использовании архитектуры ESP8266. Расчет у него идет на 100..200 кило и пару перезаписываемых мелких файлов. В остальных случаях это не оптимальное решение. Другие файловые системы имеют свой (c).
В итоге основной целью использования SPIFFS - обучение работе c файлами в Arduino IDE.
По поводу возможно или нет - ответ всегда = возможно всё, но имеет или это смысл.
Вы пытаетесь ускорить процесс записи Flash в ESP8266?
Он ограничен скоростью примерно в 150 килобайт в секунду самой Flash. По web, через WiFi, заливка диска с данными в 15+ Мегабайт (16 МБ Flash) занимает 90 секунд (данные из Web-свалки - скорость записи в предел = 180КБ/сек). Т.е. для вашего объема в 1МБ это будет 6 секунд.
Решайте сами - стоит ли с этим возиться?
Ещё, как альтернативный пример: RTL871xBN имеет встроенный интерфейс записи flash из UART/COM порта на скорости 1500 кило-baud. Это 150 килобайт в секунду, что равно времени стирания и записи их SPI Flash.
 
Последнее редактирование:

enjoynering

Well-known member
другой вопорс. у меня есть конфигурационный файл который часто перезаписывается и меняется в размере. сегодня он 152 байта, а завтра 170 байта. как ведет себя при этом SPIFFS? как дефрагментация файлов влияет на работу SPIFFSи скорость? спасибо.
 

pvvx

Активный участник сообщества
другой вопорс. у меня есть конфигурационный файл который часто перезаписывается и меняется в размере. сегодня он 152 байта, а завтра 170 байта. как ведет себя при этом SPIFFS? как дефрагментация файлов влияет на работу SPIFFSи скорость? спасибо.
Тестировал давно, почти пару лет назад. При диске в примерно в 1 мегабайт, заполненном на 50% и дефрагментации время открытия файла было ужасное - более длительности WDT у ESP8266. Скорость чтения данных из файла в виде переливания страницы в эксплорере с дерганиями. Для web такое не годится. За время, возможно там немного чего и оптимизировали (вроде ковыряли кратность запросов к размерам секторов и к буферу fifo SPI...), но не много. Гарантировать можно только, что при большой дефрагментации файл откроется за минуту и прочитается с передачей по WiFi ещё за пару минут. :)
У WiFi ESP8266 пинг в местной интрасети 0.5..2 мс, линейная передача (и прием) по TCP - до 1.2 Мегабайта в секунду. Диск должен работать быстрее, чтобы вписаться в эти параметры. К примеру, линейное чтение Flash, как и диска в web-свалке более дцати Мегабайт в сек. Но записи у меня там нет и нет никаких SPIFFS. SPIFFS же только для игры...
Запись прерывает все коммуникации по WiFi в ESP8266, т.к. на время стирания блока/сектора и его запись, исполнение кода из flash невозможно (отключен и "кещ" Flash). Работают только функции из IRAM и ROM. А большинство процедур в ROM у ESP8266 с ошибками и они не применяются.
Время стирания блока/сектора Flash (как и запись сектора) указаны в их PDF. Про сумму этих времен, без перерыва на всё остальное (и в реальности на ESP8266) уже описал: ~ 180 килобайт/сек. У SPIFFS показатели в сотни раз меньше при дефрагментации и большом кол-ве заполнения его диска. Он не может обеспечивать и логирование с UART в 9600 бод.
 
Последнее редактирование:
Сверху Снизу