F60-67 (1041605), страница 43
Текст из файла (страница 43)
Ведущее устройство инициирует процесс передачи данных в обоих режимах игенерирует тактовый сигнал на линии SCL. Допускается также работа нескольких ведущих устройств на однойшине. Если два или более ведущих пытаются инициировать процесс передачи данных одновременно, топрименяемая схема арбитража всегда определит одного ведущего, который выиграет арбитраж и захватитуправление шиной.
Следует иметь ввиду, что нет необходимости определять какое-либо устройство какведущее в системе; любое устройство, которое передает бит START и адрес ведомого, становится ведущим дляэтого сеанса связи.Типичное сообщение SMBus состоит из бита START, следующего за ним байта адреса (биты 7-1: 7разрядный адрес ведомого; бит 0: бит направления передачи R/W), одного или нескольких байт данных и битаSTOP. Каждый принятый (ведущим или ведомым) байт должен быть подтвержден (ACK) низким уровнемсигнала на линии SDA во время высокого уровня сигнала на линии SCL (см. рис.20.3).
Если принимающееустройство не подтверждает прием, то передающее устройство воспримет этот факт как бит «нетподтверждения» (NACK), который представляет собой высокий уровень сигнала на линии SDA во времявысокого уровня сигнала на линии SCL.Бит направления занимает самый младший значащий разряд адреса. Бит направления устанавливаетсяв 1 для выполнения операции чтения и сбрасывается в 0 для выполнения операции записи.Ред.
1.2236C8051F060/1/2/3/4/5/6/7Все сеансы обмена данными инициируются ведущим, который адресует одно или несколько ведомыхустройств. Ведущий генерирует бит START и затем передает адрес ведомого и бит направления. Еслиинициируется операция записи от ведущего к ведомому, то ведущий передает по одному байту данных за раз,ожидая бита подтверждения (ACK) от ведомого в конце каждого байта. Если осуществляется операция чтения,то ведомый передает данные, ожидая бита подтверждения (ACK) от ведущего в конце каждого байта.
В концесеанса передачи данных ведущий генерирует бит STOP, чтобы завершить сеанс и освободить шину. На рис.20.3показан формат типичного сообщения SMBus.Рисунок 20.3. Формат сообщения SMBusSCLSDASLA6STARTSLA5-0R/WАдрес ведомого + R/WD7ACKD6-0Байт данныхNACKSTOP20.2.1. АрбитражВедущий может начать сеанс передачи, только если шина свободна. Шина является свободной послебита STOP или после того, как на линиях SCL и SDA в течение определенного времени удерживается высокийуровень сигнала (см.
раздел 20.2.4). В случае, когда два или более ведущих устройства пытаются начатьпередачу данных одновременно, используется схема арбитража, которая заставит какое-либо ведущееустройство освободить шину. Ведущие устройства продолжают передавать до тех пор, пока один из ведущихне попытается передать на линию SDA сигнал высокого уровня, в то время как другие ведущие выдают на этулинию сигнал низкого уровня.
Ведущее устройство, пытающееся передать на линию SDA сигнал высокогоуровня, определит, что вместо сигнала высокого уровня на линии SDA присутствует сигнал низкого уровня, иосвободит шину. Выигравший арбитраж ведущий продолжает передавать свои данные без какого-либоперерыва; потерявший арбитраж ведущий становится ведомым и принимает остаток передаваемых данных.Данная схема арбитража является не разрушающей: какое-нибудь одно устройство всегда выигрывает иникакие данные не теряются.20.2.2. Растягивание тактового сигналаМодуль SMBus обеспечивает механизм тактовой синхронизации, аналогичный I2C, который позволяетустройствам с различной скоростью передачи данных сосуществовать на одной шине.
Чтобы позволитьмедленным ведомым устройствам обмениваться данными с быстрыми ведущими, применяется растягиваниетактовых импульсов на участке с низким уровнем сигнала. Ведомый может временно удерживать линию SCLна низком уровне, тем самым удлиняя период тактового сигнала (за счет удлинения участка с низким уровнем)и уменьшая таким образом частоту тактирования шины.20.2.3.
Таймаут низкого уровня на линии SCLЕсли линия SCL удерживается на низком уровне ведомым устройством, то дальнейший обмен даннымипо шине невозможен. Кроме того, ведущий не может установить на линии SCL высокий уровень, чтобыисправить ошибочное состояние. Чтобы решить эту проблему, протокол SMBus определяет, что устройства,участвующие в обмене, должны распознавать как условие «таймаута» любой тактовый цикл, в котором сигналудерживается на низком уровне более 25мс. Устройства, которые обнаружили такое условие таймаута, должныв течение 10мс после этого сбросить свои модули обмена.20.2.4. Таймаут высокого уровня на линии SCL (шина SMBus свободна)Спецификация SMBus оговаривает, что если устройство удерживает линии SCL и SDA на высокомуровне более 50 мкс, то шина считается свободной. Если устройство на шине SMBus ожидает освобожденияшины, чтобы сгенерировать бит START (в ведущем режиме), то он будет сгенерирован сразу же послеистечения таймаута освобождения шины.237Ред.
1.2C8051F060/1/2/3/4/5/6/720.3. Режимы работы модуля SMBusМодуль SMBus может быть настроен для работы как в режиме ведущего, так и в режиме ведомого. Влюбой конкретный момент времени он может работать в одном из четырех режимов: ведущий передатчик,ведущий приемник, ведомый передатчик, ведомый приемник. Значение регистра состояния SMB0STAопределяет состояние режима передачи модуля SMBus0 (см. табл.20.1). Приведенные ниже описания режимовпоказывают применение модуля SMBus0 с использованием управления по прерываниям; кроме этого работа смодулем SMBus0 возможна в режиме опроса.20.3.1. Режим ведущего передатчикаПоследовательные данные выдаются на линию SDA, а тактовые импульсы выдаются на линию SCL.SMBus0 генерирует бит START и затем передает первый байт, который содержит адрес целевого ведомогоустройства и бит направления.
В этом случае бит направления (R/W) должен быть сброшен в 0, инициируяоперацию записи. Затем модуль SMBus0 передает один или несколько байт последовательных данных, ожидаяподтверждения (ACK) от ведомого после каждого байта. Для обозначения конца сеанса передачипоследовательных данных ведущее устройство генерирует бит STOP.Рисунок 20.4. Передача данных в режиме ведущегоSSLAWAБайт данныхПрерываниеПрерываниеAБайт данныхПрерываниеПолученные интерфейсомSMBusAPПрерываниеS = STARTP = STOPA = ACKW = WRITE (ЗАПИСЬ)SLA = Адрес ведомогоПереданные интерфейсомSMBus20.3.2. Режим ведущего приемникаПоследовательные данные принимаются с линии SDA, а тактовые импульсы выдаются на линию SCL.Модуль SMBus0 генерирует бит START и затем передает первый байт, который содержит адрес целевоговедомого устройства и бит направления.
В этом случае бит направления (R/W) должен быть установлен в 1,инициируя операцию чтения. Модуль SMBus0 принимает последовательные данные от ведомого по линииSDA, при этом генерирует тактовые импульсы на линии SCL. После приема каждого байта модуль SMBus0генерирует биты подтверждения (ACK) или неподтверждения (NACK) в зависимости от состояния бита ААрегистра SMB0CN. Для обозначения конца сеанса передачи последовательных данных ведущий генерирует битSTOP.Рисунок 20.5. Прием данных в режиме ведущегоSSLAПрерываниеRAБайт данныхПрерываниеПолученные интерфейсомSMBusПереданные интерфейсомSMBusРед. 1.2AБайт данныхПрерываниеNPПрерываниеS = STARTP = STOPA = ACKN = NACKR = READ (ЧТЕНИЕ)SLA = Адрес ведомого238C8051F060/1/2/3/4/5/6/720.3.3.
Режим ведомого передатчикаПоследовательные данные выдаются на линию SDA, а тактовые импульсы принимаются с линии SCL.Модуль SMBus0 принимает бит START, а вслед за ним байт данных, который содержит адрес ведомого и битнаправления. В этом случае бит направления (R/W) должен быть установлен в 1, инициируя операцию чтения.Если принятый адрес ведомого соответствует адресу, хранящемуся в регистре SMB0ADR, то модуль SMBus0генерирует бит подтверждения (ACK). Модуль SMBus0 также будет генерировать бит подтверждения (ACK),если принятый адрес является адресом общего вызова (0х00) и бит разрешения адреса общего вызова(SMB0ADR.0) установлен в 1. Модуль SMBus0 принимает тактовые импульсы по линии SCL и передаетведущему один или несколько байт последовательных данных, ожидая подтверждения (ACK) от ведущегопосле каждого байта.
Модуль SMBus0 выходит из режима ведомого после приема бита STOP от ведущего.Рисунок 20.6. Передача данных в режиме ведомогоПрерываниеSSLARAБайт данныхAБайт данныхПрерываниеПрерываниеNPПрерываниеS = STARTP = STOPN = NACKW = WRITE (ЗАПИСЬ)Полученные интерфейсомSMBusПереданные интерфейсомSMBusSLA = Адрес ведомого20.3.4. Режим ведомого приемника.Последовательные данные принимаются с линии SDA, а тактовые импульсы принимаются с линииSCL.
Модуль SMBus0 принимает бит START, а вслед за ним байт данных, который содержит адрес ведомого ибит направления. В этом случае бит направления (R/W) должен быть сброшен в 0, инициируя операцию записи.Если принятый адрес ведомого соответствует адресу, хранящемуся в регистре SMB0ADR, то модуль SMBus0генерирует бит подтверждения (ACK). Модуль SMBus0 также будет генерировать бит подтверждения (ACK),если принятый адрес является адресом общего вызова (0х00) и бит разрешения адреса общего вызова(SMB0ADR.0) установлен в 1. Модуль SMBus0 принимает один или несколько байт последовательных данных;после приема каждого байта модуль SMBus0 передает биты подтверждения (ACK) или неподтверждения(NACK) в зависимости от состояния бита АА регистра SMB0CN.