После создания условия завершения передачи шина освобождается. Условие завершения передачи также представляет собой однозначное состояние на шине. Все блоки и устройства распознают его и подготавливаются к появлению нового условия начала передачи. В том случае, если ведущее устройство из-за промежуточной занятости шины отзывает свое требование занять шину, то оно может предпринять новую попытку создать условие начала передачи и тем самым получить шину для своих нужд.
Полная передача данных через шину I2С, в принципе, состоит из условия начала передачи, одного или нескольких байтов данных (за которыми, соответственно, следует бит квитирования), и условия завершения передачи.
Выбор ведомого устройства, с которым хотело бы обмениваться данными ведущее устройство, осуществляется посредством первого байта, который всегда определяется как адрес ведомого устройства – первый байт последовательности данных. Он однозначно сопоставлен определенному устройству, подключенному к шине, и имеет длину 7 бит (разряды от 1 до 7). Теоретически, таким образом можно адресовать до 128 ведомых устройств, однако по определению некоторые адреса ведомых устройств имеют особое значение. Адрес ведомого устройства состоит из двух частей: постоянной и переменной (рис. 7.14).
Рис. 7.14. Формат адреса шины I2C
Постоянная часть адреса описывает требования к определенным группам устройств и определяется изготовителем. Его длина определена в результате практического опыта и в большинстве случаев составляет 4 бита. Он будет тем короче, чем больше однотипных устройств в схеме. Постоянная часть адреса жестко "прошита" в интегральной схеме и не может быть изменена пользователем.
Переменная часть адреса ведомого устройства служит для выбора определенного устройства из группы однотипных кристаллов, среди которых все имеют постоянную часть адреса ведомого устройства. Благодаря этому, к шине могут быть подсоединены несколько однотипных интегральных схем. Переменная часть
в большинстве случаев определяется пользователем с помощью внешних схем (через дополнительные выводы).
С помощью разрядов 1-7 адреса ведомого устройства однозначно идентифицируется требуемый ведомый блок. Разряд 0 задает направление передачи данных. Он определяет, должны ли быть приняты или переданы данные. Если разряд направления передачи данных содержит лог. 1 (чтение), то ведущее устройство находится в режиме приемника, а ведомое – в режиме передатчика. Если разряд направления передачи данных содержит лог. 0 (запись), то ведущее устройство будет работать как передатчик, а ведомое – как приемник.
Адрес ведомого устройства также подтверждается этим устройством с помощью бита квитирования. Если ведущее устройство после адресации получает отрицательное квитирование, то оно может заключить, что ведомое устройство или вообще отсутствует, или в настоящий момент с ним невозможно установить связь (например, оно занято обработкой заданий, критическими с точки зрения времени).
Интерфейс I2C аппаратно реализован не во всех микроконтроллерах AVR, однако, благодаря высокому допустимому значению тактовой частоты, возможна его организация с помощью программного обеспечения.
В микроконтроллерах PIC обмену данными по интерфейсу 12С соответствует особый режим работы порта MSSP. Линии SCL соответствует вывод 3 порта С, а линии SDA – вывод 4 того же порта.
Для управления передачей в режиме I2С используются три регистра: уже рассмотренные выше SSPSTAT (рис. 7.8) и SSPCON1 (рис. 7.9), а также SSPCON2 (рис. 7.10).
Назначение разрядов регистра SSPSTAT, имеющих отношение к 12С:
-BF – флаг заполнения буфера данных;
-UA – устанавливается в лог. 1 в том случае, если необходимо модифицировать адрес устройства (содержимое регистра SSPADD);
-R/W – указывает на тип операции: 0 – запись, 1 – чтение;
-S – устанавливается в лог. 1 при обнаружении условия начала передачи;
-Р – устанавливается в лог. 1 при обнаружении условия завершения передачи;
-D/A – признак переданного байта: 0 – байт адреса, 1 – байт данных. Назначение разрядов регистра SSPCON1, имеющих отношение к I2С:
-SSPM0-SSPM3 – выбор режима работы порта MSSP (значения для интерфейса I С представлены в табл. 7.6);
-СКР – установка этого разряда в лог. 1 разрешает тактирование;
-SSPEN – флаг разрешения работы интерфейса;
-SSPOV – флаг переполнения приемного буфера;
-WCOL – флаг коллизий при записи (1 – запись новых данных в буферный регистр была произведена в момент передачи).
Таблица 7.6. Выбор режима работы порта MSSP для интерфейса l2C
SSPM3 | SSPM2 | SSPM1 | SSPMO | Режим |
0 | 1 | 1 | 0 | Режим Slave, используется 7-разрядный адрес |
0 | 1 | 1 | 1 | Режим Slave, используется 10-разрядный адрес |
1 | 0 | 0 | 0 | Режим Master, частота = F0sc / (4 (SSPADD + 1)) |
1 | 0 | 1 | 1 | Режим Master с программным управлением |
1 | 1 | 1 | 0 | Режим Slave, используется 7-разрядный адрес |
1 | 1 | 1 | 1 | Режим Slave, используется 10-разрядный адрес |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
GCEN | ACKSTAT | ACKDT | ACKEN | RCEN | PEN | RSEN | SEN |
Рис. 7.15. Регистр SSPCON2 микроконтроллеров PIC
Назначение разрядов регистра SSPCON2:
-SEN – устанавливается в лог. 1 для создания условия начала передачи;
-RSEN – устанавливается в лог. 1 для создания повторных условий начала передачи;
-PEN – сбрасывается в лог. О для создания условия окончания передачи;
-RCEN – устанавливается в лог. 1 для разрешения режима приема;
-ACKEN – инициирует последовательность битов квитирования;
-ACKDT – устанавливается в лог. 1 для отправки подтверждения при приеме байта;
-ACKSTAT – устанавливается в лог. 1 при получении подтверждения приема от ведомого устройства.
Когда осуществляется обмен данными между несколькими устройствами по одной общей шине, существует вероятность возникновения самых разнообразных ошибок. Кроме того, возникают сложности с адресацией. В системе, состоящей из двух устройств, все очень просто: одно устройство передает данные, а другое опрашивает шину и принимает данные. В случае же с несколькими устройствами, требуется определить, какое именно из них передает данные и какому из устройств, подключенных к общей шине. Все это обусловливает необходимость в некотором протоколе обмена данными.
Протокол определяет метод адресации, проверку ошибок и общий формат данных для всех устройств, использующих шину. Один из таких протоколов – протокол CAN (Controller Area Network), поддерживаемый рядом микроконтроллеров семейства PIC18 и некоторыми последними разработками компании Atmel.
Число в цифровой форме определяется на основании отношения входного напряжения к полному номиналу напряжения аналого-цифрового преобразователя (АЦП). Например, если на вход АЦП с номинальным напряжением 5 В подать напряжение 1 В„ то на цифровом выходе появится число, соответствующее 1/5=0,2 разрешающей способности преобразователя. Так, если используется АЦП с разрешением 8 бит, то максимальное возможное значение на его выходе 2 - 1 = 255. Таким образом, напряжению 1 В на аналоговом входе соответствует 0,2 - 255 = 51 на цифровом выходе.
Встроенные АЦП микроконтроллеров AVR и PIC имеют разрешение 10 бит и позволяют считывать напряжение на одном из восьми (в некоторых моделях – пяти) аналоговых входов (обычно – порт А).
В микроконтроллерах AVR для управления режимом АЦП используются два регистра: регистр управления ADCSR (рис. 8.1) и регистр мультиплексирования ADMUX (определяет, какие из восьми входов порта А являются аналоговыми).
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ADEN | ADSC | ADFR | ADIF | ADIE | ADPS2 | ADPS1 | ADPS0 |
Рис. 8.1. Регистр ADCSR микроконтроллеров AVR
Назначение разрядов регистра ADCSR:
-ADPS0 – ADPS2 – выбор коэффициента деления тактовой частоты (табл. 8.1); чем выше частота работы АЦП (производная от частоты системной синхронизации), тем ниже эффективное разрешение, поэтому следует устанавливать коэффициент деления;
-ADIE – разряд маскирования прерывания от АЦП (1 – по окончанию преобразования разрешено прерывание);
-ADIF – флаг прерывания от АЦП (устанавливается аппаратно по окончанию цикла преобразования);
-ADFR – лог. 1 в этом разряде переводит АЦП в несинхронизированный режим работы – обычно АЦП работает в режиме прерывания, чтобы процессор каждый раз не ожидал завершения медленно протекающего преобразования, однако в несинхронизированном режиме АЦП выполняет преобразование постоянно, как можно быстрее (на период такого преобразования должны быть запрещены все прерывания);
-ADSC – флаг начала преобразования;
-ADEN – флаг разрешения использования АЦП.
Таблица 8.1. Выбор коэффициента деления частоты системной синхронизации для тактирования АЦП микроконтроллеров AVR
ADPS2 | ADPS1 | ADPS0 | Коэффициент деления |
0 | 0 | 0 | 1 |
0 | 0 | 1 | 2 |
0 | 1 | 0 | 4 |
0 | 1 | 1 | 8 |
1 | 0 | 0 | 16 |
1 | 0 | 1 | 32 |
1 | 1 | 0 | 64 |
1 | 1 | 1 | 128 |
Таким образом, в общем случае процесс аналого-цифрового преобразования в микроконтроллерах AVR протекает следующим образом:
-установить в лог. 1 разряды регистра ADMUX, соответствующие аналоговым входам;
-установить разряды 0-2 регистра ADCSR для выбора коэффициента деления частоты системной синхронизации;