- •Глава 1. Архитектура микроконтроллерa Atmega 128
- •Организация памяти
- •Память программ
- •1.1.2. Память данных
- •1.2.Счетчик команд и выполнение программы
- •1.2.1.Счетчик команд
- •1.2.2.Функционирование конвейера
- •1.2.3.Стек
- •Глава 2
- •2.1Тактовый генератор
- •2.3Режимы пониженного энергопотребления
- •Idle (ждущий режим)
- •2.4. Сброс
- •Глава3. Прерывания
- •Глава4. Порты ввода/вывода
- •Глава5. Таймеры
- •Глава 6. Аналоговый компаратор
- •6.1. Функционирование компаратора
- •Глава7. Аналого-цифровой
- •7.1 Общие сведения
- •7.2. Функционирование модуля ацп
- •Глава 8. Универсальный асинхронный
- •8.1 Общие сведения
- •8.2. Использование модулей usart
- •Глава 9. Последовательный
- •9.1 Функционирование модуля spi
- •9.2 Режимы передачи данных
- •Глава 10. Последовательный двухпроводный интерфейс
- •10.1 Общие сведения
- •10.2. Принципы обмена данными по шине twi
- •10.3. Модуль twi
- •10.4. Взаимодействие прикладной программы
- •10.5. Режимы работы модуля twi
Глава 10. Последовательный двухпроводный интерфейс
10.1 Общие сведения
Модуль двухпроводного последовательного интерфейса (Two wire Serial Interface, TWI) входит в состав микроконтроллера ATmega 128x. Данный интерфейс является полным аналогом базовой версии интерфейса I2C фирмы «Philips». Интерфейс TWI позволяет объединить вместе до 128 различных устройств с помощью двунаправленной шины, состоящей всего из двух линий: линии тактового сигнала (SCL) и линии данных (SDA). Единственными дополнительными элементами для реализации шины являются два подтягивающих резистора, по одному на каждую линию (Рис.10.1).
Рис 10.1. Соединение устройств с помощью шины TWI
Шинные формирователи всех TWI совместимых устройств выполняются по схеме с открытым коллектором (стоком), что позволяет реализовать функцию «монтажное И». Соответственно, НИЗКИЙ уровень на линии устанавливается тогда, когда одно или более устройств выставляют на линию сигнала лог. 0, а ВЫСОКИЙ уровень на линии устанавливается тогда, когда все устройства, подключенные к ней, устанавливают свои выходы в третье состояние.
При последующем рассмотрении модуля TWI будут часто встречаться некоторые термины. Их описание приведено в Табл. 10.1
Таблица10.1.
Термины,
используемые при описании модуля TWI
10.2. Принципы обмена данными по шине 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 вместе с ними передается определенная служебная информация. Совокупность данных и соответствующей служебной информации называется пакетом. Различают адресные пакеты и пакеты данных.
Формат адресного пакета
Все адресные пакеты, передаваемые по шине TWI, имеют длину 9 бит. Пакет включает 7-разрядный адрес (первым передается старший разряд), управляющий бит R/W и бит квитирования ACK (Рис.10.6). Значение управляющего бита R/W определяет направление передачи данных по шине. Сброшенный в «0» бит означает передачу данных, а установленный в «1» — запрос данных (чтение). Пакеты со сброшенным и установленным управляющим битом обозначаются соответственно SLA W и SLA R.
Рис.10.6 Формат адресного пакета
При распознавании ведомым своего адреса он должен сформировать подтверждение путем выдачи на линию SDA сигнала НИЗКОГО уровня во время 9-го тактового импульса (ACK). Если ведомый по каким либо причинам не может обслужить запрос ведущего, он должен во время 9-го тактового импульса удерживать на линии сигнал ВЫСОКОГО уровня (NACK).
Ведомым устройствам могут быть назначены любые адреса за исключением нулевого адреса и адресов из диапазона «1111000…1111111». Нулевой адрес зарезервирован для реа- лиизации так называемых общих вызовов, а адреса формата «1111xxx» должны быть зарезер вированы для использования в дальнейшем.
Общий вызов используется, когда ведущий хочет передать всем ведомым, подключенным к шине, одно и то же сообщение. При приеме адресного пакета с нулевым адресом и сброшенным управляющим битом (запрос на передачу) все ведомые устройства, подключенные к шине, должны сформировать подтверждение. Исключение составляют лишь те устройства, в которых распознавание общего вызова по каким - либо причинам запрещено. Соответственно, последующие пакеты данных, посылаемые ведущим, будут получены всеми ведомыми устройствами, распознавшими адрес общего вызова. Очевидно, что общий вызов с установленным управляющим разрядом (запрос на чтение) не имеет смысла, поскольку различные устройства не могут одновременно осуществлять передачу данных по шине.
Формат пакета данных
Все пакеты данных, передаваемые по шине TWI, тоже имеют длину 9 бит. Пакет состоит из байта данных (первым передается старший разряд) и бита квитирования ACK (Рис.10.7). Генерация тактового сигнала и формирование состояний СТАРТ и СТОП осуществляется ведущим. Приемник, в свою очередь, должен после приема каждого байта формировать под тверждение (ACK) путем выдачи на линию SDA сигнала НИЗКОГО уровня во время 9-го тактового импульса. Если приемник получил последний байт или по каким - либо другим причинам не может продолжать прием данных, он должен во время 9-го тактового импульса удерживать на линии сигнал ВЫСОКОГО уровня (NACK). Не получив подтверждения от приемника, ведущий может прекратить передачу данных, сформировав состояние СТОП.
На практике каждый цикл обмена по шине TWI состоит из следующих этапов (Рис.10.8):
1) формирование состояния СТАРТ;
2) передача адресного пакета SLA+R/W;
3) передача одного или нескольких пакетов данных;
4) формирование состояния СТОП.
Скорость обмена по шине TWI задается ведущим, т. к. именно он генерирует тактовые импульсы. Однако, если ведомый не может принимать данные с такой скоростью или ему просто требуется время на обработку данных между приемом пакетов, он может увеличить паузу между тактовыми импульсами, удерживая на линии SCL сигнал НИЗКОГО уровня. На длительность тактовых импульсов это не влияет.
Рис.10.7. Формат пакета данных
Рис.10.8. Типичный цикл обмена
