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

Нужна помощь Помогите загрузить fat файловую систему в ESP32

rriissee33

Member
Итак со spiffs файловой системой на esp32 возникли проблемы. Поиск на иностранных сайтах не увенчался успехом. Нашел в сети информацию о том что можно использовать файловую ситему в формате fat.
К тому же она в 4 раза быстрей работает чем spiffs. Начал выпонять tutorial. Расскажу пошагово что сделал.
Вот здесь находится инструкция: DFRobot: ESP32 Tutorial Arduino: 19-1. FAT file system

1. Необходимо влезть в ядро по адресу (для моего компьютера) :

[inline]C:\Users\----\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\tools\partitions[/inline]

Там найти файл default.csv. Его надо изменить следующим образом:

Код:
# Name,   Type, SubType, Offset,  Size, Flags
nvs,      data, nvs,     0x9000,  0x5000,
otadata,  data, ota,     0xe000,  0x2000,
app0,     app,  ota_0,   0x10000, 0x140000,
app1,     app,  ota_1,   0x150000,0x140000,
ffat,     data, fat,     0x290000,0x170000,
2. после этого необходимо запустить скетч

Код:
#include "FFat.h"

void setup(){
   Serial.begin(115200);

   if(!FFat.begin(true)){
       Serial.println("Mount Failed");
       return;
   }

   Serial.println("File system mounted");
}

void loop(){}
при том переменная в функции FFat.begin() true - говорит что при каждом старте раздел будет отформатирован. После первой загрузки необходимо изменить переменную на false для того что бы раздел больше не форматировался.

Этот скетч у меня выдал что "File system mounted" и все ок.

3. Далее начинается муть.

На гитхабе есть инструмент для того что бы смонтировать файловую систему - jkearins/ESP32_mkfatfs.
При том они пишут что он работает из под винды.

Нужен терминал и в него нужно ввести следующие команды:

git clone jkearins/ESP32_mkfatfs
make menuconfig
make all && make flash && make flashfatfs

make flashfatfs

последняя команда должна прошить файловую систему в esp32

Вопрос какой терминал на винде использовать что бы эти команды работали?

(пробовал git bash на нем не работает команда make)

Далее они пишут что FAT image can be prepared on host and flashed to ESP32. И то что нужно положить файлы файловой системы на этом хосте в дерикторию components/fatfs_image/image/

Вопрос на каком хосте? где они должны быть приготовленны?

И как произойдет процесс заливки файлов в esp?

Очень прошу сообщество помочь в данной проблеме...
 

rriissee33

Member
Зачем вы пользуетесь Arduino фреймворком? Переходите на IDF, в нем глюков меньше и ваш FatFs там работает из коробки?

Deous/VSC-Guide-for-esp32
Спасибо. Дело в том что я никогда не пользовался этой средой разработки. Я так понимаю она на питоне? И еще у меня очень много наработок в arduino ide. Есть целая модульная прошивка: DmitryBorisenko33/esp8266_iot-manager_modules_firmware
Но если у нее больше возможностей и меньше глюков то мог бы и перейти. Скажите будет ли сложно писать в ней код после arduino? Имеются ли в ней библиотеки для работы arduino accessories. Я имею ввиду все датчики и сенсоры и прочее...
Смогу ли я в этой среде повторить модульную прошивку такую которая у меня уже есть? Спасибо Вам за ответ и за информацию.
 

Urbas81

Member
Зачем вы пользуетесь Arduino фреймворком? Переходите на IDF, в нем глюков меньше и ваш FatFs там работает из коробки?

Deous/VSC-Guide-for-esp32
Запустил IDF для ESP32, не могу понять почему так долго идет компиляция, на ESP8266 при использовании UDK и Eclipse все значительно быстрее работает, пр том что для ESP код под завязку, а на 32 простой пример.
 

sharikov

Active member
Запустил IDF для ESP32, не могу понять почему так долго идет компиляция
Компиляция идет долго в первый раз или после любого изменения конфига после make menuconfig
Несколько ускорить можно ключом -j
Перекомпиляция если конфиг не меняли идет быстро - в этом случае пересобираются только исходники правленные вами.
Для пересборки можно использовать команду
make -j app
или
make app-flash monitor
 

Urbas81

Member
Компиляция идет долго в первый раз или после любого изменения конфига после make menuconfig
Несколько ускорить можно ключом -j
Перекомпиляция если конфиг не меняли идет быстро - в этом случае пересобираются только исходники правленные вами.
Для пересборки можно использовать команду
make -j app
или
make app-flash monitor
Спасибо, попробую с ключами, тоже читал что долго только при первой компиляции, но на практике мне показалось что долго всегда, может не до конца понял механизм.
 

Urbas81

Member
Проверил еще раз, взял из папки esp-шва пример adc2, первый make длится минут 5-10, в итоге в папке примера создается build размером ~57 Mb, затем меняю одну букву в adc2_example_main.c сохраняю, и после этого "make -j app", выпадает ошибка, "make[1]: *** Нет правила для сборки цели....." и ссылки на разные папки с файлами, которые мало то что не менялись, так еще и не относятся к примеру. Пока не сделаю make clean, компиляция не проходит. Может необходимо более тонко настроить конфигурационный файл?
 

sharikov

Active member
Порядок такой:
копируете пример
make menuconfig (можете там ничего не менять)
make -j
make flash
 

rriissee33

Member
а у меня получилось все таки на ардуино запустить асинхронный сервер с моей файловой системой. Из плюсов полностью правильная защита логином и паролем.

Я пробовал и esp idf. Компиляция действительно шла долго. Понимаю что он лучше. Но код там на порядок сложнее... Перевести весь проэкт под esp idf - огромная работа... Не могу пока на нее решиться...
 

Urbas81

Member
Порядок такой:
копируете пример
make menuconfig (можете там ничего не менять)
make -j
make flash
Ничего не поменялось, первая проходка генерирует bin, следующая без clean выдает ошибки об отсутствующих правилах для сборки цепи. Папка components должна содержать все? или ненужные библиотеки можно удалить, я так понимаю собирается все что там расположено, независимо от того есть ссылки в коде или нет.
 

Urbas81

Member
Похоже я нашел в чем была ошибка, после изменения файла не нужно делать make app, нужно make flash, и тогда компилируется только измененный файл, и все проходит быстро. Теперь бы это все еще в eclipse интегрировать, встречаю несколько разных вариантов описания этого процесса, один от espressif, второй в книге Colban и оба не приводят к успеху.
 

Алексей.

