Интерфейс i2c что это: Интерфейс I2C – RoboCraft

Содержание

Интерфейс I2C – RoboCraft

Наконец, подобрались к I2C. Давно хотелось, но всё никак. Тема интересная, а возможности периферии общающейся по этому протоколу могут существенно расширить возможности микроконтроллерной системы. I2C, в отличии от SPI, позволяет наращивать функционал, добавлять новые блоки без изменения в схеме и не задействуя новые выводы МК — настоящий конструктор — стыкуй что и сколько надо =)

I2C (Inter-Integrated Circuit — примерно «Схема внутренней связи» =), читается “и-два-цэ” — последовательная шина выдуманная в недрах Philips ещё в 80-х годах прошлого века. Задумывалась, как простая шина для связи блоков внутри устройства — получилось, и на удивление удачно=)
Сегодня, каждый производитель выпускающий МК уровнем чуть выше нулевого суёт туда аппаратный I2C, правда Philips запатентавал название и до 2007 года все выдумывали своим велосипедам имена кто во что горазд: у ATmega, например, этот модуль завётся 2-wire Serial Interface.
Производители законченных блоков и модулей, зачастую, используют именно I2C для общения с внешним миром (блоки телевизоров, магнитол, дисплеи, некоторые камеры в мобильных телефонах и т. п.), а микросхем периферии вообще на любой вкус: АЦП/ЦАП памяти разнообразные, часы реального времени, расширители вводо-выводов, гироскопы, акселерометры, компасы, драйверы светодиодов и матриц, ШИМ-контроллеры, синтезаторы частот и вообще, по-моему, всё что душе угодно.

Затыков у этой чудо шины два: скорость работы и ограничение на число адресов в сети.
Классически это 100 кбит/с и 128 устройств.
Но стандарт 1992 года предусматривает скорости как 100 кбит/с (low-speed), так и 400 кбит/с (fast-speed) и уже 10-битную адресацию т.е. максимум — 1203 адреса.
А стандартом от 1998, раскрутили аж до 3.4 Мбит/с (Hs-mode).
Но производители живут в прошлом веке и заглянув в датащит на атмеги увидим, что модуль 2-wire Serial Interface может раскочегарится до 400 кГц и адресовать только 127 устройств =\

Так же, есть зарезервированные 8 служебных адресов, так что, на деле, устройств может быть только 120.

Ну и хрен с ними, мне лично — за глаза, да и мороки с этим Hs-mode значительно.
Адреса, обычно, жёстко “прошиты” в микросхему (см. датащиты), но частенько несколько бит адреса “выводят” на ножки — перемычками (на питание или землю) можно задать эти биты и подключить несколько одинаковых микросхем на одну шину.

Физически, шина I2C представляет собой два провода (не считая земли и питания =), притянутые к плюсу резисторами 1-10к (так и только так!).
Один провод — шина данных(SDA — Serial DAta), второй — тактирование(SCS — Serial CLock).

И всё!
Работает тоже почти бесхитростно:
На линии обычно есть один Мастер (Master) — МК и некоторое количество Слейвов (Slave) — периферийных устройств (возможна и многомастерная “архитектура”, но об этом позже).
Так как линии у нас подтянуты к питанию, то устройствам остаётся только прижимать их к земле, когда хочется передать нолик и просто отпустить — чтоб единицу.
Отсюда важный вывод о совместной работе устройств с таким включением (называется — монтажное “И”) — если кто-то выставил ноль — остальным придётся с этим смириться =)
Итак, тактирование (дрыганье SCL) всегда осуществляет мастер, передачу начинает тоже всегда он, предварительно уточнив, что линия свободна (единички на SDA и SCL), формирует СТАРТ-условие (S) — прижимает линию SDA (1->0), при еденице на SCL,

Потом, надо передать адрес того устройства к которому мы хотим обратиться.
При передаче по I2C есть два правила:
Во-первых, данные считываются только при единичном состоянии SCL, а меняться могут, только при нулевом состоянии SCL (выставили-держим-протолкнули-выставили следующий-держим-…).
Во-вторых, данные идут головой вперёд — начиная со старшего бита(MSB)

7 битов адреса, восьмой — признак R/W — если хотим читать 1, записать 0.
Прожевав восьмой бит, ведомая микросхема должна сказать уверенное “Ага”, если всё понятно — послать сигнал подтверждения (ack, acknowledge) — прижав линию SDA (отпущенную ведущим) на время 9-го такта на SCL. Мастер с интересом это дело выслушает (и тактично подождёт если туговатая микросхема не сразу отпустит SDA)
Если ack нет (называется nack) — значит ведомому что-то не понятно, тогда нужно(можно) сформировать СТОП и повторить передачу.
Затем, мастер либо посылает байт данных слейву, и снова дожидается подтверждения,
либо принимает от него байт и уже сам выдаёт подтверждение. Байт данных может быть несколько, но все они когда-нибудь закончатся, и мастер должен будет сформировать СТОП-условие(P). Для этого надо отпустить линию SDA (0->1), не трогая SCL .

полный “текст” обращения (кликабельно):

Всё просто=)
СТАРТ-адрес(запись/чтение)-подтверждение-данные-подтверждение-СТОП

А если мастер читал данные, то, прочитав последний интересующий байт должен вместо последнего asc передать nack. Только такое вот, невежливое, завершение диалога понимает многие (или все? — см. датащиты) периферийные микросхемы.

Так же, туговатая микросхема может придерживать линию SCL, демонстрируя, что не успевает глотать недожёванное, так что, перед подачей очередного такта, мастер должен проверить свободно ли, и если нет — подождать.
Есть ещё такой режим — комбинированный. Это когда мастер, прочитав что-нибудь, не освобождая линию,(не формируя СТОП) генерит прям сразу ещё один СТАРТ и лезет писать. Такой хамский старт называется повторным — ПОВСТАРТ (repeated Start, Sr). Делается это, обычно, для указания «внутреннего» адреса периферийной микросхемы — например: послали адрес EEPROM-ины, сказали что намерены читать, потом ПОВСТАРТ и адрес ячейки откуда хотим считать

Есть ещё режим много-мастерной(multi-master) работы — тут сильно выручает соединение “монтажное И”.

А для реализации, непосредственно демократии, на шине действуют ещё и правила джунглей синхронизации и арбитража. Эти правила построены на непрерывном самоконтроле мастерами результатов своей деятельности — отпустит линию — и тут же смотрит — отпустилась? Если — отпустилась, то всё хорошо и он тут пока главный, если нет (кто-то держит линию) — есть мастера потолще, надо свалить.
Естественно, каждый мастер перед началом бурной деятельности по раздаче команд и чтению данных проверяет не занимает ли линию кто-нибудь столь же мастеровитый, и если занимает то тактично ждёт просветов.
А если одновременно, сразу несколько, посмотрели — свободно — воздуха побольше набрали и давай…вещать?
Тут они начинают мериться=)
Во-первых, тактирование. Естественно, все мастера ломанутся дёргать SCL самостоятельно, они ж мастера=) Вот только пока самые резвые (начавшие первыми) сгенерировав первый такт, отпустят линию — более тормозные и неторопливые будут её держать, отпуская по одному, пока не найдётся самый главный тормоз — начавший вещать последним, он то и продолжит, а остальные останутся нервно ждать.
Но, может так случится, что два особо однояйцевых мастера синхронно сгенерят СТАРТ условие. Тогда опять начнётся затяжной заплыв с мериньем. Будут гнать в линию SDA свои нолики и единицы синхронно, пока не обнаружится разница в задуманном — тот кто захочет выставить единицу будет традиционно обломан тем, кто решил в этот момент послать нолик. Обламавшийся перейдёт в ожидание, а тот кто сказал 0 первым — продолжит.
В общем, “0” в I2C решает, на этом всё и держится =)

Дополнительно, для погружения в тему, рекомендую книжку:
Семёнов Б.Ю. «Шина I2C в радиотехнических конструкциях»
А также, перевод стандарта

Далее: Программирование Arduino — библиотека Wire — для работы с I2C

Ccылки
http://easyelectronics.ru/interface-bus-iic-i2c.html
http://ru.wikipedia.org/wiki/I2C

По теме
1-Wire
SPI

Использование I2C в высокоуровневом приложении — Azure Sphere

  • Статья
  • Чтение занимает 3 мин

Azure Sphere поддерживает Inter-Integrated (I2C) в главном режиме. I2C — это последовательная шина, которая подключает низкоскоростные периферийные устройства к микроконтроллерам. I2C использует модель с несколькими главными или несколькими подчиненными устройствами, где основное устройство управляет набором подчиненных устройств. I2C часто используется с периферийными устройствами, для которых требуется простое упрощенное взаимодействие с микроконтроллером, например настройка элементов управления, коммутаторов питания и датчиков.

Приложения могут получать доступ к периферийным устройствам через I2C, вызывая API Applibs I2C для выполнения операций с главным интерфейсом I2C. В примере LSM6DS3 I2C описывается настройка оборудования для I2C на устройстве MT3620 и использование I2C в приложении.

Требования i2C

Приложения, использующие I2C, должны включать соответствующие файлы заголовков для I2C и добавлять параметры I2C в манифест приложения.

Все приложения должны задать целевое оборудование и включить соответствующий файл заголовка определения оборудования.

 #define I2C_STRUCTS_VERSION 1
 #include <applibs/i2c.h>
 #include "path-to-your-target-hardware.h"

Объявите I2C_STRUCTS_VERSION определение препроцессора перед включением файла заголовка. Указывает версию структуры, используемую приложением.

Замените path-to-your-target-hardware.h путем к файлу заголовка для оборудования.

Параметры манифеста приложения

Чтобы использовать API-интерфейсы I2C, I2cMaster необходимо добавить возможность в манифест приложения, а затем добавить каждый главный интерфейс I2C в эту возможность. Это позволяет приложению получить доступ к интерфейсу. Манифест приложения Azure Sphere содержит дополнительные сведения о манифесте приложения.

В коде используйте константы, определенные для оборудования, для идентификации интерфейсов I2C. Компилятор преобразует эти значения в необработанные значения при сборке приложения.

Например, ниже приведен фрагмент манифеста приложения, который предназначен для эталонной платы разработки MT3620 (RDB) и настраивает два основных интерфейса I2C:

"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ],

В следующем фрагменте показано, как указать те же главные интерфейсы I2C в приложении, предназначенном для начального набора Avnet MT3620:

"I2cMaster": [ "$AVNET_MT3620_SK_ISU0_I2C", "$AVNET_MT3620_SK_ISU1_I2C" ]

Открытие главного интерфейса I2C

Перед выполнением операций с главным интерфейсом I2C его необходимо открыть, вызвав I2CMaster_Open функцию.

Обновление параметров главного интерфейса I2C

После открытия главного интерфейса можно изменить параметры:

  • Чтобы изменить скорость шины для операций в главном интерфейсе, вызовите I2CMaster_SetBusSpeed
  • Чтобы изменить время ожидания для операций, вызовите I2CMaster_SetTimeout

Выполнение операций чтения и записи в главном интерфейсе I2C

Azure Sphere поддерживает несколько вариантов выполнения операций чтения и записи с помощью I2C. Все эти параметры являются блокирующими синхронными операциями.

Для односторонних операций записи или чтения можно вызвать I2CMaster_Write илиI2CMaster_Read. Это самый простой способ выполнения операций с главным интерфейсом I2C, так как он указывает только одну операцию и включает адрес подчиненного устройства в вызов функции.

Вы можете вызвать I2CMaster_WriteThenRead для выполнения объединенной операции записи и чтения в одной транзакции шины без прерывания выполнения другой транзакции.

Для взаимодействия с некоторыми интерфейсами POSIX можно вызывать функции чтения POSIX (2) и write(2) для выполнения односторонних транзакций. Необходимо вызвать I2CMaster_SetDefaultTargetAddress, чтобы задать адрес подчиненного устройства перед вызовом read(2) или write(2).

Эти функции можно вызывать для выполнения 0-байтных операций записи, чтобы проверить наличие подчиненного устройства. Если операция чтения или записи завершается сбоем, приложение должно обработать повторную отправку запроса.

Закрытие интерфейса I2C

Чтобы закрыть интерфейс, необходимо вызвать стандартную функцию POSIX close().

Поддержка MT3620

В этом разделе описываются параметры I2C, которые применяются только при запуске Azure Sphere на MT3620.

Спецификации I2C для микросхемы MT3620 перечислены в разделе «Состояние поддержки MT3620». В руководстве пользователя по плате разработки MT3620 описывается макет контактов и функции для подключения.

Папка HardwareDefinitions в каталоге установки пакета SDK microsoft Azure Sphere содержит определения общих до плат разработки, модулей и микросхем Azure Sphere. Он содержит файлы заголовков и JSON, которые определяют главные интерфейсы для MT3620, MT3620 RDB, а также другое оборудование MT3620.

По умолчанию папка HardwareDefinitions находится в C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions Windows и /opt/azurespheresdk/HardwareDefinitions Linux.

  • При настройке платы разработки MT3620 можно использовать любой порт ISU в качестве главного интерфейса I2C. При использовании порта ISU в качестве главного интерфейса I2C нельзя использовать тот же порт, что и интерфейс SPI или UART.
  • 10-разрядные адреса подчиненных устройств не поддерживаются в MT3620; Поддерживаются только 7-разрядные адреса.
  • MT3620 поддерживает скорость шины 100 КГц, 400 КГц и 1 МГц, но не 3,4 Мгц.
  • 0-байтовое чтение I2C не поддерживается в MT3620.
  • При использовании I2C в высокоуровневом приложении периферийное устройство I2C использует только контакты SCL и SDA в периферийном блоке ISU, а другие контакты могут использоваться в качестве GPIO в том же высокоуровневом приложении. Список неиспользуемых пин-кодов ISU, которые можно повторно использовать для GPIO, см.
    на периферийных устройствах ввода-вывода.

ОШИБКА — 404 — НЕ НАЙДЕНА

  • Главная
  • ЭТО ЛОВУШКА!

Наши серверные гномы не смогли найти страницу, которую вы ищете.

Похоже, вы неправильно набрали URL-адрес в адресной строке или перешли по старой закладке.

Возможно, некоторые из них могут вас заинтересовать?

Гнездо/разъем питания цилиндра постоянного тока

В наличии ПРТ-00119

2

Избранное Любимый 22

Список желаний

Нагреватель Loomia 5V — 7.2V

В наличии COM-17858

55,95 $ $53,15

Избранное Любимый 5

Список желаний

MIKROE VCP Monitor Click

Нет в наличии ПРТ-19496

21,95 $

Избранное Любимый 0

Список желаний

Pixhawk 6C с модулем питания PM02 и GPS M8N

Нет в наличии РОБ-20497

314,99 $

Избранное Любимый 1

Список желаний

10 основных ошибок проектирования, которых следует избегать при разработке электронного оборудования

28 июля 2021 г.

Ознакомьтесь с третьей частью серии гостевых блогов Джона Тила из Predictable Designs.

Избранное Любимый 1

Сделай сам крысиные бега в паб с доской LTE GNSS Breakout Board

12 августа 2021 г.

Как только Роб и Авра получат сообщение с GPS-координатами, кто быстрее доберется до нужного места? Они узнают об этом, используя поезда, самолеты, велосипеды, лезвия и, конечно же, новый SparkFun LTE GNSS Breakout с SARA-R5.

Избранное Любимый 0

Учебное пособие по сервоприводу для хобби

26 мая 2016 г.

Сервоприводы — это двигатели, которые позволяют точно управлять вращением выходного вала, открывая всевозможные возможности для робототехники и других проектов.

Избранное Любимый 24

  • Электроника SparkFun®
  • 6333 Dry Creek Parkway, Niwot, Colorado 80503
  • Настольный сайт
  • Ваш счет
  • Авторизоваться
  • регистр

ОШИБКА — 404 — НЕ НАЙДЕНА

  • Главная
  • Проблема?

Наши серверные гномы не смогли найти страницу, которую вы ищете.

Похоже, вы неправильно набрали URL-адрес в адресной строке или перешли по старой закладке.

Возможно, некоторые из них могут вас заинтересовать?

Shapeoko Z-Plus — XXL

В наличии ТОЛ-18481

250,00 $

Избранное Любимый 1

Список желаний

МИКРОЕ БЛЕ 6 Click

Нет в наличии WRL-19430

26,95 $

Избранное Любимый 0

Список желаний

Shapeoko 4 Standard — без стола, с маршрутизатором

В наличии ТОЛ-19736

1 605,00 $

Избранное Любимый 0

Список желаний

Гистограмма MIKROE 3 Нажмите

Нет в наличии COM-19893

14,95 $

Избранное Любимый 0

Список желаний

Удаленный промышленный датчик VOC, использующий Ethernet

24 марта 2022 г.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *