Для обмена данными между микроконтроллером и внешними устройствами желательно иметь какой-нибудь стандартный интерфейс. И у многих микроконтроллеров AVR такой интерфейс есть.
Two-Wire Serial Interface (TWI) - двухпроводный последовательный интерфейс. Это полный аналог интерфейса I2C, разработанного фирмой Philips. Но Atmel, чтобы не нарушать авторские права, сделали “ход конём” - взяли тот же интерфейс и дали ему другое имя (закон что дышло, брат))).
Данный интерфейс позволяет объединить вместе до 128 устройств (одно ведущее и до 127 ведомых), подключив их к одной двухпроводной шине. Интерфейс позволяет обмениваться данными между ведущим устройством, которым обычно является микроконтроллер, и внешними (ведомыми) устройствами, такими как, например, телевизоры, радиоприёмники, разнообразные датчики да и вообще любые устройства (в том числе ваши собственные), которые имеют совместимый интерфейс.
Ведущее устройство (master) может как передавать данные на ведомое (slave), так и получать от него данные.
Линии интерфейса имеют следующие названия:
- SCL - линия тактового сигнала
- SDA - линия передачи данных
Инициатором обмена данных всегда выступает ведущее устройство.
Такты на линии генерирует ведущее устройство. Линией данных могут управлять как мастер, так и подчинённый, в зависимости от направления передачи.
Единицей обмена данными является пакет. Этот пакет данных передаётся, как вы понимаете, последовательно. Начало и конец пакета обозначаются уникальными условиями - стартовым и стоповым. Мастер в начале каждого пакета передаёт один байт, в котором указывает адрес подчинённого устройства, а также направление передачи данных (от мастера подчинённому или наоборот).
Ну вот как-то так вкратце. Подробности можно найти в справочной документации по I2C. Как со всем этим работать на программном уровне - тоже отдельный рассказ.
На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить…