МИКРОСХЕМА ИНТЕГРАЛЬНАЯ К1921ВК01Т. Руководство пользователя (от 10.09.2019) - часть 9

 

  Главная      Книги - Разные     МИКРОСХЕМА ИНТЕГРАЛЬНАЯ К1921ВК01Т. Руководство пользователя (от 10.09.2019)

 

поиск по сайту            правообладателям  

 

   

 

   

 

содержание      ..     7      8      9      10     ..

 

 

 

МИКРОСХЕМА ИНТЕГРАЛЬНАЯ К1921ВК01Т. Руководство пользователя (от 10.09.2019) - часть 9

 

 

 

 

129 

линиях SPI_TxD и SPI_RxD происходит по переднему фронту сигнала синхронизации, а 
выборка – по заднему. 

Передним всегда считается тот фронт сигнала, который является началом передачи 

первого бита (см. рисунок 16.2). 

 

 

 

Рисунок 16.2 – Сигнал синхронизации SCK при разных состояниях бита CPOL 

 
Комбинации  битов  SPO  и  SPH  задают  четыре  режима  обмена  данными  (см. 

рисунок 16.3).    

 

 

 

Рисунок 16.3 – Передача кадров данных в интерфейсе SPI 

 
На рисунке 16.4 показано поведение сигналов при непрерывной передаче кадров 

данных. 

 

 

 

Рисунок 16.4 – Непрерывная передача кадров данных 

 

В  режиме  непрерывной  передачи  данных  при  условии  SPH  =  0  на  линии  SPI_FSS 

должны формироваться импульсы  между  передачами  кадров данных. Это связано с тем, 
что  в  этом  режиме  низкий  уровень  сигнала  на  линии  SPI_FSS  ведомого  устройства 
блокирует  запись  в  сдвиговый  регистр.  Поэтому  мастер  должен  переводить  линию 
SPI_FSS  в  высокий  уровень  по  окончании  передачи  каждого  кадра,  разрешая,  таким 

 

 

130 

образом,  запись  новых  данных.  По  окончании  приема  последнего  бита  кадра  линия 
SSP_FSS переводится в состояние логической единицы по истечении одного такта сигнала 
SPI_CLK. 

В  режиме  непрерывной  передачи  данных  при  условии  SPH  =  1  низкий  уровень 

сигнала  на  линии  SPI_FSS  не  блокирует  запись  в  сдвиговый  регистр.  Поэтому  линия 
SPI_FSS может оставаться в состоянии нуля в течение передачи всех кадров и переведена 
в состояние логической единицы только по окончании передачи.  

 
Интерфейс Microwire 

Реализует полудуплексный режим передачи данных. 
Включает  линию  синхронизации  SPI_CLK,  две  линии  приема  и  передачи  данных 

SPI_RxD и SPI_TxD, а также линию выбора устройства (для режима ведомого) SPI_FSS. 

Если устройство функционирует в режиме ведомого, то на его вход SPI_FSS должен 

подаваться  низкий  уровень  сигнала  в  течение  всей  передачи  кадра  (последовательность 
передаваемых бит данных длинною от 4 до 16 бит).    

Передача  данных  может  быть  одиночной  (один  кадр)  или  непрерывной  (более 

одного кадра подряд). Данные передаются старшим битом вперед.  

Перед началом передачи линия SPI_FSS переводится в низкое состояние.  
Каждая  передача  начинается  с  передачи  от  мастера  к  ведомой  8-битной 

управляющей  последовательности.  В  течение  передачи  этой  последовательности 
приемник  мастера  не  обрабатывает  входящие  данные.  После  того  как  управляющая 
последовательность передана и декодирована одним из ведомых устройств, этот ведомый 
выдерживает  паузу  в  один  такт  синхросигнала  и  начинает  передавать  мастеру  кадр 
данных (см. рисунок 16.5).  

Выставление  данных  происходит  по  заднему  фронту  сигнала  SPI_CLK,  а 

считывание – по переднему. 

 

 

 

Рисунок 16.5 – Передача кадра данных в интерфейсе Microwire 

 
По окончании приема данных линия SPI_FSS переводится в высокое состояние. 
 
П р и м е ч а н и е   –  В  течение  времени,  когда  передается  управляющая 

последовательность  и  между  передачами  линия  SPI_RxD  может  находиться  в  третьем 
состоянии. 

 
В режиме непрерывной передачи начало и завершение передачи нескольких кадров 

данных аналогично передаче одного кадра. Линия SPI_FSS удерживается в нуле в течение 
всего сеанса передачи. По окончании передачи одного кадра данных начинается передача 
управляющей последовательности без паузы (см. рисунок 16.6). 

 

 

 

131 

П р и м е ч а н и е   –  Буферы  FIFO  приема  и  передачи  данных  не  очищаются 

автоматически, даже в случае запрещения работы сбросом бита SSE. 

 

 

 

 

Рисунок 16.6 – Передача кадров данных в интерфейсе Microwire 

 

Интерфейс SSI 

Реализует полнодуплексный режим передачи данных. 
Включает  одну  линию  синхронизации  SPI_CLK,  две  линии  приема  и  передачи 

данных SPI_RxD и SPI_TxD, а также линию выбора устройства SPI_FSS. 

Перед  началом  передачи  каждого  кадра  на  линии  SPI_FSS  формируется  импульс 

длительностью  в  один  период  сигнала  SPI_CLK.  Далее  мастер  и  ведомый  передают 
данные. Установка данных производится по переднему фронту синхросигнала, а выборка 
– по заднему (см. рисунок 16.7). Весь цикл передачи начинается сразу же после появления 
хотя бы одного элемента в буфере FIFO передатчика.  

 

 

 

Рисунок 16.7 – Передача кадра данных в интерфейсе SSI 

 

Режим непрерывной передачи кадров данных показан на рисунке 16.8. 

 

 

 

Рисунок 16.8 – Передача кадров данных в интерфейсе SSI 

 
 
 
 
 

 

 

132 

16.3

 

Прерывания 

Четыре  маскируемых  источника  прерываний  объединены  по  ИЛИ,  и  в  результате 

формируется один общий сигнал прерывания SPI, поступающий на контроллер NVIC. 

Сигналы источников запросов на прерывания: 
RX – от приемника при заполнении его наполовину; 
TX – от передатчика при опустошении его наполовину; 
RT – по  таймауту  приемника  (буфер  приемника  не  пуст  и  не  было  попыток 

обращения к нему в течение времени равного передаче 32 бит); 

ROR – по переполнению буфера приемника. 
Каждый из сигналов может быть маскирован путем сброса соответствующего бита в 

регистре маски SPI_IMSC.  

Для  определения  источника  прерывания  следует  прочитать  регистр  SPI_RIS  или 

регистр SPI_MIS (маскированные прерывания). 

 

 

 

133 

17

 

Контроллер интерфейса I2C 

Модуль  контроллера  I2C  обеспечивает  полную  поддержку  двухпроводного 

последовательного синхронного интерфейса I2C/SMBus. Результат такой совместимости – 
легкое  соединение  со  многими  запоминающими  устройствами  и  устройствами  ввода-
вывода, включая EEPROM, SRAM, счетчики, АЦП, ЦАП, периферийные устройства. 

 
Функциональные возможности модуля: 

- совместимость с протоколами SMBus 1.1 и SMBus 2.0, ACCESS.Bus, I2C 2.1; 
- поддержка скоростного/стандартного (FS) и высокоскоростного (HS) режимов; 
- программирование действий мастера/ведомого; 
- возможность подключения к шине нескольких ведущих устройств, т. е. поддержка 

режима мультимастер (ММ); 

- один программно задаваемый адрес; 
- 7- или 10-битная адресация ведомого; 
- поддержка адреса общего вызова. 
 
Особые возможности SMBus: 
- отслеживание времени простоя линии SCL; 
- наличие функции отслеживания ошибок в пакетах данных (PEC) с использованием 

метода расчета контрольной суммы (CRC); 

- поддержка адреса отклика мастера; 
- поддержка полинга и контроля прерываний. 
 

17.1

 

Протокол шины 

Протокол I2C использует двухпроводной интерфейс для двусторонней связи между 

устройствами,  подключенными  к  шине.  Двунаправленная  шина  состоит  из  двух  линий: 
данных SDA и тактового сигнала SCL. Эти линии подключены к источнику питания через 
подтягивающие  резисторы.  Шинные  формирователи  любых  устройств,  подключаемых  к 
шине, выполняются по схеме с открытым коллектором или открытым стоком. Устройства 
могут  выставить только низкий  уровень на соответствующей линии. Следовательно, обе 
линии SDA и SCL реализуют функцию «монтажное И». 

Протокол  поддерживает  режим  мультимастер,  в  котором  шина  может 

контролироваться  одним  или  несколькими  устройствами  из  подключенных  к  шине. 
Каждое  устройство,  подключенное  к  шине,  имеет  свой  адрес  и  может  быть  как 
приемником, так и передатчиком (некоторые только приемниками). 

 
Операции с данными 

Устройство,  которое  начинает  передачу  данных,  становится  мастером.  Мастер 

генерирует  тактовый  сигнал  SCL,  а  также  инициирует  и  завершает  передачу  данных  по 
шине.  За  один  такт  сигнала  SCL  передается  один  бит  данных  по  линии  SDA  
(рисунок 17.1). 

 

 

 

Рисунок 17.1 – Передача бита данных 

 

 

 

134 

Данные  валидны  (верны),  пока  уровень  сигнала  на  линии  SCL  высокий.  Когда  на 

линии SCL низкий уровень сигнала, данные могут меняться. 

 

Старт и стоп 

Состояние  старта  формируется  тогда,  когда  на  линии  SCL  держится  высокий 

уровень сигнала, а на линии SDA возникает перепад уровня сигнала из высокого в низкий 
(см. рисунок 17.2). 

Состояние  стопа  (останова)  формируется  тогда,  когда  на  линии  SCL  держится 

высокий уровень сигнала, а на линии SDA возникает перепад уровня сигнала из низкого в 
высокий (см. рисунок 17.2). 

Состояния старта и стопа формирует только мастер.  
 

 

 

Рисунок 17.2 – Состояния старта и стопа 

 
После  того,  как  сформировано  состояние  старта,  шина  считается  занятой  и  другие 

устройства не должны пытаться управлять ею. Шина считается занятой до тех пор, пока 
не будет сформировано состояние стопа. В середине передачи может быть сформировано 
состояние  повторного  старта,  если  мастеру  нужно  обратиться  к  другому  ведомому  или 
если требуется изменение направления передачи данных без потери контроля над шиной 
(см. рисунок 17.3). 

 

 

 

Рисунок 17.3 – Состояние повторного старта 

 

Арбитраж 

Арбитраж выполняется в момент времени, когда на линии  SCL находится «1». Два 

устройства  могут  сгенерировать  стартовое  состояние  в  одно  и  то  же  время.  Далее 
арбитраж  будет  продолжаться  до  тех  пор,  пока  одно  из  устройств  сформирует  «0»,  а 
другое  –  «1»  на  линии  SDA.  Устройство,  которое  установило  «1»  на  линии  SDA, 
проигрывает арбитраж. На рисунке 17.4 приведен пример арбитража.  

 

 

 

Рисунок 17.4 – Арбитраж на линии SDA 

 

 

135 

Два устройства передают свои данные DATA1 и DATA2 на линию SDA. В момент 

времени, когда очередной бит данных DATA1 равен «1», а бит данных DATA2 равен «0», 
второе  устройство выигрывает  арбитраж и продолжает передачу своих данных, а первое 
устройство прекращает передачу. 

Если  устройство  проигрывает  арбитраж  во  время  передачи  первого  байта  после 

старта  (во  время  передачи  адреса  ведомого),  оно  становится  ведомым  приемником  и 
мониторит  передаваемый  адрес  на  случай  совпадения.  Арбитраж  также  может  быть 
проигран  в  режиме  мастера  приемника  во  время  квитирования  или  в  режиме  ведомого 
передатчика во время ответа на адрес отклика на сигнал предупреждения. 

В  случае  проигрывания  арбитража  в  битовом  поле  MODE  регистра  ST 

устанавливается соответствующий код и генерируется прерывание. 

 
Синхронизация 

Синхронизация  тактовых  сигналов  разных  устройств,  подключенных  к  шине  I2C, 

реализуется  в  случаях,  когда  несколько  устройств  являются  мастерами,  и  выполняется с 
использованием той особенности, что линия SCL реализована как монтажное «И» линий 
тактовых  сигналов  этих  устройств.  Для  примера  рассмотрим  синхронизацию  двух 
мастеров с линиями тактовых сигналов CLK1 и CLK2 (см. рисунок 17.5). 

 

 

 

Рисунок 17.5 – Синхронизация 

 
Линия  SCL  переводится  в  состояние  «0»  сразу,  как  только  один  из  мастеров 

выставляет на своей линии тактового сигнала низкий уровень сигнала (CLK1 на рисунке 
17.5).  При  этом  его  внутренний  счетчик  длительности  низкого  уровня  сигнала 
сбрасывается и начинает отсчет.  Второй мастер выставляет низкий уровень позже, и его 
счетчик также сбрасывается (CLK2).  

Как только внутренний счетчик первого мастера переполнится, мастер выставит на 

линии  CLK1  высокий  уровень  сигнала.  Тем  не  менее,  линия  SCL  будет  по-прежнему 
оставаться  в  состоянии  «0»,  удерживаемая  вторым  мастером.  В  связи  с  этим,  первый 
мастер  перейдет  в  состояние  ожидания  (см.  рисунок  17.5).  Когда  переполнится  счетчик 
второго мастера, он выставит на линии CLK2 высокий уровень сигнала, и в этот момент 
линия SCL перейдет в состояние «1». С этого момента внутренние счетчики длительности 
высокого уровня сигнала обоих мастеров начнут синхронный отсчет.  

Каждая  передача  данных  состоит  из  начального  состояния  «старт»,  состояний 

передач  битов  и  состояния  «стоп».  Данные  передаются  старшим  битом  (MSB)  вперед. 
Передача  каждого  байта  завершается  квитированием,  т. е.  приемник  подтверждает 
окончание  приема  сигналом  подтверждения  (ACK).  Ведомое  устройство  может 
увеличивать  паузу  между  тактовыми  импульсами,  удерживая  на  линии  SCL  сигнал 
низкого уровня, пока происходит обработка принятых данных или подготовка данных для 
следующей передачи. Этот процесс может происходить после передачи любого бита/байта 
(см. рисунок 17.6). 

 

 

136 

 

 

Рисунок 17.6 – Передача данных 

 

Квитирование 

Каждый байт посылки должен быть завершен квитированием, т. е. ответом на прием 

сигнала  запроса  подтверждения  приема  (ACK).  На  рисунках  17.6  и  17.7  показано 
положение момента квитирования в пределах посылки. 

 

 

 

