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

SPI DMA ESP8266

wcat

New member
Hi, All!
Есть ли в ESP8266 возможность вывести через интерфейс SPI поток из буфера, используя DMA?
Функции SDK?
В каком направлении "копать"?
 

pvvx

Активный участник сообщества
Как такового, классического DMA, у ESP8266 нет.

Организация контроллера SPI на ESP8266 имеет распределенный по адресам фиксированный буфер (последовательно заполняемый массив регистров в контроллере), а не FIFO. При такой организации (обычно) DMA не бывает, если не сделано специальной дополнительной логики (которая возможно неисправна как многое в ESP8266).

В ROM-Bios DMA с SPI не замечено. Есть что-то с SDIO, но не разобрано из-за ненужности.
 

wcat

New member
Я предполагал аналоги SDK-шной _adc_read_fast(...), но похожего не нашел...
Недотумкали китайцы? ;-)
 

pvvx

Активный участник сообщества
Не забудьте, что регистры контроллера SPI находятся за низко-скоростной шиной от CPU, тактируемой кварцем… Это ограничивает скорость доступа и требует 32-х битных обращений к массиву данных контроллера SPI.

А так – нашли чем заниматься на устаревшем контроллере… Для скоростных пересылок с SPI используйте хотя-бы ESP32. Остальная производительность и потребление, если понизить CLK CPU, у них одинакова из-за работы кода через узкое горлышко в виде SPI-Flash. Если отключите второе ядро у ESP32 и понизите CLK CPU до уровня ESP8266 – будет работать быстрее и жрать меньше ресурсов и энергии. Последние ESP из серии ESP32 от Espressif тем и отличаются – имеют одно ядро с пониженной тактовой. А начальные ESP32 – грубая ошибка разработки (утюг на несколько Вт для разогрева окружающей среды :) ).
 

wcat

New member
Я лет несколько назад под 8266 накидал "пухлую рыбу", в которую временами пихаю куски кода для проверки :)
И смотрю результат в html - как json ответ на ajax запрос с обработчиком на яве :)
Значит, есть-таки смысл посмотреть на ESP32? Как-то тогда мне навскидку не понравилось, но по ответу предполагаю, что с тех пор многое изменилось :)
Или проще на малинке код отлаживать - идеологически, а потом в мелкий кортекс пихать ? По цене, смотрю, ESP32 не сильно от Raspberry pi отличается, а у меня на малинке тоже кое-какая периферия работает... ESP8266 стоят-то копейки, да я запасся модулями ESP201 - в них шаг DIP-овский и SPI-Flash перепаять минут пять, или на кросс-платке прицепить, на которой у меня нужный минимум периферии болтается :)
 

pvvx

Активный участник сообщества
Или проще на малинке код отлаживать - идеологически, а потом в мелкий кортекс пихать ?
'кортекс'-ы сильно разнятся именно встроенными контроллерами. STM-овские не богаты этим. Там упрошенные, требующие ну очень многого от CPU, до ситуации что код конфигурации DMA и контроллера только замедляет исполнение и не дает никакой автоматизации и ускорения. Ради дешевизны жалеют размер кристалла -> сильно развит HAL для детей, чтобы не запутались в битиках контроллеров :)
 

wcat

New member
Вот я и "стою на перепутье" :) Сейчас надо по-быстрому накидать прием потока в буфер -> обработчик -> в другой буфер, а из него - в периферию, предполагаю SPI.
Задача - сделать процесс отладки обработчика простым и доступным, как тапочек, чтобы даже научный сотрудник младшего возраста с ним разобрался :)
А прием и отправка буферов обязаны быть максимально надежными, чтобы в них никто не лазал без меня... :) Оптимально - два канала DMA по своим таймерам, скоростью которых пусть малыши смогут управлять ;-)
 

wcat

New member
'к сильно развит HAL для детей, чтобы не запутались в битиках контроллеров :)
HAL можно и похерить в отлаженной системе буферизации. Готовые буфера прицепить к Arduino и выставлять флаг по результату обработчика "Успел - да/нет". Ну и - на сколько в этот раз опоздал :)
 

pvvx

Активный участник сообщества
HAL можно и похерить в отлаженной системе буферизации. Готовые буфера прицепить к Arduino и выставлять флаг по результату обработчика "Успел - да/нет". Ну и - на сколько в этот раз опоздал :)
Всё это не имеет смысла, если у вас WiFi.
WiFi -> (следовательно) TCP/IP. А для стека и нативной обработки TCP/IP по спекам надо от мегабайта буферов...
Малинка годится. ESP - нет. И тут как не крутите - поддержать минимальные стандарты TCP не сможете. Поиграться - без проблем.
 

wcat

New member
Всё это не имеет смысла, если у вас WiFi.
WiFi -> (следовательно) TCP/IP. А для стека и нативной обработки TCP/IP по спекам надо от мегабайта буферов...
Эт-то понятно! Но подкупает наличие готовых модулей обработки :) Те же обработчики html, ajax, json я накидал за пару дней... Просто тупо и аккуратно писать код :)
Ну и не заморачиваться, что Flash сдохнет от частой перезаписи, как то было в avr'ах и, тем паче - в pic'ах :)
Малинка годится. ESP - нет. И тут как не крутите - поддержать минимальные стандарты TCP не сможете. Поиграться - без проблем.
Вот я и играюсь - с тем же adc_read_fast быстренько забили буфер, а потом его вдумчиво разглядываем :) ADC там, вестимо, кривой... Я как-то постил здесь результаты... Даже в гражданские задачи не пойдет... Но для качественной оценки вполне сгодится :)
Спасибо! Я для себя уже многое прояснил и наметил направления "чесания репы" :)
 

pvvx

Активный участник сообщества
Ещё на счет SPI и ESP - пока на ESP никому не удалось сделать элементарного автоматического вывода буферов без участия CPU. Сказывается кривая архитектура ESP.
Из альтернативных на это был способен лишь RTL c Cortex даже при меньших ресурсах. Известный пример: https://esp8266.ru/forum/threads/rtl8710-vga-driver.1914/
 
Сверху Снизу