Портирование приложений с семейства PIC18 на PIC24F. 2.5. Модуль I2C

2.5. Модуль I2C
Архитектура модуля последовательно интерфейса I2C не претерпела значительных изменений в семействе PIC24F по сравнению с PIC18 - большинство управляющих битов и регистров имеют свои аналоги в PIC24F. Модули I2C обоих семейств поддерживают режимы 7- и 10-битной адресации, общий вызов на шине, удержание тактового сигнала, 100 кГц и 400 кГц частоту на линии тактирования, детектирование коллизий в режиме нескольких ведущих (multi master mode).

Вместе с тем, модули I2C семейства PIC24F имеют дополнительные возможности, отсутствующие в PIC18, такие, как конфигурируемая маска адреса, режим повторителя. Следует отметить, что в PIC24F приемник и передатчик I2C являются физически независимыми модулями.
Реализация обмена по I2С в микроконтроллерах PIC18 может быть организована либо по прерываниям, либо поллингом флагов статуса. Архитектура модулей I2C семейства PIC24F построена таким образом, что для осуществления I2C обмена требуется значительно меньше программных ресурсов, чем для PIC18.
Сравнение основных функций I2C модулей семейств PIC18 и PIC24F приведено в табл. 25.
Таблица 25. Сравнение основных функций I2C модулей семейств PIC18 и PIC24F


Параметры

PIC18

PIC24F

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

100 кГц / 400 кГц

100 кГц / 400 кГц / 1 МГц

Режим 7- и 10-битной адресации

да

да

Упрощенный режим 10-битной адресации

нет

да

Поддержка нескольких ведущих на шине

да

да

Конфигурируемая маска адреса

да (до 6 бит)

да (все 7 или 10 бит)

Общий вызов на шине

да

да

Поддержка зарезервированных адресов

только некоторые устройства

да

Опция удержания тактового сигнала

да

да

Режим повторителя (IPMI)

нет

да

Управление длительностью фронта

да

да

Опция отключения в режиме IDLE

нет

да

Уровни спецификации I2C и SMBus

да

да

2.5.1. Наименования битов и регистров модуля
Большинство служебных битов модуля I2С микроконтроллеров PIC24F имеют псевдонимы, соответствующие (или похожие) названию аналогичных битов в семействе PIC18 – см. табл. 26, табл. 27 и табл. 28.
Таблица 26. Сравнение основных управляющих битов модулей I2C семейств PIC18 и PIC24F (вне зависимости от режима работы)


Функция

PIC18

PIC24F

Разрешение работы модуля

SSPEN

I2CEN

Флаг детектирования стоп-бита

P

P

Флаг детектирования старт-бита

S

S

Отключение функции контроля скорости нарастания

SMP

DISSLW

Соответствие диаграммы входных уровней спецификации SMBus

CKE

SMEN

Флаг ошибки записи в регистр передатчика

WCOL

IWCOL

Флаг переполнения регистра приемника

SSPOV

I2COV

Буфер приемника заполнен

BF

RBF

Буфер передатчика заполнен

BF

TBF

Таблица 27. Сравнение основных управляющих битов и регистров для модулей I2C семейств PIC18 и PIC24F (работа в режиме ведомого)


Функция

PIC18

PIC24F

Удержание линии SCL

CKP

SCLREL

Режим 10-битной адресации

SSPM3:SSPM0 = 1111b

A10M

Разрешение функции общего вызова

GCEN

GCEN

Флаг типа последнего принятого бита – адрес/данные

D/A

D/A

Флаг операции – чтение/запись

R/W

R/W

Таблица 28. Сравнение основных управляющих битов и регистров для модулей I2C семейств PIC18 и PIC24F (работа в режиме ведущего)


Функция

PIC18

PIC24F

Флаг подтверждения ACK (прием)

ACKDT

ACKDT

Разрешение передачи бита подтверждения ACK

ACKEN

ACKEN

Разрешение работы приемника

RCEN

RCEN

Инициализация стоповой посылки

PEN

PEN

Инициализация повторной стартовой посылки

RSEN

RSEN

Инициализация стартовой посылки

SEN

SEN

Флаг подтверждения ACK (передача)

ACKSTAT

ACKSTAT

Статус передатчика

TRMT

TRSTAT

Флаг коллизии на шине

BCLIF

BCL и MI2CxIF

2.5.2. Новые функции модуля I2Cв семействе PIC24F
Перечисленные выше функции и свойства I2C модуля семейства PIC24F значительно увеличивают гибкость использования по сравнению с PIC18.
Независимая логика приемника и передатчика. В семействе PIC24F приемник и передатчик являются функционально раздельными модулями, каждый из которых имеет свою логику работы, набор служебных регистров и вектор прерывания.
Режим шинного повторителя. Модуль I2C семейства PIC24F может работать в качестве «пассивного» повторителя с возможностью удержания тактового сигнала.
Поддержка общего вызова на шине. Флаг GCSTAT (I2CxSTAT<9>) позволяет быстро определить возникновение события общего вызова, без обращения к буферу приемника.
Прерывание при приеме адреса совпадающего с маской. Модуль I2C семейства PIC24F в режиме работы «ведомый» может генерировать прерывание при совпадении принятого адреса (7- или 10-битного) с заданной маской произвольной конфигурации.
Прием 10-битного адреса. Прием 10-битного адреса в микроконтроллерах PIC24F не требует операции побайтного считывания адреса из регистра приемника (как в микроконтроллерах PIC18). Логика детектирования 10-битного адреса устанавливает флаг ADD10 (I2CxSTAT<8>).

2.5.3. Функции модуля I2C, отсутствующие в семействе PIC24F
Модуль I2C семейства PIC24F не поддерживает режим работы «программный ведущий», который в микроконтроллерах PIC18 устанавливается битами SSPM<3:0> = 1011b. Таким образом, аппаратно поддерживаются только уровни VIH и VIL, то есть стандартные входные уровни.

2.5.4. Портирование типового приложения
Программные приложения, обеспечивающие работу I2C модуля в микроконтроллерах семейства PIC18, могут сильно отличаться в зависимости от конкретных условий и структуры системы. Поэтому полностью охватить все режимы работы, последовательности действий и реакции на различные события не представляется возможным. Наиболее простой способ портирования приложения с семейства PIC18 на микроконтроллер PIC24F состоит в пошаговом переносе алгоритма работы, с учетом специфики и дополнительных функций модуля I2C PIC24F. Такой подход кроме выполнения основной задачи, позволит значительно сократить объем исполняемого кода.

2.5.5. Рекомендации по портированию приложения
Значительные различия между модулями I2C семейств PIC18 и PIC24F могут привести к некоторым затруднениям при портировании приложения. Например, типичной проблемой является тот факт, что в семействе PIC18 младший бит в регистре адреса SSPxADD равен 1, в то время как в семействе PIC24F – 0 (регистр I2CxADD), что необходимо учитывать при работе в режиме ведомого.
Часть устройств семейства PIC24F не имеют функции вывода микроконтроллера из режимов пониженного потребления SLEEP и IDLE при совпадении адреса, а так же не обновляют бит D/A при передаче в режиме ведомого. Указанные ограничения отражены в документации на конкретный контроллер.

Определение частоты на линии тактирования в режиме ведомого в семействе PIC24F отличается от PIC18. Так как частота выполнения инструкций в PIC24F привязана к FOSC/2, частота обмена будет в 2 раза больше при прочих равных условиях. Формулы расчета и таблицы стандартных скоростей обмена приведены в документации на семейство PIC24F [1].