Последовательная связь
Интерфейс межсетевого взаимодействия
Также известен как I2C, C или "I в квадрате C". Это более сложный интерфейс, похожий на SPI, но он использует только 2 линии для всех устройств, подключенных к шине. Эти 2 линии - SDA (линия последовательных данных) и SCL (линия последовательного тактового генератора). Любое устройство может управлять этими двумя линиями, и каждое устройство имеет свой адрес в шине, так что микроконтроллер может взаимодействовать со многими внешними устройствами в одной шине. Именно этот интерфейс используется в системе Qwiic Connect.
Любое устройство в сети может управлять этими двумя линиями. Это электрически безопасно, поскольку ими управляют выходы с открытым затвором. Это означает, что устройства могут подтягивать эти сигналы только вниз, но не вверх. Для обеспечения высокого уровня по умолчанию требуется пара внешних подтягивающих резисторов.
I2C поддерживает множество ведущих/контроллеров и множество ведомых/периферийных устройств, как мы видим на этой диаграмме:
![Сеть I2C с двумя контроллерами и двумя периферийными устройствами (взято из SparkFun Electronics, предоставлено по CC BY 4.0)](/EDI/20_01_25_2/1737325222-1077/tutorial/1372/objects/7/files/06-08.jpg)
Рис. 6.8. Сеть I2C с двумя контроллерами и двумя периферийными устройствами (взято из SparkFun Electronics, предоставлено по CC BY 4.0)
Адрес каждого устройства может быть жестко задан, может конфигурироваться аппаратно (с помощью перемычек или переключателей), или может конфигурироваться программно.
И снова этот интерфейс включает в себя протокол с более высоким уровнем абстракции, где ведущий управляет тактовой линией, передавая сообщения, которые получают все ведомые, но адресованные одному из них. Адресованное ведомое устройство должно ответить ведущему согласованным количеством передач. Эти передачи также транслируются, и все элементы сети слушают их.
С точки зрения микроконтроллера, типичным способом работы с периферийным устройством I2C является использование следующих операций:
- Отправка данных для записи во внутренние регистры устройства (по адресу). Это известно как операция записи.
- Запрос данных во внутренних регистрах устройства (также по адресу). Это операция чтения.
Операции чтения и записи представляют собой сообщения I2C, состоящие из кадра адреса и одного или нескольких кадров данных. Кадр адреса - это I2C-адрес периферийного устройства, с которым хочет установить связь ведущий, а первый кадр данных обычно представляет собой адрес регистра периферийного устройства для чтения/записи. Для операций записи, как правило, второй кадр данных - это байт для записи.
Сообщения I2C имеют сигнальное поведение условий запуска и остановки (аналогично битам запуска и остановки UART), что позволяет передавать многобайтовые сообщения, состоящие из нескольких сообщений с одним условием запуска в первом сообщении и условием остановки в последнем.
Быстрый пример
Предположим, у нас есть ультразвуковой датчик приближения со следующими характеристиками:
- I2C фиксированный адрес: 0x24.
- Все данные имеют ширину 8 бит.
- Регистр конфигурации единиц измерения по адресу устройства 0x80. Запишите в этот регистр 0x01 для сантиметров или 0x00 для дюймов.
- Регистр измерения расстояния находится по адресу устройства 0x84. В этом регистре хранится расстояние, обнаруженное датчиком в любой момент времени, в настроенных единицах измерения.
Чтобы настроить этот датчик на сообщение о расстоянии в сантиметрах, ведущий должен отправить операцию записи, адресованную устройству 0x24, со значением данных 0x01.
Чтобы прочитать расстояние, ведущее устройство должно отправить операцию чтения, адресованную устройству 0x24, с адресом 0x84, и принять данные в ответном сообщении за запрошенное расстояние.
Как обычно, мы приводим учебник по I2C от SparkFun, если вы хотите узнать больше.
Сравнение SPI, UART и I2C
Каждая из этих технологий имеет свои области применения, в которых она господствует, и каждая из них ужасна в некоторых областях. Итак, что же лучше? Как и почти во всем остальном, это зависит от ситуации. Здесь мы приводим некоторые моменты, которые следует учитывать, пытаясь решить, какой последовательный интерфейс использовать для ваших приложений:
- SPI и I2C хороши для высокоскоростной связи, потому что они используют линию синхронизации. Это практически ограничивает скорость передачи данных максимальной скоростью, на которой могут работать цифровые схемы и электрические элементы.
- SPI может работать на очень высоких скоростях, определенно превышающих 1 Мбит/с.
- I2C не такой быстрый, как SPI, но все же довольно быстрый: Стандартная скорость I2C составляет 100 кбит/с.
- UART часто реализуют физические уровни для достижения больших расстояний около 100 м, в то время как I2C и SPI предназначены для связи устройств внутри платы или между двумя платами с помощью коротких кабелей.
- SPI проще всего реализовать внутри чипа, поэтому логично, что он может стоить дешевле в производстве, занимать меньшую площадь в чипе, потреблять меньше энергии и так далее.
- UART требует только одну линию для односторонней передачи данных. Это делает его идеальным для инфракрасной связи с использованием только одного светового сигнала.
- По этой причине UART является самым простым в настройке с точки зрения пользователя.
- Однако UART - это интерфейс "точка-точка", в котором нет ведущих и ведомых, только две конечные точки.
- I2C является наиболее гибким для создания сети устройств, поддерживая более одного ведущего устройства и практически неограниченное количество ведомых.
- I2C является полудуплексным (вы можете отправить или получить только одно сообщение в определенный момент времени), в то время как SPI и UART являются полнодуплексными (вы можете отправлять и получать сообщения одновременно).
Последовательная связь в микроконтроллере FE310
Микроконтроллер FE310 оснащен 1 устройством I2C, 2 устройствами UART, 2 устройствами SPI. На данном этапе вы можете обратиться к руководству FE310, чтобы проверить описание этих устройств. В этом случае вы найдете достаточно информации для создания собственных приложений, использующих интерфейс UART или SPI.
Теперь для интерфейса I2C есть своя загвоздка: Его глава занимает менее одной страницы. Фактически, все, что мы получаем, это базовый адрес единственного устройства I2C в таблице 98 и примечание, указывающее, что модуль I2C основан на открытой конструкции, с указанием его URL.
![Базовый адрес устройства I2C в микроконтроллере FE310 (Изображение из руководства пользователя FE310-G002, воспроизведено с разрешения компании SiFive, Inc.)](/EDI/20_01_25_2/1737325222-1077/tutorial/1372/objects/7/files/06-09.jpg)
Рис. 6.9. Базовый адрес устройства I2C в микроконтроллере FE310 (Изображение из руководства пользователя FE310-G002, воспроизведено с разрешения компании SiFive, Inc.)
Это немного усложняет ситуацию, поскольку мы собираемся использовать устройства Qwiic, которые используют интерфейс I2C, поэтому у нас есть 2 варианта:
- Перейдите на страницу проекта открытой конструкции и изучите ее использование там. Однако этот вариант не позволит узнать адреса регистров.
- Просто используйте библиотеку Freedom Metal Library, которая предоставляет высокоуровневые функции, необходимые для работы с I2C.
На этот раз мы выберем вариант 2. Теперь, если вы хотите углубиться в оригинальный дизайн этого модуля, вы можете посетить страницу проекта на opencores.org.
Система Qwiic Connect
Компания SparkFun разработала систему Qwiic Connect, чтобы облегчить пайку при создании сетей I2C между своими микроконтроллерными платами и модулями.
Система Qwiic Connect System не добавляет никакой функциональности к стандарту I2C. Это просто удобный стандарт разъемов, позволяющий легко подключить микроконтроллер к модулям I2C. По этой причине большинство плат Qwiic имеют два разъема, что позволяет создать сеть с гирляндной цепью, как на следующем рисунке.
![Сеть Qwiic с одним контроллером и четырьмя устройствами (взято с сайта SparkFun Electronics, предоставлено по CC BY 4.0)](/EDI/20_01_25_2/1737325222-1077/tutorial/1372/objects/7/files/06-10.jpg)
Рис. 6.10. Сеть Qwiic с одним контроллером и четырьмя устройствами (взято с сайта SparkFun Electronics, предоставлено по CC BY 4.0)
Чтобы узнать больше о системе Qwiic Connect System, посетите сайт SparkFun.