Как спроектировать и отладить пользовательскую систему «главный-подчиненный» I2C?

10

Как поступить, если требуется настраиваемая система «главный-подчиненный» I2C?

Какие критерии дизайна применять?

Какие инструменты отладки можно использовать для устранения проблем?

Игорь Стоппа
источник
Это справочный вопрос. Я удалил пару комментариев, которые сделали это менее очевидным. (На вопрос отвечает аскер).
Ник Гэммон

Ответы:

10

В этом уроке, который я дал на конференции по встраиваемым Linux-системам, мы пытаемся ответить на вопросы, предоставляя ссылки на более подробное описание затронутых тем и используя практический пример вождения беспилотника 4WD, где Arduino Mini Pro действует как подчиненный и управляет 4 независимыми колесами , Оригинальный документ можно найти здесь .

Примечание. Этот ответ в настоящее время находится в стадии разработки, так как я адаптирую основные моменты по ссылке.


Типичные области применения шины I2C

  • Взаимодействие с относительно медленной периферией. Пример: датчики, механические приводы.
  • Управление «быстрыми» периферийными устройствами, которые используют другие каналы для обмена данными. Пример: кодеки.

    В ПК операционная система обычно взаимодействует через I2C с:

    • измерители температуры и напряжения батареи;
    • регуляторы скорости вращения вентиляторов;
    • аудиокодеки.

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


Краткое введение в шину I2C - ключевые особенности

  • Серийный автобус.
  • Всего 2 линии: Serial CLock и Serial DAta (плюс заземление).
  • 4 скорости: 100 кГц, 400 кГц, 1 МГц, 3,2 МГц.
  • Как правило, 1 ведущее устройство и 1 или более подчиненных.
  • Связь всегда инициируется ведущим устройством.
  • Несколько мастеров могут сосуществовать на одной шине (multi-master).
  • Open-Drain: SDA и SCL нужны подтягивающие резисторы.
  • «Растяжка часов»
    • Мастер контролирует SCL, но ведомый может удерживать его (потому что открыт сток), если ему нужно отрегулировать скорость.
    • Мастер должен проверить этот сценарий.
    • Раб может застрять и заклинить шину: требуется сброс линий от мастера до раба.
  • Обычно поддерживается 7-битная адресация, но также и 10-битная.
  • Логический протокол: фактические уровни напряжения не указаны и зависят от отдельных реализаций. Пример: 1,8 В / 3,3 В / 5,0 В

URL ссылки:

Пример конфигурации шины

Пример конфигурации шины


Характеристики протокола (упрощенно)

  • 2 типа сообщений: чтение и запись
  • Бит Старт / Стоп - обозначается как «[« и «]» в остальной части ответа
  • Адрес: 7 или 10 бит
  • R / W bit: R = 1 / W = 0 Используется для определения типа отправленного сообщения.
  • Данные по шине: (Адрес << 1 | R / W)
  • Регистрируется как обработчик информации в выбранном устройстве.

Пример движения автобусов

Пример движения автобусов Пример цикла записи шины Пример цикла чтения шины Part1 Пример цикла чтения шины Part2


Таможенные Рабы

Зачем создавать кастомное ведомое устройство I2C?

  • Требуемый датчик / привод недоступен с интерфейсом I2C.
  • Доступно меньше уникальных адресов, чем требуется для рабов.
  • Желаемый пользовательский функционал на ведомом устройстве:
    • Полуавтономные реакции на раздражители.
    • Фильтрация / предварительная обработка входных данных.
  • Оптимизация энергопотребления: настраиваемый «датчик-концентратор» выполняет уборку, пока основной процессор не используется.
  • Реакция в реальном времени на входы.
  • [ваше воображение здесь]

Как спроектировать кастомное ведомое устройство I2C?

  • Определите требования (см. Предыдущий слайд).
  • Выберите микроконтроллер или микропроцессор.
  • Выберите Планировщик или Операционную систему (если есть).
  • Определить коммуникационный подпротокол:
    • Определите параметры и команды для обмена.
    • Организуйте их в «реестры» и выберите бесплатный адрес.

Дизайн Мастера I2C

Ключевые критерии дизайна:

  • Вес / Размеры.
  • Требуемая вычислительная мощность и средняя задержка.
  • ПК-подобное устройство
    • Встроенное устройство, как правило, без головы.
    • Предпочитаемый язык программирования: интерпретируется и компилируется.
  • Наличие автобусов / gpios для вождения раба (ов):
    • Только для GPIO: протокол bitbang
    • I2C: приложение пользовательского пространства против драйвера ядра.
    • Нет доступных интерфейсов GPIO / I2C: переходник USB-I2C.

Отладка: разделяй и властвуй

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

  • Автобус Pirate (полезно также для других автобусов)
  • USB-адаптер I2C Master, также основанный на чипе FTDI FT232R.
  • Пользовательское устройство (может быть отдельным проектом).
  • Просматривайте шину с помощью логического анализатора или измерителя объема / продвинутого уровня. Примеры:

    • sigrok / pulseview с совместимым логическим анализатором
    • 2-х канальный автономный прицел / метр
    • Используйте ведомый в отладчике цепи / в эмуляторе цепи.

      Пример: AVR Dragon для чипов AVR (Arduino UNO, Nano, Mini, MiniPro)


