• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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/
 
Сверху Снизу