I2C протокол за шина Урок, Интерфейс с приложения

Опитайте Нашия Инструмент За Премахване На Проблемите





В днешно време протоколите играят съществена роля в дизайн на вградената система . Без да отивате на протоколите, ако искате да разширите периферните функции на микроконтролера, сложността и консумацията на енергия ще се увеличат. Налични са различни видове протоколи за шина като USART, SPI, CAN, I2C протокол за шина и др., които се използват за прехвърляне на данните между две системи.

I2C протокол

Какво е I2C автобус?




Предаването и получаването на информацията между две или повече от две устройства изисква комуникационен път, наречен като шинна система. I2C шината е двупосочна двупроводна последователна шина, която се използва за пренос на данни между интегрални схеми. I2C означава „Интер интегрална схема“. За първи път е представен от полупроводниците на Philips през 1982 г. I2C шината се състои от три скорости на трансфер на данни, като стандартен, бърз режим и високоскоростен режим. I2C шината поддържа 7-битово и 10-битово устройство за адресно пространство и неговата работа се различава при ниски напрежения.

I2c Bus Protocol

I2c Bus Protocol



Сигнални линии I2C

Сигнални линии I2C

Сигнални линии I2C

I2C е протокол за серийна шина, състоящ се от две сигнални линии като SCL и SDL линии, които се използват за комуникация с устройствата. SCL означава „серийна тактова линия“ и този сигнал винаги се задвижва от „главното устройство“. SDL означава „серийна линия за данни“ и този сигнал се управлява или от главната, или от периферните устройства на I2C. И двете SCL и SDL линии са в състояние на отворено източване, когато няма трансфер между I2C периферни устройства.

Изходи с отворен източник


Отвореният канал е концепция за транзистор FET при което изтичащият извод на транзистора е в отворено състояние. SDL и SCL щифтовете на главното устройство са проектирани с транзисторите в отворено състояние, така че прехвърлянето на данни е възможно само когато тези транзистори се провеждат. Следователно тези линии или изводни клеми са свързани чрез издърпващи резистори към VCC за режим на проводимост.

I2C интерфейси

Много подчинените устройства са свързани към микроконтролера с помощта на I2C шина през I2C превключвател на ниво IC за прехвърляне на информацията между тях. Протоколът I2C, използван за свързване на максимум 128 устройства, които всички са свързани, за да комуникират с SCL и SDL линиите на главното устройство, както и на подчинените устройства. Той поддържа Multimaster комуникация, което означава, че двама главни се използват за комуникация на външните устройства.

I2C Скорост на трансфер на данни

Протоколът I2C работи в три режима като: бърз режим, високоскоростен режим и стандартен режим, при които скоростта на данни в стандартен режим варира от 0Hz до 100Hz, а данните в бързия режим могат да се прехвърлят със скорост от 0Hz до 400 KHz и режим на висока скорост с 10 KHz до 100KHz. 9-битовите данни се изпращат за всеки трансфер, при което 8-битовите се изпращат от предавателя MSB към LSB, а 9-ият бит е бит за потвърждение, изпратен от приемника.

I2C Скорост на трансфер на данни

I2C Скорост на трансфер на данни

I2C комуникация

Протоколът I2C шина се използва най-често в главна и подчинена комуникация, при което главният се нарича „микроконтролер“, а подчиненият се нарича други устройства като ADC, EEPROM, DAC и подобни устройства във вградената система. Броят на подчинените устройства е свързан с главното устройство с помощта на I2C шината, при което всеки подчинен се състои от уникален адрес, който да го комуникира. Следните стъпки се използват за предаване на главното устройство на подчиненото устройство:

Етап 1: Първо, главното устройство издава условие за стартиране, за да информира всички подчинени устройства, така че те да слушат на линията за серийни данни.

Стъпка 2: Главното устройство изпраща адреса на целевото подчинено устройство, което се сравнява с адресите на всички подчинени устройства като свързани към линиите SCL и SDL. Ако някой адрес съвпада, това устройство е избрано, а останалите всички устройства са изключени от линиите SCL и SDL.

Стъпка 3: Подчиненото устройство със съответстващ адрес, получено от главното устройство, отговаря с потвърждение на главното устройство, след което се установява комуникация между главното и подчиненото устройство на шината за данни.

Стъпка 4: И главният, и подчиненият получават и предават данните в зависимост от това дали комуникацията се чете или записва.

Стъпка 5: След това главното устройство може да предаде 8-битови данни на приемника, който отговаря с 1-битово потвърждение.

Урок за I2C

