• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

HSPI и GPIO15

clinkme

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

pvvx

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

pvvx

Активный участник сообщества
Если не хотите мучаться и есть лишний инвертор, то ставите инверсию сигнала SPI_PIN_CS_INV:
Код:
#define SPI_PIN(i)                    (REG_SPI_BASE(i) + 0x2C) // default = 0000001e/0000001e
#define SPI_PIN_CLK_INV (BIT(29))     // инверсия сигнала CLK
#define SPI_PIN_MOSI_MISO (BIT(16)) // сигнал MISO выводится на MOSI
#define SPI_PIN_CS_INV (BIT(6))     // инверсия сигнала CS
#define SPI_CS2_DIS                        (BIT(2))
#define SPI_CS1_DIS                        (BIT(1))
#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)
Короче методов много - выбирайте сами.
 
Последнее редактирование:
Сверху Снизу