Это справочный вопрос. Я удалил пару комментариев, которые сделали это менее очевидным. (На вопрос отвечает аскер).
Ник Гэммон
Ответы:
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 В
ОСРВ: приоритет, задачи, семафоры, динамические системные тики и т. Д.
Небольшая площадь: ссылка только на используемый код / данные.
Различие между ОСРВ и 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
Ответы:
В этом уроке, который я дал на конференции по встраиваемым Linux-системам, мы пытаемся ответить на вопросы, предоставляя ссылки на более подробное описание затронутых тем и используя практический пример вождения беспилотника 4WD, где Arduino Mini Pro действует как подчиненный и управляет 4 независимыми колесами , Оригинальный документ можно найти здесь .
Примечание. Этот ответ в настоящее время находится в стадии разработки, так как я адаптирую основные моменты по ссылке.
Типичные области применения шины I2C
Управление «быстрыми» периферийными устройствами, которые используют другие каналы для обмена данными. Пример: кодеки.
В ПК операционная система обычно взаимодействует через I2C с:
При наличии нескольких контроллеров шины периферийные устройства группируются по скорости, поэтому быстрые не наказываются более медленными.
Краткое введение в шину I2C - ключевые особенности
URL ссылки:
Пример конфигурации шины
Характеристики протокола (упрощенно)
Пример движения автобусов
Таможенные Рабы
Зачем создавать кастомное ведомое устройство I2C?
Как спроектировать кастомное ведомое устройство I2C?
Дизайн Мастера I2C
Ключевые критерии дизайна:
Отладка: разделяй и властвуй
Возьмите прямой контроль над автобусом с помощью специального устройства. Примеры:
Просматривайте шину с помощью логического анализатора или измерителя объема / продвинутого уровня. Примеры:
Используйте ведомый в отладчике цепи / в эмуляторе цепи.
Пример: AVR Dragon для чипов AVR (Arduino UNO, Nano, Mini, MiniPro)
АВТОБУС Пират
USB-адаптер I2C
сигрок и пульсвью
Сигрок (бакенд компонент) логотип
Pulseview (визуализатор) пример
Пример младшего логического анализатора
Пример: управление дроном 4WD
Прототип построен с использованием 2 Arduino Mini Pro.
Что делает раб в примере?
I2C раб:
Блок-схема высокого уровня ведомого устройства I2C.
Выбор ведомого: Arduino Mini Pro
Ведомый ICD: AVR Dragon
Выбор ОС: ChibiOS
Однако он имел ограниченную поддержку BSP для AVR, отсутствие: - драйвера прерываний для AVR GPIO (добавлено). - Поддержка I2C для режима ведомого AVR (пользовательский). Который должен был быть разработан отдельно как часть Drone SW для AVR .
Определение параметров связи
Для каждого колеса:
Рабочий цикл сигнала ШИМ, используемого для его управления, - 1 байт. 0xFF = максимальный крутящий момент / 0x00 = нет крутящего момента.
Направление вращения - 1 байт.
Средний период между слотами оптического кодера - 2 байта.
Индекс параметра - 1 клев:
Колесные индексы - 1 клев:
Субпротокол: определение регистров
Формат регистра: 0xαβ - α = индекс параметра - β = индекс колеса
Адрес (выбран произвольно): 0x10
Шинный пиратский формат: - [= начальный бит -] = конечный бит - r = считанный байт - времена адреса 2 (сдвиг влево 1), для бита R / W
Пример - в формате Bus Pirate
[i2c_addr reg_addr = (parm, wheel) reg_value]
Машина вращается по часовой стрелке.
источник