Двустороння связь по SPI

Ilya_Sh

✩✩✩✩✩✩✩
7 Апр 2025
16
0
Доброго времени суток. Я пытаюсь организовать двустороннюю связь по SPI между NodeMCU esp-12e (esp8266) в качестве мастера и atmega48 в качестве слейва. Данные от мастера слейв получает без проблем, однако ответ от слейва на мастере записать не получается: в мониторе порта всегда 255.
Код мастера:
#include <SPI.h>
uint8_t value = 250;
void setup() {
  pinMode(D8,OUTPUT);
  digitalWrite(D8,1);
  Serial.begin(9600);
  delay(1000);
  SPI.begin();
  SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
}

void loop() {
  digitalWrite(D8,0);
  SPI.transfer(value);
  delayMicroseconds (20);
  Serial.println(SPI.transfer(0));
  digitalWrite(D8,1);
  delay(1000);
}
Код слейва:
#define PIN_SS   PB2
#define PIN_MOSI PB3
#define PIN_MISO PB4
#define PIN_SCK  PB5

volatile uint8_t received_byte = 0;

void setup() {

    pinMode(PIN_SS, INPUT);
    pinMode(PIN_MOSI, INPUT);
    pinMode(PIN_SCK, INPUT);
    pinMode(PD5, OUTPUT);
    digitalWrite(PD5,0);
    pinMode(PIN_MISO, OUTPUT);
    SPCR  |= _BV(SPE);
    SPCR |= (1 << SPIE);
}

ISR(SPI_STC_vect) {
    received_byte = SPDR;
    if(received_byte==250)digitalWrite(PD5,1);
    else digitalWrite(PD5,0);
    SPDR=128;
}

void loop() {}
Подскажите, пожалуйста, в чём у меня может быть проблема. Не исключаю, что проблема может быть в аппаратной части:
Мастер
Слейв
D8 (HCS)PB2 (SS)
D7 (HMOSI)PB3 (MOSI)
D6 (HMISO)PB4 (MISO)
D5 (HSCLK)PB5 (SCK)
1785951613588.png
1785951680622.png
Порты соеденены напрямую, без какаких-либо подтяжек. Логические уровни согласованы, земля общая. Спасибо