Как разрабатывать и отлаживать пользовательскую I /C-ведущую систему?

Как действовать, когда вам нужна пользовательская I2C-ведущая-ведомая система?

Каковы критерии проектирования?

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

9 голосов | спросил Igor Stoppa 8 PMpFri, 08 Apr 2016 18:13:04 +030013Friday 2016, 18:13:04

1 ответ


10

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

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


Типичные применения шины I2C

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

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

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

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


Краткое введение в основные функции шины I2C

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

Ориентировочные URL-адреса:

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

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


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

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

Пример трафика шины

 Пример трафика шины «Пример Пример цикла чтения шины Часть 1 Пример цикла чтения шины Part2


Пользовательские ведомые устройства

Зачем создавать пользовательские ведомые устройства I2C?

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

Как создать пользовательский ведомый I2C?

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

Конструкция мастера I2C

Ключевые критерии проектирования:

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

Отладка: разделение и покорение

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

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

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

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


BUS Pirate

 Bus Pirate

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

Адаптер USB к I2C

 usbtoi2c

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

sigrok и pulseview

sigrok (bakend component) logo

 sigrok

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

 pulseview

Пример анализатора логики нижнего конца

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

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

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


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

Ведомый I2C:

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

 Slave Role

Структурная схема высокого уровня подчиненного устройства I2C.


Выбор подчиненного устройства: Arduino Mini Pro

 MiniPro

  • Достаточно контактов /функций для каждого колеса:
    • 1 выход PWM с независимой конфигурацией рабочего цикла.
    • 1 GPIO для регистрации входа одометра в качестве IRQ.
    • 2 GPIO для выбора:
      • Вперед
      • Reverse
      • Idle
      • Блокировка
  • Блок I2C HW для обмена i2c с прерываниями.
  • Выделенные контакты для программирования на основе SPI.
  • Малый размер.
  • Низкая стоимость.
  • Схема расположения клона, представленного на рисунке, оптимизирована для установки в гнездо DIL.

ICB, специфичный для Slave: AVR Dragon

 AVR Dragon


Выбор ОС: ChibiOS

 ChibiOS

  • RTOS: преемственность, задачи, семафоры, динамическая система tic и т. д.
  • Малый размер: ссылка используется только для использования кода /данных.
  • Различие между RTOS и BSP через HAL.
  • GPLv3 для некоммерческого использования.
  • Активно развитый, но уже зрелый.
  • Поддерживает 8-битный AVR.

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


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

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

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

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

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

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

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

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

Подпрограмма: определение регистров

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

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

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


Пример - в формате пиратского автобуса

[i2c_addr reg_addr = (парм, колесо) 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

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

ответил Igor Stoppa 8 PMpFri, 08 Apr 2016 18:13:04 +030013Friday 2016, 18:13:04

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132