Предаването и получаването на информацията стъпка по стъпка последователно по отношение на тактовите импулси се нарича I2C протокол. Това е междусистемен протокол и протокол за къси разстояния, което означава, че се използва в платката за комуникация на главното и подчиненото устройство.

Основи на I2C протокола

По принцип системата I2C bus се състои от два проводника, които се използват лесно за разширяване на входните и изходните периферни функции като ADC, EEROM и RTC, и други основни компоненти да се направи система, чиято сложност е много по-малка.

Пример: Тъй като микроконтролерът 8051 няма вграден ADC - така че, ако искаме да свържем някакви аналогови сензори с микроконтролера 8051 - трябва да използваме ADC устройства като ADC0804-1 канал ADC, ADC0808- 8 канала ADC и др. можем да свържем аналоговите сензори с микроконтролера.

Без да използваме протокола за разширяване на I / O функциите на който и да е микроконтролер или процесор, можем да преминем към 8255 ICit 8-пиново устройство. The Микроконтролерът 8051 е 40-пинов микроконтролер като използваме 8255 IC, можем да разширим 3-I / O портовете с 8 пина във всеки порт. Чрез използването на всички устройства като RTC, ADC, EEPROM, таймери и др. - за разширяване на периферната схема - сложността, цената, консумацията на енергия и размерът на продукта също се увеличават.

За преодоляване на този проблем се появява концепцията за протокола за намаляване на хардуерната сложност и консумацията на енергия. Можем да разширим повече на брой функции, като I / 0 периферни устройства, ADC, T / C и устройства с памет до 128 устройства, като използваме този I2C протокол.
Терминология, използвана в протоколите I2C

Предавател: Устройството, което изпраща данни към шината, се нарича предавател.

Приемник: Устройството, което приема данни от шината, се нарича приемник.

Капитан: Устройството, което инициира трансфери, за да генерира тактови сигнали и прекратява трансфер, се нарича главен.

Роб: Устройството, адресирано от мастер, се нарича роб.

Multimaster: Повече от един мастер може да се опита да контролира шината едновременно, без да повреди съобщението, наречено Multimaster.

Арбитраж: Процедура, за да се гарантира, че ако повече от един хост едновременно се опитва да контролира шината - само на един е позволено да прави това, така че печелившото съобщение не е повредено.

Синхронизация: Процедурата за синхронизиране на единичните часовници на две или повече устройства се нарича синхронизация.

Последователност на основните команди на I2C

  1. Стартово битово състояние
  2. Спрете битовото състояние
  3. Условие за потвърждение
  4. Операция за запис на главен към подчинен
  5. Прочетете Operation Slave to Master

Старт и стоп Състояние на бита

Когато главният (микроконтролер) иска да разговаря с подчинено устройство (например ADC), той започва комуникация, като издава условие за стартиране на I2C шината и след това издава условие за спиране. Логическите нива на I2C за стартиране и спиране са показани на фигурата.

Условието за стартиране на I2C се определя като висок към нисък преход на линията SDA, докато линията SCL е висока. Условие за спиране на I2C възниква, когато линията SDA превключва от ниска към висока, докато линията SCL е висока.

Главният I2C винаги генерира S и P условия. След като главният I2C инициира състояние START, I2c шината се счита за заета.

Старт и стоп Състояние на бита

Старт и стоп Състояние на бита

Програмиране:

УСЛОВИЕ НА СТАРТ:

