Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Связь ESP32<->ESP32 (проводная)

Тема в разделе "Раздел для начинающих", создана пользователем Denis Karasiov, 20 сен 2019.

  1. Denis Karasiov

    Denis Karasiov Новичок

    Сообщения:
    29
    Симпатии:
    0
    Добрый день.

    Подскажите пожалуйста, есть необходимость организовать проводную связь между несколькими модулями ESP. Изначально предполагал использовать I2C - оказалось, что ESP32 не может быть слейвом. Пробую SPI - та же фигня. Остается вариант - UART, но не очень нравится, т.к. в общем случае хочется иметь возможность подключить более одного слейв-устройства.

    Может я куда-то не туда смотрю и все можно, все-таки, сделать на I2C или SPI?

    Спасибо
     
  2. nikolz

    nikolz Гуру

    Сообщения:
    4.994
    Симпатии:
    458
    читаем док

    Шина I2C (Inter-Integrated Circuit) может использоваться для связи с несколькими внешними устройствами, подключенными к той же шине, что и ESP32. На борту ESP32 есть два контроллера I2C, каждый из которых может быть установлен в режим master или slave.
    I2C — ESP-IDF Programming Guide v4.1-dev-279-g96b96ae24 documentation
    ESP32 имеет четыре периферийных устройства SPI, называемых SPI0, SPI1, HSPI и VSPI. SPI0 полностью посвящен: флэш-кэш ESP32 используется для отображения в память устройства SPI flash, к которому оно подключено. SPI1-это подключен к тем же аппаратным линиям, что и SPI0, и используется для записи на флэш-чип. HSPI и ВСПИ вы можете свободно использовать, и с драйвером spi_slave, они могут быть использованы в качестве SPI ведомого устройства, управляемого от a подключенный мастер SPI.
     
  3. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.004
    Симпатии:
    1.302
    Если модули на одной плате, тогда возможно использование I2C или SPI. Эти шины без драйверов рассчитаны на расстояние между чипами до 15-20 см. Для надежной связи на большее расстояние нужны специальные микросхемы драйверов. Для SPI это драйвера с диф.токовыми парами и они недешевы.
    Из самых дешевых и оптимальных выйдет использование CAN шины. Это связь используется на несколько метров для множества устройств с приемлемыми скоростями. В принципе CAN оптимален до сотни метров, аналогично ethernet, но использует меньше ресурсов. Он для этого и разрабатывался и применяется...
    Для связи по проводу на большие расстояния используют RS-485 на низком битрейте. На 9600 - до км.
     
  4. Denis Karasiov

    Denis Karasiov Новичок

    Сообщения:
    29
    Симпатии:
    0
    Да, модули именно на одной плате, поэтому и смотрел в сторону I2C или SPI. Но уж очень не хотелось погружаться в SDK, хотя, похоже, придется. Спасибо.
     
  5. Denis Karasiov

    Denis Karasiov Новичок

    Сообщения:
    29
    Симпатии:
    0
    Очень тяжело идет SDK.

    В примере код:
    Код (Text):
    1. //Configuration for the SPI slave interface
    2.     spi_slave_interface_config_t slvcfg={
    3.         .mode=0,
    4.         .spics_io_num=GPIO_CS,
    5.         .queue_size=3,
    6.         .flags=0,
    7.         .post_setup_cb=my_post_setup_cb,
    8.         .post_trans_cb=my_post_trans_cb
    9.     };
    Ругается на параметры: mode, queue_size, post_setup_cb, post_trans_cb. Пишет:
    Неужели нет готового работающего примера?
     
  6. nikolz

    nikolz Гуру

    Сообщения:
    4.994
    Симпатии:
    458
    это подойдет ?:
    loboris/ESP32_NEW_SPI_MASTER_EXAMPLE
     
  7. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.004
    Симпатии:
    1.302
    А вы и читать не умеете?
    Сравните два слова MASTER и slave у TC.
    Готовых примеров не наблюдалось.
     
  8. nikolz

    nikolz Гуру

    Сообщения:
    4.994
    Симпатии:
    458
    это подойдет?
    iPAS/esp32-slave-spi
     
  9. nikolz

    nikolz Гуру

    Сообщения:
    4.994
    Симпатии:
    458
  10. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.004
    Симпатии:
    1.302
    Там писано: Однако адаптация все еще требуется т.к. передача данных через DMA отключена.
    Плохо без DMA :(
     
  11. nikolz

    nikolz Гуру

    Сообщения:
    4.994
    Симпатии:
    458
  12. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.004
    Симпатии:
    1.302
    Там описано, что в принципе применение SPI на ESP32 не желательно из-за множества ограничений и глюков.
    При этом глюки и баги неисправимые и несовместимые с жизнью, т.е. даже в своем устройстве их не обойти для нормальной работы в Slave...
    Т.е. если что-то и выйдет, то CPU будет занят, как будто он "ногодрыгом" (ковыряет битики GPIO) работает на прием SPI. :(
     
  13. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.004
    Симпатии:
    1.302
    На нормальном CPU заряжаем несколько буферов DMA, включаем SPI (на одной стороне slave, на другой - мастер) и по прерыванию готовности данных вынимаем один готовый буфер, пишем в другой. Тем самым как-бы имеем отображение общей области памяти у обоих и сигнал обновления...
    Если оба на одной плате, то ставим скорость SPI за 100 МГц.
     

Поделиться этой страницей