I2c или spi что лучше
Перейти к содержимому

I2c или spi что лучше

  • автор:

Русские Блоги

Разница между SPI, I2C и UART тремя протоколами последовательной шины

Концепция шины I2C (Inter-Integrated Circuit):

Связь I2C Нужно всего 2 двунаправленных шины —— Одна линия данных SDA (последовательные данные: линия последовательных данных), одна линия синхронизации SCL (последовательные часы: линия последовательных часов). Линия SDA используется для передачи данных, а линия SCL используется для синхронизации передачи и приема данных. Данные, передаваемые по линии SDA, представляют собой прямую передачу (старший байт байта передается первым), и каждая передача составляет 8 бит, то есть 1 байт. Поддержка мульти-мастеринга в любой момент времени Мастер может быть только один . Каждое устройство, подключенное к шине, имеет один Независимый адресный адрес , Всего 7 бит, хост использует этот адрес для доступа к устройству. Шины SDA и SCL необходимо соединить подтягивающими резисторами.Когда шина свободна, обе линии имеют высокий уровень. Любое устройство, подключенное к шине, будет понижать уровень сигнала шины, когда оно выдает низкий уровень, то есть SDA и SCL каждого устройства находятся в линейной связи. Когда несколько хостов используют шину одновременно, необходим арбитраж, чтобы определить, какое устройство занимает шину, в противном случае данные будут конфликтовать.

UART

Универсальный асинхронный приемник / передатчик, обычно называемый UART, представляет собой асинхронный приемник / передатчик, который является частью компьютерного оборудования. Он будет передавать данные вПоследовательная связьпротивПараллельное общениеЧтобы преобразовать между. Как микросхема, преобразующая параллельные входные сигналы в последовательные выходные сигналы, UART обычно интегрируется в соединение с другими интерфейсами связи.

Последовательный порт во встроенной системе обычно относится к порту UART, но мы часто не знаем разницы между ним и COM-портом, а также отношения между RS232, TTL и т. Д. Фактически, UART, COM относятся к форме физического интерфейса (аппаратного), а TTL, RS-232 относится к стандарту уровня (электрический сигнал).

UART имеет 4 контакта (VCC, GND, RX, TX), используя уровень TTL, низкий уровень — 0 (0 В), высокий уровень — 1 (3,3 В или выше).

Особенности UART: Как правило, контроллеры uart создаются вместе с процессорами во встроенных системах.Как и микросхема Freescale IMX6, существует несколько контроллеров uart.

Введение в интерфейс SPI

В последние несколько дней я наткнулся на флэш-память, использующую интерфейс SPI, и знаю, что флэш-память также может быть последовательной. Кажется, что это действительно была лягушка на дне колодца. Я нашел некоторую информацию об интерфейсе SPI. Позже я нашел информацию на английском языке, перевел ее и добавил Мое личное понимание было собрано в статью, надеюсь, она будет полезна новичкам.

Полное название интерфейса SPI — «Serial Peripheral Interface», что означает последовательный периферийный интерфейс. Впервые он был определен компанией Motorola для процессоров серии MC68HCXX. Интерфейс SPI в основном используется между EEPROM, FLASH, часами реального времени, аналого-цифровым преобразователем, процессором цифрового сигнала и декодером цифрового сигнала.

Интерфейс SPI — это синхронная последовательная передача данных между ЦП и периферийными низкоскоростными устройствами. Под импульсом сдвига ведущего устройства данные передаются в битах, старший бит находится спереди, а положение — сзади. Это полнодуплексная связь, и скорость передачи данных общая. Он быстрее шины I2C, а скорость может достигать нескольких Мбит / с.

Интерфейс SPI работает в режиме ведущий-ведомый. В этом режиме обычно есть ведущее устройство и одно или несколько ведомых устройств. Интерфейс включает следующие четыре сигнала:

(1) Вывод данных MOSI-ведущего устройства, ввод данных ведомого устройства

(2) Ввод данных MISO-ведущего устройства, вывод данных ведомого устройства

(3) Сигнал SCLK-clock, генерируемый ведущим устройством.

(4) / SS — сигнал включения ведомого устройства, управляемый ведущим устройством

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

В системе с несколькими подчиненными устройствами каждое подчиненное устройство нуждается в независимом разрешающем сигнале, который немного сложнее аппаратно, чем система I2C.

Интерфейс SPI на самом деле представляет собой два простых регистра сдвига во внутреннем оборудовании.Передаваемые данные составляют 8 бит.Под сигналом включения ведомого и импульсом сдвига, генерируемым ведущим устройством, он передается бит за битом, причем старший бит находится спереди, а младший бит — сзади. . Как показано на рисунке ниже, данные изменяются по заднему фронту SCLK, и в то же время в регистре сдвига сохраняется один бит данных.

Схема внутреннего оборудования интерфейса SPI:

Наконец, один недостаток интерфейса SPI: нет назначенного управления потоком и нет механизма ответа, подтверждающего, получены ли данные.

Разница между SPI, I2C и UART тремя протоколами последовательной шины:

Первый, разница, конечно же, в названии:

SPI (последовательный периферийный интерфейс: последовательный периферийный интерфейс);

I2C(INTER IC BUS)

UART (универсальный асинхронный приемный передатчик: универсальный асинхронный приемный передатчик)

Во-вторых, разница заключается в линии электрического сигнала:

Шина SPI состоит из трех сигнальных линий Состав: последовательные часы (SCLK), последовательный вывод данных (SDO), последовательный ввод данных (SDI). Шина SPI может соединять несколько устройств SPI друг с другом. Устройство SPI, которое обеспечивает последовательные часы SPI, является ведущим или ведущим SPI, а другие устройства являются ведомыми или ведомыми (ведомыми) SPI. Полнодуплексная связь может быть реализована между ведущими и ведомыми устройствами.При наличии нескольких ведомых устройств может быть добавлена ​​строка выбора ведомого устройства.

Если вы используете универсальный порт ввода-вывода для имитации шины SPI, у вас должен быть выходной порт (SDO), входной порт (SDI), а другой порт зависит от типа реализованного устройства.Если вы хотите реализовать устройство ведущее-ведомое, вам понадобится порт ввода и вывода. , Если реализовано только ведущее устройство, порта вывода достаточно; если реализовано только ведомое устройство, требуется только порт ввода.

Шина I2C — это стандарт двустороннего, двухпроводного (SCL, SDA), последовательного интерфейса и интерфейса с несколькими ведущими устройствами.Он имеет механизм арбитража шины и очень подходит для передачи данных между устройствами на короткие расстояния и нечасто. В его системе протокола адрес устройства-получателя всегда переносится при передаче данных, поэтому может быть реализована сеть устройств.

Если порт ввода-вывода общего назначения используется для имитации шины I2C и достижения двунаправленной передачи, требуется порт ввода-вывода (SDA), а также порт вывода (SCL). (Примечание: данные I2C относительно плохо изучены, описание здесь может быть очень неполным)

Шина UART — это асинхронный последовательный порт Следовательно, он, как правило, намного сложнее, чем структура первых двух синхронных последовательных портов. Он обычно состоит из генератора скорости передачи (генерируемая скорость передачи в 16 раз больше скорости передачи), приемника UART и передатчика UART. На оборудовании есть два провода: один для отправки, а другой для приема.

Очевидно, что если универсальный порт ввода-вывода используется для моделирования шины UART, требуются один входной порт и один выходной порт.

В-третьих, из второго пункта очевидно, что SPI и UART могут обеспечить полный дуплекс, а I2C — нет;

В-четвертых, посмотрите на мнение быдла!

Wudanyu: Количество линий I2C меньше. Я думаю, что он более мощный, чем UART и SPI, но технически более проблематичный, потому что I2C требует поддержки двунаправленного ввода-вывода и Используйте подтягивающий резистор , Я думаю, что способность к помехам слабая, обычно используется для связи между чипами на одной плате и меньше используется для междугородной связи. Реализация SPI проще. UART требует фиксированной скорости передачи данных, что означает, что интервал между двумя битами данных должен быть одинаковым. SPI не имеет значения, потому что это синхронизированный протокол.

Quickmouse: скорость I2C немного ниже, чем у SPI, и протокол немного сложнее, чем SPI, но соединение меньше, чем у стандартного SPI.

I2C и SPI: Различия, которые вы должны знать

Вы разрабатываете проект, и перед вами стоит выбор между I2C и SPI? Но вы не знаете, какой из них выбрать? Если да, то мы поможем вам решить, какой из них лучше для вашего проекта.

Во-первых, I2C и SPI — это «low-end» протоколы. Но они просты в использовании и отлично подходят для связи между микросхемами на вашей печатной плате.

Однако выбор неправильного протокола для вашего проекта может привести к нежелательным результатам. Тем не менее, мы здесь, чтобы помочь вам понять разницу между этими двумя похожими протоколами.

Вы готовы? Давайте начнем!

Что такое протокол SPI?

В 1980-х годах компания Motorola разработала протокол SPI для установления связи между микроконтроллерами того времени и другими периферийными устройствами, такими как EEPROM.

Итак, протокол SPI использует четыре сигнальные линии для связи между частями. Однако важно отметить, что в их число не входят линии заземления и питания. Вот четыре активные сигнальные линии:

SS: Линия Slave Select (управляется ведущим SPI).

MOSI: Master Out Slave In (управляется ведущим SPI).

SCLK: Последовательный тактовый генератор (управляется ведущим SPI)

MISO: Ведущий вход Ведомый выход (управляется ведущим SPI-устройством).

В данной заметке четыре линии позволяют ведущему SPI (управляющему устройству) взаимодействовать с ведомым SPI (периферийным устройством).

Интерфейс протокола SPI

Более того, на шине SPI может быть только одно управляющее устройство. Но количество периферийных устройств, которые вы можете добавить, не ограничено. Кроме того, добавление большего количества периферийных устройств означает увеличение количества линий SS. Таким образом, здесь показано, как можно использовать три отдельные линии SS для управления различными периферийными устройствами.

Интерфейс протокола SPI с несколькими порабощенными людьми

Кроме того, когда ведущий SPI хочет общаться с периферийными устройствами, отправляя или получая данные, он тянет соответствующую линию SS. Следовательно, линия будет ниже. Следовательно, активируется линия SCLK, которая имеет высокий и низкий уровень с заданной частотой.

Кроме того, ведущий SPI использует линию MISO для одновременной отправки данных и выборки. Также следует помнить, что одновременно может осуществляться обмен данными только между одним периферийным устройством и ведущим SPI.

Что такое I2C

В 1982 году компания Philips Semiconductors (ныне NXP Semiconductors) разработала первый протокол I2C для систематизации обмена данными между микросхемами на одной печатной плате.

В отличие от своего аналога SCI, протокол I2C имеет две линии связи — не считая линий заземления и питания. К этим линиям относятся:

SDA: линия последовательных данных

SCL: линия последовательного тактового генератора

Таким образом, к одной шине можно подключить любое количество устройств enslaver и agent. Кроме того, линии SCL и SDA должны быть открытыми. В результате ваши устройства будут иметь только один низкий уровень одновременно. Кроме того, вам понадобится подтягивающий резистор на ваших трубах. Таким образом, вы сможете подтянуть линию к высокому уровню.

Интерфейс протокола I2C

Благодаря тому, что протокол I2C имеет открытый разряд, вы можете использовать несколько мастеров на одной шине. Но если два устройства контроллера начинают общаться одновременно, произойдет арбитраж, который заставит одно из устройств прекратить передачу.

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

Кроме того, устройство I2C контроллера передаст условие START, чтобы инициировать обмен данными. Следовательно, линия SDA будет иметь низкий уровень, а линия SCL останется высокой.

Затем устройство контроллера передаст 7-битный адрес получателя, которому он хочет отправить, и бит чтения (1) или бит записи (0). В этот момент устройство на шине ответит только в том случае, если у него есть соответствующий 7-битный адрес, подав низкий уровень на линию SDA.

Различия между I2C и SPI

Как SPI, так и I2C похожи, поскольку оба они являются протоколами «низкого класса». Кроме того, обоим протоколам не хватает скорости и других возможностей, которыми могут похвастаться их «тяжеловесные» родственники (SATA, Ethernet, USB и другие).

Но когда дело доходит до принципов работы и особенностей. Давайте подробнее рассмотрим различия между этими двумя протоколами.

Во-первых, в протоколе SPI можно установить четыре различных режима, чтобы определить, как работают часы. А чтобы связь работала, устройства поработителя и агента должны использовать одну и ту же модель.

Кроме того, скорость передачи данных по протоколу SPI может превышать 10 Мбит/с, что делает его идеальным для передачи огромных объемов данных. Также протоколы SPI можно встретить на датчиках с высокой частотой обновления, таких как ЖК-дисплеи и акселерометры.

I2C и SPI

С другой стороны, I2C может отправлять данные только в однобайтовом пакете за раз. Кроме того, принимающее периферийное устройство должно подтверждать каждый байт битом ACK. Кроме того, протокол I2C имеет три режима с различной скоростью передачи данных.

В стандартном режиме максимальная скорость передачи данных достигает 100 кбит/с, в быстром режиме — 400 кбит/с, а в высокоскоростном режиме — 3,4 Мбит/с. Следовательно, протокол I2C значительно медленнее протокола SPI. В результате протокол I2C лучше всего работает в датчиках температуры и аналого-цифровых преобразователях.

I2C и SPI

Сравнение I2C и SPI

В таблице ниже приведены существенные различия между I2C и SPI:

Характеристика SPI I2C
Привод контактов Режим Push-pull Режим открытого разряда
Макс. Скорость Нет (но вы можете найти 10 — 100 Мбит/с) 100 кбит/с (стандартный способ)400 кбит/с (быстрый способ)3,4 Мбит/с (высокоскоростной режим)
Мультимастер Нет Да
Сигнальные линии 4 (дополнительные устройства добавляют дополнительные линии) 2
Количество периферийных устройств Количество выводов, доступных для линий SS на ведущем SPI, является единственным ограничением на количество периферийных устройств, которые вы можете иметь. Максимум 112 при 7-битной адресации
Управление потоком Нет Да

Протоколы SPI и I2C — плюсы и минусы

SPI

Плюсы

Протоколы SPI потребляют небольшое количество энергии

Он также поддерживает высокоскоростной полнодуплексный обмен данными

Минусы

Существуют различные версии и адаптированные варианты, что вызывает проблемы совместимости

Для связи с несколькими периферийными устройствами на одной шине нужны дополнительные сигнальные линии

Поддерживается только связь на коротких расстояниях. Вы не можете передавать данные устройствам на отдельных платах.

I2C

Плюсы

Вам не нужны дополнительные линии для управления несколькими устройствами на одной шине

Можно передавать данные на другие печатные платы, но с низкой скоростью передачи данных

Имеет более низкую чувствительность к шуму

Может передавать данные на большие расстояния

Дешевле в использовании, чем SPI

Минусы

Скорость передачи данных медленнее, чем у SPI

Потребляет больше энергии, чем протокол SPI

Отказ одного устройства освободить шину связи может заблокировать протокол I2C.

Факторы, которые следует учитывать при выборе между SPI и I2C

Выбор лучшего протокола для вашего проекта выходит за рамки цены. Итак, вот несколько моментов, которые следует учесть, прежде чем сделать выбор:

Ограниченное количество контактов

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

Питание

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

Скорость

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

Размер печатной платы

Очень важно учитывать размер вашей печатной платы перед выбором протокола. Таким образом, вы повысите свои шансы на получение желаемых результатов.

Выбор между SPI и I2C

Ниже приведены характеристики каждого протокола, которые помогут вам принять оптимальное решение для вашего проекта:

Особенности SPI I2C
Скорость Если ваша конструкция требует высокоскоростной передачи данных, лучшим выбором будет протокол SPI. Вы можете выбрать I2C для проектов низкоскоростных устройств.
Размер печатной платы Если вас не беспокоит размер вашей печатной платы, вы не ошибетесь ни с SPI, ни с I2C. Если ваша печатная плата имеет меньший размер и меньшее количество дорожек, выберите I2C.
Ограниченное количество выводов Выбирайте протокол SPI, если вы не против дополнительных линий для связи. Если вас не устраивает большое количество дорожек, то I2C — идеальный выбор.
Питание Для устройств с низким энергопотреблением используйте протокол SPI. Для устройств с более высоким энергопотреблением используйте протокол I2C.

Понимание UART

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

Когда вы имеете дело с коммуникацией по UART, всегда существует прямая связь между передатчиком UART и приемником UART.

UART vs I2C vs SPI

В отличие от других коммуникационных протоколов, таких как SPI и I2C, UART является чисто физическим. Кроме того, он не использует парадигму ведущий/ведомый для связи. Вместо этого микроконтроллер использует два устройства UART для отправки и получения данных. Кроме того, для связи по UART вам потребуется всего два провода. И эти провода помогут передать данные от вывода Tx передатчика к выводу Rx приемника.

Интерфейс протокола UART

Округление

В реальности протоколы SPI и I2C используются в различных приложениях. Иногда вам могут попадаться устройства, в которых интерфейсы SPI и I2C расположены на одном кристалле. Таким образом, вам не придется выбирать между ними.

Однако если вам нужно выбрать между этими двумя протоколами, SPI лучше подходит для проектов, где требуется более высокая скорость передачи данных. С другой стороны, если ваш микроконтроллер имеет ограниченное количество выводов, протокол I2C будет работать лучше.

Есть вопросы? Не стесняйтесь обращаться к нам. Мы будем более чем рады помочь.

Hommer Zhao

Привет, я Хоммер, основатель WellPCB. На сегодняшний день у нас более 4000 клиентов по всему миру. Если у вас возникнут какие-либо вопросы, вы можете связаться со мной. Заранее спасибо.

О I2C И протокол шины SPI

В настоящее время, в области низкоуровневых приложений цифровой связи, мы можем видеть IIC (Inter-Integrated Circuit) и SPI (Serial Peripheral Interface) везде. Причина в том, что эти два протокола связи очень подходят для ближней низкоскоростной межчиповой связи. Philips (для IIC) и Motorola (для SPI) разработали эти два стандартных протокола связи для разных областей и потребностей рынка.

IIC был разработан в 1982 году, чтобы обеспечить более простой способ соединения процессора и периферийных чипов в телевизоре. Телевизор является одной из самых ранних встроенных систем, и первоначальная встроенная система использует отображаемый в памяти ввод / вывод для соединения микроконтроллера и периферийных устройств. Чтобы добиться отображения памяти, устройство должно быть подключено параллельно к линии данных и адресной линии микроконтроллера.Этот метод требует большого количества линий и дополнительных чипов декодирования адреса при подключении нескольких периферийных устройств, что неудобно и дорого.

Чтобы сохранить контакты микроконтроллера и дополнительные логические микросхемы, сделать печатную плату проще и дешевле, лаборатория Philips в Нидерландах разработала «Интегральную интегральную схему», IIC или IIC, в которой используются только два Корневая линия соединяет протоколы шины всех периферийных чипов. Первоначальный стандарт определял скорость шины в 100 кбит / с. Он претерпел несколько изменений, в основном 400 Кбит / с в 1995 году и 3,4 Мбит / с в 1998 году.

