SPI между ведущим arduino и ведомым arduino

Как я могу отправить строку из Slave SPI в Master SPI?

Я хочу написать код на Голом металле.

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу понять, какова будет моя функция блокировки в коде Master SPI при получении данных от slave SPI.

Поскольку мой бит SPIF очищается в мастер-коде, как только я переключаю регистр SPDR с ведущего на приемный байт, который поступает от ведомого.

#define spi_data_reg SPDR     
//Функция чтения байтов Naster
    uint8_t MA_SPI0_read_byte()
    {    
        spi_port &= ~(1<<SS);
        spi_data_reg = 0;
        while(!(SPSR & (1<<SPIF)));                  //Дождитесь завершения передачи
        return(spi_data_reg);                                 //Возврат полученных данных
       spi_port |= (1<<SS);
    }
    
    //Slave send byte function
    void SL_SPI0_send_byte(uint8_t data)
    {
        spi_data_direc=(1<<MISO);   //MISO в КАЧЕСТВЕ ВЫВОДА
        spi_data_reg = data;
        while(!(SPSR &(1<<SPIF)));
    }

, 👍5

Обсуждение

Сначала: `spi_port |= (1<, @Peter Paul Kiefer

Насколько я понимаю SPI-связь, Slave не может отправлять данные Мастеру без того, чтобы Мастер не инициировал связь. Как правило, Ведущий отправляет фиктивные данные, чтобы он мог получить ответ от ведомого устройства. Таким образом, Ведущий должен знать, сколько байтов нужно получить и сколько раз отправить фиктивные данные Подчиненному, чтобы получить ответ., @Kavka


1 ответ


-2

Не стесняйтесь взглянуть на мои видео на YouTube. Они не монетизируются, поэтому я не занимаюсь саморекламой. Вы даже можете пропустить видео и проверить мое репо GitHub с скетчами Master и Slave. https://youtu.be/A9oSX_dwJKQ https://youtu.be/PSUzhCtNRRQ https://github.com/linhartr22/Arduino_SPI_Master_Slave_Demo

,

Хотя теоретически это может ответить на вопрос, [было бы предпочтительно](//meta.stackexchange.com/q/8259) включить сюда основные части ответа и предоставить ссылку для справки., @Juraj