|
ESP32
| |
| uwrtey | Дата: Пятница, 11.07.2025, 01:24 | Сообщение # 16 |
 Генерал-майор
Группа: Администраторы
Сообщений: 3520
Статус: Offline
| https://arduino-technology.ru/article....9149328
Partition Table
Таблица разделов в ESP32 определяет структуру и размер различных логических разделов флэш-памяти. Это позволяет системе хранить и организовать необходимые данные и программные модули. Правильная настройка таблицы разделов позволяет оптимально использовать флэш-объем.
Назначение каждого раздела таблицы:
nvs Энергонезависимое хранение (Non-Volatile Storage) — используется для хранения данных, которые должны сохраняться между перезагрузками устройства. Например, настройки Wi-Fi.
otadata: Хранение данных Over-The-Air Firmware Update — этот раздел используется для хранения состояния процесса обновления прошивки 'по воздуху'.
app0 Основной раздел для размещения пользовательского приложения. Именно в этом и аналогичных разделах вызывается программный код.
spiffs Используется для хранения файлов в формате SPIFFS (SPI Flash File System) — удобно для работы с файловой системой внутри устройства.
coredump Раздел для извлечения данных после сбоя системы — хранит дампы памяти, которые могут быть использованы для анализа ошибок и отладки.
---------------------------------------------------------
Для того, чтобы изменить разметку по умолчанию, нужно найти на компьютере папку
<LOCATION_OF_ARDUINO_ESP32>/tools/partitions и создать в ней новый файл, например с именем max.csv. Далее копируем туда следующее содержимое:
я настроил первый раз вот так:
Код # Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 0x9000, 0x5000, otadata, data, ota, 0xe000, 0x2000, app0, app, ota_0, 0x10000, 0x640000, app1, app, ota_1, 0x650000,0x640000, spiffs, data, spiffs, 0xc90000,0x360000, coredump, data, coredump,0xFF0000,0x10000,
Нашел примеры https://github.com/espress....titions
default_16MB.csv
Код nvs, data, nvs, 0x9000, 0x5000, otadata, data, ota, 0xe000, 0x2000, app0, app, ota_0, 0x10000, 0x640000, app1, app, ota_1, 0x650000, 0x640000, spiffs, data, spiffs, 0xc90000, 0x360000, coredump, data, coredump, 0xFF0000, 0x10000,
----------------------- default ( ?? 4 MB ?? )
Код nvs data nvs 0x9000 0x5000 otadata data ota 0xe000 0x2000 app0 app ota_0 0x10000 0x140000 app1 app ota_1 0x150000 0x140000 spiffs data spiffs 0x290000 0x160000 coredump data coredump 0x3F0000 0x10000
не успеваю за своими мыслями......
|
| |
|
|
| uwrtey | Дата: Пятница, 11.07.2025, 02:16 | Сообщение # 17 |
 Генерал-майор
Группа: Администраторы
Сообщений: 3520
Статус: Offline
| Цитата JackSmith () В NVS регионе на старой флешке должны храниться настройки радиочасти. Без них WIFI не заведется. https://radiokot.ru/forum....4730767
не успеваю за своими мыслями......
|
| |
|
|
| uwrtey | Дата: Пятница, 11.07.2025, 03:36 | Сообщение # 18 |
 Генерал-майор
Группа: Администраторы
Сообщений: 3520
Статус: Offline
| в среде Ардуино создал точку доступа - работает нормально!!! Проблема была не в памяти!!! https://voltiq.ru/access-....4114017
Код
// Load Wi-Fi library #include <WiFi.h>
// Replace with your network credentials const char* ssid = "ESP32-Access-Point"; const char* password = "123456789";
// Set web server port number to 80 WiFiServer server(80);
// Variable to store the HTTP request String header;
// Auxiliar variables to store the current output state String output26State = "off"; String output27State = "off";
// Assign output variables to GPIO pins const int output26 = 26; const int output27 = 27;
void setup() { Serial.begin(115200); // Initialize the output variables as outputs pinMode(output26, OUTPUT); pinMode(output27, OUTPUT); // Set outputs to LOW digitalWrite(output26, LOW); digitalWrite(output27, LOW);
// Connect to Wi-Fi network with SSID and password Serial.print("Setting AP (Access Point)…"); // Remove the password parameter, if you want the AP (Access Point) to be open WiFi.softAP(ssid, password);
IPAddress IP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(IP); server.begin(); }
void loop(){ WiFiClient client = server.available(); // Listen for incoming clients
if (client) { // If a new client connects, Serial.println("New Client."); // print a message out in the serial port String currentLine = ""; // make a String to hold incoming data from the client while (client.connected()) { // loop while the client's connected if (client.available()) { // if there's bytes to read from the client, char c = client.read(); // read a byte, then Serial.write(c); // print it out the serial monitor header += c; if (c == '\n') { // if the byte is a newline character // if the current line is blank, you got two newline characters in a row. // that's the end of the client HTTP request, so send a response: if (currentLine.length() == 0) { // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK) // and a content-type so the client knows what's coming, then a blank line: client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println("Connection: close"); client.println(); // turns the GPIOs on and off if (header.indexOf("GET /26/on") >= 0) { Serial.println("GPIO 26 on"); output26State = "on"; digitalWrite(output26, HIGH); } else if (header.indexOf("GET /26/off") >= 0) { Serial.println("GPIO 26 off"); output26State = "off"; digitalWrite(output26, LOW); } else if (header.indexOf("GET /27/on") >= 0) { Serial.println("GPIO 27 on"); output27State = "on"; digitalWrite(output27, HIGH); } else if (header.indexOf("GET /27/off") >= 0) { Serial.println("GPIO 27 off"); output27State = "off"; digitalWrite(output27, LOW); } // Display the HTML web page client.println("<!DOCTYPE html><html>"); client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"); client.println("<link rel=\"icon\" href=\"data:,\">"); // CSS to style the on/off buttons // Feel free to change the background-color and font-size attributes to fit your preferences client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}"); client.println(".button { background-color: #4CAF50; border: none; color: white; padding: 16px 40px;"); client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}"); client.println(".button2 {background-color: #555555;}</style></head>"); // Web Page Heading client.println("<body><h1>ESP32 Web Server</h1>"); // Display current state, and ON/OFF buttons for GPIO 26 client.println("<p>GPIO 26 - State " + output26State + "</p>"); // If the output26State is off, it displays the ON button if (output26State=="off") { client.println("<p><a href=\"/26/on\"><button class=\"button\">ON</button></a></p>"); } else { client.println("<p><a href=\"/26/off\"><button class=\"button button2\">OFF</button></a></p>"); } // Display current state, and ON/OFF buttons for GPIO 27 client.println("<p>GPIO 27 - State " + output27State + "</p>"); // If the output27State is off, it displays the ON button if (output27State=="off") { client.println("<p><a href=\"/27/on\"><button class=\"button\">ON</button></a></p>"); } else { client.println("<p><a href=\"/27/off\"><button class=\"button button2\">OFF</button></a></p>"); } client.println("</body></html>"); // The HTTP response ends with another blank line client.println(); // Break out of the while loop break; } else { // if you got a newline, then clear currentLine currentLine = ""; } } else if (c != '\r') { // if you got anything else but a carriage return character, currentLine += c; // add it to the end of the currentLine } } } // Clear the header variable header = ""; // Close the connection client.stop(); Serial.println("Client disconnected."); Serial.println(""); } }
не успеваю за своими мыслями......
|
| |
|
|
| uwrtey | Дата: Суббота, 12.07.2025, 00:37 | Сообщение # 19 |
 Генерал-майор
Группа: Администраторы
Сообщений: 3520
Статус: Offline
| flash_download_tool_3.9.6 и 3.9.9 не могут прошить flash_download_tools_v3.6.5 - шьет нормально ESPrtk ссылается на режим developer
ошибка такая
Код secure boot v1 enable. Not allow write flash ESP32 BurnEfuseKeyError esp_write_flash
среда ардуино тоже шьет без проблем
****
не успеваю за своими мыслями......
|
| |
|
|
| uwrtey | Дата: Суббота, 12.07.2025, 04:21 | Сообщение # 20 |
 Генерал-майор
Группа: Администраторы
Сообщений: 3520
Статус: Offline
| загрузик ( bootloader ) https://docs.espressif.com/project....er.html
не успеваю за своими мыслями......
|
| |
|
|
| uwrtey | Дата: Понедельник, 14.07.2025, 00:23 | Сообщение # 21 |
 Генерал-майор
Группа: Администраторы
Сообщений: 3520
Статус: Offline
| куда грузить бинарники полученные в ардуино
bootloader_qio_80m.bin тут: C:\Users\name\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-489d7a2b-v1\esp32\bin
boot_app0.bin тут: C:\Users\name\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\tools\partitions
Цитата Помогло. Нужно загрузить все 4 .bin-файла: /esp32/tools/partitions/boot_app0.bin по адресу 0xe000 /esp32/tools/sdk/bin/bootloader_qio_80m.bin по адресу 0x1000 sketch.ino.bin по адресу 0x10000 sketch_dec.ino.partitions.bin по адресу 0x8000 https://github.com/espress....6190309
не успеваю за своими мыслями......
|
| |
|
|
| uwrtey | Дата: Вторник, 15.07.2025, 00:41 | Сообщение # 22 |
 Генерал-майор
Группа: Администраторы
Сообщений: 3520
Статус: Offline
| esp32-ntrip-DUO ( на основе xbee ) https://github.com/incarvr6/esp32-ntrip-DUO загрузился без проблем
xbee - нифига не запускается https://github.com/nebkat/esp32-xbee?ysclid=md3mmibgtv517309415
заказал новый модуль - все заработало без проблем. интересно в чем проблема..
не успеваю за своими мыслями......
|
| |
|
|
| uwrtey | Дата: Вторник, 15.07.2025, 00:44 | Сообщение # 23 |
 Генерал-майор
Группа: Администраторы
Сообщений: 3520
Статус: Offline
| ESP32 WROVER содержит чип ESP32-D0WDQ6 ESP32 WROOM-32 содержит чип ESP32 D0WD V3 (версия v3.1)
не успеваю за своими мыслями......
|
| |
|
|
| uwrtey | Дата: Вторник, 15.07.2025, 03:59 | Сообщение # 24 |
 Генерал-майор
Группа: Администраторы
Сообщений: 3520
Статус: Offline
| запаял на место старую флешку на 4МБ прошить с помощью flash_download_tool_3.9.9 не удалось ( ESP32 xbee ) но flash_download_tools_v3.6.5 справился
не успеваю за своими мыслями......
|
| |
|
|
| uwrtey | Дата: Понедельник, 30.03.2026, 00:49 | Сообщение # 25 |
 Генерал-майор
Группа: Администраторы
Сообщений: 3520
Статус: Offline
| Документация ESP32
Просмотр по сериям https://documentation.espressif.com/en/home
заходим в ESP32 затем в Технические характеристики ESP32-WROOM-32E и ESP32-WROOM-32UE
https://documentation.espressif.com/esp32-w....en.html
ESP32-D0WD-V3 or ESP32-D0WDR2-V3 embedded Xtensa dual-core 32-bit LX6 microprocessor частота - до 240 MHz ПЗУ - 448 KB ROM ОЗУ - KB SRAM ОЗУ - часов реального времени 16 KB SRAM in RTC
На модуле распаяны: 40 MHz crystal oscillator 4/8/16 MB SPI flash 2 MB PSRAM только для ESP32-D0WDR2-V3
не успеваю за своими мыслями......
|
| |
|
|
| uwrtey | Дата: Понедельник, 30.03.2026, 01:20 | Сообщение # 26 |
 Генерал-майор
Группа: Администраторы
Сообщений: 3520
Статус: Offline
| нужен документ Technical Reference Manual для esp32 D0WD V3
я нашел такой - esp32_technical_reference_manual_en.pdf
изучаем ПАМЯТЬ
Адреса меньше 0x4000_0000 обслуживаются с помощью шины данных. Адреса в диапазоне 0x4000_0000 ~ 0x4FFF_FFFF обслуживаются с помощью шины инструкций. Адреса выше 0x5000_0000 включительно совместно используются шиной данных и шиной инструкций.
не успеваю за своими мыслями......
|
| |
|
|
| uwrtey | Дата: Понедельник, 30.03.2026, 02:35 | Сообщение # 27 |
 Генерал-майор
Группа: Администраторы
Сообщений: 3520
Статус: Offline
| 4.3.2.2 External Memory
Во-первых, блок управления кэшем имеет фиксированный размер страницы - 64 КБ для внешней флэш-памяти и 32 КБ для внешней ОЗУ (RAM)
Virtual Address for External Memory
VAddr0 - 4 MB ->3F40_0000 ~ 3F7F_FFFF
VAddr1 - 4 MB -> 4000_0000 ~ 403F_FFFF **** ( 400C_2000 ~ 403F_FFFF )
VAddr2 - 4 MB -> 4040_0000 ~ 407F_FFFF VAddr3 - 4 MB -> 4080_0000 ~ 40BF_FFFF VAddr4 - 1 MB -> 3F40_0000 ~ 3F4F_FFFF - Обратите внимание, что V Addr4 является подмножеством V Addr0.
VAddrRAM - 4 MB -> 3F80_0000 ~ 3FBF_FFFF ( ОЗУ )
**** Записи конфигурации для диапазона адресов 0x4000_0000 ~ 0x403F_FFFF реализованы и задокументированы так, как если бы это был полный диапазон адресов в 4 МБ, но доступ к нему как таковому не осуществляется. Вместо этого диапазон адресов 0x4000_0000 ~ 0x400C_1FFFобращается к встроенной памяти. ( ROM ) Это означает, что некоторые записи конфигурации для V Addr1 не будут использоваться.
не успеваю за своими мыслями......
|
| |
|
|
| uwrtey | Дата: Понедельник, 30.03.2026, 03:24 | Сообщение # 28 |
 Генерал-майор
Группа: Администраторы
Сообщений: 3520
Статус: Offline
| внешняя флэш-память
Каждая запись конфигурации MMU сопоставляет виртуальную адресную страницу процесса ЦП с физической адресной страницей. Запись имеет ширину 32 бита. Из них биты 0–7 указывают физическую страницу, на которую отображается виртуальная страница. Бит 8 должен быть сброшен, чтобы указать, что запись MMU действительна; записи с этим установленным ( лог1) битом не будут сопоставлять какой-либо физический адрес с виртуальным адресом. Биты с 10 по 32 не используются и должны быть записаны как ноль. Поскольку в записи MMU восемь адресных битов (256 значений) , а размер страницы для внешней флэш-памяти составляет 64 КБ, поддерживается максимум 256 × 64 КБ = 16 МБ внешней флэш-памяти.
не успеваю за своими мыслями......
|
| |
|
|
| uwrtey | Дата: Вторник, 31.03.2026, 03:50 | Сообщение # 29 |
 Генерал-майор
Группа: Администраторы
Сообщений: 3520
Статус: Offline
| Flash память
Каждый сектор flash памяти имеет минимальный размер 4 КБ или 0x1000 байт в шестнадцатеричном представлении. Здесь и далее все размеры - именно в шестнадцатеричном виде. То есть задать размер раздела 0x0100 или 0x0500 у вас не выйдет.
Начальная область Flash-памяти по умолчанию занята под загрузчик (конечно, если вы его используете, но он используется в большинстве случаев). Поэтому прикладные разделы должны располагаться начиная с адреса, заданного в константе CONFIG_PARTITION_TABLE_OFFSET - это так называемое смещение по умолчанию. На момент написания статьи это 0x8000. Однако, в некоторых случаях загрузчик не впихивается в отведенное ему место (например если вы включили отладочные сообщения в лог для загрузчика) и вам потребуется увеличить это значение.
Длина таблицы разделов составляет 0xC00 ( dec: 3072 ) байт, то есть допускается максимум 95 записей. Контрольная сумма MD5, используемая для проверки целостности таблицы разделов во время запуска, добавляется сразу же после данных таблицы. Таким образом, таблица разделов занимает целый сектор флэш-памяти. В результате любой следующий за ним раздел должен располагаться, как минимум, по адресу смещение по умолчанию + 0x1000. То есть начало "нашей" таблицы разделов увеличивается до 0x9000.
Важно: https://dzen.ru/a/Y4WaxnUQuy4xF5Xi
не успеваю за своими мыслями......
|
| |
|
|
| uwrtey | Дата: Вторник, Вчера, 03:51 | Сообщение # 30 |
 Генерал-майор
Группа: Администраторы
Сообщений: 3520
Статус: Offline
| Таблица разделов https://docs.espressif.com/project....le.html
Цитата Смещение должно быть кратно 4 КБ (0x1000), а для разделов приложений оно должно быть выровнено по 64 КБ (0x10000). Если оставить поле пустым, смещение будет автоматически рассчитано на основе конца предыдущего раздела, включая необходимое выравнивание. Однако смещение для первого раздела всегда должно быть установлено равным 0x9000 , а для первого раздела приложений — 0x10000 .
Код [b]пример: 8 МБ с OTA и хранилищем[/b]
# Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 36K, 20K, otadata, data, ota, 56K, 8K, app0, app, ota_0, 64K, 2M, app1, app, ota_1, , 2M, spiffs, data, spiffs, , 3M,
это то-же самое что:
Код [b]пример: 8 МБ с OTA и хранилищем[/b]
# Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 0x9000, 0x5000, otadata, data, ota, 0xE000, 0x2000, app0, app, ota_0, 0x10000, 0x200000, app1, app, ota_1, , 0x200000, spiffs, data, spiffs, , 0x300000,
--------------------------------------------------------------- Загрузчик https://docs.espressif.com/project....er.html
Цитата Каждый файл .bin приложения или загрузчика ESP-IDF содержит заголовок с параметрами: CONFIG_ESPTOOLPY_FLASHMODE CONFIG_ESPTOOLPY_FLASHFREQ CONFIG_ESPTOOLPY_FLASHSIZE . Они используются для настройки SPI-флэш-памяти во время загрузки.
Первый этап (ПЗУ) загрузчика считывает информацию из заголовка второго этапа загрузчика из флэш-памяти и использует эту информацию для загрузки остальной части второго этапа загрузчика из флэш-памяти. Однако в это время тактовая частота системы ниже заданной, и поддерживаются не все режимы работы флэш-памяти. После запуска второго этапа загрузчика он переконфигурирует флэш-память, используя значения, считанные из заголовка выбранного в данный момент исполняемого файла приложения (а НЕ из заголовка второго этапа загрузчика ). Это позволяет с помощью OTA-обновления изменить используемые настройки SPI-флэш-памяти.
не успеваю за своими мыслями......
|
| |
|
|
|