АВТОБУС Пират

Автобус пират

  • В первую очередь для целей развития.
  • Можно и понюхать автобус, и водить его.
  • Консольный интерфейс через последовательный порт (ttyACM), включая макросы, или программный доступ для нескольких языков программирования.
  • Встроенные подтягивающие резисторы и источники напряжения (5 В / 3,3 В)
  • Поддерживает множество других протоколов.
  • Рекомендации: Википедия , главная страница

USB-адаптер I2C

usbtoi2c

  • Маленький след.
  • Подходит для постоянных установок.
  • Нет необходимости в специальных соединениях на хосте: его можно использовать для взаимодействия с обычным ПК.
  • Доступен вариант с поддержкой SPI.
  • Нет консольного интерфейса, только последовательный двоичный протокол.
  • Требуется оболочка протокола .
  • Ссылка: протокол

сигрок и пульсвью

Сигрок (бакенд компонент) логотип

sigrok

Pulseview (визуализатор) пример

pulseview

Пример младшего логического анализатора

saleae

  • Де-факто стандарт для измерений на компьютере под управлением Linux (но доступен и для других ОС).
  • Поддержка широкого спектра логических анализаторов, областей применения и счетчиков.
  • Различные протоколы декодирования, в том числе I2C.
  • Полезно для визуализации логических сигналов и ошибок протокола отладки.
  • Даже очень дешевый HW может предложить совершенно новое измерение для отладки.
  • Рекомендации: сигрок , Pulseview , поддерживаемое оборудование

Пример: управление дроном 4WD

Прототип построен с использованием 2 Arduino Mini Pro. трутень


Что делает раб в примере?

I2C раб:

  • Управляет величиной крутящего момента, приложенного к каждому колесу.
  • Управляет направлением вращения каждого колеса.
  • Измеряет скорость вращения каждого колеса через оптический энкодер (одометр).
  • Предоставляет вышеуказанные параметры мастеру I2C.

Раб Роль

Блок-схема высокого уровня ведомого устройства I2C.


Выбор ведомого: Arduino Mini Pro

MiniPro

  • Достаточно штифтов / функций для каждого колеса:
    • 1 ШИМ-выход с независимой конфигурацией рабочего цикла.
    • 1 GPIO для регистрации входа одометра в качестве IRQ.
    • 2 GPIO для выбора:
      • Вперед
      • Обратный
      • вхолостую
      • Замок
  • Блок I2C HW для управляемых прерываниями обменов i2c.
  • Выделенные контакты для программирования на основе SPI.
  • Маленький след.
  • Бюджетный.
  • Макет платы клона, представленной на рисунке, оптимизирован для монтажа на DIL-разъем.

Ведомый ICD: AVR Dragon

AVR Dragon


Выбор ОС: ChibiOS

ChibiOS

  • ОСРВ: приоритет, задачи, семафоры, динамические системные тики и т. Д.
  • Небольшая площадь: ссылка только на используемый код / ​​данные.
  • Различие между ОСРВ и BSP через HAL.
  • GPLv3 для некоммерческого использования.
  • Активно развивается, но уже зрелый.
  • Поддерживает 8 бит AVR.

Однако он имел ограниченную поддержку BSP для AVR, отсутствие: - драйвера прерываний для AVR GPIO (добавлено). - Поддержка I2C для режима ведомого AVR (пользовательский). Который должен был быть разработан отдельно как часть Drone SW для AVR .


Определение параметров связи

Для каждого колеса:

  • Рабочий цикл сигнала ШИМ, используемого для его управления, - 1 байт. 0xFF = максимальный крутящий момент / 0x00 = нет крутящего момента.

  • Направление вращения - 1 байт.

    • 0x00 = простаивает
    • 0x01 = обратный
    • 0x02 = вперед
    • 0x03 = заблокирован
  • Средний период между слотами оптического кодера - 2 байта.

    • Запись чего-либо сбрасывает измерение.
  • Индекс параметра - 1 клев:

    • 0 = рабочий цикл
    • 1 = Направление
    • 2 = Средний период
  • Колесные индексы - 1 клев:

    • 0 = левый тыл
    • 1 = правый задний
    • 2 = правая передняя
    • 3 = Левый передний
    • 4 = все

Субпротокол: определение регистров

Формат регистра: 0xαβ - α = индекс параметра - β = индекс колеса

Адрес (выбран произвольно): 0x10

Шинный пиратский формат: - [= начальный бит -] = конечный бит - r = считанный байт - времена адреса 2 (сдвиг влево 1), для бита R / W


Пример - в формате Bus Pirate

[i2c_addr reg_addr = (parm, wheel) reg_value]

[0x20 0x20 0x02]  Left Rear Forward
[0x20 0x21 0x01]  Right Rear Backward
[0x20 0x22 0x01]  Right Front Backward
[0x20 0x23 0x02]  Left Front Forward
[0x20 0x14 0xFF]  Wheels set to max torque

Машина вращается по часовой стрелке.

Игорь Стоппа
источник