• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 бод.
 
Последнее редактирование:
Сверху Снизу