TWI (Two-wire Serial Interface)
В даташите ATmega328P нет главы «I²C», зато есть «2-wire Serial Interface». Это тот же интерфейс: сам даташит называет модуль совместимым с протоколом I²C Philips. Разберём, как в AVR задаётся частота шины и чем модуль TWI отличается от голого I²C.
Обновлено Редакция GAW
TWI (Two-wire Serial Interface, «двухпроводной последовательный интерфейс») — название модуля I²C в микроконтроллерах AVR у Atmel и Microchip. В списке возможностей ATmega328P он описан как «Byte-oriented 2-wire Serial Interface (Philips I2C compatible)»: протокол и электрическая схема те же, что у I²C, отличается только название и набор регистров. Регистры модуля начинаются с TW: TWBR, TWSR, TWCR, TWDR, TWAR.
Что умеет модуль TWI ATmega328P
По разд. 22.1 даташита DS40002061B:
- ведущий и ведомый режимы, передача и приём;
- 7-битный адрес — до 128 ведомых, общий вызов по адресу 0000 000;
- арбитраж нескольких ведущих;
- скорость до 400 кГц;
- выходы с ограничением крутизны фронтов и входы с подавлением помех короче 50 нс — подробнее в термине фильтр помех I²C;
- пробуждение из сна по совпадению адреса.
У ATmega48/88/168/328 линии SDA и SCL — выводы PC4 и PC5 порта C; у других AVR TWI выведен на другие выводы, их берут из даташита конкретной модели. Число устройств на шине ограничено ёмкостью 400 пФ и адресным пространством (разд. 22.2).
Частота SCL
В режиме ведущего частоту задают регистр TWBR и биты предделителя TWPS1:0 в TWSR (разд. 22.5.2):
где P — значение предделителя: 1, 4, 16 или 64 при TWPS = 00, 01, 10, 11 (табл. 22-7). Обратная формула: TWBR = (f_CPU / f_SCL − 16) / (2 · P).
| f_CPU | Нужная SCL | P | TWBR | Что получится |
|---|---|---|---|---|
| 16 МГц | 100 кГц | 1 | 72 | 16 000 000 / 160 = 100 кГц |
| 16 МГц | 400 кГц | 1 | 12 | 16 000 000 / 40 = 400 кГц |
| 8 МГц | 100 кГц | 1 | 32 | 8 000 000 / 80 = 100 кГц |
Значения в таблице — свой расчёт по формуле даташита. Предделитель больше 1 нужен только для медленных шин: при TWBR до 255 и P = 1 нижняя частота при 16 МГц — 16 000 000 / 526 ≈ 30 кГц. Ведущий может тактировать шину медленнее, если ведомый растягивает низкий уровень SCL. Для работы в роли ведомого частота процессора должна быть не меньше 16 · f_SCL.
Подтяжки
Шине нужен один подтягивающий резистор на линию к плюсу питания (разд. 22.2). Даташит разрешает включить внутренние подтяжки выводов битами PORT и замечает, что иногда они заменяют внешние. Однако сопротивление внутренней подтяжки ATmega328P — 20–50 кОм (табл. 30-1), что на порядок больше обычного номинала для 100 кГц. Подобрать внешние резисторы под ёмкость шины и частоту поможет калькулятор подтяжек I²C, а о выводах и питании кристалла — в статье об ATmega328P.
Частые вопросы
TWI и I²C — это одно и то же?
По сути да. Atmel, а затем Microchip называют модуль 2-wire Serial Interface, а в списке возможностей ATmega328P прямо пишут «Philips I2C compatible». Шина та же: SDA и SCL с открытым стоком, подтяжки к питанию, 7-битные адреса, режимы до 400 кГц. Датчики и модули I²C подключают к выводам TWI без переделок.
Как рассчитать TWBR для нужной частоты SCL?
По формуле даташита SCL = F_CPU / (16 + 2 · TWBR · P), где P — предделитель 1, 4, 16 или 64. Отсюда TWBR = (F_CPU / SCL − 16) / (2 · P). При 16 МГц и P = 1 для 100 кГц получается TWBR = 72, для 400 кГц — TWBR = 12 (свой расчёт). Ведомому AVR нужна тактовая частота не меньше 16 · fSCL.
Хватит ли внутренних подтяжек AVR для TWI?
Иногда. Даташит ATmega328P разрешает включить их битами PORT и замечает, что в некоторых системах они заменяют внешние резисторы. Но их сопротивление 20–50 кОм, а по формуле UM10204 Rp(max) = tr / (0,8473 · Cb) для 100 кГц (tr = 1 000 нс) и шины 200 пФ подтяжка должна быть не больше 5,9 кОм, для 400 кГц (300 нс) — 1,8 кОм (свой расчёт). С несколькими модулями и длинными проводами ставят внешние резисторы.
Источники
- Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P megaAVR Data Sheet (DS40002061B, 2020) — Features: «Byte-oriented 2-wire Serial Interface (Philips I2C compatible)»; разд. 22.1: ведущий и ведомый, 7-битный адрес — до 128 ведомых, арбитраж нескольких ведущих, до 400 кГц, ограничение крутизны выходов, подавление помех, общий вызов, пробуждение по совпадению адреса; разд. 22.2: по одному подтягивающему резистору на линию, выходы с открытым стоком или коллектором, монтажное И; число устройств ограничено ёмкостью шины 400 пФ и адресным пространством; разд. 22.3: адрес 0000 000 — общий вызов, адреса 1111 xxx зарезервированы; разд. 22.5.1: входы с подавлением импульсов короче 50 нс, внутренние подтяжки включаются битами PORT; разд. 22.5.2: SCL = CPU Clock / (16 + 2·TWBR·PrescalerValue), частота ведомого — не меньше 16·fSCL; табл. 22-7: TWPS 00, 01, 10, 11 — предделитель 1, 4, 16, 64; разд. 22.9: TWBR (0xB8), TWSR (0xB9) с TWPS1:0; табл. 30-1 (Common DC characteristics, −40…105 °C): RPU вывода 20–50 кОм; табл. 29-14: требования к шине TWI; разд. 22.5.2: номинал подтяжек выбирают по частоте SCL и ёмкости шины
- NXP. UM10204 I2C-bus specification and user manual, Rev. 7.0, 1 October 2021 — Standard-mode до 100 кбит/с, Fast-mode до 400 кбит/с; табл. 10: время нарастания tr не больше 1 000 нс и 300 нс, ёмкость шины до 400 пФ; разд. 7.1, ур. 1: Rp(max) = tr / (0,8473 · Cb)
Нашли ошибку?
Смотрите также
- I²CSDA и SCL, START/STOP, ACK, адреса, скорости, расчёт подтяжек
- Подтягивающие резисторы I²CДиапазон Rp по напряжению, скорости и ёмкости шины
- ATmega328PРаспиновка, фьюзы, Optiboot, периферия, питание, схема и код на C
- Фильтр выбросов I²C (tSP)Входной фильтр SDA и SCL, подавляющий импульсы короче 50 нс
- Скоростные режимы I²CРежимы шины I²C от 100 кбит/с до 5 Мбит/с и их требования к фронтам и ёмкости
- Подтягивающий резисторPull-up и pull-down: определённый уровень на свободной линии