Что такое PSRAM и как ею пользоваться?

Matadon

✩✩✩✩✩✩✩
6 Окт 2019
25
0
Всем доброго времени суток, уважаемые форумчане
Ситуация следующая
Купил я значица WeMos D1 mini Pro на базе ESP8266EX с 16Мб PSRAM на борту, что явно звучит щедро, вот только как этой щедростью пользоваться я, извините, не знаю и мануалы, тоже извините, гугл мне зажал
Прошу у всех, кто знает, умеет или, что ещё лучше, у кого-то есть рабочие примеры использования этой PSRAM
Заранее немыслимо благодарю!
 
Изменено:

Геннадий П

★★★★★★✩
14 Апр 2021
1,975
634
45
Фотку модуля нужно.
Судя по тем фоткам что в инете, то это обычная spi flash.
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@Matadon, что-то у меня сомнения на счет того, что у вас на ESP8266 есть PSRAM. Вообще это конечно возможно, но должно быть специальным вариантом, явно не серийным. Да и то у меня сомнения в целесообразности подобного решения. Другое дело ESP32, к примеру на esp32cam есть 4Mb PSRAM и используется под буфер кадра камеры. Так что перепроверьте что у вас на самом деле.

@Matadon, ну и где там PSRAM? ESP вижу, USB->232 вижу, флеш вижу и на этом все.
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,975
634
45
"Pseudostatic RAM (PSRAM or PSDRAM) is dynamic RAM with built-in refresh and address-control circuitry to make it behave similarly to static RAM (SRAM)."
PSRAM - это обычная динамическая память, но со встроенным контроллером автообновления, поэтому работает почти как статическая память.

"ESP8266EX uses external SPI flash to store user programs, and supports up to 16 MB memory capacity theoretically."

https://ru.mouser.com/ProductDetail/Espressif-Systems/ESP8266EX - "Data RAM Size: 50 kB"

Кратко говоря, на ESP8266EX нет никакой PSRAM, только 50 кБ оперативной памяти. А то что вам написали или где то вычитали про 16 Мб PSRAM - на деле 16 Мб распаянной на плате SPI-Flash памяти(Winbond 25Q128).
 
Изменено:

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
Кратко говоря, на ESP8266EX нет никакой PSRAM, только 50 кБ оперативной памяти. А то что вам написали или где то вычитали про 16 Мб PSRAM - на деле 16 Мб распаянной на плате SPI-Flash памяти.
Ну внешнюю подцепить по SPI и свой драйвер написать можно))), другое дело, что нужно ли...
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@Геннадий П, по спецификации для чипа можно быстрее:
  • SPI-Compatible Bus Interface:- 20 MHz Clock rate- SPI/SDI/SQI mode
В любом случае это будет более быстрым обращением, чем к FLASH-памяти. Я тот пример, на который дал ссылку, не проверял если что. Просто первый попавшийся кинул :)... Но там коряво написано, лучше глянуть драйвер для ESP32 в ESP-IDF или еще поискать... Но как я уже говорил - я бы вообще не стал заморачиваться с расширением RAM для ESP8266, а сразу взял бы ESP32, если бы ее не хватало.
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
Интереса ради глянул что там по RAM/PSRAM на начало старта для esp32cam AI-Thinker, получается такие результаты:
C++:
19:23:59.128 > setup: free heap  : 265004
19:23:59.128 > setup: free PSRAM  : 4194252
При работающем видеопотоке в 1600*1200 в общем-то еще достаточно свободной памяти остается 3714220... Даже странно как-то... надо будет поглядеть как влияют настройки камеры, ну там качество и т.д.
* На артефакты можно внимание не обращать, питания не хватает))), длинный кабель, макет на столе и все такое.

1626453047622.png
 

Matadon

✩✩✩✩✩✩✩
6 Окт 2019
25
0
@kDn, тут вот в чём дело... я уже брал ESP32 Dev Kit v1, писал код и всё бы ничего, но как только скетч превысил 1,3 Мб компилятор начал ругаться мол памяти мало
А я видимо из-за непонимания того, что из себя представляет PSRAM и зачем она вообще нужна, подумал, что у этого варианта, хоть и ESP8266EX, её аж 16 Мб по сравнению с 1,3 Мб, даже не 4 Мб
Теперь фиг знает чё делать
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@Matadon, так может вам для начала разобраться для чего нужна таблица разделов и как перераспределять память))), так глядишь нашлась бы нужная. И вообще, очень даже интересно, что же это за программа, где вы так сходу 1.3Мб отожрали... Наверное каких-то глобальных массивов или иных структур насоздавали? Так это неправильно в корне.

Пример раскладки флешки для проекта выше, где есть раздел для программы, для ота, для фс ну и прочие служебные.
C++:
#https://github.com/espressif/arduino-esp32/issues/4551
#https://docs.espressif.com/projects/esp-idf/en/v3.3.4/api-reference/system/ota.html#ota-data-partition
# Name         Type    SubType  Offset           Size    Flags
nvs,            data,  nvs,     0x9000,          0x5000,
otadata,        data,  ota,     0xe000,          0x2000,
app0,           app,   ota_0,   0x10000,         0x170000,
app1,           app,   ota_1,   0x180000,        0x170000,
spiffs,         data,  spiffs,  0x2f0000,        0x100000,
Теперь фиг знает чё делать
Учиться. :) Но тут я вам не помощник, терпение и труд вам в помощь.
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@Matadon, ну и еще раз...
Не нужно путать терминологию. Есть RAM - оперативка, есть PSRAM - тоже оперативка, но медленнее, через SPI / DMA обычно, есть SPI Flash-память, это уже типа EEPROM, т.е. память постоянная, она медленная на запись. Также можно подключить всякие карточки, типа SD - тоже по SPI, тоже медленно на запись. Так вот - на флеш-память или на ту же SD-карточку можно записать дофига данных, для этого есть даже ФС типа SPIFFS или LittleFS, либо эмуляция EEPROM - но осуществляться это будет не то чтобы быстро.

В случае же RAM - все быстрее, но на ESP8266 вы скорее всего не найдете готовых вариантов с SPI RAM, нужно самому паять, ну либо специализированные решения искать. Для ESP32 все проще, есть готовые модули как с повышенным размером флеш-памяти, так и с доп. RAM-памятью. Как-то так, вкрадце.

* Ну и не забудьте поправить размер таблицы под ваш модуль в 16Мб :), только больше не называйте его PSRAM - т.к. это совсем не то, это Flash.
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@Matadon, ну и вдогонку... Судя по тому что вы подобные вопросы задаете, то явно работаете в богомерзкой ардуиноИДЕ, там выбирайте такую раскладку (а прежде всего используемый модуль), т.к. вручную как делить память в этой среде я хз...

1626455421425.png
 

Matadon

✩✩✩✩✩✩✩
6 Окт 2019
25
0
@kDn, спасибо за ответы, почитаю, поищу, поучусь. И, нет, не угадали, от Arduino IDE давно отошёл, использую PlatformIO на VS Code

Но я всё же не пойму, почему скетч из одного файла с 1626688267532.png таким количеством библиотек для ESP32 занимает аж 1626688305369.png столько, а для ESP8266EX 3 файла с таким 1626688352198.png количеством библиотек занимает всего лишь 1626688382256.png
При том, что в ESP32 по идее 4 Мб Flash, а у ESP8266EX 1 Мб Flash
Дилема

@kDn, просто подключил библиотеку FastLED для работы с адресными светодиодами, WiFi, WebServer, Blynk и на добавлении библиотеки для работы с Bluetooth ругнулось о нехватке Flash
Никаких массивов не использовал, даже строго выбирал типы данных для переменных, зная наверняка какое значение они будут принимать
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@Matadon, ESP32 использует FreeRTOS и соответственно ардуино-фреймворк тоже построен с учетом этой операционки, для ESP8266 используется вариант NONOS SDK который естественно меньше занимает места. Вообще сравнивать размер кода на разных контроллерах и разных проектах не совсем корректно. Но если бы вы даже на одном и том же проекте сравнили, то все равно бы код для ESP8266 был бы меньше по размеру, по сравнению с ESP32. Нужна максимальная компактность? Пишите на ESP-IDF или же вообще без использования фреймворков, правда для этого уже потребуются гораздо более продвинутые знания.

Ну и напоследок, раз вы используете PIO (что очень хорошо и правильно), то попросту задайте раскладку разделов как вам нужно. К примеру вы можете вообще не использовать ОТА или же не использовать FS тем самым доведя размер кода практически до размеров флешки.
При том, что в ESP32 по идее 4 Мб Flash, а у ESP8266EX 1 Мб Flash
По какой идее? Для обоих модулей могут использоваться флеш-память разного размера.

@kDn, просто подключил библиотеку FastLED для работы с адресными светодиодами, WiFi, WebServer, Blynk и на добавлении библиотеки для работы с Bluetooth ругнулось о нехватке Flash
Никаких массивов не использовал, даже строго выбирал типы данных для переменных, зная наверняка какое значение они будут принимать
Я вам уже сказал о том, что нужно менять разделы флешки под задачу. Сходите в нашу тему прошивки лампы, она работает для обоих контроллеров и веб-сервер там есть и много чего другого. Изучите и вопросов будет меньше.
 
  • Лойс +1
Реакции: Matadon