close

Вход

Забыли?

вход по аккаунту

?

KrMal

код для вставкиСкачать
Федеральное агенТство по образованию
Государственное образовательное учреждение
высшего профессионального образования
Санкт-Петербургский государственный университет
аэрокосмического приборостроения
ИНТЕРФЕЙС I2C
Методические указания
к выполнению лабораторной работы
Санкт-Петербург
2009
Составители: кандидат технических наук, доцент Р. Н. Малаханов, Д. Ю. Крысин
Рецензент кандидат технических наук, доцент Я. А. Поповская
Методические указания знакомят с особенностями интерфейса I2C и практической его реализацией.
Содержат описание лабораторной работы по дисциплине
«Цифровые вычислительные устройства и микропроцессоры приборных комплексов».
Предназначены для студентов всех форм обучения по направлению «Приборостроение» и специальности «Авиационные приборы и измерительно-вычислительные комплексы».
Подготовлены кафедрой компьютерного проектирования аэрокосмических измерительно-вычислительных комплексов и рекомендованы к изданию редакционно-издательским советом
Санкт-Петербургского государственного университета аэрокосмического приборостроения.
Редактор Г. Д. Бакастова
Верстальщик С. Б. Мацапура
Сдано в набор 05.05.09. Подписано к печати 15.06.09.
Формат 60×84 1/16. Бумага офсетная. Печ. л. 2,2.
Уч.-изд. л. 2,0. Тираж 100 экз. Заказ № 425.
Редакционно-издательский центр ГУАП
190000, Санкт-Петербург, Б. Морская ул., 67
© ГУАП, 2009
Цель работы: изучение интерфейса I2C и его особенностей,
структуры и принципа работы встроенного периферийного модуля синхронного последовательного интерфейса (MSSP) микроконтроллера PIC18F4520; освоение практической реализации
интерфейса I2C.
1. Методические указания
1.1. Описание интерфейса I2C
В данном разделе приведено описание только тех особенностей
интерфейса I2C, знание которых необходимо для выполнения лабораторной работы. При необходимости данные, не вошедшие в
данный раздел, можно найти в работе [1].
Данный интерфейс (шина) был разработан фирмой «Philips»
и первоначально был предназначен для эффективного взаимодействия различных блоков телевизоров. В настоящее время
шина I2C широко используется для передачи данных как в бытовой, так и в промышленной электронике. Она применяется для
связи между собой однокристальных микроконтроллеров, жидкокристаллических индикаторов, микросхем памяти, аналогоцифровых и цифроаналоговых преобразователей, часов реального времени и т. д.
Шина I2C является последовательной двунаправленной шиной передачи данных [1]. Для переноса информации используются всего две линии:
SDA – последовательная линия данных,
SCL – последовательная линия синхронизации.
Данные по шине I2C могут передаваться со скоростью до
100 Кбит/с в стандартном режиме и до 400 Кбит/с – в «быстром»
режиме.
Максимально допустимое количество микросхем, подключенных к одной шине, ограничивается единственным параметром –
максимальной емкостью шины (до 400 пФ).
3
6ÈÁË
3Q
3Q
4%"
4$-
3T
3T
3T
¬ÊËÉÇÂÊË»Ç
3T
¬ÊËÉÇÂÊË»Ç
›ÔÎǽ
4$-
›ÔÎǽ
4%"
›ÔÎǽ
4$-
›ÔÎǽ
4%"
›Îǽ
4$-
›Îǽ
4%"
›Îǽ
4$-
›Îǽ
4%"
Рис. 1. Подключение устройств к шине I2C
(входные и выходные каскады устройств показаны условно)
Для обеспечения двунаправленности шины выходные каскады подключенных устройств имеют открытый сток или открытый коллектор, а сами линии SDA и SCL подсоединены к положительному источнику питания через подтягивающий резистор
(рис. 1). Это необходимо для реализации схемы монтажного «И».
Когда шина свободна, обе линии находятся в состоянии логической единицы. Иногда для защиты входных каскадов микросхем
от высоковольтных выбросов в линии применяют дополнительные резисторы Rs.
Каждое устройство, подключенное к шине, может быть передатчиком или приёмником. Это зависит от назначения устройства и конкретной фазы передачи данных. Кроме того, все устройства подразделяются на ведущие и ведомые. Ведущее устройство
инициирует передачу, генерирует сигналы синхронизации и завершает передачу. При этом любое адресуемое устройство считается ведомым по отношению к ведущему.
Шина I2C допускает несколько ведущих устройств. Это означает, что к ней можно подключить несколько устройств, способных управлять этой шиной. Для избежания конфликтов между
такими устройствами предусмотрена специальная процедура арбитража.
4
Каждое ведомое устройство определяется своим уникальным
адресом, в который входит номер группы устройств и номер конкретного устройства. Номер группы обычно определяет, является ли это устройство микроконтроллером, датчиком, памятью
или чем-то еще.
В данной лабораторной работе интерфейс I2C используется
для обмена информацией между двумя микроконтроллерами
PIC18F4520. Один из них сконфигурирован как ведущее устройство, второй – как ведомое.
Передача бита
Из-за разнообразия различных технологий, которые могут
быть использованы с шиной I2C, уровни логического нуля (низкий уровень) и логической единицы (высокий уровень) не установлены и зависят от величины напряжения питания. Для передачи одного бита данных по линии SDA на линии SCL генерируется один импульс синхронизации.
Данные на линии SDA должны быть стабильными в течение
всего периода, когда на линии SCL установлен высокий уровень
напряжения. Состояние на линии данных SDA может изменяться только тогда, когда линия SCL находится в состоянии логического нуля (рис. 2). Исключениями являются два особых состояния – сигналы «Старт» и «Стоп».
Сигналы «Старт» и «Стоп»
Переход напряжения на линии SDA из высокого уровня в низкий уровень в момент, когда на линии SCL установлен высокий
уровень напряжения, является сигналом «Старт» (S) (рис. 3).
ªÇÊËÇØÆÁ¾
ÄÁÆÁÁ4%"
ƾ½ÇÄ¿ÆÇ
ÁÀžÆØËÕÊØ
4%"
4$
Рис. 2. Передача бита данных
5
ªÁ¼Æ¹Ä„ªË¹É˔
ªÁ¼Æ¹Ä„ªËÇȔ
4%"
4$
4
1
Рис. 3. Сигналы «Старт» и «Стоп»
Переход напряжения на линии SDA из низкого в высокое состояние в момент, когда на линии SCL установлен высокий уровень напряжения, является сигналом «Стоп» (P).
Сигналы «Старт» и «Стоп» всегда генерируются ведущим и
служат для индикации начала и конца передачи данных соответственно. После сигнала «Старт» шина считается занятой. Через
некоторое время после появления сигнала «Стоп» шина рассматривается как свободная.
Шина также считается занятой, если вместо сигнала «Стоп»
ведущий генерирует повторный сигнал «Старт». Назначение
обычного и повторного сигналов «Старт» идентично. Повторный
сигнал «Старт» подается, когда необходимо осуществить новую
передачу данных непосредственно после окончания текущей,
т. е. сигнал «Стоп» не подается.
Детектирование сигналов «Старт» и «Стоп» в специализированных элементах обычно производится аппаратно. В микроконтроллерах без аппаратной поддержки I2C реализация шины
полностью может быть выполнена программно. В этом случае
необходимо осуществлять считывание состояния линии SDA не
менее двух раз за период синхронизации для того, чтобы зафиксировать изменение состояния. Микроконтроллер PIC18F4520
имеет встроенный модуль MSSP, который обеспечивает аппаратную поддержку интерфейса I2C.
Синхронизация
Передача информации производится 8-разрядными байтами.
Число байтов, которые могут быть переданы за одну передачу,
не ограничено. Каждый байт должен сопровождаться подтверждением. Данные передаются, начиная со старшего бита. Если ведомый не может принять или передать следующий байт данных
из-за выполнения какой-либо функции реального времени (например, обслуживания прерывания), то он может удерживать
6
линию SCL в низком логическом уровне. Это переводит ведущее
устройство в режим ожидания. Процесс передачи возобновляется, когда ведомое устройство отпускает линию SCL в состояние
логической единицы. Данный прием обеспечивает синхронизацию скоростей ведущего и ведомого устройств.
Адресация
Процедура адресации всегда выполняется ведущим устройством. Она заключается в том, что сразу после формирования
сигнала «Старт» ведущее устройство отправляет адресный байт.
Старшие 7 битов этого байта содержат адрес ведомого, который
выбирается для работы, а нулевой бит (R/W) определяет направление пересылки данных: нуль означает отправку (запись), единица – прием (чтение).
После этого каждое ведомое устройство в системе сравнивает
старшие 7 битов адресного байта со своим адресом. При совпадении устройство полагает себя выбранным либо как ведомыйприёмник, либо как ведомый-передатчик, в зависимости от бита
направления.
Подтверждение
Для передачи байта информации всегда формируется не восемь, а девять синхронизирующих импульсов. Последний 9-й
синхронизирующий импульс генерируется ведущим устройством для формирования приёмником подтверждения.
Подтверждение является обязательным элементом процедуры передачи данных. Для этого передатчик отпускает линию
SDA в состояние логической единицы на время 9-го синхронизирующего импульса. Приемник при этом должен удерживать её
в состоянии логического нуля в течение времени, пока на линии
SCL установлен высокий уровень напряжения.
Обычно приемник, который был адресован, должен генерировать подтверждение после получения каждого байта. Однако
есть случаи, в которых приёмник не формирует подтверждение.
Такая ситуация называется неподтверждением.
Если ведомое устройство не может подтвердить приём адресного байта (например, когда устройство не готово, потому что выполняет некоторую внутреннюю функцию), линия SDA должна
быть оставлена в состоянии логической единицы. В этом случае
ведущий может сгенерировать сигнал «Стоп» для отмены передачи или повторный сигнал «Старт» для новой передачи.
7
ªÁ¼Æ¹Ä„ªË¹É˔
ªÁ¼Æ¹Ä„ªËÇȔ
4%"
4$-
4
™½É¾Ê
38
¨
¹Æ
ÆÔ¾ ¨
¹Æ
ÆÔ¾ 1
¨
38 s ºÁËƹÈɹ»Ä¾ÆÁبsÈǽ˻¾É¿½¾ÆÁ¾
Рис. 4. Передача данных
Если ведомый-приемник подтверждает свой адрес, но через
некоторое время не может получать байты данных, то он также
не генерирует подтверждение. В этом случае ведущий должен
остановить передачу.
Если ведущий-приемник желает прекратить текущую передачу, то он не формирует подтверждение после последнего принятого
байта. Ведомый-передатчик в этом случае должен освободить линию SDA, чтобы предоставить возможность ведущему устройству
сгенерировать сигнал «Стоп» или повторный сигнал «Старт».
Форматы передачи информации
В общем случае передача информации происходит в виде, показанном на рис. 4.
После сигнала «Старт» ведущее устройство выполняет процедуру адресации. Далее, в зависимости от бита направления
R/W, осуществляется запись или чтение байтов данных. Каждый принятый байт сопровождается подтверждением (кроме
случаев, описанных выше). Пересылка данных обычно заканчивается сигналом «Стоп». Однако вместо сигнала «Стоп» ведущее
устройство может подать повторный сигнал «Старт» и адрес следующего или того же устройства.
Возможны два основных формата передачи данных – формат
записи и формат чтения.
Записью называется формат (рис. 5), когда после адресации
ведущий-передатчик передает данные ведомому-приёмнику (направление передачи не изменяется).
Чтением называется формат (рис. 6), когда после адресации
ведущее устройство получает данные от ведомого устройства.
После первого подтверждения ведущий-передатчик становит8
À¹ÈÁÊÕ
4
™½É¾Ê
38 ¨
¹ÆÆÔ¾
¨
¹ÆÆÔ¾
¨¦¨
1
Рис. 5. Формат записи: – от ведущего устройства к ведомому;
– от ведомого устройства к ведущему
Ð˾ÆÁ¾
4
™½É¾Ê
38 ¨
¹ÆÆÔ¾
¨
¹ÆÆÔ¾
¦¨
1
Рис. 6. Формат чтения: – от ведущего устройства к ведомому;
– от ведомого устройства к ведущему
ся ведущим-приемником, а ведомый-приемник становится
ведомым-передатчиком. Первое подтверждение генерируется ведомым устройством, остальные – ведущим. Сигнал «Стоп» генерируется ведущим устройством после того, как он не подтверждает последний принятый байт.
Выбор номиналов резисторов
Номиналы подтягивающих (Rp) и защитных (Rs) резисторов
зависят от следующих параметров:
напряжения питания;
ёмкости шины;
количества подключенных устройств.
Величина напряжения питания Uпит ограничивает минимальный номинал подтягивающих резисторов Rp. Вид зависимости
показан на рис. 7, а.
Ёмкость линии С ограничивает максимальный номинал
подтягивающих резисторов Rp. Вид зависимости показан на
рис. 7, б.
Допустимая верхняя граница уровня логического нуля
(0,1Uпит) ограничивает максимальный номинал защитных резисторов Rs. Вид зависимости показан на рис. 7, в.
Максимальный входной ток каждого сигнального вывода
микросхемы при высоком логическом уровне напряжения имеет установленное значение 10 мкА. Так как допустимая нижняя
граница напряжения уровня логической единицы составляет
0,2Uпит, общий входной ток ограничивает максимальный номи9
а)
3QNJO
б)
3Q NBY
6ÈÁË
в)
3TNBY
©
г)
3QNBY
3Q
O
Рис. 7. Выбор номиналов резисторов
нал подтягивающих резисторов Rp. Общий входной ток определяется количеством подключенных устройств n. Характер этой
зависимости показан на рис. 7, г.
1.2. Модуль MSSP микроконтроллера PIC18F4520
В данной лабораторной работе в качестве ведущего и ведомого устройств используются 2 микроконтроллера PIC18F4520
(МК) фирмы Microchip. PIC18F4520 – это однокристальный
8-разрядный FLASH КМОП микроконтроллер. В его состав входит встроенный периферийный модуль синхронного последовательного интерфейса (MSSP) [2].
MSSP может использоваться для связи с периферийными
микросхемами или другими микроконтроллерами. Периферийными микросхемами могут быть: EEPROM память, сдвиговые
регистры и др.
MSSP может работать в одном из двух режимов:
последовательный периферийный интерфейс (SPI);
интерфейс Inter-Integrated Circuit (I2C).
Режим I2C
Модуль MSSP аппаратно поддерживает все функции ведущих
и ведомых устройств интерфейса I2C. Поддерживаются режимы
с 7-разрядной и 10-разрядной адресациями (нами рассматривается только первый режим).
10
Включение модуля MSSP выполняется установкой бита
SSPEN в 1. Требуемый режим выбирается с помощью младших
4 битов регистра SSPCON1.
Для работы с шиной I2С используется два вывода SCL и SDA.
При выборе любого режима эти выводы должны быть настроены
на вход установкой соответствующих битов регистра TRISC в 1.
Для управления модулем в режиме I2C используется шесть
регистров:
SSPSTAT – регистр статуса MSSP;
SSPCON1 – первый регистр управления MSSP;
SSPCON2 – второй регистр управления MSSP;
SSPBUF – буфер приемника-передатчика;
SSPSR – сдвиговый регистр (программно не доступен);
SSPADD – регистр адреса.
В регистрах SSPCON1, SSPCON2 и SSPSTAT находятся биты
управления и флаги состояния модуля MSSP, работающего в режиме I2C. Регистры SSPCON1, SSPCON2 доступны для записи/
чтения. Младшие 6 битов регистра SSPTAT доступны только для
чтения. Старшие 2 бита регистра SSPSTAT доступны для записи
и чтения.
Сдвиговый регистр SSPSR предназначен для приема и передачи данных; SSPBUF – буферный регистр. При передаче необходимо выполнить запись данных в этот регистр. При приёме необходимо прочитать данные из этого регистра.
Регистр SSPADD предназначен для хранения адреса устройства, когда модуль MSSP работает в ведомом режиме I2С. Если
модуль MSSP настроен на ведущий режим I2С, то младших
7 битов регистра SSPADD используются для хранения значения
перезагрузки для счетчика генератора скорости передачи данных.
При приеме данных регистры SSPSR и SSPBUF образуют
двойной буфер. Когда в SSPSR байт данных загружается полностью, он переписывается в регистр SSPBUF и устанавливается
флаг прерывания SSPIF.
При передаче данных регистр SSPBUF двойную буферизацию
не имеет. Данные, записанные в SSPBUF, сразу переписываются
в SSPSR.
Регистр SSPSTAT
Биты регистра SSPSTAT приведены на рис. 8.
11
šÁË šÁË 4.1
$,&
38 38 %"
1
4
38
6"
#'
3
3
3
3
3
3
Рис. 8. Регистр SSPSTAT
Бит 7 SMP: Управление длительностью фронта:
1 = управление длительностью фронта выключено в стандартном режиме (100 кГц и 1 МГц),
0 = управление длительностью фронта включено в скоростном режиме (400 кГц).
Бит 6 CKE: Выбор фронта тактового сигнала:
1 = входные уровни соответствует спецификации SMBus,
0 = входные уровни соответствует спецификации I2C.
Бит 5 D/A: Бит Данные/Адрес (ведомый режим I2C):
1 = последний принятый или переданный байт является
информационным,
0 = последний принятый или переданный байт является
адресным.
Бит 4 P: Сигнал «Стоп»:
1 = сигнал «Стоп» был обнаружен последним,
0 = сигнал «Стоп» не является последним.
Бит 3 S: Сигнал «Старт»:
1 = сигнал «Старт» был обнаружен последним,
0 = сигнал «Старт» не является последним.
Бит 2 R/W: Бит чтения/записи:
ведомый режим I2C:
1 = чтение,
0 = запись;
ведущий режим I2C:
1 = выполняется передача данных,
0 = передачи данных не происходит.
Бит 1 UA: Флаг обновления адреса (только для 10-разрядной
адресации).
Бит 0 BF: Бит статуса буфера:
1 = буфер SSPBUF полон,
0 = буфер SSPBUF пуст.
Регистр SSPCON1
Биты регистра SSPCON1 приведены на рис. 9.
12
šÁË šÁË
8$0- 44107 441&/
$,1 441. 441. 441. 441.
38 38 38 38 38 38 38 38 Рис. 9. Регистр SSPCON1
Бит 7 WCOL: Бит конфликта записи:
1 = запись в SSPBUF была выполнена при несоблюдении
условий шины I2C,
0 = конфликта не было.
Бит 6 SSPOV:  Бит переполнения приёмника (приём данных):
1 = принят новый байт, а SSPBUF содержит предыдущие
данные,
0 = нет переполнения.
Бит 5 SSPEN: Бит включения модуля MSSP:
1 = модуль MSSP включен,
0 = модуль MSSP выключен.
Бит 4 CKP: Управление удержанием линии SCL (ведомый режим I2C):
1 = не управлять состоянием линии,
0 = удерживать линию в низком логическом уровне.
Бит 3-0 SSPM3: SSPM0: Режим работы модуля MSSP:
0110 = ведомый режим I2C, 7-разрядная адресация,
0111 = ведомый режим I2C, 10-разрядная адресация,
1000 = ведущий режим I2C, тактовый сигнал вычисляется по формуле: Fosc / (4(SSPADD + 1)),
1011 = программная поддержка режима ведущего I2C,
1110 = ведомый режим I2C, 7-разрядная адресация с разрешением прерываний по приёму сигналов «Старт» и
«Стоп»,
1111 = ведомый режим I2C, 10-разрядная адресация с
разрешением прерываний по приёму сигналов «Старт» и
«Стоп».
П р и м е ч а н и е . Не указанные комбинации битов предназначены для настройки модуля MSSP в режиме SPI или зарезервированы.
Регистр SSPCON2
Биты регистра SSPCON2 представлены на рис. 10.
13
šÁË
šÁË
($&/ "$,45"5 "$,%5 "$,&/ 3$&/ 38 38
1&/
38 38 38 38
34&/ 4&/
38
38
Рис. 10. Регистр SSPCON2
Бит 7 GCEN: Бит разрешения поддержки общего вызова (ведомый режим I2C):
1 = разрешить прерывания при приёме в регистр SSPSR
адреса общего вызова (0000h),
0 = поддержка общего вызова выключена.
Бит 6 ACKSTAT: Бит статуса подтверждения (ведущий режим
I2C, передача):
1 = подтверждение от ведомого устройства не было получено,
0 = подтверждение от ведомого устройства было получено.
Бит 5 ACKDT: Бит подтверждения (ведущий режим I2C, приём):
1 = неподтверждение,
0 = подтверждение.
Бит 4 ACKEN: Формирование подтверждения:
1 = на выводах SCL, SDA формируется бит ACKDT,
0 = подтверждение не формируется.
Бит 3 RCEN: Разрешить приём данных: 
1 = разрешить приём данных с шины I2C,
0 = приёмник выключен.
Бит 2 PEN: Сформировать сигнал «Стоп»:
1 = на выводах SCL, SDA формируется сигнал «Стоп»,
0 = сигнал «Стоп» не формируется.
Бит 1 RSEN: Сформировать повторный сигнал «Старт»:
1 = на выводах SCL, SDA формируется повторный сигнал
«Старт», 
0 = повторный сигнал «Старт» не формируется.
Бит 0 SEN: Сформировать сигнал «Старт»: 
1 = на выводах SCL, SDA формируется сигнал «Старт», 
0 = сигнал «Старт» не формируется.
Ведущий режим I2C
Общие характеристики
Ведущий режим включается соответствующей настройкой
битов SSPM в регистре SSPCON1 и установкой бита SSPEN в 1.
14
После включения ведущего режима аппаратно могут выполняться следующие функции:
формирование сигнала «Старт»;
формирование повторного сигнала «Старт»;
формирование сигнала «Стоп»;
формирование подтверждения после приёма байта;
передача байта данных или адреса;
приём байта данных.
Следующие события на шине I2C могут привести к установке
флага прерывания SSPIF в 1:
сформирован сигнал «Старт»;
сформирован повторный сигнал «Старт»;
передан или принят байт данных;
сформировано подтверждение;
сформирован сигнал «Стоп».
Типичная последовательность событий при передаче данных
в ведущем режиме представлена ниже.
1. Установка бита SEN в 1 и формирование сигнала «Старт».
2. Ожидание прерывания (если оно разрешено) или установки
бита SSPIF после завершения формирования сигнала «Старт».
3. Запись в регистр SSPBUF адресного байта.
4. Формирование 7-го бита адреса (при 7-разрядной адресации) и бита направления передачи данных на линии SDA.
5. Приём подтверждения от приемника (бит ACKSTAT регистра SSPCON2).
6. Ожидание прерывания (если оно разрешено) или установки
бита SSPIF по заднему фронту девятого тактового импульса.
7. Запись в регистр SSPBUF байта данных.
8. Формирование 8-го бита данных на линии SDA.
9. Приём подтверждения от приемника.
10. Ожидание прерывания (если оно разрешено) или установки бита SSPIF по заднему фронту девятого тактового импульса.
11. Установка бита PEN в 1 и формирование сигнала «Стоп».
12. Ожидание прерывания (если оно разрешено) или установки бита SSPIF после завершения формирования сигнала «Стоп».
Генератор скорости обмена
В ведущем режиме значение для перезагрузки счетчика генератора скорости обмена (BRG) берётся из младших 7 битов
регистра SSPADD. После перезагрузки счетчик BRG считает,
15
декрементируя до нуля (в тактах Q2 и Q4), и останавливается
до следующей перезагрузки, которая не всегда производится автоматически. Если после окончания счета сигнал на линии SCL
должен перейти в высокий уровень, перезагрузка производится
только после этого перехода.
Значение для записи в регистр SSPADD определяется из формулы
FSCL = FOSC/(4*(SSPADD+1)),
где FOSC – частота тактового сигнала МК.
Синхронизация тактового сигнала
В ведущем режиме синхронизация тактового сигнала производится каждый раз при «отпускании» линии SCL. В этот момент BRG приостанавливается, пока на линии SCL не появится
высокий логический уровень сигнала. При появлении сигнала
высокого уровня на линии SCL генератор BRG перегружается
значением из SSPADD<6:0> и начинает счет.
Формирование сигнала «Старт»
Чтобы инициировать формирование сигнала «Старт», необходимо установить бит SEN в 1. После окончания формирования
сигнала «Старт» бит SEN автоматически сбрасывается, а флаг
прерывания SSPIF устанавливается в 1.
Если во время формирования сигнала «Старт» производится
попытка записи в регистр SSPBUF, устанавливается бит WCOL,
а запись не происходит.
Поскольку MSSP не имеет стека событий, установка любого
из младших 5 битов регистра SSPCON2 до завершения формирования сигнала «Старт» запрещена.
Формирование повторного сигнала «Старт»
Чтобы инициировать формирование повторного сигнала
«Старт», необходимо установить бит RSEN. После формирования повторного сигнала «Старт» бит RSEN автоматически сбрасывается в 0, а флаг прерывания SSPIF устанавливается в 1.
Если во время формирования повторного сигнала «Старт»
производится попытка записи в регистр SSPBUF, устанавливается бит WCOL, а запись не происходит.
Сразу после установки флага SSPIF пользователь может загрузить в регистр SSPBUF адресный байт.
16
Передача данных
Для инициализации передачи адресного байта или байта данных нужно просто записать байт в регистр SSPBUF. В результате этого BRG начнет формировать сигнал для передачи данных.
Каждый передаваемый бит будет выдаваться на линию SDA по
заднему фронту тактового сигнала на линии SCL. По окончании
передачи 8-го бита данных бит BF сбрасывается в 0, а MSSP «отпускает» линию SDA с тем, чтобы принять подтверждение. По
заднему фронту 9-го такта текущее состояние линии SDA записывается в бит ACKSTAT регистра SSPСON2. В этот же момент
устанавливается флаг SSPIF.
В режиме передачи данных бит BF аппаратно устанавливается в 1 после записи данных в регистр SSPBUF и аппаратно сбрасывается после передачи 8-го бита данных.
4%"
38
™½É¾ÊÆÔº¹ÂË
¨
" " " " " " "
š¹Â˽¹ÆÆÔÎ
%%
%%%% % %ƨ
4$-
4
šÁË4&/
441$0/
šÁË#'
44145"5
šÁË38
1
44145"5
šÁË1&/
441$0/
¨ÉǼɹÅÅÆÔÂʺÉÇÊ
­Ä¹¼441*'
1*3
Рис. 11. Передача данных в ведущем режиме
17
Если во время передачи данных производится попытка записи в регистр SSPBUF, бит WCOL устанавливается в 1, а запись не
происходит. Бит WCOL сбрасывается программно.
В режиме передачи данных бит ACKSTAT равен нулю, если
ведомое устройство сформировало подтверждение. Временная
диаграмма передачи данных в ведущем режиме показана на
рис. 11.
Прием данных
Прием данных разрешается установкой в 1 бита RCEN.
ВRG начинает формировать тактовый сигнал на линии SCL
для приема данных в сдвиговый регистр SSPSR. Каждый бит
данных будет приниматься с линии SDA по заднему фронту тактового импульса на линии SCL. По заднему фронту 8-го тактового
импульса значение из регистра SSPSR переписывается в регистр
SSPBUF, флаг SSPIF устанавливается в 1, BGR останавливается,
удерживая линию SCL в низком уровне, а модуль MSSP переходит в режим ожидания. В ведущем режиме по окончании приема необходимо сформировать подтверждение установкой бита
ACKEN в 1.
В режиме приема данных бит BF аппаратно устанавливается
в 1 после загрузки данных в регистр SSPBUF и аппаратно сбрасывается после чтения регистра SSPBUF.
При приеме данных бит переполнения SSPOV устанавливается в 1, если бит BF равен 1 по заднему фронту 8-го тактового
импульса.
Если во время приема данных производится попытка записи
в регистр SSPBUF, устанавливается бит WCOL в 1, а запись не
происходит. Бит WCOL сбрасывается программно.
Временнáя диаграмма приёма данных в ведущем режиме показана на рис. 12.
Формирование подтверждения
Для формирования подтверждения бит ACKEN необходимо
установить в 1. Для подтверждения приёма бит ACKDT должен
быть равен 0. По заднему фронту тактового импульса флаг прерывания SSPIF устанавливается в 1.
Если во время формирования бита подтверждения производится попытка записи в SSPBUF, бит WCOL устанавливается в 1,
а запись не происходит.
18
19
4
44145"5
¹ÈÁÊÕ» 441#6'
1*3
¨ÉǼɹÅÅÆÔÂʺÉÇÊ
šÁË 44107441$0/
šÁË "$,&/441$0/
š¹Â˽¹ÆÆÔÎ
% % % % % % % %
¨
š¹Â˽¹ÆÆÔÎ
%
% % % % % % %
Рис. 12. Приём данных в ведущем режиме
38 ™½É¾ÊÆÔº¹ÂË
" " " " " " " ¨
šÁË 3$&/ 441$0/
šÁË #'
­Ä¹¼ 441*'
4$-
4%"
ƨ
1
Формирование сигнала «Стоп»
Чтобы инициировать формирование сигнала «Стоп», необходимо бит PEN установить в 1.
По окончании формирования сигнала «Стоп» бит PEN автоматически сбрасывается, а флаг прерывания SSPIF устанавливается в 1.
Если во время формирования сигнала «Стоп» производится
попытка записи в SSPBUF. устанавливается бит WСOL в 1, а запись не происходит.
Ведомый режим I2C
Общие характеристики
В ведомом режиме при совпадении адреса автоматически генерируется прерывание. Дополнительно пользователь может
выбрать режим, в котором будут генерироваться прерывания
при обнаружении сигналов «Старт» и «Стоп».
При совпадении адреса или после приёма байта данных (если
предварительно совпал адрес) аппаратно генерируется подтверждение. Данные из регистра SSPSR загружаются в регистр
SSPBUF.
Подтверждение не формируется, если в момент окончания
приёма нового байта данных:
бит BF равен 1;
бит переполнения SSPOV равен 1.
Если бит BF равен 1, то значение из SSPSR не перезаписывается в регистр SSPBUF, а биты SSPIF и SSPOV устанавливаются
в 1. Бит BF аппаратно сбрасывается в 0 при чтении из регистра
SSPBUF, а бит SSPOV необходимо сбрасывать в 0 программно.
Адресация
После включения модуль MSSP ожидает формирования сигнала «Старт». Получив этот сигнал, в сдвиговый регистр SSPSR
принимается 8 битов данных. Выборка битов происходит по переднему фронту синхронизирующих импульсов на линии SCL.
По заднему фронту 8-го тактового импульса значение в регистре
SSPSR сравнивается с содержимым регистра SSPADD. Если значение адреса совпадает, а биты BF и SSPOV равны 0, то выполняются следующие действия.
1. Значение регистра SSPSR загружается в регистр SSPBUF и
флаг BF устанавливается в 1.
20
2. Генерируется подтверждение.
3. По заднему фронту 9-го тактового импульса флаг прерывания SSPIF устанавливается в 1 (если разрешено, генерируется
прерывание).
Приём данных
Если бит R/W в адресном байте равен 0, а принятый адрес совпадает с адресом устройства, то бит R/W в регистре SSPSTAT
сбрасывается в 0. Принятый адрес загружается в регистр
SSPBUF.
Если бит BF (буфер полон) или бит SSPOV (переполнение буфера) установлены в 1, то подтверждение не формируется. Эту
ошибку необходимо обрабатывать программно. Если было выполнено чтение из регистра SSPBUF, но бит SSPOV не был сброшен в 0, то подтверждение не формируется.
Флаг прерывания SSPIF от модуля MSSP устанавливается
в 1 после каждого принятого байта. Бит SSPIF сбрасывается программно. Для определения типа принятого байта используется
регистр SSPSTAT.
Если бит SEN установлен в 1, то линия синхронизации SCL
будет удерживаться в низком логическом уровне после каждого
принятого байта. Тактовый сигнал отпускается установкой бита
CKP в 1.
Временнáя диаграмма приёма данных в ведомом режиме показана на рис. 13.
Передача данных
Если бит R/W в адресном байте равен 1, а принятый адрес совпадает с адресом устройства, то бит R/W в регистре SSPSTAT
устанавливается в 1. Принятый адрес загружается в регистр
SSPBUF. Формируется подтверждение, после чего напряжение
на линии SCL удерживается в низком логическом уровне. Передаваемые данные должны быть записаны в регистр SSPBUF,
затем они автоматически загружаются в регистр SSPSR. После
записи данных необходимо «отпустить» линию SCL установкой
бита CKP в 1.
Ведущее устройство контролирует состояние линии SCL,
ожидая смены уровня сигнала; 8 битов загруженных данных последовательно сдвигаются по заднему фронту сигнала SCL, что
гарантирует достоверное значение данных на линии SDA.
21
22
4
Рис. 13. Приём данных в ведомом режиме
šÁË$,1
441$0/
ƾʺɹÊÔ»¹¾ËÊØ»ÃǼ½¹ºÁË4&/ÌÊ˹Æǻľƻ
šÁË 44107441$0/
­Ä¹¼ 441*'1*3
¨ÉǼɹÅÅÆÔÂʺÉÇÊ
°Ë¾ÆÁ¾ 441#6'
1
¨¾É¾ÈÇÄƾÆÁ¾
441#6'
š¹Â˽¹ÆÆÔÎ
™½É¾ÊÆÔº¹ÂË
38
š¹Â˽¹ÆÆÔÎ
" " " " " " " ¨ % % % % % % % % ¨ %
% % % % % % % ƨ
šÁË#'44145"5
4$-
4%"
Ведущее устройство формирует подтверждение на 9-м тактовом импульсе после каждого принятого байта. Если подтверждение не сформировано (высокий уровень на линии SDA), передача
данных завершена. Логика ведомого устройства настраивается
на обнаружение сигнала «Старт». Если подтверждение было получено (низкий уровень на линии SDA), в регистр SSPBUF необходимо записать новый байт для передачи. Линию SCL также
необходимо «отпустить» установкой бита CKP в 1.
Флаг прерывания SSPIF устанавливается по заднему фронту
9-го тактового импульса после каждого переданного байта. Флаг
SSPIF должен быть сброшен программно. Регистр SSPSTAT используется для определения статуса передачи данных.
Временнáя диаграмма передачи данных в ведомом режиме показана на рис. 14.
Контроль состояния линии SCL
Модуль MSSP предоставляет возможность автоматического
удержания тактового сигнала при передаче данных.
Бит SEN позволяет включить режим удержания тактового
сигнала во время приёма данных. Установленный в 1 бит SEN
заставляет удерживать линию SCL в низком логическом уровне
после приёма каждого байта.
При приёме данных (бит SEN установлен в 1), если по заднему
фронту 9-го тактового импульса бит BF установлен в 1, то бит CKP
автоматически сбрасывается в 0, удерживая линию SCL в низком
логическом уровне. Бит CKP должен быть установлен программой
пользователя прежде, чем приём будет продолжен. Удерживая линию SCL в низком логическом уровне, у пользователя есть время,
чтобы прочитать содержимое регистра SSPBUF и выполнить необходимые действия перед приёмом следующего байта. Эта функция позволяет предотвратить переполнение входного буфера.
Если пользователь прочитает регистр SSPBUF перед задним
фронтом 9-го тактового импульса (бит BF будет равен 0), то бит
CKP не будет сброшен в 0 и тактовый сигнал не будет удерживаться.
Бит CKP устанавливается в 1 программно независимо от состояния бита BF. Поэтому необходима некоторая осторожность в
сбросе бита BF перед новым приёмом данных, чтобы предотвратить переполнение буфера при приёме данных.
В ведомом режиме при передаче данных, если по заднему
фронту 9-го тактового импульса бит BF равен 0, то бит CKP ав23
24
4
­Ä¹¼ 441*'1*3
šÁË $,1441$0/
¨ÉǼɹÅÅÆÔÂʺÉÇÊ
¬Ê˹ƹ»ÄÁ»¹¾ËÊØ ÈÉǼɹÅÅÆÇ
¹ÈÁÊÕ»441#6'
š¹Â˽¹ÆÆÔÎ
%
% % % % % % % ƨ
š¹Â˽¹ÆÆÔÎ
% % % % % % % % ¨
Рис. 14. Передача данных в ведомом режиме
38
™½É¾ÊÆÔº¹ÂË
" " " " " " " ¨
šÁË #'44145"5
4$-
4%"
1
томатически сбрасывается в 0, удерживая линию SCL в низком
логическом уровне. Удержание тактового сигнала происходит
независимо от состояния бита SEN.
В программе пользователя необходимо установить бит CKP
перед новой передачей данных. Удерживая линию SCL в низком
логическом уровне, пользователь имеет для выполнения необходимых действий и загрузки новых данных в регистр SSPBUF
прежде, чем ведущее устройство начнёт приём данных.
Синхронизация тактового сигнала
В ведомом режиме модуль MSSP обеспечивает возможность
синхронизации устройств. Для этого также используются биты
SEN и CKP. Бит SEN должен быть установлен в 1. Если пользователь сбросит бит CKP в 0, то линия SCL будет удерживаться
в низком логическом уровне до тех пор, пока этот бит снова не
будет установлен в 1.
25
2. Выполнение лабораторной работы
2.1. Описание лабораторной установки
Для выполнения лабораторной работы требуются:
персональный компьютер с установленным программным
обеспечением;
внутрисхемный программатор-отладчик ICD2;
однополярный источник напряжения +5 В;
контактная макетная плата для установки и соединения компонентов, входящих в электрическую схему;
электронные компоненты:
2 микроконтроллера PIC18F4520;
2 шкалы светоизлучающих диодов;
3 светоизлучающих диода;
2 резисторные сборки;
постоянные резисторы: 2 кОм – 4 шт, 300 Ом – 3 шт.;
разъём для программирования;
разъём для подключения питания.
Электрическая схема для выполнения лабораторной работы
показана на рис. 15 (она должна быть собрана на контактной макетной плате).
2.2. Программное обеспечение персонального компьютера
Для выполнения лабораторной работы на персональном
компьютере должны быть установлены следующие приложения: среда разработки MPLAB IDE и компилятор MPLAB С18 С
Сompiler.
2.3. Пример программного обеспечения МК PIC18F4520
В данном параграфе для иллюстрации приведён пример программного обеспечения двух МК PIC18F4520, связанных по интерфейсу I2C (см. рис. 15).
Обобщенная блок-схема алгоритма МК PIC18F4520, работающего в ведущем режиме, показана на рис. 16.
Текст программы МК, работающего в ведущем режиме, приведен в листинге 1. Программа написана на языке программирования С.
После сброса МК PIC18F4520, работающий в ведущем режиме, настраивает внутренний тактовый генератор, PORTB и
26
9
›
9
›
©¹ÀӑŽÄØ
ÈÉǼɹÅÅÁÉÇ»¹ÆÁØ
3
›
Ã
%% .$-3
7%
3
›
›
Ã
%%
.$-3
©¹ÀӑŽÄØ
ÈǽÃÄ×оÆÁØ
ÈÁ˹ÆÁØ
)-
3#
3#
3#
3#
3#
3#
3#
3#
9
›
3
%3
%3
)-
3#
3#
3#
3#
3#
3#
3#
3#
.$6
.$6
7%%
7%%
744
744
›
›
3
Ã
3
Ã
›
4$
4%"
4$
4%"
7%
3&
7%%
7%%
7 44
7 44
7%
3
3
1*$'
3&
1*$ '
Рис. 15. Электрическая схема
MSSP. В рабочем цикле МК по очереди выполняет процедуру записи в ведомое устройство двух чисел: 15 и 240. После отправки
каждого из чисел выполняется проверка доставки данных. Для
этого ведущее устройство выполняет операцию чтения последнего полученного ведомым устройством байта данных. Если записанный и прочитанный байты данных не равны, то в PORTB
выводится число 170. Во всех остальных случаях в PORTB выво27
­ÌÆÃÏÁØ WPJE NBJO
¦¹Ð¹ÄÇ
§Èɾ½¾Ä¾ÆÁ¾È¾É¾Å¾ÆÆÇÂ
ƹÊËÉÇÂù˹ÃËǻǼÇ
¼¾Æ¾É¹ËÇɹ
ƹÊËÉÇÂù1035#
ƹÊËÉÇÂù.441 š¾ÊÃÇƾÐÆÔÂÏÁÃÄ
¹ÈÁÊÕÐÁÊĹ
¦¾Ë
¨Ç½Ë»¾É¿½¾ÆÁ¾ ›Ô»Ç½ÐÁÊĹ »1035#
¹
›Ô»Ç½ÐÁÊĹ» 1035#
°Ë¾ÆÁ¾
¦¾Ë
›Ô»Ç½ÐÁÊĹ»1035#
š¹ÂËɹ»¾Æ ¹
›É¾Å¾ÆƹØÀ¹½¾É¿Ã¹Ê
c
¹ÈÁÊÕÁÐ˾ÆÁ¾ÐÁÊĹÈÉÇÁÊÎǽØË
¹Æ¹ÄǼÁÐÆÔÅǺɹÀÇÅ
š¾ÊÃÇƾÐÆÔÂÏÁÃÄ
£ÇƾÏ
Рис. 16. Блок-схема алгоритма МК PIC18F4520,
работающего в ведущем режиме
дится последний переданный ведомому устройству байт данных.
Все числа даются в десятичной системе счисления.
В программе использована одна библиотечная функция компилятора MPLAB С18 С Сompiler. Это функция void Delay10TCYx
28
(unsigned char unit), которая формирует временную задержку,
кратную 10 000 машинных циклов. Она имеет один входной аргумент unit типа unsigned char, который определяет размер паузы. Длительность задержки может быть вычислена по формуле
t = unit × 10000, где t – время в машинных циклах. Перед вызовом этой функции должен быть подключен библиотечный заголовочный файл delays.h.
Обобщенная блок-схема алгоритма МК PIC18F4520, работающего в ведомом режиме, показана на рис. 17.
Текст программы МК, работающего в ведомом режиме, приведен в листинге 2. Программа написана на языке программирования С.
Листинг 1. Программа МК PIC18F4520,
работающего в ведущем режиме
29
После сброса МК, работающий в ведомом режиме, настраивает внутренний тактовый генератор, PORTB, MSSP и включает прерывания от MSSP. После выполнения этих настроек МК
уходит в пустой бесконечный цикл и ожидает прерывания от
MSSP.
30
­ÌÆÃÏÁØ WPJE NBJO
¦¹Ð¹ÄÇ
¦¹ÊËÉÇÂù˹ÃËǻǼÇ
¼¾Æ¾É¹ËÇɹ
ƹÊËÉÇÂù1035#
ƹÊËÉÇÂù.441
ƹÊËÉÇÂùÈɾÉÔ»¹ÆÁÂ
¨ÌÊËǺ¾ÊÃÇƾÐÆÔÂÏÁÃÄ
¨ÌÊËǺ¾ÊÃÇƾÐÆÔÂÏÁÃÄ
£ÇƾÏ
­ÌÆÃÏÁØǺɹºÇËÃÁ
ÈɾÉÔ»¹ÆÁØWPJE*$@JTS
¦¹Ð¹ÄÇ
¦¾Ë
¡ÆÍÇÉŹÏÁÇÆÆÔÂ
º¹ÂË ¦¾Ë
ªÐÁËÔ»¹ÆÁ¾ÁÀ 441#6'
°Ë¾ÆÁ¾ ¦¾Ë
¹
¹ÈÁÊÕ ¹
ªÐÁËÔ»¹ÆÁ¾ÁÀ 441#6'
¹
¹ÈÁÊÕ» 441#6' È
ÇÊľ½Æ¾¼Ç
ÈÉÁÆØËǼǺ¹Â˹½¹ÆÆÔÎ
›Ô»Ç½»1035#
¬Ê˹ÆǻùºÁ˹ $,1
ʺÉÇÊÍĹ¼¹ÈɾÉÔ»¹ÆÁØ
£ÇÆ¾Ï Рис. 17. Блок-схема алгоритма МК PIC18F4520,
работающего в ведомом режиме
31
В подпрограмме обработки прерывания ведомое устройство
определяет статус передачи данных: проверяется тип последнего
переданного/принятого байта (адресный или информационный),
затем – тип текущей операции (запись или чтение). Далее в зависимости от статуса выполняются необходимые действия.
При операции записи ведомое устройство выводит принятый
байт в PORTB. При чтении ведомое устройство возвращает последний принятый байт.
Листинг 2. Программа МК PIC18F4520,
работающего в ведомом режиме
32
2.4. Задание на лабораторную работу
Разработать алгоритмы работы двух МК PIC18F4520. Первый МК должен выполнять функции ведущего устройства, второй – функции ведомого устройства интерфейса I2C. По алгоритмам на языке С написать программы для ведущего и ведомого
устройств.
Ведущее устройство должно циклически выполнять операцию записи в ведомое устройство чисел от 1 до 9. Интервал между отправкой двух соседних чисел должен быть приблизительно
равен 1 с. После отправки каждого числа необходимо выполнить
проверку доставки данных. Для этого ведущее устройство должно выполнить операцию чтения последнего байта, полученного
ведомым устройством. Если переданный и принятый байты не
равны, то ведущее устройство должно зажечь светоизлучающий
диод VD1. Во всех остальных случаях диод VD1 гореть не должен
(см. рис. 15).
Ведомое устройство при операции записи должно сравнить
последний полученный байт с номером варианта. Если они равны, то должен быть зажжен светоизлучающий диод VD3. Во всех
остальных случаях диод VD3 гореть не должен.
При операции чтения ведомое устройство также должно сравнить последний полученный байт с номером варианта. Если они
равны, ведомое устройство должно вернуть побитовую инверсию
номера варианта. Во всех остальных случаях ведомое устройство
должно вернуть последний принятый им байт.
Ведущее устройство должно выводить в PORTB последний отправленный байт. Ведомое устройство должно выводить в PORTB
последний принятый байт.
Адрес ведомого устройства определяется как сумма числа 8 и
номера варианта.
2.5. Порядок выполнения лабораторной работы
1. Ознакомиться с вариантом задания на лабораторную работу.
2. Изучить методические указания.
3. Изучить электрическую схему лабораторной установки.
4. Изучить приведённый пример программного обеспечения.
5. В соответствии со своим вариантом разработать алгоритм
работы МК PIC18F4520, работающего в ведущем режиме.
33
6. В соответствии со своим вариантом разработать алгоритм
работы МК PIC18F4520, работающего в ведомом режиме.
7. В соответствии с алгоритмами на языке программирования С разработать и отладить программы для обоих МК
PIC18F4520.
8. Собрать электрическую схему на контактной макетной
плате.
9. Выполнить процедуру программирования обоих МК.
10. Проверить правильность работы обоих МК.
11. Составить отчет о проделанной работе.
3. Содержание отчета
Отчет должен содержать:
цель работы;
задание на лабораторную работу;
электрическую схему лабораторной установки;
обобщенную блок-схему алгоритма работы МК PIC18F4520,
работающего в ведущем режиме;
обобщенную блок-схему алгоритма работы МК PIC18F4520,
работающего в ведомом режиме;
полный текст программ на языке С для обоих МК;
выводы о проделанной работе.
4. Контрольные вопросы
1. Каким образом обеспечивается двунаправленность шины
I2C?
2. Что такое ведущее устройство на шине I2C?
3. Что такое ведомое устройство на шине I2C?
4. Из каких частей состоит адрес ведомого устройства на шине
I2C?
5. Что такое сигналы «Старт» и «Стоп» на шине I2C?
6. Каким образом осуществляется передача данных по шине
I2C?
7. Что такое подтверждение на шине I2C?
8. Какие существуют форматы передачи данных по шине
I2C?
9. Каким образом осуществляется синхронизация скоростей
на шине I2C?
34
10. Что влияет на выбор подтягивающих резисторов для
шины I2C?
11. Какие функции позволяет выполнять модуль MSSP МК
PIC18F4520 в ведущем режиме шины I2C?
12. Какие функции позволяет выполнять модуль MSSP МК
PIC18F4520 в ведомом режиме шины I2C?
13. Каким образом МК PIC18F4520 выполняет операции записи и чтения в ведущем режиме шины I2C?
14. Каким образом МК PIC18F4520 выполняет операции записи и чтения в ведомом режиме шины I2C?
15. Каким образом МК PIC18F4520 обеспечивает синхронизацию скоростей на шине I2C?
Литература
1. Техническое описание интерфейса I2C, The I2C-bus
specification version 2.0, сайт www.semiconductors.philips.com
2. Техническое описание микроконтроллера Microchip
PIC18F2420/2520/4420/4520,
сайт
производителя
www.
microchip.com
Содержание
1. Методические указания.................................................
1.1. Описание интерфейса I2C..........................................
1.2. Модуль MSSP микроконтроллера PIC18F4520.............
2. Выполнение лабораторной работы...................................
2.1. Описание лабораторной установки.............................
2.2. Программное обеспечение персонального компьютера..
2.3. Пример программного обеспечения МК PIC18F4520.....
2.4. Задание на лабораторную работу................................
2.5. Порядок выполнения лабораторной работы.................
3. Содержание отчета .......................................................
4. Контрольные вопросы...................................................
Литература.....................................................................
3
3
10
26
26
26
26
33
33
34
34
35
35
Документ
Категория
Без категории
Просмотров
0
Размер файла
1 604 Кб
Теги
krmal
1/--страниц
Пожаловаться на содержимое документа