Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методическиое пособие_10.docx
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
4 Мб
Скачать
☆

2.9. Интерфейс i2c (Inter-Integrated Circuit)

Это последовательный интерфейс образующий адресную шину. Каждое устройство на шине имеет свой уникальный адрес. Обмен данными производится по выводу SDA синхронно, т.е. на шине есть специальный сигнал SCL, который синхронизирует передачу каждого бита адреса и данных. Сигналы SDA и SCL двунаправленные. Инициатором обмена данными по шине может быть любое устройство, такие шины относятся к классу multi-master. Это касается как передачи, так и приёма данных.

Можно выделить следующие особенности:

-поддержка байтового обмена данными

-поддержка 7-ми и 10-ти битной адресации устройств на шине

-скорость передачи данных от 10 кбит/сек, до 400 кбит/сек

-поддержка режима DMA (только контроллер DMA2)

-наличие вектора прерывания

В момент обмена на шине должен присутствовать одно управляющее устройство (“master”) инициирующее обмен данными и одно подчинённое устройство (“slave”). “Master” является инициатором выработки синхросигналов SCL.

Для передачи и приёма используются четыре регистра. Процессор или канал DMA записывают данные при передаче в регистр ICDXR и при чтении читают данные из ICDRR. Когда запускается процесс передачи данные из ICDXR, копируются в регистр ICXSR и последовательно сдвигаются через вывод SDA процессора. При приёме данные вдвигаются в регистр ICRSR и копируются в регистр ICDRR для последующей обработки.

Тактирование блока I2C осуществляется аналогично тактированию самого процессора. Необходимая частота сигнала SCL достигается использованием предделителя (prescaler) и делителя (dividers). После предделителя, частота должна быть в диапазоне 6,7-13,3 мГц.

Когда шина свободна сигналы SDA и SCL поддерживаются на высоком логическом уровне. “Master” генерирует один импульс при передаче одного бита данных. Уровень сигнала SDA должен быть стабильным во время высокого уровня SCL. Изменение уровня на SDA должно происходить только когда SCL имеет низкий уровень.

Начало и окончание передачи данных “master” инициируется комбинацией сигналов SDA и SCL. Условие старта, переход сигнала SDA из высокого в низкий при высоком SCL. Условие останова, переход сигнала SDA из низкого уровня в высокий при высоком SCL. Шина считается занятой от момента старта до момента останова. Занятость шины определяется по биту BB (bus busy) в регистре ICSTR. Для старта передачи должны быть установлены биты MST и STT в регистре ICMDR. Для останова должен быть установлен бит STP.

Данные передаются, начиная со старшего MSB (most-significant) бита. Данные могут передаваться посылками от 2-х до 8-ми бит, что определяется полем бит BC в регистре ICMDR. Посылки перемежаются сигналом подтверждения ACK (acknowledgment) от приёмника. В процессоре возможен выбор 7-ми или 10-ти битной адресации устройств на шине I2C. После адреса следует бит указатель R/W того, что “master” передаёт данные в “slave” или читает из “slave”.

Может быть осуществлён программный сброс (reset) интерфейса I2C обнулением бита IRS (ICMDR) или через установку бита I2C_RST (PRCR).

Перед конфигурированием шины бит I2C-RST=0. Настройка I2C должна производиться до начала передачи данных при этом интерфейс должен находиться в режиме сброса по биту IRS=0. После всех настроек шина выводится из режима сброса IRS=1.

В процессоре реализован алгоритм т.н. арбитража шины. При этом отслеживаются конфликтные ситуации, когда на шине происходят одновременно две передачи данных. Для реагирования на эту ситуацию введено отдельное прерывание AL (Arbitration-lost interrupt).

Источниками прерывания могут выступать следующие события:

-отсутствие сигнала подтверждения от приёмника (No-acknowledge interrupt (NACK))

-условие STOP обнаружено (Stop-Condition-Detection interrupt (SCD))

-процессор распознал собственный адрес (Address-as-Slave interrupt (AAS))

-регистры I2C доступны после изменения настроек (Registers-ready-for-access interrupt (ARDY))

-данные приняты (Receive interrupt/status)

-данные переданы (Transmit interrupt/status)

Каждое из этих событий вызывает одно и то же прерывание. Которое событие произошло, определяется в регистре Interrupt Vector Register (ICIVR) в поле INTCODE.

Можно выделить четыре режима:

1)Slave-receiver mode – интерфейс настраивается в подчинённый режим и принимает данные от “master”.

2)Slave-transmitter mode - интерфейс настраивается в подчинённый режим и передаёт данные в “master”.

3)Master-receiver mode - интерфейс настраивается в управляющий режим и принимает данные от “slave”.

4)Master-transmitter mode - интерфейс настраивается в управляющий режим и передаёт данные в “slave”.