Есть признаки того, что шина SPI была впервые представлена ​​в 1979 году. Motorola интегрировала шину SPI в свою первую микроконтроллерную микросхему, модифицированную из микропроцессора 68000. Шина SPI — это четырехпроводная внешняя шина (относительно внутренней шины) микроконтроллера. В отличие от IIC, SPI не имеет стандарта открытого текста, но де-факто стандарта, он лишь дает общее абстрактное описание реализации коммуникационных операций. Производители микросхем и разработчики драйверов сообщают подробности реализации через таблицы данных и примечания к приложениям.

SPI

Опытным инженерам по цифровой электронике вполне интуитивно понятно соединить два цифровых устройства с SPI. SPI — это протокол четырех сигнальных линий (см. Рисунок):

§ SCLK: Serial Clock (output from master);

§ MOSI; SIMO: Master Output, Slave Input(output from master);

§ MISO; SOMI: Master Input, Slave Output(output from slave);

§ SS: Slave Select (active low, outputfrom master).

SPI — это протокол связи [один-ведущий], который означает, что только одно центральное устройство в шине может инициировать связь. Когда мастер SPI хочет прочитать / записать [ведомое устройство], он сначала вытягивает линию SS, соответствующую [ведомому устройству] (активен низкий уровень SS), а затем начинает отправлять рабочие импульсы на линию синхронизации в соответствующее время импульса. На [Master] сигнал отправляется в MOSI для достижения «записи», и в то же время MISO может быть выбран для достижения «чтения», как показано ниже:

SPI имеет четыре режима работы: Режим 0, Режим 1, Режим 2 и Режим 3, разница между ними заключается в определении того, какой фронт тактового импульса переключает выходной сигнал, а какой фронт дискретизирует входной сигнал и тактовый сигнал. Стабильное значение уровня импульса (то есть, высокий он или низкий, когда тактовый сигнал недействителен). Каждый режим характеризуется парой параметров, которые называются полярностью часов (CPOL) и фазой часов (CPHA).

[Ведущее-ведомое устройство] должно использовать те же рабочие параметры — SCLK, CPOL и CPHA для правильной работы. Если имеется несколько [подчиненных устройств] и они используют разные рабочие параметры, тогда [ведущее устройство] должно перенастроить эти параметры между чтением и записью различных [подчиненных устройств]. Основное содержание вышеуказанного протокола шины SPI. SPI не определяет максимальную скорость передачи, адресная схема отсутствует, SPI также не определяет механизм ответа на обмен данными и не определяет правила управления потоком. Фактически, SPI [ведущее устройство] даже не знает, существует ли указанное [ведомое устройство]. Эти средства управления связью должны быть реализованы сами по себе вне протокола SPI. Например, чтобы соединить микросхему декодера [тип управления командой-ответом] с SPI, протокол связи более высокого уровня должен быть реализован на основе SPI. SPI не заботится об электрических характеристиках физического интерфейса, таких как стандартное напряжение сигнала. Изначально большинство приложений SPI использовали прерывистые тактовые импульсы и передавали данные в байтах, но сейчас есть много вариантов, которые реализуют непрерывные импульсы времени и кадры данных любой длины.

IIC

В отличие от одного ведущего устройства SPI, IIC представляет собой мультимастерную шину, которая не имеет сигнальной линии выбора физического чипа и логической схемы арбитража, а использует только две сигнальные линии — «последовательные данные» (SDA) и «последовательные часы». (SCL). Соглашение IIC предусматривает:

§ Во-первых, каждое устройство IIC имеет уникальный семизначный адрес устройства;

Во-вторых, размер кадра данных составляет 8 байт;

В-третьих, определенные биты данных в данных (кадре) используются для управления запуском, остановкой, направлением (чтение и запись) и механизмами отклика связи.

Скорость передачи данных IIC имеет стандартный режим (100 кбит / с), быстрый режим (400 кбит / с) и высокоскоростной режим (3,4 Мбит / с), а в некоторых других вариантах реализован режим низкой скорости (10 кбит / с) и быстрый + режим (1 Мбит / с).

Физически шина IIC состоит из двух сигнальных проводов и провода заземления. Обе сигнальные линии передаются в двух направлениях, см. Рисунок ниже. Стандарт протокола IIC определяет, что устройство, которое инициирует связь, называется главным устройством. После того, как главное устройство инициирует связь, все другие устройства являются подчиненными устройствами.

Процесс связи IIC примерно таков. Во-первых, основное устройство посылает сигнал СТАРТ.Этот сигнал как крик на все другие устройства: пожалуйста, обратите внимание! Затем другие устройства начинают прослушивать шину для подготовки к приему данных. Затем ведущее устройство отправляет 7-битный адрес устройства плюс кадр данных для операций чтения и записи. После того, как устройство получит данные, сравните, является ли сам адрес целевым устройством. Если сравнение не совпадает, устройство переходит в состояние ожидания и ожидает поступления сигнала STOP, а если сравнение совпадает, устройство отправит ответный сигнал-ACKNOWLEDGE в ответ.

Когда ведущее устройство получает ответ, оно начинает передавать или принимать данные. Размер кадра данных составляет 8 бит, за которым следует однобитовый ответный сигнал. Ведущее устройство отправляет данные, а подчиненное устройство отвечает, напротив, ведущее устройство получает данные, а ведущее устройство отвечает. Когда передача данных завершена, ведущее устройство отправляет сигнал STOP, чтобы объявить об освобождении шины другим устройствам, и другие устройства возвращаются в исходное состояние.

Исходя из физической структуры шины IIC, сигналы START и STOP на шине должны быть уникальными. Кроме того, стандарт шины IIC предусматривает, что преобразование данных линии SDA должно происходить в низкий период линии SCL, а в течение высокого периода линии SCL данные в линии SDA стабильны.

В физической реализации, линия SCL и линия SDA оба с открытым стоком, и источник напряжения добавляется через подтягивающий резистор. Когда линия заземлена, линия имеет логический 0, а когда линия освобождается и линия свободна, линия является логической 1. Исходя из этих характеристик, работа устройства IIC на шине только «заземляет линию» — логика выхода 0.

Конструкция шины IIC использует только два провода, но она довольно элегантна, чтобы обеспечить бесперебойную связь между любым количеством устройств, что идеально. Давайте представим, что произойдет, если два устройства отправят информацию на линию SCL и линию SDA одновременно.

Исходя из конструкции шины IIC, на линии отсутствует конфликт уровней. Если одно устройство отправляет логическую 0, а другое отправляет логическую 1, то линия видит только логическую 0. Другими словами, если есть конфликт уровня, всегда «победитель» посылает логический ноль.

Физическая структура шины также позволяет главному устройству считывать данные во время записи данных на шину. Таким образом, любое устройство может обнаружить возникновение конфликта. Когда два главных устройства конкурируют за шину, «победитель» не знает, что происходит соревнование, только «проигравший» находит конфликт — когда он пишет логику 1, но читает 0 — и выходит из соревнования.

10-битный адрес устройства

Любое устройство IIC имеет 7-разрядный адрес. Теоретически в действительности может быть только 127 различных устройств IIC. Фактически, существует гораздо больше типов устройств IIC, чем этот предел, и вероятность того, что устройства IIC с одним и тем же адресом на шине достаточно высока. Чтобы преодолеть это ограничение, многие устройства используют двойной адрес — 7-битный адрес плюс контакты внешнего адреса (контакты внешней конфигурации). Стандарт IIC также предусматривает это ограничение и предлагает 10-битную адресную схему.

Схема 10-битного адреса имеет два влияния на протокол IIC:

§ Во-первых, адресный кадр имеет длину два байта, оригинал — один байт;

Во-вторых, первые пять старших разрядов первого байта используются для 10-битной идентификации адреса, и в соответствии с соглашением «11110».

В дополнение к 10-битной идентификации адресов, стандарт также резервирует некоторые коды адресов для других целей, как показано в следующей таблице:

Часы растяжения

В связи IIC ведущее устройство определяет тактовую частоту. Потому что сигнал тактового импульса явно выдается ведущим устройством. Однако, когда подчиненное устройство не может справиться со скоростью главного устройства, ведомому устройству необходим механизм, чтобы запросить, чтобы главное устройство было медленнее. Этот механизм называется растяжением часов, и, исходя из особенностей структуры I²C, этот механизм реализован. Когда подчиненному устройству необходимо уменьшить скорость передачи, оно может нажать на линию часов, чтобы заставить ведущее устройство перейти в состояние ожидания, пока подчиненное устройство не освободит линию часов, прежде чем связь продолжится.

Высокоскоростной режим

В принципе, использование подтягивающего резистора для установки логики 1 ограничит максимальную скорость передачи по шине. И скорость является одним из факторов, ограничивающих применение автобуса. Это также объясняет, почему был введен высокоскоростной режим (3,4 Мбит / с). Перед началом передачи в высокоскоростном режиме ведущее устройство должно сначала подать определенный сигнал «Высокоскоростной мастер» в низкоскоростном режиме (например, в быстром режиме). Чтобы сократить период сигнала и увеличить скорость шины, высокоскоростной режим должен использовать дополнительный буфер ввода-вывода. Кроме того, арбитраж шины может быть замаскирован в скоростном режиме. Для получения дополнительной информации, пожалуйста, примите участие в стандартной документации шины.

IIC vs SPI: Кто из них победитель?

Давайте сравним некоторые ключевые моменты IIC и SPI:

Во-первых, топология шины / маршрутизация сигналов / потребление аппаратных ресурсов

IIC нужны только две сигнальные линии, а стандартный SPI имеет как минимум четыре сигнала. Если имеется несколько подчиненных устройств, сигнал нуждается в большем количестве. Хотя некоторые варианты SPI используют только три линии — SCLK, SS и двунаправленный MISO / MOSI, линия SS по-прежнему должна быть одной парой с ведомым устройством. Кроме того, если SPI должен реализовывать структуру устройства с несколькими главными устройствами, система шин требует дополнительной логики и линий. Единственная проблема с использованием IIC для построения системной шины — ограниченное 7-битное адресное пространство, но эта проблема была решена новым стандартом — использованием 10-битных адресов. С первой точки зрения IIC является очевидным крупным победителем.

Во-вторых, пропускная способность / скорость передачи данных

Если в приложении должна использоваться высокоскоростная передача данных, SPI является неизбежным выбором. Поскольку SPI является полнодуплексным, IIC — нет. SPI не определяет ограничение скорости, общая реализация обычно может достигать или превышать 10 Мбит / с. Самая высокая скорость IIC — быстрый + режим (1 Мбит / с) и высокоскоростной режим (3,4 Мбит / с). Последний режим также требует дополнительных буферов ввода / вывода, что не всегда легко реализовать.

В-третьих, элегантность

IIC часто называют более элегантным, чем SPI. Чтобы быть справедливым, мы склонны думать, что оба одинаково элегантны и надежны. Элегантность IIC заключается в его характеристиках — он реализует арбитраж с несколькими мастерами и маршрутизацию устройств с очень легкой архитектурой. Но для инженеров, которые его используют, понять структуру шины сложнее, а производительность шины невысока.

Преимущество SPI состоит в том, что его структура довольно интуитивна и проста, легко реализуема и обладает хорошей масштабируемостью. Простоты SPI недостаточно, чтобы назвать ее элегантной, поскольку для создания полезной коммуникационной платформы с SPI вам также необходимо создать специальное программное обеспечение протокола связи поверх SPI. То есть, чтобы получить специфические для SPI функции, которых у IIC нет — высокоскоростное исполнение, инженерам нужно платить больше. Кроме того, эта пользовательская работа полностью бесплатна, что также объясняет, почему не существует официального стандарта для SPI. И IIC, и SPI обеспечивают хорошую поддержку низкоскоростной связи с устройствами, однако SPI подходит для приложений с потоком данных, тогда как IIC больше подходит для приложений с несколькими главными устройствами «байтовых устройств».

резюме

В кластере протоколов цифровой связи IIC и SPI часто называют «маленькими» протоколами по сравнению с Ethernet, USB, SATA, PCI-Express и другими шинами, скорость передачи которых составляет сотни гигабайт в секунду. Однако нельзя забывать, для чего нужны разные автобусы. «Большой» протокол используется для связи между всей системой за пределами системы, а «маленький» протокол используется для связи между микросхемами в системе. Нет никаких указаний на то, что «большой» протокол необходим для замены «маленького» протокола. Существование и популярность IIC и SPI служат примером философии «достаточно». В ответ на статью IIC и SPI настолько популярны, что это необходимый инструмент для любого встраиваемого инженера.

Русские Блоги

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

I2C — полудуплекс, SPI — дуплекс, Uart — дуплекс.

Синхронизация относится к способу связи после того, как отправитель отправляет данные и ожидает, пока получатель отправит ответ обратно, перед отправкой следующего пакета данных.
Асинхронный означает, что после того, как отправитель отправляет данные, он не ждет, пока получатель отправит ответ, а затем отправит следующий пакет данных.

Синхронизация — это режим блокировки, а асинхронный — это неблокирующий режим.

Ниже приводится краткое изложение сходств и различий между двумя типами шин:

1 шина iic не полнодуплексная (полудуплексная), 2 линии SCL SDA. Spi Bus для достижения полного дуплекса, 4 линии SCK CS MOSI MISO

2 Шина iic является мультимастерной шиной, а ведомое устройство заблокировано информацией об адресе на SDA. Spi-шина имеет только одно ведущее устройство, и ведущее устройство определяет подчиненное устройство посредством выбора CS-чипа.

3 Скорость передачи по шине iic составляет 100–4 Мбит / с. Скорость передачи по шине Spi Bus выше, она может достигать 30 МГц.

4 SDA SCL — высокий уровень, когда шина iic находится в режиме ожидания. Состояние ожидания шины SPI MOSI MISO также SCK определяется CPOL

5 Когда значение scl шины iic высокое, передача флага падающего фронта sda начинается и передача флага восходящего фронта заканчивается. spi-шина cs тянет начало передачи с низким флагом, cs тянет конец передачи с высоким флагом

6 iic bus — высокий уровень дискретизации SCL. Поскольку spi-шина является полнодуплексной, это граничная выборка, которая зависит от CPHA. Обычно ведущее устройство отправляется по переднему фронту SCK и собирается по заднему фронту.

