Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.
Стартовый сигнал:
Когда SCL находится на высоком уровне, SDA переходит с высокого уровня на низкий уровень. Конечный сигнал: когда SCL имеет высокий уровень, SDA переходит с низкого уровня на высокий уровень.
Ответный сигнал:
Все данные по шине I2C передаются в 8-битных байтах. Каждый раз, когда передатчик отправляет байт, он освобождает линию данных во время тактового импульса 9, и приемник возвращает ответный сигнал. Когда ответный сигнал имеет низкий уровень, он указывается как действительный бит ответа (ACK, называемый битом ответа), указывая, что получатель успешно получил байт. Когда ответный сигнал имеет высокий уровень, он указывается как неактивный; - бит подтверждения (NACK), который обычно указывает на прием. Получателю не удалось успешно получить байт. Требованием для обратной связи по биту эффективного ответа ACK является то, что приемник устанавливает низкий уровень на линии SDA во время низкого уровня перед 9-м тактовым импульсом и обеспечивает это. что он стабилен во время высокого уровня часов низкого уровня. Если приемник является ведущим, после получения последнего байта он отправляет сигнал NACK, чтобы уведомить управляемый передатчик о прекращении передачи данных, и освобождает линию SDA, чтобы главный приемник отправлял стоп-сигнал P.
Время написания:
Сигнал запуска: хост + адрес подчиненного устройства + команда записи. Если ответ успешен, это означает, что устройство существует. Тогда хост + адрес внутреннего регистра устройства. В это время нет необходимости записывать. командное управляющее слово. Ведомый отвечает. Если ответ успешен, это означает, что устройство существует. Ведущий записывает данные, и ведомый отвечает, продолжать ли отправку. Если нет, он отправляет сигнал остановки. П.
Время чтения:
Если вы хотите прочитать устройство, вы должны сначала сообщить подчиненному устройству адрес устройства, которое вы хотите прочитать. Затем подчиненное устройство может поместить (отправить) данные в SDA для чтения ведущего устройства. устройство, помещающее данные в SDA, контролируется аппаратно. Выполняется автоматически, без ручной записи. Поэтому сначала запишите адрес ведомого устройства, затем + запишите команду управления, ведомое устройство отвечает, и ответ успешен, что указывает на то, что это устройство существует, а затем записывает адрес внутреннего регистра. На данный момент нет необходимости записывать команду. управляющее слово. Ведомое устройство отвечает, и ответ успешен, что указывает на то, что устройство имеет этот адрес. Затем хост продолжает выдавать: записать адрес ведомого устройства, затем + команду чтения, ведомое устройство отвечает, и ответ успешен. В это время данные могут быть прочитаны, и ведомое устройство поместило данные в SDA. Адрес и устройство проверены, дальнейшая проверка не требуется.
Временная диаграмма сигнала запуска и сигнала остановки показана ниже:
Отправленные биты данных:
Каждый бит данных, передаваемый по шине I2C, имеет соответствующий тактовый импульс (или синхронное управление), то есть при взаимодействии последовательных тактовых импульсов SCL каждый бит данных последовательно передается побитно на SDA. При передаче данных уровень SDA должен оставаться стабильным в течение периода, когда SCL высокий. Низкий уровень — это данные 0, а высокий уровень — это данные 1. Уровень SDA может изменять состояние только при низком уровне SCL. Логический 0 соответствует низкому напряжению, а логическая 1 — высокому напряжению. Время показано на рисунке ниже.
Временная диаграмма ответного сигнала показана на рисунке ниже:
При выполнении последовательности записи временная диаграмма изменения данных на SDA выглядит следующим образом:
При выполнении чтения временная диаграмма изменения данных на SDA выглядит следующим образом:
Временная диаграмма передачи данных в протоколе i2c следующая:
Состояние ожидания шины
Когда две сигнальные линии SDA и SCL шины I2C одновременно находятся на высоком уровне, это определяется как состояние ожидания шины. В это время полевые транзисторы выходного каскада каждого устройства находятся в состоянии отсечки, то есть шина освобождается, а уровень подтягивается к высокому уровню соответствующими подтягивающими резисторами двух сигнальных линий.
Стартовый сигнал
Пока линия синхронизации SCL остается на высоком уровне, уровень на линии данных SDA снижается (т. е. происходит отрицательный переход), что определяется как сигнал запуска шины I2C, который отмечает начало передачи данных. Стартовый сигнал представляет собой сигнал синхронизации перехода уровня, а не сигнал уровня. Сигнал запуска активно устанавливается главным контроллером, и перед установкой этого сигнала шина I2C должна находиться в состоянии ожидания.
Сигнал перезапуска
После завершения передачи данных (отправки или приема), в то время как ведущее устройство управляет шиной, если вы хотите продолжить занимать шину и выполнить другую передачу данных (отправку или прием), не отпуская шину, вам необходимо использовать синхронизацию сигнала перезапуска Sr. . Сигнал Sr перезапуска служит одновременно окончанием предыдущей передачи данных и началом следующей передачи данных. Преимущество использования сигнала перезапуска состоит в том, что мастеру не нужно освобождать шину между двумя коммуникациями, чтобы управление шиной не было потеряно, то есть другим узлам главного устройства не будет разрешено захватить шину.
Сигнал перезапуска
После завершения передачи данных (отправки или приема), в то время как ведущее устройство управляет шиной, если вы хотите продолжить занимать шину и выполнить другую передачу данных (отправку или прием), не отпуская шину, вам необходимо использовать синхронизацию сигнала перезапуска Sr. . Сигнал Sr перезапуска служит одновременно окончанием предыдущей передачи данных и началом следующей передачи данных. Преимущество использования сигнала перезапуска состоит в том, что мастеру не нужно освобождать шину между двумя коммуникациями, чтобы управление шиной не было потеряно, то есть другим узлам главного устройства не будет разрешено захватить шину.
Стоп-сигнал
Пока линия синхронизации SCL остается на высоком уровне, линия данных SDA освобождается, заставляя SDA вернуться на высокий уровень (то есть положительный переход), который называется сигналом остановки шины I2C, который отмечает завершение передачи данных. передача инфекции. Сигнал остановки также является сигналом синхронизации перехода уровня, а не сигналом уровня. Сигнал остановки также активно устанавливается главным контроллером. После установления сигнала шина I2C вернется в состояние ожидания.
В достоверности данных не указано, что SDA может изменяться только при низком уровне SCL. Почему STAR и STOP отличаются? Прежде всего, STAR и STOP не являются данными, поэтому они не должны соответствовать правилам достоверности данных, и другие данные будут соответствовать. Однако «несоответствие» STAR и STOP облегчает идентификацию STAR и STOP. . Это не неповиновение, а преимущество.
Условия запуска и остановки обычно генерируются хостом. Считается, что шина находится в состоянии занятости после условия запуска, а шина снова считается в состоянии ожидания через определенный период времени после условия остановки.
Если условие повторного запуска (Sr) возникает без условия остановки, шина останется занятой. Условия запуска (S) и условия повторного запуска (Sr) в это время функционально одинаковы.
Если устройства, подключенные к шине, оснащены необходимым интерфейсным оборудованием, их легко использовать для определения условий запуска и остановки. Однако микроконтроллеры без такого интерфейса должны проверять линию SDA как минимум дважды за каждый такт, чтобы определить, произошло ли переключение уровня.
Передача битов данных
Каждый бит данных, передаваемый по шине I2C, имеет соответствующий тактовый импульс (или синхронное управление), то есть при взаимодействии последовательных тактовых импульсов SCL каждый бит данных последовательно передается побитно на SDA. При передаче данных уровень SDA должен оставаться стабильным в течение периода, когда SCL высокий. Низкий уровень — это данные 0, а высокий уровень — это данные 1. Уровень SDA может изменять состояние только при низком уровне SCL. Уровень логического 0 соответствует низкому напряжению, а уровень логической 1 зависит от положительного напряжения питания VDD самого устройства (при использовании отдельного источника питания). Передача битов данных осуществляется по фронту.
ответный сигнал
Все данные по шине I2C передаются в 8-битных байтах. Каждый раз, когда передатчик отправляет байт, он освобождает линию данных во время тактового импульса 9, и приемник возвращает ответный сигнал. Когда ответный сигнал имеет низкий уровень, он указывается как действительный бит ответа (ACK, называемый битом ответа), указывая, что получатель успешно получил байт. Когда ответный сигнал имеет высокий уровень, он указывается как неактивный; -бит подтверждения (NACK), который обычно указывает на прием. Устройство получило этот байт неудачно. Требование обратной связи о действительном бите подтверждения ACK заключается в том, что приемник переводит линию SDA на низкий уровень во время низкого уровня перед 9-м тактовым импульсом и обеспечивает стабильный низкий уровень во время высокого уровня этого тактового сигнала. Если приемник является ведущим, после получения последнего байта он отправляет сигнал NACK, чтобы уведомить управляемый передатчик о прекращении передачи данных, и освобождает линию SDA, чтобы главный приемник отправлял стоп-сигнал P.
Вставьте время ожидания
Если управляемому контроллеру необходимо задержать начало передачи следующего байта данных, он может заставить главный контроллер войти в состояние ожидания, переведя уровень SCL линии синхронизации на низкий уровень и удерживая его. Как только ведомое устройство освобождает линию синхронизации, передача данных может продолжиться, давая ведомому устройству достаточно времени для передачи полученных байтов данных или для подготовки байтов данных, которые оно собирается отправить. После того, как управляемое устройство с ЦП отреагирует на полученный байт адреса, ему необходимо определенное время для выполнения подпрограммы обслуживания прерываний для анализа или сравнения кода адреса, в течение которого линия SCL фиксируется на низком уровне, SCL. линия не освобождается до завершения обработки, что позволяет главному контроллеру продолжать отправку последующих байтов данных.
Статус блокировки автобуса
В особых случаях, если вам необходимо запретить все коммуникационные действия, происходящие на шине I2C, блокирование или закрытие шины является возможным способом, пока любое устройство, подключенное к шине, блокирует тактовую линию SCL на низком уровне.
Арбитраж автобусных споров
К шине может быть подключено несколько устройств, и иногда два или более главных устройства хотят одновременно занять шину. Такая ситуация называется конфликтом на шине. Шина I2C имеет возможность использования нескольких главных устройств и может разрешать конкуренцию на шине, возникающую на линии SDA. Принцип арбитража заключается в следующем: когда несколько ведущих устройств хотят одновременно занять шину, если ведущее устройство отправляет высокий уровень. и если другое ведущее устройство отправляет низкий уровень, устройство, уровень отправки которого не соответствует уровню шины SDA в это время, автоматически отключит свой выходной каскад. Арбитраж конфликтов в шинах осуществляется на двух уровнях. Первый — это сравнение битов адреса. Если ведущее устройство обращается к тому же ведомому устройству, оно вступает в сравнение битов данных, обеспечивая таким образом надежность конкурентного арбитража. Поскольку для арбитража используется информация по шине I2C, потери информации не будет.
Почему арбитраж будет проигран, если будет признан «0»? Поскольку вентиль OD может быть переведен только на низкий уровень, шину освобождения можно разблокировать, только если шина не управляется. При остановке привода будет сгенерировано «1», но шина все еще будет «0», что показывает, что они еще есть. хосты конкурируют между собой за использование шины. Верно, если ваша собственная линия переходит в «1» и «0», это означает, что вы проиграли арбитраж.
Хост может инициировать передачу только тогда, когда шина простаивает. Два или более главных устройства могут генерировать условие START в течение минимальной продолжительности условия START tHD;STA, что приводит к возникновению заданного состояния START на шине.
Когда на линии SCL высокий уровень, на линии SDA происходит арбитраж, поэтому, пока другой ведущий передает низкий уровень, ведущий, отправляющий высокий уровень, отключит свой каскад вывода данных, поскольку уровень на шине не соответствует его собственному уровню. одинаковый. Затем далее получите условия его суждения:
Арбитраж может длиться несколько человек. Первый заключается в сравнении битов адреса. Если каждый хост пытается обратиться к одному и тому же устройству, арбитраж продолжается путем сравнения битов данных (при условии, что хост является передатчиком) или сравнения битов ответа (при условии, что хост является получателем).
Информация об адресе и данных шины I2C определяется хостом, выигравшим арбитраж, и никакая информация не будет потеряна в ходе арбитражного процесса. Мастер, потерявший арбитраж, может генерировать тактовые импульсы до конца байта, потерявшего арбитраж.
В процессе последовательной передачи, как только на шину I2C отправляется повторное условие запуска или остановки, процесс арбитража все еще продолжается. Если такая ситуация возможна, соответствующий хост должен отправить это повторяющееся условие запуска или остановки в той же позиции в формате кадра.
Кроме того, если ведущее устройство также сочетается с функциональностью ведомого устройства и проигрывает арбитраж на этапе адресации, вполне вероятно, что ведущее устройство, выигравшее арбитраж, обращается к устройству. Затем ведущий, проигравший арбитраж, должен немедленно переключиться в свой подчиненный режим.
Управление шиной I2C определяется только адресом или кодом хоста и данными, отправленными конкурирующими хостами. Центрального хоста нет, и шина не имеет каких-либо настраиваемых приоритетов.
На рисунке выше показан процесс арбитража двух хостов. Конечно, он может содержать больше контента, что определяется количеством хостов, подключенных к шине. В настоящее время существует некоторая разница между внутренним уровнем данных хоста, генерирующего DATA1. и фактический уровень линии SDA. Если данные отключены. Выход. Это означает, что шина подключена к высокому выходному уровню, который не влияет на передачу данных, инициированную мастером, выигравшим арбитраж.
Синхронизация тактового сигнала
Сигнал тактовой синхронизации при передаче информации по шине I2C завершается логическим И всех устройств, подключенных к линии SCL. Переход с высокого уровня на низкий уровень на линии SCL повлияет на эти устройства. Как только тактовый сигнал определенного устройства перейдет на низкий уровень, линия SCL останется на низком уровне, в результате чего все сигналы на линии SCL останутся низкими. Устройство начинает низкий период. В это время переход от низкого к высокому тактовому сигналу устройств с короткими периодами низкого уровня не может повлиять на состояние линии SCL, поэтому эти устройства перейдут в состояние ожидания высокого уровня. Когда тактовые сигналы всех устройств переходят на высокий уровень, период низкого уровня заканчивается, и линия SCL возвращается на высокий уровень, то есть все устройства начинают период высокого уровня одновременно. После этого первое устройство, закончившее высокий период, снова переводит линию SCL на низкий уровень. Это генерирует тактовую частоту синхронизации на линии SCL. Можно видеть, что время низкого тактового сигнала определяется устройством с самым длинным периодом низкого тактового сигнала, а время высокого уровня тактового сигнала определяется устройством с самым коротким периодом высокого тактового сигнала.
Издатель: Лидер стека программистов полного стека, укажите источник для перепечатки: https://javaforall.cn/129651.html Исходная ссылка: https://javaforall.cn