Сен 222023
 

ESP32: чипы, модули, платы…

Разбираться в модулях Esspressif, которые поставляет компания, дело неблагодарное. В списке доступных к заказу их несколько сотен. На Ali, конечно, предлагают поменьше, но новичкам всё равно ничего не понятно. Это даже хуже, чем выбирать смартфон от Xiaomi. Но всё таки давайте попробуем разобраться.

Для начала определимся с терминологией. В этой статье (да и в других статьях цикла) я буду использовать следующие термины:

  • чип – собственно микроконтроллер (или core в документации espressif, он же Жора SoC {System On Crystal – система на одном кристалле}, он же Гога MCU {MicroController Unit}); то есть собственно микросхемка без антенны, кварцевого резонатора, микросхемы FLASH-памяти и прочей обвязки
  • модуль – готовый микромодуль с напаянными внутри чипом, памятью, антенной или разъемом; чаще всего закрыт экраном с маркировкой
  • плата – как правило под этим термином я буду понимать различные отладочные платы с установленным модулем, USB-конвертором и стабилизатором

Линейки чипов Espressif

Если обратиться к сайту производителя, то можно увидеть, что компания сейчас выпускает четыре линейки продукции: ESP8266, ESP32, ESP32-S и ESP32-C.

Продукция Espressif на текущий момент

Продукция Espressif на текущий момент

  • ESP8266 – предшественник ESP32 на базе 32-разрядного RISC-процессора Tensilica® L106, с максимальной тактовой частотой 160 МГц. Я пользовался модулями этой линейки несколько лет, на мой взгляд, модуль получился не очень удачным, особенно в первое время (ESP-01 и т.д.). Производитель заявляет поддержку FreeRTOS, но поддержка эта “так себе”. Хотя для опытов с Arduino и WiFi вполне сгодится. Мы не будем его рассматривать.
  • ESP32 – “классический” ESP32. созданный в 2016 году на базе двухъядерного процессора Xtensa® 32­bit LX6 (или одноядерного в некоторых случаях) с максимальной тактовой частотой 240 МГц. Работает с использованием относительно старых протоколов WiFi 2.4 MHz. Самая популярная линейка среди самодельщиков, так как его возможностей хватает “с избытком”, множество предложений на Aliexpress, а цена невелика (даже по сравнению с ESP8266).
  • ESP32-S(2,3) – относительно новая (2020 год) линейка ESP32 базе процессора следующего поколения Xtensa® 32-bit LX7 с максимальной тактовой частотой 240 МГц. В качестве основных преимуществ по сравнению с предыдущей линейкой производитель отмечает улучшенную криптографию (шифрование FLASH памяти, безопасную загрузку прошивки, защиту от атак) и поддержку современных беспроводных протоколов связи. Имеет большее количество GPIO, чем классическая ESP32. Но меньшее количество встроенной памяти (см. таблицу ниже). Судя по платам, имеющимся в продаже на Aliexpress, модули имеют поддержку USB (ttyACM0) непосредственно в чипе.
  • ESP32-C(2,3,6) – недорогая линейка на базе одноядерного RISC-V процессора, предназначенная в первую очередь для встраиваемых устройств типа “умных розеток” и “умных лампочек”. Это скорее не “урезанный” ESP32, а “усовершенствованный” ESP8266. В отличие от ESP8266 новый SoC имеет поддержку безопасной загрузки, флэш-шифрования и современных беспроводных стандартов связи. Имеет меньшее количество GPIO, чем классическая ESP32, (но у нее и назначение другое). Судя по платам, имеющимся в продаже на Aliexpress, модули имеют поддержку USB (ttyACM0) непосредственно в чипе (но это не точно).

Сравнение характеристик процессора и памяти для различных линеек из официальной документации: https://docs.espressif.com/projects/esp-idf/en/release-v5.0/esp32/hw-reference/chip-series-comparison.html

Сравнение характеристик процессора и памяти для различных линеек из официальной документации: https://docs.espressif.com/projects/esp-idf/en/release-v5.0/esp32/hw-reference/chip-series-comparison.html

Сравнение характеристик периферии для различных линеек из официальной документации: https://docs.espressif.com/projects/esp-idf/en/release-v5.0/esp32/hw-reference/chip-series-comparison.html

Сравнение характеристик периферии для различных линеек из официальной документации: https://docs.espressif.com/projects/esp-idf/en/release-v5.0/esp32/hw-reference/chip-series-comparison.html

В данной статье я буду рассматривать в основном чипы и модули “базовой линейки” ESP32, так как про ESP8266 – уже не интересно, а ESP32-S и ESP32-С я лично ещё не пользовался (ну вот не было такой необходимости), поэтому поделиться опытом я не могу. А зачем писать про то, чего сам не знаешь? Если у Вас есть желание подробнее ознакомиться с новыми сериями, Вы можете сделать это самостоятельно на сайте производителя. Но судя по поиску на AliExpress, новые модули пока не сильно распространены.

Чипы классической линейки ESP32

В настоящее время Espressif производит модули ESP32 на базе следующих чипов (SoC):

  • ESP32-D0WDQ6 – исторически самый первый чип, выпущенный Espressif,сейчас не доступен для заказа. Модули на основе этого чипа я рассматривать так же не буду (а смысл?).
  • ESP32-D0WD – некоторое время основной SoC, на основе которого создавались модули ESP32-WROOM-32, ESP32-WROOM-32D, ESP32-WROOM-32U и серии ESP32-WROWER (не все модели! подробности ниже). Имел некоторые аппаратные проблемы, поэтому в конце концов был снят с производства и заменен на исправленную версию ESP32-D0WD-V3 и сейчас не доступен для заказа на сайте Espressif, но его вполне ещё можно купить на Aliexpress.
  • ESP32-D0WD-V3исправленная версия ESP32-D0WD с маркировкой ECO V3. Например исправлена ошибка кэша при работе с внешним ОЗУ (PSRAM), если таковое присутствует в модуле. Если есть желание, можете ознакомиться со списком изменений самостоятельно ( или на форуме ).
  • ESP32-D0WDR2-V3 – этот более продвинутый вариант ESP32-D0WD-V3, который имеет на борту 2 МБ встроенной PSRAM. Используется только в продвинутом модуле ESP32­-WROOM-­DA.
  • ESP32-S0WD – “урезанный” одноядерный вариант ESP32-D0WD. Собственно этим всё сказано. Не вижу смысла, но производителю виднее. На Aliexpress присутствует только в виде чипов и модулей, плат на основе этого чипа нет. Видимо, спроса нет.
  • ESP32-U4WDH – ещё один вариант ESP32, данные о нем весьма противоречивы: на сайте Espressif написано, что это одноядерный модуль с частотой 160 MHz и с 24 GPIO, а судя по datasheet- это вполне себе обычный ESP32 с 28 выводами GPIO. На Aliexpress отсутствует.
  • ESP32-PICO-V3-02 – в основе этого модуля лежит тот же самый чип ESP32 (ECO V3), но разработанный с использованием маломощной технологии TSMC 40 нм. На Aliexpress присутствует только в виде чипов и модулей.

esp8266 Часы

 Arduino  Комментарии к записи esp8266 Часы отключены
Сен 082023
 

https://vk.com/topic-150130950_40503102
https://vk.com/retromodding
https://vk.com/topic-150130950_40221023?offset=40
https://labkit.ru/html/clock?id=506
https://www.pcbway.com/project/shareproject/Nixie_Clock_IN_12___ESP12_ESP8266__WiFi.html
https://vk.com/wall-150130950_26
http://bestdiy.ru/chasy-propeller-na-arduino-nano-svoimi-rukami.html
https://www.pcbway.com/project/member/?bmbno=40977DCF-B63C-48

esp32 Анализ ошибок медитации гуру и решения

 Arduino  Комментарии к записи esp32 Анализ ошибок медитации гуру и решения отключены
Сен 072023
 

esp32 Решение ошибки медитации гуру

Guru Meditation

  • Этот раздел будет напечатан наGuru Meditation Error: Core panic'edПричины ошибок в скобках будут объяснены одна за другой.

IllegalInstruction

Это исключение ЦП означает, что текущая выполняемая инструкция не является допустимой. Распространенные причины этой ошибки:

  • Функция задачи в FreeRTOS вернулась. В FreeRTOS, если вы хотите завершить функцию задачи, вам нужно вызватьvTaskDelete()Функция освобождает ресурсы текущей задачи вместо прямого возврата.
  • Не удается загрузить следующую инструкцию из SPI Flash, обычно это происходит:
    1. Прикладная программа перенастраивает контакты SPI Flash на другие функции (такие как GPIO, UART и т. Д.). Для получения подробной информации о выводах SPI Flash, пожалуйста, обратитесь к руководству по проектированию оборудования и спецификации микросхемы / модуля.
    2. Некоторые внешние устройства случайно подключаются к контактам SPI Flash, что мешает обмену данными между ESP32 и SPI Flash.

InstrFetchProhibited

Это исключение ЦП означает, что ЦП не может загрузить инструкцию, потому что адрес инструкции не находится в допустимой области IRAM или IROM.

Обычно это означает, что в коде вызывается указатель функции, который не указывает на действительный блок кода. В этом случае вы можете проверитьPC(Программный счетчик) значение регистра и сделайте дальнейшее суждение: если это 0 или другое недопустимое значение (то есть, если оно не0x4xxxxxxx Обстоятельства) подтверждается, что это действительно причина.

Если указатель ПК указывает на недопустимую область в большом масштабе, возможная причина дамп памятиПлохой контакт на булавкеИ другие причины.

Для получения подробной информации вы можете проверить карту esp32 ниже, чтобы определить положение указателя компьютера (не ограничиваясь этим разделом).

LoadProhibited, StoreProhibited

Этот тип исключения ЦП возникает, когда приложение пытается прочитать или записать в недопустимую область памяти. Такие недопустимые адреса памяти могут быть сброшены в регистрEXCVADDR Нашел в. Если адрес равен нулю, это обычно означает, что приложение пытается разыменоватьNULLуказатель. Если адрес близок к нулю, это обычно означает, что приложение пытается получить доступ к члену структуры, но указатель структурыNULL, Если адрес является другим недопустимым значением (не в0x3fxxxxxx0x6xxxxxxx В пределах диапазона) это может означать, что указатель, используемый для доступа к данным, не инициализирован или поврежден.

IntegerDivideByZero

Приложение пыталось разделить целое число на ноль.

LoadStoreAlignment

Ячейка памяти, которую приложение пытается читать / писать, не соответствует требованиям к размеру с выравниванием по байтам для инструкций загрузки / сохранения. Например, 32-разрядная инструкция загрузки может обращаться только к 4-разрядным адресам памяти, в то время как 16-разрядная инструкция загрузки может обращаться только к 2-байтовый адрес памяти с выравниванием.

LoadStoreError

Приложение пытается выполнить 8-битные или 16-битные операции загрузки / сохранения из области памяти, которая поддерживает только 32-битную загрузку / сохранение, например, разыменование области памяти команд.char* Указатель вызовет такую ​​ошибку.

Unhandled debug exception

Обычно за этим следует сообщение:

Debug exception reason: Stack canary watchpoint triggered (task_name)

Эта ошибка указывает на то, что позиция, записанная приложением, находится за концом стека задач имя_задачи. Обратите внимание, что эта ошибка не запускается каждый раз при переполнении стека. Задача может обойти канарейку стека (stack canary) для доступа к стеку, в этом случае точка мониторинга не будет запущена.

Interrupt wdt timeout on CPU0 / CPU1

Это указывает на то, что истекло время ожидания сторожевого таймера прерывания.

Cache disabled but cached memory region accessed

