SPI — это аббревиатура английского последовательного периферийного интерфейса. Как следует из названия, это последовательный периферийный интерфейс. Это высокоскоростная полнодуплексная синхронная коммуникационная шина, впервые использованная компанией Motorola в процессорах серии MC68HCXX. Она занимает всего четыре линии на выводах чипа, что позволяет экономить контакты чипа и обеспечивает удобство и простоту использования.
Когда мы изучаем SPI, мы должны сначала посмотреть, что такое сам SPI. Просто смотреть на код и пересаживать его не имеет особого смысла. Нам следует избавиться от идеи «человека-инструментария» и изучить его. логика построения всей конструкции и реализации SPI, начиная с аппаратного интерфейса.
Интерфейс SPI имеет в общей сложности 4 сигнальные линии, а именно: линия выбора чипа, линия синхронизации, линия последовательных выходных данных, линия последовательных входных данных. Модель шины SPI представляет собой структуру кольцевой шины, состоящую из ss(cs), sck, sdi. , sdo Его синхронизация в основном контролируется sck, а обмен данными осуществляют два двунаправленных сдвиговых регистра.
Поскольку сигналы делятся на высокие и низкие уровни и фазы, SPI имеет четыре режима работы.
CPOL: уровень тактового сигнала SPI в режиме ожидания (1: высокий уровень, 0: низкий уровень) CPHA: выборки SPI, по какому фронту тактового сигнала (1: начинается со второго фронта, 0: начинается с первого фронта) Чаще всего используются MODE0 и MODE3.
Как следует из названия, главный выход подчиненного устройства — это процесс отправки инструкций ведущим устройству подчиненному. Вообще говоря, отправленный сигнал отправляется ведущим датчиком для получения данных в датчике.
Вот процесс сбора основных данных. Подчиненная машина отправляет полученные данные на главную машину, а главная машина обрабатывает данные.
Cs буквально означает сигнал выбора чипа. Вообще говоря, одна из наших платформ поддерживает более одного канала SPI. Разработчики OEM-чипов могут разработать несколько интерфейсов SPI для выбора производителя. Это зависит от чипа, который должен работать. Сигнал выбора чипа CS.
Вот три нестандартных сигнала. Вообще говоря, SPI — это всего лишь интерфейс связи, но для фактической сборки его в датчик необходимы два выхода AVDD и RST, а также три входа и выхода обратной связи INT. Один из них обеспечивает вход питания на стороне датчика, другой обеспечивает контакт сброса на стороне датчика для обработки распространенных исключений и обеспечения защиты, а другой обеспечивает функцию обратной передачи главного сигнала на стороне датчика. Эти три. предоставить гарантии на основные функции устройства.
Таким образом, полный рабочий процесс SPI должен выглядеть следующим образом:
После получения базового понимания аппаратного интерфейса SPI давайте посмотрим на временную диаграмму SPI. Изучение временной диаграммы SPI поможет нам лучше понять совместную работу между этими сигналами.
Это относительно чистая и простая для понимания диаграмма временной связи SPI. Сначала давайте объясним некоторые ключевые положения.
1) Временная диаграмма использует режим SPI 0, то есть уровень ожидания CPOL является низким, то есть высокий уровень активен, а первый фронт сигнала CPHA используется для сбора данных.
2) Сигнал выбора чипа SS, эффективен при низком уровне.
3) Сбор данных. Отправка по нарастающему фронту, прием по спадающему фронту и отправка сначала старшего бита. При появлении нарастающего фронта уровень на sdo будет отправлен в регистр ведомого устройства. При наступлении спадающего фронта уровень на SDI будет поступать в регистр ведущего устройства.
4) Данные MSB передаются первым со старшим битом.
Далее мы сосредоточимся на анализе того, как осуществляется дуплексная связь SPI.
Как показано на рисунке:
1. Сначала CS понижается
2.CLK начинает работать.
3. Сбор данных начинается на нарастающем фронте первого высокого уровня.
4. Данные MO/MI отправляются.
5.MI/MO собирает данные.
6. Повторите 3–5
На этом обмен данными внутри цикла завершается. В чем тут сложность? Основная трудность здесь в том, что надо обратить внимание на то, что МО и МИ работают одновременно. В цикле не одна линия для сбора данных. , но две линии одновременно передают данные полупериода и собирают данные полупериода. То, что собирает МО, — это данные датчиков, отправленные МИ, а МИ получает — это инструкции по управлению данными, отправленные МО. Вообще говоря, это рабочий механизм.
Имея хорошее базовое понимание аппаратного обеспечения, код фактически является программной реализацией интерфейса SPI. Поскольку производители платформ обычно предоставляют нам части спиконтроллера и спайкера, следующее краткое описание в основном относится к части драйвера устройства SPI. Часть кода взята из открытого исходного кода linuxkernel https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/?h=v4.14.258.
1) Автобус
Spi bus, регистрация и снятие с регистрации spi bus
2) Три структуры данных
a、Spi_driver
b、spi_transfer
c、spi_message
3) Три шага использования
а. Зарегистрируйте устройство SPI, вызовите функцию зонда, создайте класс и установите скорость связи SPI.
Этот код легко понять: зарегистрирован драйвер устройства spidev_dt_ids. Здесь необходимо отметить, что содержимое dts не является основной темой этой главы. .
б. Настройте параметры, относящиеся к устройствам SPI.
Как показано на рисунке, есть три ключевых момента для сравнения: первый — это хранение данных структуры данных spi-связи, второй — регистрация узла устройства и третий — установка скорости spi.
c. Отправка и получение данных, на примере spi write.
Исходный код ядра вставлен сюда, чтобы показать вам процесс инкапсуляции этих данных. Из-за его справочной значимости ни одна строка кода здесь не была удалена.
Во-первых, давайте взглянем на spidev_write. Этот интерфейс предполагает интерфейс системного вызова с пользовательским пространством и регистрируется драйвером символьного устройства fops.
Данные tx_buf отправляются, rx_buf — данные принимаются, а len отправляет длину.
После того как данные инкапсулируются с помощью spi_transfer, они собираются с помощью structspi_message и, наконец, отправляются базовой структурой данных spi через spi_sync.
Чтение данных практически такое же, как и этот процесс. Поскольку это дуплексная связь, spi_transfer может одновременно вводиться как tx и считываться как rx.
На данный момент основной процесс работы драйвера устройства spi приведен здесь. Некоторые основные настройки конфигурации ioctl spi можно найти в исходном коде spidev.c.
Лично я понимаю, что в условиях нынешней тенденции технологического развития, на фоне мобильных телефонов, Интернета вещей, автомобилей и другого терминального оборудования, разработка датчиков является очень важной движущей силой, овладение базовыми возможностями программного обеспечения для вождения также является важным. является главным приоритетом. Linux предоставил нам хорошую платформу для качественного изучения кода на плечах наших предшественников. Нам также необходимо воспользоваться этой возможностью и усердно работать, хорошо выполняя основную работу. и продолжайте двигаться вперед. Желаю вам всего наилучшего и желаю себе идти все дальше и дальше по пути технологий.