7 Передача данных по шине iic и шине spi сначала MSB, а LSB последней (последовательный порт LSB первым)

8 Часы iic bus и spi bus генерируются ведущим устройством, а часы выдаются только во время передачи данных

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

Подробное объяснение арбитража I2C:

Вуданью: Есть меньше линий I2C, я думаю, что они более мощные, чем UART и SPI, но это также более технически хлопотно, потому что I2C нуждается в поддержке двунаправленного ввода-вывода и использовании подтягивающих резисторов, я думаю, что антиинтерференционная способность слабая, обычно используется Связь между чипами на одной плате редко используется для дальней связи. Реализация SPI более проста: для UART требуется фиксированная скорость передачи, что означает, что интервал между двумя битами данных должен быть одинаковым, но SPI не имеет значения, поскольку это протокол с тактовой частотой.

USART: универсальный синхронный асинхронный приемник и передатчик
UART: универсальный асинхронный приемник и передатчик

В последнее время проект должен был учитывать влияние скорости передачи по последовательному порту и намеренно рассмотрел предыдущий выбор скорости передачи и скорости передачи по последовательному порту.
Скорость передачи 115200 = 115200 (бит / с) Если контрольной цифры нет, ее нужно разделить на 10, чтобы получить число байтов в секунду: Скорость передачи 115200 = 115200 (бит / с) = 11520 (байт / с) Затем делится на 1024, это КБ в секунду: Скорость передачи 115200 = 115200 (бит / с) = 11,25 (КБ / с) ============================ Если есть одинБит четности, Это должно быть разделено на 11, чтобы получить байтов в секунду. В конце концов: Скорость передачи 115200 = 115200 (бит / с) = 10,27 (КБ / с)Бит четности, Это должно быть разделено на 11, чтобы получить байтов в секунду. В конце концов: Скорость передачи 115200 = 115200 (бит / с) = 10,27 (КБ / с)

SPI-устройство: GPS, немного LCD

Оборудование I2C: TP, камера спереди и сзади в качестве ведомого i2c, G-сенсор, несколько модулей зарядки зарядки

Концепция и принципы I2C не упоминаются в Интернете, здесь я поделюсь опытом отладки двух плат разработки с помощью связи I2C.

I2C требует ведущего устройства, которое отвечает за инициирование запросов и управление часами, другие являются подчиненными устройствами, которые идентифицируют и отвечают на запросы главного устройства по адресам идентификатора устройства. Ведущее и ведомое устройства по очереди управляют SDA. Вначале я этого не понимал, я непосредственно добавил код данных I2C, а затем измерил его на выводах SDA и SCL с помощью осциллографа, но я смог найти только некоторые беспорядочные сигналы без ожидаемого эффекта. Позже, ведомое устройство было подключено, код был написан с обеих сторон, и был ответ друг на друга, и затем форма волны была замечена на осциллографе.

Здесь я нашел пример, где ведущее устройство записывает данные на ведомое устройство. Код выглядит следующим образом:

write_i2c(0x3c, buf , len);

Код на принимающей стороне относительно прост, поэтому он не будет опубликован.

Подключите X и Y осциллографа к SDA и SCL соответственно, получите сигнал и проанализируйте его, как показано на рисунке:

Из рисунка видно, что сроки следующие:

  1. Инициируется хостом, когда уровень SCL высокий, SDA меняется с высокого на низкий уровень, формируя сигнал запуска;
  2. Далее идет 7-битный адрес и флаг чтения-записи. Здесь 7-битный адрес — 0111100, то есть 0x3c, который является идентификатором адреса, установленным в нашем коде, последний бит равен 0 для операции записи;
  3. Затем на следующих часах ведущий высвобождает SDA в высоком состоянии, а затем подчиненный отвечает, вытягивая SDA в низкое состояние;
  4. Затем имеются два 8-битных данных 00101110 и ответ, то есть 0x2E, который является кодом ASCII числа «.», Который соответствует ожидаемому результату;
  5. Есть другие данные и последний стоповый бит, который обрезан на рисунке.

Из рисунка видно, что вертикальная сетка составляет 200 мВ, а уровень SDA и SCL составляет около 350 мВ, поскольку сигнал x10 установлен на сигнальной ручке, фактический уровень должен составлять около 3,5 В (в теории он должен составлять 3,3 В). Одна горизонтальная сетка составляет 25 мкс, около 10 сеток используются в 10 тактовых циклах, то есть 4х25 мкс = 100 мкс, средний тактовый цикл составляет 10 мкс, а частоту передачи можно рассчитать как 1/10 мкс = 100 000 / с, что составляет 100 тыс. Бит / с.

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

В приведенном ниже примере мастер сначала записывает команду адреса на ведомое устройство, затем перезапускает и входит в цикл чтения.

Анализ формы волны может определить, работает ли связь I2C правильно и соответствует ли она ожиданиям, что полезно для нашего программирования, отладки и диагностики.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *