Принципы обмена данными по шине TWI
Поскольку шина TWI является последовательной, все данные передаются по ней (по линии SDA) поразрядно. Каждый передаваемый разряд сопровождается импульсом на линии тактового сигнала SCL. Причем сигнал на линии SDA должен быть стабильным все то время, пока на шине SCL присутствует сигнал лог. 1 (Рис.10.2). Единственным исключением из этого правила являются два особых состояния шины TWI—СТАРТ и СТОП.
Рис.10.2. Корректная выдача данных на шину SDA Состояния СТАРТ и СТОП формируются ведущим в начале и в конце передачи данных соответственно. Между этими состояниями шина считается занятой, и другие ведущие не должны пытаться управлять ею. Если ведущий хочет начать передачу нового блока данных без потери/восстановления контроля над шиной, он может сформировать состояние СТАРТ до формирования состояния СТОП. Формируемое таким образом состояние называется «повторный СТАРТ» (ПОВСТАРТ), а шина считается занятой до последующего формирования состояния СТОП. Поскольку такое поведение ничем не отличается от поведения после формирования состояния СТАРТ, в дальнейшем оба эти состояния (СТАРТ и ПОВСТАРТ) будут обозначаться как СТАРТ, кроме тех случаев, где их необходимо различать. Состояния СТАРТ и СТОП формируются путем изменения уровня сигнала на линии SDA при ВЫСОКОМ уровне на линии SCL. Состоянию СТАРТ соответствует смена уровня с «1» на «0», а состоянию СТОП— наоборот, с «0» на «1» (Рис.10.3). $<_IL_198>$ Рис. 10.3 Состояния СТАРТ, СТОП и ПОВСТАРТ
Заметим, что протокол интерфейса TWI позволяет подключать к шине несколько ведущих устройств (режим Multi Master). При этом могут возникать различные проблемы, одной из которых является несовпадение частот тактовых сигналов, генерируемых разными ведущими. Задача синхронизации решается очень просто благодаря подсоединению всех устройств к линии SCL по схеме «монтажное И». В результате длительность тактовых импульсов на линии SCL определяется тактовым сигналом с наименьшей длительностью импульсов. А пауза между тактовыми импульсами, наоборот, определяется тактовым сигналом с наибольшей паузой между импульсами. Помимо этого, все ведущие контролируют уровень, присутствующий на линии SCL, и определяют момент начала отсчета импульса или паузы тактового сигнала по соответствующему изменению сигнала (Рис.10.4). Другой задачей, которую приходится решать при подключении к шине нескольких ведущих устройств, является задача распределения приоритетов, в случае если два и более ведущих одновременно пытаются начать передачу. При возникновении такой ситуации передачу может осуществить только один ведущий, остальные же должны переключиться в режим ведомого. Причем передаваемые данные во время распределения приоритетов не должны иска жаться.
Рис.10.4.. Синхронизация сигнала SCL нескольких ведущих Для решения описанной задачи все ведущие устройства после выдачи данных на линию SDA контролируют ее состояние. Если состояние линии отличается от того, в которое ее переводил ведущий, он теряет приоритет (Рис.10.5). Еще раз напомним, что такое возможно только в случае выдачи им сигнала ВЫСОКОГО уровня во время выдачи другими ведущими (получившими приоритет) сигнала НИЗКОГО уровня. Ведущий, потерявший приоритет, должен немедленно переключиться в режим ведомого и проверить, не был ли он адресован каким либо из ведущих, получивших приоритет. При этом он должен продолжать удерживать на линии SDA сигнал ВЫСОКОГО уровня. Однако он может продолжать генерировать тактовый сигнал до окончания передачи текущего пакета. Процесс распределения приоритетов продолжается до тех пор, пока на шине не останется только один ведущий. В случае если несколько ведущих пытаются адресовать одного и того же ведомого, процесс распределения приоритетов продолжается и во время передачи пакета данных. Отсюда следует, в частности, что все циклы обмена должны содержать одинаковое количество пакетов данных, в противном случае результат процесса распределения приоритетов будет неопределенным. При этом следует помнить, что процесс распределения приоритетов не должен выполняться между: • состоянием ПОВСТАРТ и передачей разряда данных; • состоянием СТОП и передачей разряда данных; • состоянием ПОВСТАРТ и СТОП. Ответственность за невозникновение перечисленных ситуаций ложится на программное обеспечение устройств, подключенных к шине.
Рис. 10.5 Распределение приоритетов между двумя ведущими При передаче данных по шине TWI вместе с ними передается определенная служебная информация. Совокупность данных и соответствующей служебной информации называется пакетом. Различают адресные пакеты и пакеты данных.
|