Сегодняшняя статья – небольшое теоретическое отступление, которое поможет нам при освоении курса «Программирование Ардуино». Речь пойдёт об интерфейсе SPI. Что это такое и с чём его едят, мы постараемся разобраться в данной статье.
Для начала определение. SPI (Serial Peripheral Interface - последовательный периферийный интерфейс) – это последовательный синхронный стандарт передачи данных, который предназначен для связи контроллера с различной периферией. Этот интерфейс простой и удобный. Под Аrduino написана специальная библиотека для работы с SPI.
Связь строится по принципу «ведущий-ведомый». В качестве ведущего устройства обычно выступает контроллер. Все остальные устройства, что подключаются в систему - ведомыми. Данные от ведущего устройства по шине данных передаются к одному из выбранных ведомых или наоборот от ведомого устройства к ведущему синхронно, по тактирующему сигналу ведущего.
Распиновка шины данных SPI состоит из 4-х линий: MOSI, MISO, CS и SCLK:
- MOSI (Master Out Slave In - Ведущий-выход, Ведомый-вход) или просто SI – передача данных происходит от ведущего устройства к ведомому.
- MISO (Master In Slave Out - Ведущий-вход, Ведомый-выход) или просто SO – передача данных происходит от ведомого устройства к ведущему.
- CS (Chip Select - Выбор чипа) или SS (Slave Select - Выбор ведомого) – выбор ведомого устройства.
- SCLK (Serial CLocK) или просто SCK – передача тактового сигнала от ведущего устройства к ведомому.
Для того, чтобы передать данные от ведущего устройства к ведомому необходимо, чтобы ведущий выставил низкий уровень сигнала на линии CS ведомого, с которым собирается настроить связь. После этого биты передаются по линии MOSI. Для прекращения передачи данных ведущий как бы "отпускает" линию CS – выставляя на ней высокий уровень сигнала.
Для подключения нескольких ведомых устройств к шине данных SPI нужно на каждое из них завести свою индивидуальную линию CS. После того, как это будет выполнено, ведущее устройство сможет поочерёдно «дергать» линиями, переключаясь между ведомыми устройствами. Несколько ведомых можно подключать по разному: параллельно или последовательно.
Параллельное подключение ведомых устройств по шине данных SPI
Особенность параллельного подключения нескольких ведомых устройств заключается в том, что для создания связи используются общие линии SCLK, MOSI и MISO. При этом каждое ведомое устройство имеет свою линию SS(CS). Ведущее устройство определяет с каким «текущим ведомым» наладить обмен данными, путем формирования низкого уровня сигнала на соответствующей линии SSn (где n – 1,2…).
Для подключения к контроллеру n-числа ведомых устройств по интерфейсу SPI нужно выделить для данной цели n+3 выводов микроконтроллера.
Последовательное подключение ведомых устройств к шине SPI
Что же касается последовательного подключения ведомых устройств, то они используют общие линии SCLK и SS, а выход одного подключается ко вход другого. Линия MOSI ведущего устройству подключается к первому ведомому, а линия MISO - к последнему. Если смотреть на это подключение с точки зрения ведущего устройства, то по шине данных SPI, как бы подключено одно ведомое устройство.
Следует отметить преимущество такого типа подключения: можно подключать n-ое число устройств задействовав для этой цели всего 4 вывода микроконтроллере.
На этом пока всё, продолжение следует...