Входно-изходни системи и магистрали
страницата се нуждае от дописване/преглеждане
ВАЖНО! Стана голяма боза по отношение на това, кой материал от коя тема е, тъй като лекторът ги чете непоследователно. Надявам се това разпределение да е точно.
Липсващите секции са в тема 18-та, тъй като бяха прочетени преди прекъсванията (тема 17-та)!
PCI магистрала
множество линии (не съм броил колко са), и още повече, ако става дума за 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, по време на етапа на подаване на команда:
- 0000 Interrupt Acknowledge
- 0001 Special Cycle
- 0010 I/O Read
- 0011 I/O Write
- 0100 Reserved
- 0101 Reserved
- 0110 Memory Read
- 0111 Memory Write
- 1000 Reserved
- 1001 Reserved
- 1010 Configuration Read
- 1011 Configuration Write
- 1100 Memory Read Multiple
- 1101 Dual Address Cycle
- 1110 Memory Read Line
- 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, става задаващо (тоест главно).

Транзакции по 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 (Universal Serial Bus) е серийна, асинхронна (2.0 поне, за 1.0/1.1 не намирам потвърждение) магистрала за (сравнително) бавни външни устройства. При нейното създаване се цели следното:
- Универсална серийна магистрала, с уникален, еднотипен кабел и съединители, за много и разнотипни устройства: мишка, клавиатура, външна памет, скенър, принтър, Web-камера и още много;
- Заместител на по-стари стандарти като COM (RS-232, компютърен сериен порт) и PS/2;
- Plug'n'Play - добавяне на нови устройства без инсталиране на драйвъри, карти за разширение, или каквото и да било отваряне на кутията на компютъра;
- Hot Swapping - елементарно и бързо включване/изключване на устройства, без изключване на захранването (прекъсване работата на компютъра).
При създаването на USB били взети предвид вече остарели1 изисквания към съществуващи тогава устройства.
Физическа топология
USB кабелът е четирипроводен:
- +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 шината представлява кореново дърво. Коренът се нарича централен хъб (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 магистралите - прегледайте го, ако имате време, има известни разлики с преподавания материал.





