Тема 19 : Входно-изходни системи и магистрали

Входно-изходни системи и магистрали


страницата се нуждае от дописване/преглеждане


ВАЖНО! Стана голяма боза по отношение на това, кой материал от коя тема е, тъй като лекторът ги чете непоследователно. Надявам се това разпределение да е точно.
Липсващите секции са в тема 18-та, тъй като бяха прочетени преди прекъсванията (тема 17-та)!

PCI магистрала

interruptions_singals.JPG

множество линии (не съм броил колко са), и още повече, ако става дума за 64-битова архитектура. Това е така, тъй като, освен 32те или 64те линии за адреси и данни, тя има и много управляващи линии.

Описание на част от най-важните линии в 32-битова реализация (скобите обозначават броя линии от страната на устройството):

  • CLK(1) (clock) - по нея се задава основният синхронизиращ сигнал;
  • AD(32) (address/data) - по тези линии се движат данните и адресите. Линиите са мултиплексирани - ползват се и за адреси, и за данни;
  • PAR(1) (parity) - проверка по четност на AD - xоr на всички битове от AD + PAR дава винаги 0 (или 1 - зависи от реализацията);
  • C/BE(4) (command / byte enable) - линия за команди. Мултиплексирана - по време на предаването на адреси по линиите AD, тук се предават команди; по време на предаване на данни по AD, тук се подава кои байтове, от подаваните общо 4 по AD, трябва да бъдат възприети: например, C/BE0 - младши байт, C/BE3 - старши байт. Описание на командите, образувани от 4те линии C/BE, по време на етапа на подаване на команда:
    1. 0000 Interrupt Acknowledge
    2. 0001 Special Cycle
    3. 0010 I/O Read
    4. 0011 I/O Write
    5. 0100 Reserved
    6. 0101 Reserved
    7. 0110 Memory Read
    8. 0111 Memory Write
    9. 1000 Reserved
    10. 1001 Reserved
    11. 1010 Configuration Read
    12. 1011 Configuration Write
    13. 1100 Memory Read Multiple
    14. 1101 Dual Address Cycle
    15. 1110 Memory Read Line
    16. 1111 Memory Write and Invalidate
  • FRAME(1) - 1 линия. Чрез този канал се определя кога точно започва и кога точно завършва дадена транзакция - в момента на започването нивото на токовия сигнал по FRAME става "ниско", в края на транзакцията FRAME става "високо". По-специално, когато сигналът премине от "високо" към "ниско", започва подаването на адреса по AD - началото на транзакцията; когато сигналът премине от "ниско" към "високо", транзакцията приключва.
  • IRDY(1) (initiator ready) - задаващо устройство е готово да започне транзакция с подчиненото устройство (изпраща се само от задаващото устройство)
  • IDSEL(1) (initialization device select) - всяко устройство, включено към PCI шината, има собствена IDSEL линия към PCI моста.
    • Накратко, тази линия се използва при първоначална настройка на включено в магистралата устройство, както и при read/write транзакзия, за да потвърди, че устройството е точно това, което се изисква, и че е включено в магистралата и готово за работа.
    • Надълго (и ненужно за курса) - тя се използва за "избор на чипа" по време на PCI транзакция, в контекста на PCI конфигурационно пространство. Всяко PCI устройство има собствено такова пространство, където се пази информации за типа устройство, марката и производителя, както и един куп други регистри, ID и други неразбираеми за мен неща. Тъй като PCI шината има възможност динамично (т.е по време на работа на компютъра) да се добавят нови устройства и тези устройства да бъдат автоматично разпознати (без джъмпери и други подобни), тази линия се използва за адресиране на устройството, карайки го да "издаде" информация от конфигурационното пространство, след което да му се зададе уникален 8-битов адрес, и да се настроят разни други неща. При четене/писане, чрез тази пътека механизмът за комуникация индивидуално адресира всяко PCI устройство. PCI устройство се избира за транзакция, само ако IDSEL е "високо", старшите два бита във AD са 00, и командата във C/BE e Configuration Read (1010) или configuration Write (1011).
  • DEVSEL(1) (device selected) - сигнал от подчинено устройство към задаващото; означава, че адресираното устройство е разпознато;
  • TRDY(1) (translation ready) - подчиненото устройство е готово да изпълни транзакцията;
  • STOP(1) - подчиненото устройство иска спиране на транзакцията;
  • PERR(1) (parity error) - грешка по четност (тоест, когато PAR, събран със AD, не дава, колкото трябва);
  • SERR(1) - грешки по четност или системна грешка;
  • REQ(1) (request) - индивидуална линия за заявка за транзакция - използва се от задаващото устройство;
  • GNT(1) (granted) - индивидуална линия за удовлетворяване на заявката (поискана чрез REQ) - използва се от арбитъра;
  • RST(1) (reset) - Reset сигнал; например, при натискане на спасителния бутон RESET.

Устройсвото, което иска да "говори" по магистралата, изпраща сигнал REQ към арбитъра Той решава кое от всички, заявили желание, да "удовлетвори", и съответна праща само на него** GNT. След този момент устройството, получило GNT, става задаващо (тоест главно).
signals_arbiter.png

Транзакции по PCI

Описание на PCI транзакция
Основно PCI транзакциите са два типа: Read и Write. Обобщено описание на типовете транзакции:

Операция четене

Задаващото (подаващото, главното, Master) устройсто получава GNT от арбитъра. То настройва FRAME сигнала в ниво "ниско", за да укаже, че магистралата е заета. После задава IDSEL (може би през PCI моста, не съм сигурен), за да се идентифицира подчиненото устройство. После, по AD линиите се задава адрес, а по C/BE линиите - команда за четене. След това се задава IRDY, което показва, че подаващото устройство e готово за работа. Подчиненото устройство, веднага щом се разпознае по адрес и IDSEL, връща DEVSEL сигнал към задаващото, за да укаже, че се е разпознало. След това, по време на reverse-такта, подаващото освобождава линиите AD, а подчиненото настройва по тях данните, които ще се предават. Когато е готово, подчиненото устройство подава TRDY сигнал, за да укаже, че е готово за транзакция. Следват един или няколко такта на прехвърляне на информация, по време на които по C/BE линиите се указва кои байтове от предаваните се искат от главното устройство. Ако по някое време главното устройство не може да поеме потока информация, то променя сигнала IRDY, а подчиненото спира и изчаква, докато главното отново не промени IRDY. В края на транзакцията FRAME се отменя, както и IRDY и DEVSEL.
Read-транзакциите отнемат минимум 3 такта.

Операция писане

Писането е много подобно на четенето, със съществената разлика, че липсва reverse-такт, защото подаващото устройство е това, което задава данните по AD. TRDY се задава, когато подчиненото устройство е готово да поеме данните. Ако подчиненото устройство не пусне TRDY, става кофти (какво значи това - не знам).
Write-транзакциите отнемат минимум 2 такта.

USB магистрала

usb.PNG

USB (Universal Serial Bus) е серийна, асинхронна (2.0 поне, за 1.0/1.1 не намирам потвърждение) магистрала за (сравнително) бавни външни устройства. При нейното създаване се цели следното:

  • Универсална серийна магистрала, с уникален, еднотипен кабел и съединители, за много и разнотипни устройства: мишка, клавиатура, външна памет, скенър, принтър, Web-камера и още много;
  • Заместител на по-стари стандарти като COM (RS-232, компютърен сериен порт) и PS/2;
  • Plug'n'Play - добавяне на нови устройства без инсталиране на драйвъри, карти за разширение, или каквото и да било отваряне на кутията на компютъра;
  • Hot Swapping - елементарно и бързо включване/изключване на устройства, без изключване на захранването (прекъсване работата на компютъра).

При създаването на USB били взети предвид вече остарели1 изисквания към съществуващи тогава устройства.

Физическа топология

USB кабелът е четирипроводен:
usb_cable.PNG

  • +5V - захранващо напрежение;
  • 0V (Ground) - нула (заземяване);
  • Data - проводник за данни;
  • Clock2

Стандартно е дължината на кабела, между две устройства, да бъде не повече от 3 метра (1.1) и 5 метра (2.0)3. Позволява се включването на до 5 хъба по веригата между устройство и централен хъб, така че максималната дължина става, съответно, 18 и 30 метра.
Максималната допустима по стандарт консумация от едно устройство е 500 mW (5 v x 100 mA), като за по-мощни устройства е необходимо те да имат допълнителен метод на захранване.
Скоростта на трансфер е 1.5 Mbit/s (1.1, Low-speed), 12 Mbit/s (1.1, Full-speed), 480 Mbit/s (2.0, Hi-speed). Обявеният на 17 ноември 2008 USB 3.0 ще достига до близо 5 Gbit/s, или около 10 пъти скоростта на 2.0 .
Максималната скорост на пренос обикновено се достига при по-къси от максимума кабели.

Логика на работа

usb_pyramid.PNG
USB шината представлява кореново дърво. Коренът се нарича централен хъб (Root Hub) и играе ролята на контролер на шината, а по дървото могат да бъдат включвани до 127 устройства - хъбове или крайни устройства. Всяко устройство има уникален 7-битов номер, играещ ролята на адрес. Всеки хъб има обикновено 4 гнезда (порта); чрез включване на хъб към порт на друг хъб се постига дървовидна структура. Повечето USB устройства, освен входове, имат и изход, така че няма значение къде във физическата топология е включено дадено устройство (?)4.

Данните се предават импулсно, под формата на кадри. Предаването на кадър започва от централния хъб, който всяка милисекунда предава начало на кадър по дървото, и включва пренос на данни от хъба към крайното устройство и обратно. Предаването на всеки кадър трябва да завърши в рамките на 1 ms. Кадри се предават само между хъб и крайно устройство, никога между две устройства (не се позволяват p2p-връзки).

Кадрите имат вида, показан на картинката. Всеки кадър започва с маркер за начало на кадъра (SoF, Start of Frame). Ако кадърът е празен (тоест, няма да се прехвърлят данни), други маркери не се изпращат - такива кадри се използват за синхронизация. Иначе, следва маркер In - хъбът (концентраторът) ще чете данни от крайното устройство - или Out - концентраторът ще предава данни на устройството. Тези два маркера съдържат в себе си адреса на устройството, което ще участва в преноса на данни. Следва Data-частта, в която се пренася полезната информация (payload), и след нея следва маркер за потвърждение. Ако преносът е в посока In, Data се подава от крайното устройство, а потвърждението - от концентратора. При Out е обратното.

Маркерът за потвърждение има няколко възможни стойности. Основните три са:

  • ACK - Acknowledgement. Данните са приети и са коректни.
  • NAK - Negative Acknowledgement. Данните не са приети, или са невалидни. В общия случай, кадърът се предава наново.
  • STALL - Няма да се предават данни в рамките на този кадър. Обикновено се изпраща при грешка в устройството, която налага да се вземат мерки, например повторна инициализация. Маркерът STALL може да се появи веднага след SoF.

Data-частта се състои от следните полета:

  • SYN - Синхронизация, 1 байт5.
  • PID - Packet Identification, 1 байт. Указва типа на кадъра с данни.
  • PAYLOAD - Полезни данни, не повече от 64 байта (не повече от 1024 в по-нови спецификации). Порция от самите данни.
  • CRC - Cyclic Redundancy Check, 2 байта. По нея се откриват грешки при преноса. Не винаги е безгрешна6.

В комуникациите (и в частност, USB) е прието да се използват разновидности на EDC (Error-Detecting Code, чрез който може да се открие грешка в преноса, но не и да се поправи), но не и ECC (Error-Correcting Code, чрез който може да се възстанови първоначалната информация). Това е така, защото се оказва по-ефективно да се пресметне EDC, да се открие грешка, и да се изпрати наново пакетът информация, отколкото да се пресметне ECC, да се изпрати, дешифрира и да се възстанови информацията.

USB кадрите биват 4 типа:

  • Control - чрез тях се инициализира ново устройство, изисква се от него да подаде информация за себе си (марка, производител, тип и т.н.), или му се задава уникален адрес;
  • Data - основните кадри за масиви от данни;
  • Isochronous (изохронни) - за трансфер на данни между хъба и устройство, което работи в реално време - например, цифров телефон. Тези устройства се синхронизират с празни SoF кадри и са способни да разделят информацията, която трябва да изпратят, на кадри, в рамките на 1 ms. При изохронните кадри няма маркер за потвърждение, а ако има, то той се обработва така, че да не забавя ритъма на работа на устройството - при NAK кадърът не се препраща, тъй като неговата липса води само до кратък моментен шум при аудио- или видеопоток.
  • Interrupt - Тъй като USB устройствата нямат своя INT линия, на всеки 50 ms концентраторът разпраща Interrupt-кадър до всички устройства. При получаването му устройствата, които имат информация за изпращане, я пращат към концентратора, а той изиграва ролята на арбитър и определя кое устройство ще общува с ЦП. От INT-кадри се възползват най-вече така наречените HID-устройства (Human Interface Device) - входно-изходни устройства за взаимодействие с потребителя, специално клавиатури и мишки.

Допълнителна информация за USB

В USB 1.0, 1.1, 2.0 кадрите се пращат от хъба до всяка точка от дървото (broadcast). В USB 3.0 се предвижда те да се разпращат до отделно устройство или група устройства (multicast).
При изключване на USB устройство от дървото, хъбът няма как да разбере, че това е станало. За целта се грижи операционната система чрез драйвъра, заложен в нея, който периодично "опипва" свързаните устройства.
USB (Wikipedia)
Доста подробно описание на принципите и работата на USB магистралите - прегледайте го, ако имате време, има известни разлики с преподавания материал.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License