sbit SDA = P1 ^ 7 // инициализиране на SDA и SCL щифтовете на микроконтролера //
sbit SCL = P1 ^ 6
забавяне на празнотата (неподписан int)
void main ()
{
SDA = 1 // обработка на данните //
SCL = 1 // часовникът е висок //
забавяне ()
SDA = 0 // изпрати данните //
забавяне ()
SCL = 0 // тактовият сигнал е нисък //
}
Забавяне на празнотата (int p)
{
неподписан, b
За (a = 0a<255a++) //delay function//
За (b = 0b}

СТОП Състояние:

void main ()
{
SDA = 0 // Спиране на обработката на данните //
SCL = 1 // часовникът е висок //
забавяне ()
SDA = 1 // Спряно //
забавяне ()
SCL = 0 // тактовият сигнал е нисък //
}
Забавяне на празнотата (int p)
{
неподписан, b
За (a = 0a<255a++) //delay function//
За (b = 0b}

Условие за потвърждение (ACK) и липса на потвърждение (NCK)

Всеки байт, предаден през I2C шината, е последван от условие за потвърждение от приемника, което означава, че след като главният издърпа SCL ниско, за да завърши предаването на 8-бита, SDA ще бъде изтеглен ниско от приемника към главния. Ако след предаването на приемника не се изтегли, SDA линията LOW се счита за условие NCK.

Потвърждение (ACK)

Потвърждение (ACK)

Програмиране

Признание
void main ()
{
SDA = 0 // SDA линията преминава към ниско //
SCL = 1 // часовникът е висок към нисък //
забавяне (100)
SCL = 0
}
Без потвърждение:
void main ()
{
SDA = 1 // SDA линията преминава към висока //
SCL = 1 // часовникът е висок към нисък //
забавяне (100)
SCL = 0
}

Master to Slave пише операция

Протоколът I2C прехвърля данните под формата на пакети или байтове. Всеки байт е последван от бит за потвърждение.

Формат за трансфер на данни

Формат за трансфер на данни

Формат за трансфер на данни

Начало: На първо място, последователността на трансфера на данни, инициирана от главния генериращ началното условие.

7-битов адрес: След това главният изпраща подчинения адрес в два 8-битови формата вместо един 16-битов адрес.

R / W: Ако битът за четене и запис е висок, тогава се извършва операцията за запис.

АЛАС: Ако операцията за запис се извършва в подчиненото устройство, приемникът изпраща 1-битовия ACK към микроконтролера.

Спри се: След завършване на операцията за запис в подчиненото устройство, микроконтролерът изпраща условието за спиране на подчиненото устройство.

Програмиране

Пишете операция

voidwrite (неподписан знак d)
{
Неподписан знак k, j = 0x80
За (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
забавяне (4)
SCL = 0
}
SDA = 1
SCL = 1
забавяне (2)
c = SDA
забавяне (2)
SCL = 0
}

Операция за четене от Master to Slave

Данните се четат обратно от подчиненото устройство под формата на бит или байтове - първо прочетете най-значимия бит и последно прочетете най-малко значимия бит.

Форматът за четене на данни

Формат за четене на данни

Формат за четене на данни

Начало: Първоначално последователността на трансфера на данни се инициира от главния генериращ началното условие.

7-битов адрес: След това главният изпраща подчинения адрес в два 8-битови формата вместо един 16-битов адрес.

R / W: Ако битът за четене и запис е нисък, тогава се извършва операцията за четене.

АЛАС: Ако операцията за запис се извършва в подчиненото устройство, приемникът изпраща 1-битовия ACK към микроконтролера.

Спри се: След завършване на операцията за запис в подчиненото устройство, микроконтролерът изпраща условието за спиране на подчиненото устройство.

Програмиране

Прочетено празно ()
{
Неподписан знак j, z = 0x00, q = 0x80
SDA = 1
за (j = 0j<8j++)
{
SCL = 1
забавяне (100)
flag=SDA
ако (флаг == 1)
р)
q = q >> 1
забавяне (100)
SCL = 0

Практически пример за свързване на ADC с микроконтролера 8051

ADC е устройство, което се използва за преобразуване на аналоговите данни във формата на цифрови и цифрови в аналогови. Микроконтролерът 8051 няма вграден ADC, така че трябва да добавяме външно чрез I2C протокол. PCF8591 е базиран на I2C аналогов на цифров и цифрово-аналогов преобразувател. Това устройство може да поддържа максимум 4-аналогови входни канали заедно с 2,5 до 6v напрежения.

Аналогови изходи

Аналоговите изходи са под формата на напрежения. Например, 5v аналогов сензор дава изходна логика от 0,01v до 5v.
Максималната цифрова стойност на 5v е = 256.
Стойността на 2.5v е = 123 според максималната стойност на напрежението.

Формулата на аналоговия изход е:

Формулата на цифровите изходи:

Връзка ADC с микроконтролера 8051

Връзка ADC с микроконтролера 8051

Горната фигура показва прехвърлянето на данни чрез I2C протокол от ADC устройство към микроконтролера 8051. ADC щифтовете на SCL и SDA са свързани към щифтовете 1.7 и 1.6 на микроконтролера за установяване на комуникация между тях. Когато сензорът дава аналогови стойности на ADC, той се преобразува в цифров и прехвърля данни към микроконтролера чрез протокола I2C.

Става въпрос за урок за протокол за I2C шина с подходящи програми. Надяваме се, че даденото съдържание ви дава практическа концепция за свързване на няколко устройства с микроконтролери, използващи комуникацията I2C. Ако имате съмнения в процедурата за взаимодействие на този протокол, можете да се свържете с нас, като коментирате по-долу.