Рисунок 17.7 – Квитирование и неквитирование бита подтверждения ACK 

 
Бит запроса подтверждения приема генерируется мастером. Передатчик (мастер или 

ведомый) в момент девятого такта синхросигнала оставляет линию SDA в состоянии «1» 
(бит  ACK).  В  свою  очередь,  приемник  должен  сбросить  линию  SDA  в  «0»  в  течение 
времени, пока на линии SCL удерживается высокий уровень девятого импульса тактового 
сигнала, т. е. квитировать прием (см. рисунок 17.7). Если приемник не отвечает на запрос 
подтверждения  и  не  подтверждает  прием  байта,  то  он  оставляет  линию  SDA  без 
изменений в состоянии «1», т. е. не квитирует прием.  

 
П р и м е ч а н и е   –  Все  устройства,  подсоединенные  к  шине  I2C,  в  обязательном 

порядке должны квитировать бит  ACK при получении байта с их собственным адресом. 
Этот механизм используется для отслеживания наличия отключившихся (самостоятельно 
или по каким-то причинам) от шины устройств. 

 
Ведомое устройство имеет право не квитировать бит ACK в следующих случаях: 
- если  ведомый  не  может  принять  данные  или  он  занят.  Мастер,  обнаружив 

неквитирование  байта,  должен  сгенерировать  состояние  стопа  и  прервать  передачу.  Как 
альтернатива,  ведомый  может  затянуть  период  низкого  уровня  сигнала  тактирования  на 
линии SCL для завершения своих операций и продолжить передачу; 

- если ведомый обнаружил некорректную команду или некорректные данные. В этом 

случае,  ведомый  должен  неквитировать  принятый  байт.  Мастер,  обнаружив 
неквитирование байта, должен сгенерировать состояние стопа и повторить передачу; 

-  если  мастер  функционирует  как  приемник,  то,  приняв  байт,  он  должен  сообщить 

ведомому об окончании данных неквитированием бита ACK, посланного ведомым. После 

 

 

137 

этого  ведомый  передатчик  должен  освободить  линию  SDA  для  того,  чтобы  мастер  смог 
сгенерировать состояние завершения передачи (состояние стопа). 

 

Формат передачи данных с 7-битной адресацией  

На рисунке 17.8 показана передача адреса и двух байт данных. Каждому устройству, 

