Чтение и запись с полудуплексным SPI

spi

В настоящее время я пытаюсь подключить устройство SPI, используя всего 3 контакта (CLK, DATA, NSS).

Проводка? Соединение MOSI/MISO вместе?

Как я могу читать, если он полудуплексный?

В ESP32 есть флаги, которые можно установить (SPI_TRANS_USE_RXDATA, SPI_TRANS_USE_TXDATA). Как я могу сделать это в среде Arduino? я не видел такой опции, и API кажется немного ограниченным.

Спасибо за любой совет.

, 👍0


1 ответ


4

Все, что вам нужно, это один резистор.

схема

Когда DATA является входом, данные от MOSI проходят через резистор как к DATA, так и к MISO. Когда DATA является выходом, данные из DATA поступают в MISO, и напряжение безопасно падает через R1 на приемник или источник MOSI в зависимости от того, в каком состоянии он находится.

Другими словами, когда вводятся ДАННЫЕ, они получают их от MOSI. Когда выводятся DATA, MOSI игнорируется.

С точки зрения кода это ничем не отличается от любого другого перевода. У вас просто никогда не будет достоверных данных для передачи при получении. Так что просто перенесите что угодно (обычно используется 0xFF).

Например, если вам нужно сначала отправить 0x38, а затем получить два байта, вы должны:

SPI.transfer(0x38);
uint8_t byte1 = SPI.transfer(0xFF);
uint8_t byte2 = SPI.transfer(0xFF);
,

Спасибо, отлично сработало! +1, @elebb