Введение в протоколы обмена данными, I2C / TWI протокол
HTML-код
- Опубликовано: 27 июл 2024
- Лекция вводит понятие "протокола обмена данными" между микроконтроллером (микроконтроллерами) и периферийными устройствами. Протокол - это способ кодирования сообщений между ведущим и ведомым устройством, которые могут передаваться по ограниченному количество проводов. Работа с каждым устройством, работающим на том или ином протоколе обмена должна рассматриваться отдельно, так как упомянутые выше "сообщения" достаточно индивидуальны для каждого отдельно взятого устройства. В лекции рассматривается программная и аппаратная реализация протокола I2C или TWI. Рассматриваются примеры использования этого протокола, регистры МК для реализации аппаратного типа TWI.
Тайм-коды:
00:00 Введение
00:22 Что такое протоколы обмена данными?
01:52 Последовательные и параллельные протоколы
03:10 Хардварный уровень TWI
04:33 Временная диаграмма протокола TWI
08:15 Использование TWI с датчиком температуры
14:42 Моделируем датчик в Proteus
15:47 Пишем программный TWI
25:13 Демонстрация работы кода - программный TWI
25:45 Аппаратные регистры TWI
34:03 Пишем аппаратный TWI
38:52 Демонстрация работы кода - аппаратный TWI
40:08 Применение TWI протокола - расширители портов
42:45 Пример расширителя портов на ARM
44:40 Устройства, использующие TWI протокол
44:54 Достоинства и недостатки TWI
Спасибо за видео. Отличный канал.
Вроде бы в c массив заканчивается NULL (после последнего элемента резервируется еще 1 байт), поэтому можно не передавать длину. Поправьте, если не прав
Когда я передаю массив в функцию, я могу передать только адрес его первого элемента (указатель на массив) и в этом случае, у функции нет шансов узнать сколько байт занимает массив, поэтому мне нужно передать ещё и его длину, иначе есть шанс влезть в область памяти, не касающуюся интересующего нас массива. Массив типа строка заканчивается признаком конца строки ‘\0’, а массив вещественных чисел не имеет признака конца, насколько мне известно.
Зачем нужен command byte? Он всегда 1 или это указание на инструкцию?
Command byte в случае рассматриваемого датчика - это адрес его конфигурационного регистра, куда мы пишем настройки датчика температуры. В общем же случае - после старта и адреса слева, согласно методике TWI протокола, по линии мастером всегда передается адрес регистра слейва (этих регистров может быть больше одного, например у гироскопа-акселерометра mpu6050 их чёртова уйма), куда мастер будет писать биты (если выставлен признак записи после адреса слейва) или откуда будет читать биты (если выставлен признак чтения после адреса слейва). Короче в данном случае command byte - это либо конфигурационный регистр датчика температуры, либо предельные значения температуры, на которые должен срабатывать датчик. Вот, надеюсь, что стало немного понятнее.
Command byte в случае рассматриваемого датчика - это адрес его конфигурационного регистра, куда мы пишем настройки датчика температуры. В общем же случае - после старта и адреса слева, согласно методике TWI протокола, по линии мастером всегда передается адрес регистра слейва (этих регистров может быть больше одного, например у гироскопа-акселерометра mpu6050 их чёртова уйма), куда мастер будет писать биты (если выставлен признак записи после адреса слейва) или откуда будет читать биты (если выставлен признак чтения после адреса слейва). Короче в данном случае command byte - это либо конфигурационный регистр датчика температуры, либо предельные значения температуры, на которые должен срабатывать датчик. Вот, надеюсь, что стало немного понятнее.
А микросхемы должны питаться только от одного источника питания или можно от разных питать?
Можно питать их от разного питания, если например одной микросхеме нужно 5 вольт, другой - 3.3 и так далее, но земля должна быть у всех компонентов, включая микроконтроллер, общая.
@@michael_mmk пробовали так делать?