подключенному  к  шине,  присваивается  уникальный  7-битный  адрес.  Первые  семь  бит, 
передаваемые  после  старта,  представляют  собой  адрес  ведомого,  восьмой  бит  (R/W#) 
определяет  направление  передачи  –  от  ведомого  (чтение,  если  R/W# = «1»)  или  к 
ведомому (запись, если R/W# = «0»).  

 

 

 

Рисунок 17.8 – Передача данных с 7-битной адресацией 

 
Каждый  ведомый,  получивший  байт  адреса,  сравнивает  его  со  своим  собственным 

адресом.  Если  адрес  распознается  как  «свой»,  ведомый  квитирует  прием  и  далее,  в 
зависимости от состояния бита R/W#, становится передатчиком или приемником.   

Протокол  SMBus/I2C  позволяет  генерировать  адрес  общего  вызова  для 

одновременного  обращения  ко  всем  устройствам,  подключенным  к  шине.  Первым 
передается  адрес  общего  вызова  (00h),  затем  следует  байт  назначения  общего  вызова. 
Ведомые,  которые  ожидают  данные,  квитируют  этот  байт  и  становятся  приемниками, 
остальные игнорируют общий вызов. 

Протокол  SMBus/I2C  поддерживает  уникальную  функцию  –  распознавание  адреса 

отклика  на  сигнал  предупреждения  (Alert  Response  Address  –  ARA).  В  системах  с 
несколькими  ведомыми  каждое  устройство  может  послать  мастеру  сигнал 
предупреждения.  Для  этого  используется  дополнительная  третья  линия  ALERT#, 
физически идентичная линиям SDA и SCL, реализованная по принципу монтажное «И». К 
этой  линии  также  подключаются  все  устройства.  Когда  какому-то  ведомому  (или 
нескольким  ведомым)  необходимо  обратиться  к  мастеру,  он  (или  они)  выставляет  на 
линии ALERT# низкий уровень сигнала – это сигнал предупреждения (см. рисунок 17.9). 

 

 

 

Рисунок 17.9 – Передача адреса отклика на сигнал предупреждения 

 
Мастер,  обнаружив  «0»  на  линии  ALERT#,  обращается  ко  всем  ведомым,  посылая 

адрес  отклика  на  сигнал  предупреждения  (ARA).  Адрес  состоит  из  семи  битов 
(0001_100b)  и  бита  R/W#  =  «1»  (чтение).  Ведомый,  который  отправил  сигнал 
предупреждения,  получив  ARA,  квитирует  его  и  затем  отправляет  свой  7-битный  адрес 
(восьмой  бит  может  быть  как  «0»,  так  и  «1»),  сообщая,  таким  образом,  ведомому,  какое 
именно  устройство  посылало  сигнал  предупреждения.  Кроме  этого,  ведомый,  который 
выставлял  «0»  на  линии  ALERT#,  должен  перестать  удерживать  линию,  чтобы  на  ней 
установился высокий уровень сигнала. В том случае, если несколько устройств посылали 

 

 

138 

сигнал  предупреждения,  то  после  получения  ARA,  свой  адрес  передает  то  устройство, 
которое  захватывает  шину  по  стандартным  правилам  арбитража.  Если  после 
обслуживания ведомого мастер все еще обнаруживает на линии ALERT# низкий уровень 
сигнала,  он  понимает  это  как  то,  что  сигнал  предупреждения  посылался  несколькими 
ведомыми.  Мастер  снова  отправляет  ARA  и  затем  общается  со  следующим  ведомым. 
Появление  на  линии  ALERT#  высокого  уровня  сигнала  означает,  что  все  ведомые, 
которые требовали обращения, обслужены. 

 
П р и м е ч а н и е   –  Описываемый  в  настоящем  КФДЛ.431295.057ТО  модуль  I2C  не 

имеет  выделенной  линии  ALERT#.  При  необходимости,  пользователь  может 
задействовать  свободный  вывод  микроконтроллера  и  программно  реализовать 
возможность передачи сигнала предупреждения от  ведомого к мастеру. В  свою очередь, 
функция  распознавания  адреса  отклика  (ARA)  и  последующей  отправки  собственного 
адреса  реализована  полностью.  Включить  функцию  можно  установкой  бита  SMBARE  в 
регистре CTL0.  

 
Формат передачи данных с 10-битной адресацией  

10-битная  адресация  позволяет  адресовать  до  1 024  ведомых  устройств,  с 

использованием  резервной  комбинации  1111_0xxb,  которая  передается  по  линии  SDA 
сразу  после  старта.  10-битный  формат  полностью  совместим  с  7-битным  форматом  и 
может  использоваться  одновременно  с  ним,  что  позволяет  соединять  по  шине  I2C 
устройства с разной адресацией. 

Основной идеей формата является передача 10-битного адреса в двух первых байтах, 

следующих сразу после старта. В первом байте передается значение 1111_0ххb, где «хх» – 
это  два  старших  бита  адреса  и  бит  R/W#  (на  рисунке  17.10  обозначен  символом  «W»  – 
запись), который должен быть равен «0», чтобы ведомый понял, что в следующем байте 
будут  переданы  остальные  8  бит  адреса.  Во  втором  байте  передаются  8  бит  адреса  (см. 
рисунок 17.10).  

 

 

 

Рисунок 17.10 – Передача данных ведомому с 10-битным адресом (для расшифровки 

обозначений, применяемых на рисунке, следует обратиться к таблице 17.1) 

 
Чтобы осуществить чтение ведомого, которого адресует мастер после второго байта 

адреса,  следует  отправить  бит  повторного  старта  и  затем  комбинацию  1111_0xxb  и  бит 
R/W#  (обозначен  символом  «R»  –  чтение),  который  на  этот  раз  равен  «1»  (см.  рисунок 
17.11).  

 

 

Рисунок 17.11 – Получение данных от ведомого с 10-битным адресом 

 
На  рисунках  17.10  и  17.11  биты  посылки  условно  обозначены  буквами  S,  W  и  др. 

или состояния битов указаны непосредственно  «0» или  «1». В дальнейшем на подобных 
рисунках,  поясняющих  содержимое  посылки  при  передаче  или  приеме  данных,  будут 

 

 

139 

применяться  такие  же  и  другие  обозначения.  Все  обозначения,  которые  будут 
использоваться, указаны в таблице 17.1 с подробными пояснениями. 

 

Т а б л и ц а   1 7 . 1  – Условные обозначения, принятые на рисунках, показывающих содержимое 
посылок данных или адресов на линии SDA 

Обозначение 

Расшифровка обозначения 

Состояние старта. Символом «S» обозначается стартовый бит посылки 

SR 

Состояние повторного старта 

R/W 

Бит  указания  направления  передачи.  В  тексте  настоящего  описания  он 
упоминается  как  R/W#.  Наличие  этого  обозначения  в  бите  посылки 
указывает на то, что этот бит может быть равен как «0», так и «1» 

Частный  случай  обозначения  бита  направления  передачи  R/W#.  Если  в 
обозначении бита стоит символ «R», то это указывает на то, что в данной 
посылке  бит  R/W#  должен  быть  равен  «1»,  т. е.  направление  передачи 
данных происходит от ведомого к мастеру (чтение) 

Частный  случай  обозначения  бита  направления  передачи  R/W#.  Если  в 
обозначении бита стоит символ «W», то это указывает на то, что в данной 
посылке  бит  R/W#  должен  быть  равен  «0»,  т. е.  направление  передачи 
данных происходит от мастера к ведомому (запись) 

A/A# 

Бит  квитированого/неквитированого приема, посылаемый приемником в 
ответ  на  запрос  передатчика  подтвердить  прием.  Наличие  этого 
обозначения  в  бите  посылки  указывает  на  то,  что  этот  бит  может  быть 
равен как «0», так и «1» 

Частный случай обозначения бита A/A#. Если в обозначении бита стоит 
символ  «А»,  то  это  указывает  на  то,  что  в  данной  посылке  в  ответ  на 
запрос  подтверждения  приема  байта  произошло  квитирование,  т. е. 
приемник  установил  линию  SDA  в  «0».  В  тексте  настоящего  описания 
квитированный  бит  запроса  подтверждения  приема  обозначается  как 
ACK 

A# 

Частный случай обозначения бита A/A#. Если в обозначении бита стоит 
символ  «А#»,  то  это  указывает  на  то,  что  в  данной  посылке  в  ответ  на 
запрос  подтверждения  приема  байта  произошло  неквитирование,  т. е. 
приемник не изменил линию SDA и оставил ее в состоянии «1». В тексте 
настоящего  описания,  неквитированный  бит  запроса  подтверждения 
приема обозначается как NACK 

Состояние  окончания  передачи.  Символом  «P»  обозначается  стоповый 
бит посылки  

Код мастера 

8-битный код мастера. Значение 0000_1хххb, где «ххх» – уникальный код 
каждого мастера в системе нескольких устройств 

Адрес 

7-битный адрес ведомого, передаваемый мастером  

Адрес 

ведомого 

Адрес  ведомого,  передаваемый  во  втором  байте  посылки.  В  режиме  HS 
это  7-битный  адрес,  на  что  указывает  идущий  следом  бит  R/W#,  в 
остальных случаях это восемь младших бит 10-битного адреса 

Данные 

Байт или несколько байт данных 

GC 

Байт адреса общего вызова (0000_0000b) 

AR 

Адрес отклика (0001_100b) 

 

 

 

Изображение числа в овале с линией, прикрепляющей его к изображению 
передачи битов, обозначает код операции и указывает момент, в который 
этот код записывается в поле MODE регистра ST 

Цветное поле  Серым цветом обозначены биты, передаваемые от мастера к ведомому 

Белое поле 

Белым цветом обозначены биты, передаваемые от ведомого к мастеру 

 

 

140 

17.2

 

Функциональное описание 

Структурная  схема  модуля  I2C  представлена  на  рисунке  17.12.  Далее  приводится 

краткое описание назначения блоков модуля. 

 

 

 

Рисунок 17.12 – Структурная схема модуля I2C 

 
Входные и выходные каскады линий SDA и SCL 

Для  обеих  линий  используются  входные  шумовые  фильтры.  В  режиме  FS  эти 

фильтры  подавляют  любые  импульсы  входного  сигнала,  длительность  которых  не 
превышает  один  такт  системного  синхросигнала.  Выходные  каскады  включают  в  себя 
понижающие (до уровня «0») устройства с открытым стоком. Функционирование входных 
и выходных каскадов зависит от состояния модуля I2C, т. е. включен или выключен.   

 
Управление режимом работы и опрос состояния 

Управление модулем осуществляют блоки управления режимом работы и скоростью 

передачи,  регистров  управления  и  состояния.  В  состав  этих  блоков  входят  следующие 
регистры: 

- ST – содержит биты, отражающие текущую конфигурацию модуля I2C (мастер или 

ведомый, передатчик или приемник) и бит флага прерывания; 

- CST – является одновременно регистром управления шиной и регистром состояния 

шины; 

- CTL0 – управляет генерированием состояний старта, повторного старта и останова, 

а также квитированием; 

- CTL1  и  CTL2  –  устанавливают  параметры  тактового  сигнала  в  режиме  мастера  и 

контролируют режим 10-битной адресации. 

 

 

 

 

141 

Регистры адреса и компаратор адреса 

В  регистр  адреса  ADDR  может  быть  записан  7-битный  адрес,  который  является 

адресом устройства при работе его в режиме ведомого. Распознавание адреса включается 
установкой бита SAEN. 

Компаратор адреса сравнивает принятый 7-битный адрес со значением, хранящимся 

в  поле  ADDR.  Если  разрешено  распознавание  адреса  общего  вызова  (установлен  бит 
GCMEN  регистра  CTL0),  то  компаратор  сравнивает  принятый  адрес  со  значением 
0000_000b.  Если  разрешено  распознавание  адреса  отклика  на  сигнал  предупреждения 
(установлен бит SMBARE регистра CTL0), то компаратор сравнивает принятый адрес со 
значением 0001_100b. 

Если включен режим 10-битной адресации (одновременно установлены биты SAEN 

и S10EN регистров ADDR и CTL2, соответственно), компаратор сравнивает старшие пять 
битов  первого  полученного  байта  со  значением  1111_0b,  а  следующие  два  бита  со 
значением  второго  и  первого  битов  поля  S10ADR  регистра  CTL2.  Старший  бит  второго 
полученного байта сравнивается со значением нулевого бита поля S10ADR, а оставшиеся 
семь битов – со значением битового поля ADDR регистра ADDR (см. рисунок 17.13). 

 

 

 

Рисунок 17.13 – Компаратор адреса в режиме 10-битной адресации 

 

Сдвиговый регистр данных 

Регистр  SDA  представляет  собой  сдвиговый  регистр,  используемый  для  приема  и 

передачи данных. Старший бит регистра передается/принимается первым, младший бит – 
последним. Запись в регистр SDA возможна только, если установлен бит INT регистра ST. 
Регистр  может  быть  прочитан  в  любой  момент  времени,  но  прочитанные  данные  будут 
гарантированно  достоверными  только  при  установленном  бите  INT.  Регистр  SDA  не 
очищается при сбросе и хранит случайные данные до тех пор, пока не будет перезаписан 
программно или аппаратно после приема байта.   

 
Генерация тактового сигнала и синхронизация 

Последовательный  тактовый  сигнал  (выходной  сигнал  модуля  I2C  в  режиме 

мастера)  формируется  генератором  на  базе  системного  тактового  сигнала  (с  частотой 
fosc). 

Модуль  I2C  может  функционировать  в  двух  глобальных  режимах  – 

стандартном/скоростном (FS) и высокоскоростном (HS). 

В  режиме  FS  используется  7-битный  предделитель.  Значение  старших  6  бит 

определяется  значением  битового  поля  SCLFRQ  регистра  CTL1,  а  младший  бит  всегда 
равен  нулю  (деление  производится  только  на  четное  число).  Минимальный  и 
максимальный  коэффициенты  деления  –  8  и  128  соответственно.  Блок  синхронизации 
тактового сигнала производит синхронизацию генератора тактового сигнала и выходного 
сигнала SCL с тактовым сигналом других устройств, подключенных к шине.  

В  режиме  HS  используется  4-битный  предделитель.  Значение  старших  бит 

определяется значением битового поля HSDIV регистра CTL2, младший бит всегда равен 
нулю.  

 

 

142 

Определяемое  спецификацией  протокола  SMBus  наименьшее  время  ожидания  на 

линии SCL составляет 25 мс. Если пауза между двумя тактовыми импульсами превысила 
25  мс,  то  устройство  должно  прервать  текущую  передачу.  Мастер  должен  сформировать 
состояние  старта  в  процессе  передачи  или  после  ее  окончания.  Ведомый  должен 
освободить  шину.  Устройства,  обнаружившие  данное  состояние,  должны  восстановить 
свои соединения и ожидать формирования состояния старта в пределах 10 мс. 

Для  отслеживания  периодов  ожиданий  на  шине  в  модуле  I2C  имеется  счетчик 

времени ожидания. Функциональная схема счетчика показана на рисунке 17.14. 

 

 

 

Рисунок  17.14 – Функциональная схема счетчика времени ожидания 

 
Счетчик  времени  ожидания  состоит  из  делителя,  8-битного  программируемого 

предделителя и 8-битного основного счетчика. Все элементы счетчика времени ожидания 
начинают работу по отрицательному фронту сигнала на линии SCL (если работа счетчика 
разрешена). Положительный фронт сигнала на линии SCL сбрасывает значения делителя, 
предделителя  и  основного  счетчика.  Предделитель  считает  вниз,  начиная  со  значения, 
записанного  в  регистр  TOPR.  После  достижения  нуля  счетчиком  предделителя,  он 
загружается  значением  из  регистра  TOPR.  Основной  счетчик  считает  вниз  от  значения 
FFh.  Каждое  достижение  нуля  предделителем  декрементирует  значение  основного 
счетчика.  Обнуление  основного  счетчика  и  загрузка  его  значением  FFh  вызывает 
остановку  основного  счетчика,  предделителя  и  делителя  и  установку  флага  TOERR  в 
регистре CST. Дополнительно устанавливается флаг INT и если разрешено, генерируется 
прерывание. 

Период времени ожидания определяется следующим выражением  

 

                  Тожид = Tosc × TOCDIV × (SMBTOPR + 1) × 256 , 

(17.1) 

 

где Tosc – период системного тактового сигнала с частотой fosc. 

 
Арбитраж и обнаружение ошибок на шине 

Арбитраж  в  режиме  мастера  передатчика  может  быть  потерян  в  случае,  когда  два 

мастера одновременно формируют состояние старта и начинают передачу данных. Потеря 
арбитража  может  происходить  как  во  время  передачи  адреса,  так  и  во  время  передачи 
данных.  

В случае потери приоритета при передаче байта адреса, мастер переходит в режим 

ведомого приемника и начинает принимать адрес. Если принятый адрес оказался «своим», 
модуль  I2C  далее  функционирует  в  режиме  ведомого.  Если  принятый  адрес  не  оказался 
«своим», то модуль I2C переходит в режим безадресного ведомого. 

В случае потери приоритета при передаче байта данных модуль I2C сразу переходит 

в режим безадресного ведомого. 

 

 

 

143 

Обнаружение и исправление ошибок на шине 

Состояние  ошибки  на  шине  возникает  в  том  случае,  если  во  время  передачи 

адреса/данных или во время квитирования на шине обнаруживаются состояния старта или 
стопа. При обнаружении ошибки на шине выполняются действия: 

- в поле MODE регистра ST записывается код ошибки 1Fh; 
- генерируется прерывание (если разрешено); 
- модуль I2C переходит в режим безадресного ведомого; 
- линии SDA и SCL освобождаются. 
 
Обнаружение  ошибки  на  шине  может  вызвать  у  простой  шины  некорректное 

формирование  состояния  старта  и  отключение  модуля  I2C.  Поэтому  для  возврата  к 
нормальной работе следует выполнить действия: 

- выключить и снова включить модуль I2C (бит ENABLE в регистре CTL1); 
- в течение времени простоя проверить, не подключен ли другой активный мастер к 

шине (бит BB регистра CST должен быть обнулен); 

-  в  режиме  мастера  шины  сформировать  состояние  старта,  передать  адрес  и  затем 

сформировать состояние останова, таким образом, проведя синхронизацию всех ведомых 
устройств (в том числе и тех, которые не обнаружили ошибку на шине). 

 
Режим IDLE 

Переход в режим IDLE происходит при отключении внешнего сигнала тактирования 

модуля  I2C  записью  нуля  в  бит  I2CEN  регистра  APB_CLK.  Переход  в  режим  IDLE 
подобен  программному  выключению  модуля  I2C  (очистка  бита  ENABLE  в  регистре 
CTL1).  Регистры  CTL0,  ST  и  CST  очищаются,  чтобы  гарантировать  нормальный  старт 
после возобновления функционирования модуля.  

Выход  из  режима  IDLE  осуществляется  записью  единицы  в  бит  I2CEN  и 

включением модуля битом ENABLE. 

 

17.3

 

Инициализация и функционирование  

В целом модуль I2C поддерживает два базовых режима – режим FS и режим HS. 
Стандартный/скоростной  режим  или  режим  FS  –  стандартный  режим  работы,  в 

котором модуль функционирует по умолчанию. Диапазон частот сигнала на линии SCL – 
от 23,6 до 750,3 кГц (при XTAL1 = 24 МГц).  

Высокоскоростной  режим  или  режим  HS  –  режим  работы,  который  включается 

программно. Режим HS значительно превосходит режим FS по скорости – диапазон частот 
сигнала на линии SCL от 0,25 до 2 МГц (при XTAL1 = 24 МГц).  

Все операции режима HS начинаются в режиме FS в следующем порядке: 
- стартовое состояние; 
- 8-битный код мастера (значение 0000_1хххb, где «ххх» – уникальный код каждого 

мастера в системе нескольких устройств); 

- неквитирование. 
 
Арбитраж  на  шине  происходит  в  момент  передачи  несколькими  мастерами  своих 

уникальных  кодов.  Выигравший  арбитраж  мастер  захватывает  шину.  В  связи  с  такой 
организацией  режима  HS  дальнейший  арбитраж  и  синхронизация  на  шине  не 
реализуются. 

После выполнения вышеуказанных шагов устройства, поддерживающие режим HS, 

переключаются  в  этот  режим.  Мастер  генерирует  состояние  повторного  старта  (SR),  а 
затем  передает  адрес  ведомого  и  бит  направления  передачи  R/W#  (см.  рисунок  17.15. 
Расшифровка обозначений, принятых на рисунке, приведена в таблице 17.1).    

 

 

144 

Все передачи в режиме HS по формату идентичны передачам режима FS, что делает 

эти два режима полностью совместимыми.  

 

 

 

Рисунок  17.15 – Переход в режим HS и обратно в режим FS 

 
Выход  из  режима  HS  происходит  генерированием  состояния  окончания  передачи 

(P), после которого все устройства переключаются обратно в режим FS. В каждом из двух 
базовых  режимов  –  FS  и  HS  –  модуль  I2C  может  функционировать  как  мастер  или 
ведомый, получать или передавать информацию.  

Далее все режимы работы модуля I2C будут рассмотрены подробно. 

 
Инициализация 

Для начала работы следует произвести инициализацию: 
1 Включить модуль I2C установкой бита ENABLE в регистре CTL1. 
2  Если  активен  режим  мастера,  записать  нужный  коэффициент  деления  в  битовое 

поле SCLFRQ в регистре CTL1 для выбора периода тактового сигнала SCL (для режима 
HS записать коэффициент деления в поле HSDIV регистра CTL2). 

3 Если активен режим ведомого, необходимо: 
-  записать  «собственный»  адрес  ведомого  в  битовое  поле  ADDR  и  установить  бит 

SAEN регистра ADDR;  

- для реализации 10-битной адресации записать старшие биты адреса в битовое поле 

S10AD и установить бит S10EN регистра CTL2; 

-  для  включения  функции  распознавания  адреса  общего  вызова  установить  бит 

GCMEN в регистре CTL0; 

- для включения функции распознавания адреса отклика установить бит  SMBARE в 

регистре CTL0. 

4 При необходимости отслеживания периодов ожидания на шине записать желаемые 

значения в регистр  TOPR и в битовое поле  TOCDIV (регистр  CST) для  отсчета времени 
ожидания на линии SCL. Для автоматического отслеживания времени ожидания записать 
ненулевое значение в битовое поле TOCDIV регистра CST. 

5  Для  разрешения  формирования  запроса  на  прерывание  установить  бит  INTEN  в 

регистре CTL0.   

 
Функционирование 

Модуль  I2C  может  работать  в  режиме  мастера  или  ведомого.  Также  он  может 

функционировать как передатчик или приемник. Итого, модуль I2C поддерживает девять 
режимов: 

- безадресный ведомый;  
- мастер передатчик в режиме FS; 
- мастер передатчик в режиме HS; 
- мастер приемник в режиме FS; 
- мастер приемник в режиме HS; 
- ведомый передатчик в режиме FS;  
- ведомый передатчик в режиме HS;  
- ведомый приемник в режиме FS; 
- ведомый приемник в режиме HS. 

 

 

 

 

 

 

 

содержание      ..     7      8      9      10     ..