Описание тега i2c
Используйте этот тег, задавая вопросы, касающиеся шины I 2C или SMBus, которая является более строго определенным подмножеством I 2C.
Устройства, с которыми вы можете общаться с помощью I 2C, могут включать датчики температуры и напряжения на вашей материнской плате. Во встроенных системах огромное количество устройств, от микросхем памяти до модулей камер, используют I 2C для управления и передачи данных.
Шина I 2C состоит из двух сигналов: SCL и SDA. SCL - это тактовый сигнал, а SDA - это сигнал данных.
https://stackru.com/images/ab9848816800e7518c44fa6e739706c1b6a7b55e.jpg
Тактовый сигнал всегда генерируется текущим мастером шины; некоторые ведомые устройства могут время от времени устанавливать низкий уровень тактовых импульсов, чтобы задержать отправку большего количества данных ведущим (или потребовать больше времени для подготовки данных, прежде чем ведущее попытается их отсчитать). Общая тактовая частота шины I 2C составляет 100 кГц (100 кбит / с) и 400 кГц (400 кбит / с). Доступны высокоскоростные версии с тактовой частотой не менее 1 МГц (1 Мбит / с), которые зависят от продукта производителями полупроводников.
Шина является шиной с несколькими ведущими, что означает, что может присутствовать любое количество мастер-узлов. Кроме того, между сообщениями могут меняться роли ведущего и ведомого (после отправки STOP).
В любой момент времени только мастер может инициировать обмен данными. Поскольку на шине более одного ведомого устройства, ведущее устройство должно обращаться к каждому ведомому устройству, используя другой адрес. При обращении только ведомое устройство с этим конкретным адресом ответит с информацией, в то время как остальные продолжат выход. Таким образом, мы можем использовать одну и ту же шину для связи с несколькими устройствами.
Уровни напряжения I 2C заранее не определены. Связь I2C является гибкой, это означает, что устройство, которое питается от 5 В, может использовать 5 В для I2C, а устройства 3,3 В могут использовать 3 В для связи I2C. Шину I2C 5 В нельзя подключить к устройству 3,3 В. В этом случае используются переключатели напряжения для согласования уровней напряжения между двумя шинами I2C.
Есть некоторый набор условий, которые определяют транзакцию. Инициализация передачи начинается с заднего фронта SDA, который определяется как состояние "START" на диаграмме ниже, когда мастер оставляет SCL высоким, а SDA устанавливает низкий. После этого все устройства на одной шине переходят в режим прослушивания.
Таким же образом нарастающий фронт SDA останавливает передачу, что показано как состояние "STOP" на приведенной выше диаграмме, когда ведущее устройство оставляет SCL на высоком уровне, а также освобождает SDA для перехода на высокий уровень. Таким образом, нарастающий фронт SDA останавливает передачу.
https://stackru.com/images/b1ab6d61af4e74a00b68387defa2ceec5ed323eb.png
С I 2C данные передаются в сообщениях. Сообщения разбиваются на блоки данных. Каждое сообщение имеет адресный кадр, который содержит двоичный адрес ведомого устройства, и один или несколько кадров данных, которые содержат передаваемые данные. Сообщение также включает в себя условия запуска и остановки, биты чтения / записи и биты ACK/NACK между каждым фреймом данных:
https://stackru.com/images/68ce99764156e1fdb664ed0e37ebbfe62586a0a1.png
Адресный кадр: 7- или 10-битная последовательность, уникальная для каждого ведомого устройства, которая идентифицирует ведомое устройство, когда ведущее устройство хочет с ним поговорить.
Бит чтения / записи: один бит, определяющий, отправляет ли ведущее устройство данные ведомому (низкий уровень напряжения) или запрашивает данные у него (высокий уровень напряжения).
Бит ACK/NACK: за каждым кадром в сообщении следует бит подтверждения / отсутствия подтверждения. Если адресный кадр или кадр данных были успешно получены, от принимающего устройства отправителю возвращается бит ACK.
Дополнительная информация: