Аппаратная реализация I2C. Часть 3 Протокол I2C

Прежде чем перейти к описанию протокола обмена по шине, от­метим, что собственно ее устоявшееся название (ай-ту-си), равно как и наименования линий (SDA и SCL), является зарегистрированным наименованием. Авторские права на эти названия принадлежат фир­ме Philips. Соответственно другие фирмы, производящие микросхе­мы с интерфейсом I2C и указывающие его наличие, как такового, в технической документации, делают это по лицензии разработчика [2]. К примеру, фирма Microchip, специализирующаяся на выпуске

clip_image002

SDA--i-*--*--*- *--

SCL -1-1-1-1-ii-

Рис. 1.18. Соединение элементов с разными напряжениями питания микроконтроллеров, имеет такую лицензию. Однако и фирмы, не имеющие лицензии, производят микросхемы с интерфейсом, очень похожим на I2C, но как I2C его не обозначают, а значит, протокол об­мена может немного отличаться от стандартизованного. Делается это для обеспечения чистоты правовых отношений, которые за рубежом соблюдаются несколько более жестко, нежели у нас в стране. В лю­бом случае, используя в своих разработках аналоги фирменных мик­росборок, рекомендуется внимательно ознакомиться с технической документацией.

Самой простой конфигурацией шины I2C, как уже было сказано, является master-организация. С нее мы и начнем рассмотрение про­токола обмена данными.

Передача любого бита по шине происходит при условии строби-рования данных SDA по линии SCL. Предположим, что master-уст­ройство выставило бит данных «О» или «1» на линию SDA. Slave-уст­ройство получит этот бит только тогда, когда на линии SCL произой­дет перепад сигнала из низкого уровня в высокий (так называемый положительный перепад). Отсюда следует первое правило организа­ции протокола шины: смена информации на линии SDA может быть произведена только при нулевом состоянии линии SCL.

clip_image004

clip_image006

Мы уже знаем, что шина в неактивном состоянии имеет на лини­ях SDA и SCL высокие уровни. Но каким образом slave-устройства могут узнать, что началась передача и что она окончилась? Для рас­познавания начала и конца передачи в спецификацию шины были введены условия Start и Stop. На рис. 1.20 представлено условие Start, на рис. 1.21 — условие Stop. В фирменной документации усло­вие Start имеет условное сокращение «S», условие Stop — «Р».

clip_image008

Рис. 1.20. Условие START

Условие Start образуется при отрицательном перепаде сигнала на линии SDA при единичном состоянии линии SCL. И наоборот, усло­вие Stop возникает при положительном перепаде линии SDA при единичном состоянии линии SCL. Эти состояния всегда должны ге­нерироваться master-устройствами. Таким образом, укрупненно ин­формационный пакет, передаваемый по шине I2C, выглядит так, как показано на рис. 1.22.

Для определения состояний Start и Stop в составе slave-устройст­ва обычно предусматривается специальная аппаратная схема, так как реализовать программно интерфейс slave-абонента довольно трудно: появляется необходимость постоянной проверки линии SDA на предмет опознавания данных.

clip_image010

Существует также состояние «повторный Start», которое может возникнуть в середине информационного пакета. Чуть позже мы рас­смотрим ситуации, когда появляется условие «повторный Start».

Передача данных по шине производится по 8 битов, после чего следует сигнал подтверждения (acknowledge). Сигнал подтвержде­ния свидетельствует о том, что данные нормально приняты и обрабо­таны... Но обо всем по порядку! Взгляните на рис. 1.23, отражающий процесс передачи байта по шине I2C.

clip_image012

После отработки состояния Start передатчик последовательно вы­ставляет на линии SDA данные, начиная со старшего бита (MSB) и заканчивая младшим (LSB). Данные стробнруются по линии SCL им­пульсами 1...8.

Обратите внимание: линия SDA приемника (slave-абонента) в мо­мент приема информационных битов (MSB-LSB) должна быть вы­ставлена в единичное состояние. Физически это означает, что тран­зистор, подключенный к линии SDA, должен быть закрыт. В момент отрицательного перепада импульса 8 на линии SCL slave-абонент должен выставить на линию SDA нулевой уровень — открыть тран­зистор. Тем самым приемник подтверждает нормальный прием бай­та. Передатчик (master-абонент) должен выставлять на линию SDA единичное состояние. Благодаря тому что линия организована по способу «монтажное И», ее состояние будет определяться только slave-абонентом. Передатчик должен проверить состояние линии SDA, затем выдать девятый стробирующий импульс, с которым slave-абонент выставит на линию SDA высокий уровень, проверить выполнение этой операции и лишь после продолжить передачу (рис. 1.24). В случае неподтверждения нормального приема (сигнал АСК имеет высокий уровень) передатчику желательно выполнить условие Stop и повторить передачу.

clip_image014

Третья ситуация, которая может возникнуть при получении сиг­нала АСК, связана с задержкой обработки данных в slave-абоненте, как показано на рис. 1.25.

clip_image016

Задержка освобождения линии SDA не свидетельствует о непра­вильном обмене информацией, поэтому master-абоненту достаточно дождаться окончания АСК и продолжить передачу. Добавим также, что в фирменной документации состояние acknowledge условно име­нуется буквой «А». Если байт, переданный по шине, является по­следним в пакете, master-устройство вместо проверки сигнала АСК может выставить состояние Stop, и slave-абонент должен освободить линию SDA.

Описанные состояния являются вполне достаточными для функ­ционирования шины I2C с одиночным master-устройством. Как пра­вило, master-абонента очень легко организовать программным спосо­бом, что и используется многими разработчиками. Для реализации режима multi-master, как уже было сказано, должны быть реализова­ны дополнительные состояния синхронизации и арбитража. Вначале рассмотрим синхронизацию.

Действительно, если на шине присутствует несколько master-або­нентов, все они наделены возможностью генерации сигнала SCL. Синхронизация между этими сигналами достигается благодаря функции «монтажное И» на линии SCL. Таким образом, состояние «О» продлится до тех пор, пока все master-устройства не выставят на линии SCL высокий уровень, и линия SCL будет задержана в состоя­нии «О» абонентом с самым длинным циклом нулевого уровня. Ос­тальные абоненты, уже освободившие линию, должны войти в со­стояние ожидания (рис. 1.26).

Литература:


Б. Ю. Семенов, «ШИНА 12С В РАДИОТЕХНИЧЕСКИХ КОНСТРУКЦИЯХ» ,Москва СОЛОН-Р 2002

Предлагаю ознакомиться с аналогичными статьями: