И2Ц Бус: Детаљи за имплементацију фирмвера

RADDS - Basics (Јули 2019).

$config[ads_text] not found
Anonim

И2Ц Бус: Детаљи за имплементацију фирмвера


Управљајте протоколом И2Ц.

Подршка информације

  • Увод у И2Ц Бус
  • И2Ц Бус: Детаљи за имплементацију хардвера
  • И2Ц Бус: Када користити И2Ц Буффер

Типична трансакција

Уређаји који комуницирају преко И2Ц морају бити у складу са одређеним низом догађаја. Сваки догађај одговара одређеном начину контроле сата (СЦЛ) и података (СДА); као што је наведено у чланку "Подршке за информације" горе наведене, ова два сигнала су једини начин помоћу којег уређаји на аутобусу могу дијелити информације. Ми ћемо се односити на једну комуникацијску секвенцу као "трансакцију"; ова реч је прикладнија од "преноса", јер свака трансакција обухвата и преносе података и примљене податке, мада у неким случајевима једини примљени подаци представљају потврду (АЦК) или не-потврђивање (НАЦК) бита коју је открио мастер. Следећа дијаграма приказивања показује типичну И2Ц трансакцију.

Имајте на уму следеће:

  • Тачкаста линија која одговара логичком делу сата подсећа на то да је логика висока (за СЦЛ и СДА) "рецесивно" стање - другим речима, сигнал природно пада до логичке висине преко пулл-уп отпорника . "Доминантно" стање је ниско логично, јер ће сигнал бити низак само када уређај заиста погони ниско.
  • Трансакција почиње са "почетним бита". Свака И2Ц трансакција мора започети са почетним бита, што је дефинисано као пад на ивици СДА док је СЦЛ логички висок.
  • Трансакција се завршава са "стоп битом", дефинисаном као растућа ивица на СДА док је СЦЛ логички висок. И2Ц трансакције морају да се заврше са стоп битом; Међутим, како се разматра касније у чланку, може се десити неколико почетних битова пре него што се генерише бит заустављања.
  • Подаци важе док је сат висок и мења стање док је сат низак; дигитални комуникациони системи су обично усмерени на ивице, тако да се у пракси подаци читају на растојању ивице сата и ажурирају се на падајућој ивици сата.
  • Информације се размјењују једномбајт-на-вријеме, почевши од најзначајнијих битова, а сваки бајт прати АЦК или НАЦК.
  • Можете очекивати да се АЦК означава логично високим и да НАЦК буде означен низом логике, али то није случај . АЦК је логичан и НАЦК је логичан. Ово је неопходно зато што је високо рецесивно стање - ако је роб нефункционалан, сигнал природно плута до НАЦК-а. Исто тако, АЦК (означен доминантном логиком ниске) може се пренијети само ако је уређај оперативан и спреман за наставак трансакције.

Сљедећа листа описује низ догађаја у горе наведеној трансакцији:

  1. Мастер генерише почетни бит за иницирање трансакције.
  2. Господар преноси 7-битну адресу која одговара робовима са којим жели да комуницира.
  3. Коначни бит у првом једном-бајт сегменту је индикатор читања / писања. Мајстор поставља овај бит у логичку вредност ако жели да прочита податке од робота, или да се низка логика, ако жели да напише податке славе.
  4. Следећи бајт је први бајт података. Ово долази од мајстора или робота, у зависности од стања читања / писања. Као и обично, имамо 8 бита података, почевши од најзначајнијих битова.
  5. Дата бајту прати АЦК или НАЦК, који генерише мастер, ако је ово трансакција прочитана или подређени ако је ово трансакција за писање. АЦК и НАЦК могу значити различите ствари у зависности од фирмваре-а или хардверског дизајна комуникационих уређаја на ниском нивоу. На пример, мајстор би могао да користи НАЦК да каже "ово је последњи бајт података" или ако славе зна колико података шаље, могао би да користи АЦК да би потврдио да су подаци успјешно примљени.
  6. Трансакција се прекида са стоп битом који генерира мастер.

Колико бајтова "престају слати податке!" На пример, мајстор можда жели да прими непрекидан ток података са славе уређаја (као што је сензор температуре); сваки бајт би био праћен АЦК-ом, и ако би мајстор требао обратити пажњу на нешто друго, може НАЦК-у славе и започети нову трансакцију кад год је спремна.

Почните без Стопа

Протокол И2Ц дозвољава нешто што се назива услов поновљеног почетка. Ово се дешава када главни иницира трансакцију са почетним бита, а затим иницира нову трансакцију преко другог стартног бита без интервентног бит заустављања, како слиједи:

Ова могућност се може користити кад год један појединац мора обављати две или више одвојених трансакција. Међутим, постоји ситуација у којој је поновљен почетни услов посебно погодан:

Рецимо да имате славе уређај који чува информације у банци регистара. Желите да преузмете податке са адресе регистра 160, 0кА0 у хекс. Протокол И2Ц не дозвољава мајстору да шаље податке и прима податке у једној трансакцији. Сходно томе, морате извршити трансакцију за писање како бисте одредили адресу регистра, а затим одвојену трансакцију читања за преузимање података. Овај приступ може довести до проблема, међутим, пошто мајстор ослобађа аутобус на крају прве трансакције, и стога је други мастер могао тражити магистралу и спречити првог мајстора да добије потребне податке. Надаље, други мастер може комуницирати са истим робом и навести другу адресу регистра. . . ако први мајстор потом затражи аутобус и чита податке без поновног навођења адресе регистра, прочитаће погрешне податке! Ако други мајстор покуша да изврши читање трансакције у својој процедури писања и читања, он ће такође завршити са погрешним подацима! Ово је неуспјех система који се чека да се деси - срећом, поновљени стартни услови могу спречити ову збрку тако што започињу другу (прочитану) трансакцију без пуштања у бус :

Када мајстори не могу стићи

Дио онога што чини И2Ц тако прилагодљив је његова подршка вишеструким мајсторима. Али како показује претходни одељак, господари увек не играју добро заједно. И2Ц логика уређаја мора бити у стању да утврди да ли је аутобус слободан; ако је други магистар тражи аутобус, уређај чека док се тренутна трансакција не закључи пре покретања сопствене трансакције. Али шта се дешава када два (или више) мајстора покушавају да истовремено покрену трансакцију? И2Ц пружа ефикасно и изненађујуће једноставно решење овог иначе нервозног проблема. Процес се назива "арбитража" и ослања се на флексибилност конфигурације конфигурације бус-а са И2Ц-ом: ако један мајстор покушава да високо логицира логичку логику и други покушаји логике ниског, логички лов мастер ће "побиједити, "и даље, " губитник "може открити да стварно стање излаза није намјерно стање излаза:

Овај дијаграм преноси основу И2Ц арбитраже; процес се одвија на следећи начин:

  1. Оба мајстора генеришу стартни бит и настављају са својим преносима.
  2. Ако мајстори изаберу исте логичке нивое, ништа се не дешава.
  3. Чим мајстори покушају да наметну различите нивое логике, главни проглашавајући низ сигнал се проглашава победником; губитник открива неусаглашеност логике и одустаје од преноса.

Узмите тренутак да бисте ценили једноставност и ефикасност овог аранжмана:

  • Победник наставља са преносом без прекида - без корумпираних података, без потешкоћа возача, нема потребе за поновним покретањем трансакције.
  • Теоретски, губитник може пратити адресу робоводе током процеса арбитраже и заправо прави одговарајући одговор ако се то деси да буде адресиран славе.
  • Ако конкурентни мајстори оба захтијевају податке од истог славе, процес арбитраже не би непотребно прекинут ни једну трансакцију - неће се открити неусклађеност, а славе ће излазити своје податке у магистралу, тако да га вишеструки мајстори могу примити.

Закључак

Овај чланак покрива значајне И2Ц детаље који утичу на дизајн фирмвера или хардвера на ниском нивоу. Ако ваш микроконтролер укључује наменски И2Ц или СМБус хардвер, неки од детаља имплементације ће се аутоматски управљати. Ово је згодно, али свакако није изговор за незнање, јер ћете и даље требати знати бар мало (вероватно више од мало) о томе како И2Ц заиста функционише. Осим тога, ако се икад нађете на пустом острву без периферије И2Ц, информације које су овде презентоване ће вас добро поставити на начин да дизајнирате само фирмваре (или "бит-бангинг") И2Ц рутину.