Active member
Компиляция идет долго в первый раз или после любого изменения конфига после make menuconfig
Несколько ускорить можно ключом -j
Установка тулчейна и сдк (esp-idf) подробно описана
Устанавливаю стабильную версию в домашнюю директорию пользователя
Код:
~$ mkdir esp && cd esp/
Скачиваю архив с тулчейном
Код:
~/esp$ wget https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz
Распаковываю и удаляю архив
Код:
~/esp$ tar -xf xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz && rm xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz
Клонирую esp-idf и переключаюсь на версию v3.3
Код:
~/esp$ git clone -b v3.3 --recursive https://github.com/espressif/esp-idf.git
Устанавливаю необходимые пакеты для питона
Код:
~/esp$ python -m pip install --user -r esp-idf/requirements.txt
Копирую пример во временную директорию (чтоб не гадить в директории с установленной esp-idf) и перехожу в эту директорию
Код:
~/esp$ cp -r esp-idf/examples/peripherals/adc2/ /tmp/ && cd /tmp/adc2/
Выполняю make menuconfig, указывая в окружении где расположен тулчейн и esp-idf, в make menuconfig никаких опций не меняю, просто выхожу.
Код:
/tmp/adc2$ PATH="$HOME/esp/xtensa-esp32-elf/bin:$PATH" IDF_PATH="$HOME/esp/esp-idf" make menuconfig
make[1]: Entering directory '/home/alex/esp/esp-idf/tools/kconfig'
cc -c  -DCURSES_LOC="<ncurses.h>" -DLOCALE -MMD  /home/alex/esp/esp-idf/tools/kconfig/mconf.c -o mconf.o
flex -L -Pzconf -ozconf.lex.c /home/alex/esp/esp-idf/tools/kconfig/zconf.l
bison -t -l -p zconf -o zconf.tab.c /home/alex/esp/esp-idf/tools/kconfig/zconf.y
sed -E "s/\\x0D$//" /home/alex/esp/esp-idf/tools/kconfig/zconf.gperf | gperf -t --output-file zconf.hash.c -a -C -E -g -k '1,3,$' -p -t
cc -I /home/alex/esp/esp-idf/tools/kconfig -c  -DCURSES_LOC="<ncurses.h>" -DLOCALE -MMD  zconf.tab.c -o zconf.tab.o
/home/alex/esp/esp-idf/tools/kconfig/lxdialog/check-lxdialog.sh -check cc  -DCURSES_LOC="<ncurses.h>" -DLOCALE -MMD -lncurses
cc -c  -DCURSES_LOC="<ncurses.h>" -DLOCALE -MMD  /home/alex/esp/esp-idf/tools/kconfig/lxdialog/checklist.c -o lxdialog/checklist.o
cc -c  -DCURSES_LOC="<ncurses.h>" -DLOCALE -MMD  /home/alex/esp/esp-idf/tools/kconfig/lxdialog/util.c -o lxdialog/util.o
cc -c  -DCURSES_LOC="<ncurses.h>" -DLOCALE -MMD  /home/alex/esp/esp-idf/tools/kconfig/lxdialog/inputbox.c -o lxdialog/inputbox.o
cc -c  -DCURSES_LOC="<ncurses.h>" -DLOCALE -MMD  /home/alex/esp/esp-idf/tools/kconfig/lxdialog/textbox.c -o lxdialog/textbox.o
cc -c  -DCURSES_LOC="<ncurses.h>" -DLOCALE -MMD  /home/alex/esp/esp-idf/tools/kconfig/lxdialog/yesno.c -o lxdialog/yesno.o
cc -c  -DCURSES_LOC="<ncurses.h>" -DLOCALE -MMD  /home/alex/esp/esp-idf/tools/kconfig/lxdialog/menubox.c -o lxdialog/menubox.o
cc -o mconf-idf mconf.o zconf.tab.o lxdialog/checklist.o lxdialog/util.o lxdialog/inputbox.o lxdialog/textbox.o lxdialog/yesno.o lxdialog/menubox.o -lncurses
cc -c  -DCURSES_LOC="<ncurses.h>" -DLOCALE -MMD  /home/alex/esp/esp-idf/tools/kconfig/conf.c -o conf.o
cc -o conf-idf conf.o  zconf.tab.o -lncurses
make[1]: Leaving directory '/home/alex/esp/esp-idf/tools/kconfig'
make[1]: Entering directory '/home/alex/esp/esp-idf/tools/kconfig'
/home/alex/esp/esp-idf/tools/kconfig/lxdialog/check-lxdialog.sh -check cc  -DCURSES_LOC="<ncurses.h>" -DLOCALE -MMD -lncurses
cc -c  -DCURSES_LOC="<ncurses.h>" -DLOCALE -MMD  /home/alex/esp/esp-idf/tools/kconfig/lxdialog/checklist.c -o lxdialog/checklist.o
cc -c  -DCURSES_LOC="<ncurses.h>" -DLOCALE -MMD  /home/alex/esp/esp-idf/tools/kconfig/lxdialog/util.c -o lxdialog/util.o
cc -c  -DCURSES_LOC="<ncurses.h>" -DLOCALE -MMD  /home/alex/esp/esp-idf/tools/kconfig/lxdialog/inputbox.c -o lxdialog/inputbox.o
cc -c  -DCURSES_LOC="<ncurses.h>" -DLOCALE -MMD  /home/alex/esp/esp-idf/tools/kconfig/lxdialog/textbox.c -o lxdialog/textbox.o
cc -c  -DCURSES_LOC="<ncurses.h>" -DLOCALE -MMD  /home/alex/esp/esp-idf/tools/kconfig/lxdialog/yesno.c -o lxdialog/yesno.o
cc -c  -DCURSES_LOC="<ncurses.h>" -DLOCALE -MMD  /home/alex/esp/esp-idf/tools/kconfig/lxdialog/menubox.c -o lxdialog/menubox.o
cc -o mconf-idf mconf.o zconf.tab.o lxdialog/checklist.o lxdialog/util.o lxdialog/inputbox.o lxdialog/textbox.o lxdialog/yesno.o lxdialog/menubox.o -lncurses
make[1]: Leaving directory '/home/alex/esp/esp-idf/tools/kconfig'
DEFCONFIG
#
# configuration written to /tmp/adc2/sdkconfig
#
MENUCONFIG


*** End of the configuration.
*** Execute 'make' to start the build or try 'make help'.

GENCONFIG
Project is not inside a git repository, will not use 'git describe' to determine PROJECT_VER.
App "adc2" version: 1
Первый раз выполняю сборку примера и фиксирую время
Код:
/tmp/adc2$ time PATH="$HOME/esp/xtensa-esp32-elf/bin:$PATH" IDF_PATH="$HOME/esp/esp-idf" make -j4
Toolchain version: crosstool-ng-1.22.0-80-g6c4433a
Compiler version: 5.2.0
CC build/app_trace/app_trace_util.o
Project is not inside a git repository, will not use 'git describe' to determine PROJECT_VER.
App "adc2" version: 1
CC build/app_update/esp_ota_ops.o
CC build/app_trace/host_file_io.o
CC build/app_trace/app_trace.o
Python requirements from /home/alex/esp/esp-idf/requirements.txt are satisfied.
CC build/app_update/esp_app_desc.o
CXX build/asio/asio/asio/src/asio.o
CC build/app_trace/gcov/gcov_rtio.o
AR build/app_update/libapp_update.a
AR build/aws_iot/libaws_iot.a
CC build/bootloader_support/src/bootloader_flash.o
AR build/app_trace/libapp_trace.a
CC build/bt/bt.o
CC build/bootloader_support/src/flash_qio_mode.o
AR build/bt/libbt.a
CC build/coap/libcoap/src/address.o
CC build/bootloader/bootloader_support/src/bootloader_flash.o
CC build/bootloader_support/src/secure_boot_signatures.o
CC build/bootloader_support/src/bootloader_common.o
CC build/coap/libcoap/src/async.o
CC build/bootloader/bootloader_support/src/flash_qio_mode.o
CC build/bootloader/bootloader_support/src/secure_boot_signatures.o
CC build/coap/libcoap/src/block.o
CC build/bootloader_support/src/secure_boot.o
...........................................
CC build/wpa_supplicant/src/wps/wps_attr_parse.o
CC build/wpa_supplicant/src/wps/wps_dev_attr.o
CC build/wpa_supplicant/src/wps/wps.o
CC build/wpa_supplicant/src/wps/wps_common.o
CC build/wpa_supplicant/src/wps/wps_registrar.o
CC build/wpa_supplicant/src/wps/wps_attr_build.o
CC build/wpa_supplicant/src/wps/uuid.o
CC build/wpa_supplicant/src/wps/wps_enrollee.o
Generating libvfs.a.sections_info
Generating libwear_levelling.a.sections_info
Generating libwifi_provisioning.a.sections_info
Generating libxtensa-debug-module.a.sections_info

AR build/wpa_supplicant/libwpa_supplicant.a
Generating libwpa_supplicant.a.sections_info
Generating esp32.project.ld
LD build/adc2.elf
esptool.py v2.8-dev
To flash all build output, run 'make flash' or:
python /home/alex/esp/esp-idf/components/esptool_py/esptool/esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 115200 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 /tmp/adc2/build/bootloader/bootloader.bin 0x10000 /tmp/adc2/build/adc2.bin 0x8000 /tmp/adc2/build/partitions_singleapp.bin

real   0m37.138s
user   2m6.291s
sys   0m17.635s
На холодном Intel(R) Core(TM) i3-5010U CPU @ 2.10GHz сборка заняла ~40 секунд
 

Urbas81

Member
Могут ли русские буквы в названии пути влиять на сборку?, ставил давно, в имени есть "Администратор", одни примеры собираются другие нет.
 
Сверху Снизу