3.0 Концепция шины I2C
Шина I2C поддерживает любую технологию изготовления микросхем (НМОП, КМОП, биполярную). Две линии, данных (SDA) и синхронизации (SCL) служат для переноса информации. Каждое устройство распознается по уникальному адресу – будь то микроконтроллер, ЖКИ буфер, память или интерфейс клавиатуры – и может работать как передатчик или приёмник, в зависимости от назначения устройства. Обычно ЖКИ буфер – только приёмник, а память может как принимать, так и передавать данные. Кроме того, устройства могут быть классифицированы как ведущие и ведомые при передаче данных (см. Табл 1). Ведущий – это устройство, которое инициирует передачу данных и вырабатывает сигналы синхронизации. При этом любое адресуемое устройство считается ведомым по отношению к ведущему.
Термин (англ) | Термин (рус) | Описание |
Transmitter | Передатчик | Устройство, посылающее данные в шину |
Receiver | Приемник | Устройство, принимающее с шины |
Master | Ведущий | Начинает пересылку данных, вырабатывает синхроимпульсы, заканчивает пересылку данных |
Slave | Ведомый | Устройство, адресуемое ведущим |
Multi-master | – | Несколько ведущих могут пытаться захватить шину одновременно, без нарушения передаваемой информации |
Arbitration | Арбитраж | Процедура, обеспечивающая Multi-master |
Synchronization | Синхр. | Процедура синхронизации двух устройств |
Рисунок 3. Пример конфигурации шины I2C с двумя микроконтроллерами
- Микроконтроллер А
- Массив
- ЖКИ драйвер
- АЦП
- Статическая ОЗУ или ППЗУ
- Микроконтроллер B
Шина I2C допускает несколько ведущих. Это означает, что более чем одно устройство, способное управлять шиной, может быть подключено к ней. Поскольку в качестве ведущих обычно выступают микроконтроллеры, давайте рассмотрим пример пересылки данных между двумя микроконтроллерами, подключенными к шине (рис 3). Пример покажет взаимоотношения передатчик-приемник и ведущий-ведомый, существующие в шине I2C. Необходимо заметить, что эти отношения не постоянны, а зависят только от направления пересылки данных в данный момент времени. Пересылка данных будет происходить следующим образом:
- Пусть микроконтроллер А желает послать информацию в микроконтроллер В:
- микроконтроллер А (ведущий) адресует микроконтроллер В (ведомый)
- микроконтроллер А (ведущий-передатчик) посылает данные микроконтроллеру В (ведомый-приёмник)
- микроконтроллер А заканчивает пересылку
- Пусть микроконтроллер А желает принять информацию от микроконтроллера В:
- микроконтроллер А (ведущий) адресует микроконтроллер В (ведомый)
- микроконтроллер А (ведущий-приемник) принимает данные от микроконтроллера В (ведомый-передатчик)
- микроконтроллер А заканчивает пересылку
В обоих случаях ведущий (микроконтроллер А) генерирует синхроимпульсы и заканчивает пересылку.
Возможность подключения более одного микроконтроллера к шине означает, что более чем один ведущий может попытаться начать пересылку в один и тот же момент времени. Для устранения хаоса, который может возникнуть в данном случае, разработана процедура арбитража. Эта процедура основана на том, что все I2C-устройства подключаются к шине по правилу монтажного И. Подробнее об арбитраже см. Раздел 7.0.
Генерация синхросигнала – это всегда обязанность ведущего; каждый ведущий генерирует свой собственный сигнал синхронизации при пересылке данных по шине. Сигнал синхронизации может быть изменен только если он “вытягивается” медленным ведомым устройством (путем удержания линии в низком состоянии), или другим ведущим, если происходит столкновение.