@ С этой проблемой сталкивались многие люди, особенно здесь, чтобы подвести итог, эта часть контента благодарна Чжану, которому неудобно раскрывать свое имя, за его помощь

Причина этой проблемы в том, что во время отключения кеша (например, при использовании spi_flash API для чтения / записи / стирания / отображения SPI Flash) возникает прерывание IRAM-Safe, и программа прерывания обращается к ресурсам флэш-памяти. Обычно это происходит, когда обработчик прерывания вызывает программу во флэш-памяти и ссылается на константы во флэш-памяти. Стоит отметить, что при использовании в обработчике прерыванияdouble Переменная типа из-заdouble Реализация операции переменной типаПрограммная реализацияДа, поэтому часть реализации также хранится во флэш-памяти (например, операции приведения).
Решение:

  1. Добавить к функции, доступ к которой осуществляется в прерыванииIRAM_ATTRМодификатор
  2. Добавить к константе, доступ к которой осуществляется в прерыванииDRAM_ATTR Модификатор
  3. Не используется в обработчике прерыванияdouble Тип операция
  • нужно знать:
    1. Это исключение возникает только в прерывании IRAM-Safe, то есть при использованииESP_INTR_FLAG_IRAMЗарегистрированный обработчик прерывания.
    2. Это исключение будет возникать только при отключении кеша, поэтому оно не произойдет, если кеш не отключен, другими словами, исключение является случайным.
    3. Компилятор может поместить некоторые переменные, которые не будут изменены, в раздел .rodata, даже если программист не добавит модификатор const. Для приложений ESP32 .rodata означает, что деталь находится во флэш-памяти. Для строковых переменных эту ситуацию легко обнаружить, но для некоторых констант обнаружить не так просто. Например, следующая ситуация
static timg_dev_t *TG[2] = {&TIMERG0, &TIMERG1}; 
  • 1

Здесь определяется массив указателей TG.Элемент массива является первым адресом регистра двух аппаратных таймеров 0 и 1. Элемент массива указателей не будет изменен, поэтому он будет помещен в .rodata компилятором. В это время TG работает в прерывании от таймера, и это прерывание происходит во время запретного периода кеширования, тогда ЦП генерирует исключение.

  • Навыки отладки проблемы
  1. Когда ЦП выдает этот тип исключения, обычно местоположение исключения является местоположением ошибки, и вам нужно внимательно изучить
 Guru Meditation Error: Core 1 panic'ed (Cache disabled but cached memory region accessed) Core 1 register dump: PC : 0x4011b808 PS : 0x00060034 A0 : 0x8008c664 A1 : 0x3ffbeca0 0x4011b808: __fixunsdfdi at /builds/idf/crosstool-NG/.build/src/gcc-5.2.0/libgcc/config/xtensa/ieee754-df.S:2041 A2 : 0x0099fd28 A3 : 0x00000000 A4 : 0x3ffbf6a0 A5 : 0x3f7909f1 A6 : 0x00000000 A7 : 0x00013ffc A8 : 0x80086136 A9 : 0x3ffbec80 A10 : 0xfffffffc A11 : 0x40ddd57f A12 : 0x000007fe A13 : 0x00000000 A14 : 0x65580000 A15 : 0x00000000 SAR : 0x00000014 EXCCAUSE: 0x00000007 EXCVADDR: 0x00000000 LBEG : 0x4000c2e0 LEND : 0x4000c2f6 LCOUNT : 0x00000000 Core 1 was running in ISR context: EPC1 : 0x40086914 EPC2 : 0x00000000 EPC3 : 0x00000000 EPC4 : 0x4011b808 0x40086914: spi_flash_enable_interrupts_caches_and_other_cpu at /home/chenzhengwei/esp/esp-idf/components/spi_flash/cache_utils.c:147 0x4011b808: __fixunsdfdi at /builds/idf/crosstool-NG/.build/src/gcc-5.2.0/libgcc/config/xtensa/ieee754-df.S:2041 Backtrace: 0x4011b808:0x3ffbeca0 0x4008c661:0x3ffbecd0 0x4008c69d:0x3ffbecf0 0x400857e5:0x3ffbed10 0x40086911:0x3ffd0970 0x40086cc9:0x3ffd0990 0x40117789:0x3ffd09e0 0x4011785e:0x3ffd0a10 0x401179ea:0x3ffd0a30 0x40116c51:0x3ffd0aa0 0x40117109:0x3ffd0b20 0x40116729:0x3ffd0b90 0x40105c36:0x3ffd0bd0 0x401057d7:0x3ffd0c10 0x401058ce:0x3ffd0c40 0x4008dfb5:0x3ffd0c90 0x4011b808: __fixunsdfdi at /builds/idf/crosstool-NG/.build/src/gcc-5.2.0/libgcc/config/xtensa/ieee754-df.S:2041 0x4008c661: gpio_isr_loop at /home/chenzhengwei/esp/esp-idf/components/driver/gpio.c:433 0x4008c69d: gpio_intr_service at /home/chenzhengwei/esp/esp-idf/components/driver/gpio.c:433 0x400857e5: _xt_lowint1 at /home/chenzhengwei/esp/esp-idf/components/freertos/xtensa_vectors.S:1154 0x40086911: spi_flash_enable_interrupts_caches_and_other_cpu at /home/chenzhengwei/esp/esp-idf/components/spi_flash/cache_utils.c:147 ... 

