Lt304888.ru

Туристические услуги

Serial Peripheral Interface

19-05-2023

SPI (англ. Serial Peripheral Interface, SPI bus — последовательный периферийный интерфейс, шина SPI) — последовательный синхронный стандарт передачи данных в режиме полного дуплекса, разработанный компанией Motorola для обеспечения простого и недорогого сопряжения микроконтроллеров и периферии. SPI также иногда называют четырёхпроводным (англ. four-wire) интерфейсом.

В отличие от стандартного последовательного порта (англ. standard serial port), SPI является синхронным интерфейсом, в котором любая передача синхронизирована с общим тактовым сигналом, генерируемым ведущим устройством (процессором). Принимающая периферия (ведомая) синхронизирует получение битовой последовательности с тактовым сигналом. К одному последовательному периферийному интерфейсу ведущего устройства-микросхемы может присоединяться несколько микросхем. Ведущее устройство выбирает ведомое для передачи, активируя сигнал «выбор кристалла» (англ. chip select) на ведомой микросхеме. Периферия, не выбранная процессором, не принимает участие в передаче по SPI.

В SPI используются четыре цифровых сигнала:

  • MOSI или SI — выход ведущего, вход ведомого (англ. Master Out Slave In). Служит для передачи данных от ведущего устройства ведомому.
  • MISO или SO — вход ведущего, выход ведомого (англ. Master In Slave Out). Служит для передачи данных от ведомого устройства ведущему.
  • SCLK или SCK — последовательный тактовый сигнал (англ. Serial Clock). Служит для передачи тактового сигнала для ведомых устройств.
  • CS или SS — выбор микросхемы, выбор ведомого (англ. Chip Select, Slave Select).

Пример программной реализации

Ниже представлен пример программной реализации SPI мастера на языке Си. Линия «chip select» (выбор микросхемы) должна быть активирована (в большинстве случаев это означает-притянута к низкому уровню), перед тем, как начнётся обмен данными, и деактивирована после окончания обмена. Большинство устройств требуют несколько сеансов передачи с активной линией chip select. Эта процедура может быть вызвана несколько раз, пока линия активна.

unsigned char SPIBitBang8BitsMode0(unsigned char byte)
{       
    unsigned char bit;
 
    for (bit = 0; bit < 8; bit++) {
        /* записать MOSI по спаду предыдущего тактового импульса */
        if (byte & 0x80)
            SETMOSI();
        else
            CLRMOSI();
        byte <<= 1;
 
        /* ждём половину тактового периода перед тем как сгенерировать фронт */
        SPIDELAY(SPISPEED/2);
        SETCLK();
 
        /* ждём половину тактового периода перед тем как сгенерировать спад */
        SPIDELAY(SPISPEED/2);
 
        /* читаем MISO on trailing edge */
        byte |= READMISO();
        CLRCLK();
    }
 
    return byte;
}



Ссылки

  • Последовательный интерфейс SPI
  • Дедюхин А.А. Декодирование и анализ сигналов шин I2C, SPI, RS-232C, RS-422, RS-485 и UART с использованием осциллографов LeCroy  (рус.). Проверено 8 декабря 2009.
  • SPI и Arduino


Serial Peripheral Interface.

© 2020–2023 lt304888.ru, Россия, Волжский, ул. Больничная 49, +7 (8443) 85-29-01