Вы здесь

Передача байта данных по I2C шине

Давайте рассмотрим осциллограмму транзакции, где I2C ведущий передает один байт данных на ведомое устройство.

I2C transfer

Как мы видели в предыдущем разделе, данные на линии SDA могут меняться, когда линия SCL в нуле. Исключениями из этого правила являются состояния START и STOP. Также есть повторный START (repeated START – Sr), но его мы рассмотрим в одной из последующих глав.

Состояние START извещает ведомых о начале передачи. Для генерации состояния START ведущий переводит SDA линию из единицы в ноль, оставляя линию SCL в единице. Позже он выставляет ноль на линии SCL, чтобы приготовить шину для передачи первого бита.

I2C Start Condition

Первые семь бит, следующие за состоянием START, содержат адрес ведомого устройства I2C. Как и любые данные, адрес передается последовательно, начиная со старшего бита (MSB) и заканчивая младшим. Каждое ведомое устройство, подключенное к шине I2C, должно иметь уникальный адрес. В данной транзакции участвует ведомое устройство с адресом 1010001 (0x51). Все остальные ведомые ждут генерации состояния STOP.

Восьмой бит первого байта определяет направление передачи. В нашем случае он установлен в ноль. Это означает, что данные передаются от ведущего к ведомому (операция записи - write). Направление передачи задается ведущим устройством.

После каждых восьми бит данных (в том числе байт адреса и направления передачи), следует бит подтверждения (ACK - acknowledge). Этот бит устанавливается принимающим устройством. В нашем случае, байт был передан Ведущим, поэтому Ведомый устанавливает бит подтверждения равным 0. Ведущий генерирует тактовый импульс для бита подтверждения (также как и все другие тактовые импульсы).

Отсутствие подтверждения (высокий уровень на линии SDA) байта адреса может быть в одном из трех случаев:

  1. Ведомое устройство с этим адресом не подключено к шине.
  2. Ведомый не поддерживает данного направления передачи (запись в нашем случае). Есть ряд устройств, которые поддерживают только операции чтения. Например, некоторые датчики температуры и давления.
  3. Ведомое устройство на данный момент занято обработкой предыдущей команды и не готово к приему следующей. В некоторых случаях Ведомый может задержать Acknowledge, удерживая линию SCL в нуле. Но об этом мы поговорим в разделе, посвященном синхронизации.

Независимо от причины отсутствия подтверждения, мастер должен сгенерировать состояние STOP и освободить шину.

 После подтверждения байта адреса Ведущий может передать первый байт данных. Байт данных также должен быть подтвержден сигналом ACK от Ведомого.

В конце передачи Ведущий генерирует состояние STOP и освобождает шину. Состояние STOP генерируется изменением линии SDA с нуля на единицу, в то время как SCL в единице. Перед генерацией состояния STOP мастер устанавливает ноль на линии SDA (при низком уровне сигнала на SCL).

Rating: 
No votes yet
Robertevath Rob...
Аватар пользователя Robertevath Robertevath
Offline
Последнее посещение: 1 месяц 1 неделя назад
Регистрация: 04/21/2018 - 10:28
Аренда крана манипулятора в Кировском районе
Привлекательность аренды крана-манипулятора в СПб и Ленингадской области http://www.manipulator-47.ru подтверждается самими благодарными клиентами, которые нуждались именно в таком виде сервиса. Рентабельность говорит сама за себя, когда со всеми работами, справляется всего одна машина. Вам только стоит ознакомиться со способом оформления заказа, и вы сэкономите массу денег! http://www.manipulator-47.ru - https://c.radikal.ru/c21/1804/50/900c92de371d.jpg

Языки

Вход на сайт