В этом примере место возникновения исключения —0x4011b808, вот__fixunssfdiМесто хранения функции, и это место находится во внешней памяти (см. Раздел 1.3.3 esp32_technical_reference_manual). Эта функция используется для преобразования числа с плавающей запятой в 64-битное целое число без знака, что означает, что обработчик прерывания используетdouble Тип операции приведения данных. Эта операция не разрешена, когда кеш отключен.

  1. Если вы не знаете, находится ли переменная в разделе .data / .bss или .rodata, вы можете использовать команду readelf для просмотра сведений о символах в .elf
# Перезаписать таблицу символов в build / empty-project.elf в файл empty-project.out readelf -a build/empty-project.elf > empty-project.out ​​​​​​​

Используйте команду readelf для извлечения таблицы символов в файле elf. Чтобы узнать, как просмотреть таблицу символов, обратитесь к структуре хранения переменных языка C. С помощью таблицы символов вы можете точно увидеть место хранения и размер каждой переменной и функции. С помощью этой информации вы можете проверить, находятся ли переменные и функции, используемые в обработчике прерываний IRAM-Safe, во флэш-памяти.

Учебное пособие по MaixPy

 Arduino  Комментарии к записи Учебное пособие по MaixPy отключены
Сен 072023
 

https://wiki.sipeed.com/hardware/en/index.html
https://micro-pi.ru/maixduino-sbc-risc-v-ai-arduino-esp32/
https://mysku.club/blog/aliexpress/79416.html
https://wiki.sipeed.com/soft/maixpy/en/
https://wiki.sipeed.com/hardware/en/maix/maixpy_develop_kit_board/maix_duino.html
https://www.edgemicrotech.com/maixpy-9-maixduino-object-detection-ai-micropython/?utm_content=cmp-true
https://yandex.ru/search/?text=maixduino+%D1%80%D0%B0%D1%81%D0%BF%D0%BE%D0%B7%D0%BD%D0%B0%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D0%BE%D0%BA%D0%BA%D1%80%D1%83%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8&lr=36&clid=2063712
https://russianblogs.com/article/74871587995/
https://cxem.net/arduino/arduino263.php
https://dl.sipeed.com/shareURL/MAIX/MaixPy/ide/v0.2.5
https://dl.sipeed.com/shareURL/MAIX/MaixPy/release/master/maixpy_v0.6.2_85_g23d09fbcc
https://cnx-software.ru/2019/09/16/nachalo-raboty-s-platoj-maixduino-na-baze-sipeed-m1-i-grove-ai-hat-dlya-raspberry-pi/