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

HSPI и GPIO15

Тема в разделе "Железные вопросы по esp8266", создана пользователем clinkme, 23 сен 2015.

  1. clinkme

    clinkme Новичок

    Сообщения:
    32
    Симпатии:
    3
    Собрался подключить к ESP-12 LCD дисплей по SPI-интерфейсу.
    По документации, аппаратный CS привязан к GPIO15 (PERIPHS_IO_MUX_MTDO_U).
    Однако, для того чтобы модуль нормально загружался,
    GPIO15 при загрузке должен притянут к GND (я раньше всегда ставил резистор 10К на землю).
    Но как в этом случае использовать аппаратный CS?
     
  2. pvvx

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

    Сообщения:
    10.240
    Симпатии:
    1.349
    У обоих SPI модулей в ESP8266 вроде минимум 3 CS (счас не помню точно, но их явно больше):
    CS0 GPIO0
    CS1 GPIO1
    CS2 GPIO11
    Какой из них будет работать выбирается в регистрах SPI.
    Возможно поможет разобраться пример в SDK \ESP8266_SDK\examples\driver_lib\driver\spi_overlap.c
    Код (Text):
    1. #define SPI_PIN(i)                            (REG_SPI_BASE(i)  + 0x2C)
    2. #define SPI_CS2_DIS (BIT(2))
    3. #define SPI_CS1_DIS (BIT(1))
    4. #define SPI_CS0_DIS (BIT(0))
     
    Последнее редактирование: 23 сен 2015
  3. pvvx

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

    Сообщения:
    10.240
    Симпатии:
    1.349
    Если не хотите мучаться и есть лишний инвертор, то ставите инверсию сигнала SPI_PIN_CS_INV:
    Код (Text):
    1. #define SPI_PIN(i)                    (REG_SPI_BASE(i) + 0x2C) // default = 0000001e/0000001e
    2. #define SPI_PIN_CLK_INV (BIT(29))     // инверсия сигнала CLK
    3. #define SPI_PIN_MOSI_MISO (BIT(16)) // сигнал MISO выводится на MOSI
    4. #define SPI_PIN_CS_INV (BIT(6))     // инверсия сигнала CS
    5. #define SPI_CS2_DIS                        (BIT(2))
    6. #define SPI_CS1_DIS                        (BIT(1))
    7. #define SPI_CS0_DIS                        (BIT(0))
    Для решения вашей задачи можно манипулировать переключением всех входов/выходов SPI0 на SPI1 и SP1 на SP0 (полный swap):
    PERI_IO_SWAP: 0x3FF00028
    bit0: swap two uart
    bit1: swap two spi
    bit2: swap uart0 pins (u0rxd <-> u0cts), (u0txd <-> u0rts)
    bit3: swap uart1 pins (u1rxd <-> u1cts), (u1txd <-> u1rts)
    bit5: hspi is with the higher prior
    bit6: two spi masters on hspi
    bit7: two spi masters on cspi (reg_cspi_overlap)
    Короче методов много - выбирайте сами.
     
    Последнее редактирование: 24 сен 2015

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