19.3. Принцип действия шины TWI
Двухпроводной интерфейс (TWI) подключается к простой двухпроводной и двунаправленной шине, которая состоит из двух линий: линия синхронизации (SCL) и линия последовательной передачи данных (SDA). Источниками сигналов для обеих линий являются схемы с открытым коллектором в выходном каскаде (используется принцип "монтажного И"). Для создания высоких логических уровней на линиях шины, в т.ч. когда к шине не подключено ни одно устройство, необходимы подтягивающие к плюсу питания резисторы (Rp) - единственно необходимые внешние компоненты. Альтернативно, вместо подтягивающих резисторов могут использоваться источники тока.
Шина TWI является простым и эффективным средством соединения по последовательной шине нескольких устройств.
Устройство, подключенное к шине, может быть либо ведущим (master), либо подчиненным (slave). Чтобы передача по шине стала возможной, к ней должно быть подключено как минимум одно ведущее устройство.
Топологию шины TWI иллюстрирует рисунок 19.1.
Рисунок 19.1. Топология шины TWI
Каждое подключенное к шине подчиненное устройство должно иметь собственный неповторяющийся адрес, передачей которого ведущее устройство инициирует транзакцию. Могут использоваться 7- или 10-битные адреса. К одной шине допускается подключение нескольких ведущих устройств. Такая шина называется мультимастерной. Для определения, какое из одновременно осуществляющих доступ к шине ведущих устройств имеет приоритет, используется механизм арбитража.
Устройство может содержать, как логику ведущего устройства, так и логику подчиненного устройства. Кроме того, оно может эмулировать работу нескольких подчиненных устройств, путем реагирования на несколько адресов.
Ведущее устройство сигнализирует о начале транзакции генерацией на шине условия START (S). Затем, передается пакет адреса с адресом подчиненного устройства (ADDRESS) и указание желаемого направления передачи данных, т.е. чтение или запись (R/W). По завершении передачи всех пакетов данных (DATA), ведущее устройство генерирует на шине условие STOP (P) и транзакция завершается. После приема каждого байта получатель данных генерирует бит подтверждения (A или ACK) или неподтверждения (/A или NACK).
Транзакция шины TWI показана на рисунке 19.2.
Рисунок 19.2. Структура базовой транзакции шины TWI
Сигнал синхронизации транзакции генерирует ведущее устройство, однако, в целях снижения быстродействия шины, любое подключенное к шине устройство может увеличить длительность импульса низкого уровня.
19.3.1. Электрические характеристики
Электрические и временные характеристики модуля TWI микроконтроллеров XMEGA во многом идентичны интерфейсам I2C и SMBus, однако ввиду возможных отличий характеристик для гарантирования корректности функционирования в ведущем модуле TWI предусмотрен таймер контроля бездействия шины с программируемой выдержкой времени.
19.3.2. Условия START и STOP
Для сигнализации о начале и конце транзакции предусмотрены два уникальных состояния шины: START и STOP, соответственно. Условие START (S) генерирует ведущее устройство путем изменения линии SDA из высокого состояния в низкое. При этом, линия SCL должна сохраняться в высоком состоянии. Завершает транзакцию ведущее устройство путем ввода условия STOP (P), а именно изменением линии SDA из низкого в высокое состояние с поддержанием линии SCL в ходе этого изменения в высоком состоянии.
Рисунок 19.3. Условия START и STOP
В течение одной транзакции допускается генерация нескольких условий START. Условие START, которое последовало не за условием STOP, называется условием повторного старта (REPEATED START, Sr).
19.3.3. Передача бит
Как показано на рисунке 19.4, передаваемый по линии SDA бит данных должен оставаться стабильным в течение всего импульса высокого уровня на линии SCL. Таким образом, изменять состояние линии SDA можно только во время присутствия на линии синхронизации низкого уровня. Все это гарантируется на аппаратном уровне логикой модуля TWI.
Рисунок 19.4. Действительность данных
Последовательность передаваемых бит является частью пакетов адреса и данных. Данные пакеты состоят из 8 бит данных (один байт; первым передается старший бит) и одного бита подтверждения со значением NACK, т.е. нет подтверждения, или ACK, т.е. есть подтверждение. Для генерации значения ACK адресованное устройство устанавливает низкий уровень на линии SCL; если же требуется передача значения NACK, линия SCL сохраняется в высоком состоянии в течение девяти циклов синхронизации.
19.3.4. Пакет адреса
Вслед за передачей условия START, ведущее устройство отправляет 7 бит адреса и бит направления передачи (R/W). Распознавшее переданный адрес подчиненное устройство подтверждает это (ACK) путем установки низкого уровня на линии в течение очередного цикла синхронизации на линии SCL. В этом время, остальные подчиненные устройства должны быть отключены от линий шины TWI в ожидании следующей передачи условия START и адреса. Таким образом, пакет адреса это 7 бит адреса, бит R/W и бит подтверждения. После генерации каждого условия START возможна передача только одного пакета адреса, даже если используется 10-битная адресация.
От значения бита R/W зависит направление транзакции. Равенство бита R/W нулю указывает на транзакцию записи ведущего устройства. Сразу после подтверждения подчиненным устройством приема своего адреса, ведущее устройство начнет передачу данных. Если же бит R/W равен единице, то это указывает на транзакцию чтения ведущим устройством. В таком случае, сразу после подтверждения приема своего адреса, подчиненное устройство начнет передавать данные.
19.3.5. Пакет данных
Пакеты данных передаются после пакета адреса или другого пакета данных. Все пакеты данных имеют длину 9 бит, в т.ч. один байт данных и бит подтверждения. Направление передачи зависит от переданного ранее пакета адреса.
19.3.6. Транзакция
Транзакция - промежуток времени от передачи условия START до передачи условия STOP, в т.ч. любые переданные между ними условия повторного старта. Стандартом TWI предусматривается три фундаментальных режима транзакции: запись ведущим устройством, чтение ведущим устройством и комбинированная транзакция. Транзакция записи ведущим устройством проиллюстрирована на рисунке 19.5. Ведущее устройство инициирует транзакцию передачей условия START (S), после чего он передает пакет адреса, в котором бит направления равен нулю (ADDRESS+W).
Рисунок 19.5. Транзакция записи ведущим устройством
После подтверждения адресованным подчиненным устройством получения адреса, ведущее устройство может начать передачу данных (DATA), при этом, подчиненное устройство будет подтверждать (ACK, A) или не подтверждать (NACK, /A) каждый байт. В случае, если передача данных не требуется, ведущее устройство прекращает транзакцию передачей условия STOP (P) сразу после завершения передачи пакета адреса. Не существует никаких ограничений по количеству передаваемых пакетов данных. В случае, если подчиненное устройство не подтвердит получение данных (NACK), ведущее устройство должно интерпретировать такую ситуацию, как невозможность дальнейшего приема данных подчиненным устройством, и транзакция должна быть прекращена.
Транзакция чтения ведущим устройством представлена на рисунке 19.6. Транзакцию инициирует ведущее устройство передачей условия START. Вслед за ним передается пакет адреса, в котором бит направления равен единице (ADRESS+R). Для продолжения транзакции адресованное подчиненное устройство должно подтвердить прием своего адреса.
Рисунок 19.6. Транзакция чтения ведущим устройством
Если подчиненное устройство подтвердило свой адрес, ведущее устройство начнет прием данных от подчиненного устройства. К числу передаваемых пакетов данных никаких ограничений не предъявляется. Ведущее устройство подтверждает (ACK) или не подтверждает (NACK) каждый принятый от подчиненного устройства байт данных. Для прекращения транзакции, перед передачей условия STOP, ведущее устройство завершает прием данных передачей значения NACK.
Комбинированная транзакция показана на рисунке 19.7. Она состоит из нескольких транзакций чтения и записи, между которыми вставлены условия повторного старта (Sr).
Рисунок 19.7. Комбинированная транзакция
19.3.7. Синхронизация и задержка импульсов синхронизации
Все подключенные к шине устройства, при необходимости снижения скорости передачи или вставки пауз на время обработки данных, могут продлить длительность низкого уровня сигнала синхронизации. Это достигается путем принудительного удержания линии SCL в низком состоянии.
Предусмотрено три типа задержки импульсов синхронизации (см. рисунок 19.8).
Рисунок 19.8. Задержка синхронизации
Если МК работает в экономичном режиме и обнаруживается условие START, синхронизация задерживается на время возобновления активной работы МК. Периодической задержкой синхронизации на побитовой основе подчиненное устройство может добиться снижения быстродействия шины. Потребность в этом может возникнуть при использовании пониженных частот системной синхронизации в подчиненном устройстве. Возможность произвольной задержки синхронизации на побайтной основе получают и ведущее и подчиненное устройства перед передачей и после передачи бита ACK/NACK. В результате такой задержки, появляется время на обработку принятых данных, подготовку передаваемых данных или же на выполнение других критичных ко времени задач.
Когда синхронизацию задерживает подчиненное устройство, ведущее переходит в состояние ожидания и наоборот.
19.3.8. Арбитраж
Ведущее устройство имеет право начинать транзакцию только при условии нахождения шины в состоянии IDLE. Поскольку шина TWI является мультимастерной, транзакцию могут инициировать два или более устройств одновременно. В результате, шина становится занятой сразу несколькими ведущими устройствами. Разрешение такой конфликтной ситуации достигается применением механизма арбитража, в соответствии с которым теряет контроль над шиной каждое ведущее устройство, которое не способно передать высокий уровень на линии SDA. Те ведущие устройства, которые в процессе арбитража потеряли контроль над шиной, переходят в состояние ожидания до тех пор, пока шина вновь не перейдет в состояние IDLE (что происходит после передачи условия STOP), а затем вновь пытаются получить контроль над шиной. Подчиненные устройства не принимают никакого участия в арбитраже.
Рисунок 19.9. Арбитраж шины TWI
На рисунке 19.9 показан пример, когда два ведущих устройства пытаются получить контроль над шиной. Оба устройства успешно передают условие START, однако устройство 1 теряет контроль в ходе арбитража, когда пытается передать высокий уровень (бит 5), в то время как устройство 2 передает низкий уровень. Арбитраж недопустим между передачей условия повторного старта и бита данных, между условием STOP и битом данных, а также между условием повторного старта и условием STOP. При необходимости арбитража на этих интервалах, его необходимо реализовать программно.
19.3.9. Синхронизация ведущих устройств
В ситуации, когда более одного ведущего устройства пытаются управлять линией SCL, необходимо применить алгоритм, обеспечивающий синхронность работы этих устройств. Этот алгоритм основан на тех же принципах, что описанная ранее задержка синхронизации. На рисунке 9.10 показан пример, в котором два ведущих устройства конкурируют за контроль над синхронизацией шины. Результирующий сигнал на линии SCL является результатом объединения по принципу монтажного И двух сигналов на выходах синхронизации ведущих устройств.
Рисунок 19.10. Синхронизация ведущих устройств
Как только линия SCL перейдет из высокого состояния в низкое, все ведущие устройства переведут свой выход синхронизации в низкое состояние и начнут отчет длительности импульса синхронизации низкого уровня. Длительность этого импульса может отличаться у разных ведущих устройств. Если ведущее устройство (в нашем примере устройство 1) завершит отсчет длительности низкого уровня, оно освободит линию SCL. Однако, линия SCL не перейдет в высокое состояние, пока её не освободят все остальные ведущие устройства. Таким образом, линия SCL будет удерживаться в низком состоянии устройством с самым длительным импульсом низкого уровня (устройство 2).
Устройства с более короткими импульсами низкого уровня до освобождения линии синхронизации находятся в состоянии ожидания. Все ведущие устройства начинают отсчет длительности их высокого уровня только в момент освобождения линии SCL всеми устройствами, когда она переходит в высокое состояние. Устройство, которое первым завершает отсчет длительности высокого уровня (DEVICE1) переводит линию синхронизации в низкое состояние и цикл повторяется. В конечном итоге, устройство с самым малым периодом синхронизации будет определять длительность высокого уровня, а устройство с самым большим периодом будет определять длительность низкого уровня.
|