Názory k článku
Podrobnější popis sběrnice PCI
dustin (neregistrovaný)
16. 10. 2008 8:56
Nový
DMA?
celé vlákno
Děkuji za velice zajímavý článek. Souvisí nějak bus-master režim s přenosem pomocí DMA? Díky za informaci.
16. 10. 2008 13:46
Nový
Re: DMA?
celé vlákno
Jj, pomocí bus-master i pass thru se dají data pomocí DMA přenášet. Jde přesně o to, jaké DMA máte na mysli, jestli to iniciované řadičem PCI nebo iniciované samotnou kartou. V tom druhém případě se jedná přesně o postup popsaný v článku - čip AMCC dokáže blokové přenosy sám "uřídit".
X (neregistrovaný)
16. 10. 2008 9:03
Nový
RE: Podrobnější popis sběrnice PCI
celé vlákno
Toto je ten typ clanku,kterych by tady melo byt mnohem vice o HW a SW.Autor odvadi perfektni praci.
Peppa1 (neregistrovaný)
16. 10. 2008 9:46
Nový
PCI-X 64/100 a 64/133
celé vlákno
o PCI-X zase nic :(
16. 10. 2008 11:03
Nový
Re: PCI-X 64/100 a 64/133
celé vlákno
nebojte, nacpu do další části :-) do dnešního článku už se to nevešlo, 26 kB textu je až moc...
uživatel si přál zůstat v anonymitě
16. 10. 2008 15:21
Nový
Re: PCI-X 64/100 a 64/133
celé vlákno
moment a aky je rozdiel medzi 64 bit PCI a PCI-X, podla mna je to totiz to iste?
16. 10. 2008 15:38
Nový
Re: PCI-X 64/100 a 64/133
celé vlákno
Zvyšuje se tam frekvence z 66/133 až na 266 či dokonce 533 MHz, trošku se upravila specifikace a přenosový protokol, takže se dají od sběrnice "odstavit" vadné karty (pro servery někdy dost podstatná vlastnost) popř. testovat, zda se data přenesla v pořádku (CRC), ale - máte pravdu - zpětná kompatibilita je zachována, přesněji je zachována pro 3,3 V karty.
Ja (neregistrovaný)
16. 10. 2008 10:31
Nový
Vinikající článek
celé vlákno
Toto je článek, který mě potěšil nejen tématem, alel i vysokou kvalitou zpracování. Toto jsou články které tu chybí. Žádná povrchnost pěkně do hloubky a odborně.
Díky
Díky
yossarian (neregistrovaný)
16. 10. 2008 11:23
Nový
Re: Vinikající článek
celé vlákno
1) vYnikajici se pise
2) tentokrat me p. Tisnovsky kvalitou zpracovani trochu zklamal, prijde mi, ze prvni pulka clanku (vysvetleni rozdilu 3.3/5) je popsani jedne veci 4x po sobe ruznymi vetami a vypada to dost neucesane.
Nicmene obsahove jde porad o jedny z nejlepsich clanku na rootu ;)
2) tentokrat me p. Tisnovsky kvalitou zpracovani trochu zklamal, prijde mi, ze prvni pulka clanku (vysvetleni rozdilu 3.3/5) je popsani jedne veci 4x po sobe ruznymi vetami a vypada to dost neucesane.
Nicmene obsahove jde porad o jedny z nejlepsich clanku na rootu ;)
Medvěd (neregistrovaný)
16. 10. 2008 11:14
Nový
dotaz k činnosti PCI
celé vlákno
Pořád mně není úplně jasné, jak na PCI sběrnici proběhne taková typická činnost jako třeba čtení a zápis do portu, které procesor realizuje pomocí instrukcí IN a OUT.
Představme si, že máme PCI kartu - třeba adaptér pro paralelní port, jaké se ještě používají na tiskárnách. Kartu dáme do slotu, pustíme počítač a paralelní port je tam vidět na nějakých adresách portů, normálně s tím pracujeme pomocí IN a OUT, jakoby ty registry byly připojeny přímo k lokální sběrnici procesoru. Kdo toto zařídí ? BIOS nějak ve spolupráci s chipsetem základní desky vyčte z karty na jakých adresách mají být ty porty/registry vidět ? A chipset pak podle toho nějak na lokální sběrnici emuluje pro procesor existenci těch portů ? Jak tohle vlastně funguje ?
Představme si, že máme PCI kartu - třeba adaptér pro paralelní port, jaké se ještě používají na tiskárnách. Kartu dáme do slotu, pustíme počítač a paralelní port je tam vidět na nějakých adresách portů, normálně s tím pracujeme pomocí IN a OUT, jakoby ty registry byly připojeny přímo k lokální sběrnici procesoru. Kdo toto zařídí ? BIOS nějak ve spolupráci s chipsetem základní desky vyčte z karty na jakých adresách mají být ty porty/registry vidět ? A chipset pak podle toho nějak na lokální sběrnici emuluje pro procesor existenci těch portů ? Jak tohle vlastně funguje ?
uživatel si přál zůstat v anonymitě
16. 10. 2008 12:02
Nový
Re: dotaz k činnosti PCI
celé vlákno
Podle meho nazoru je to podobne jako pri ISA sbernici. Pri zapnuti PC BIOS nebo OS nakonfiguruje PCI kartu tak ze jeji adresny dekoder bude reagovat na vybranou hodnotu ktera se objevi na zbernici. Pro tohle je na karte EEPROM kde je ulozena default PCI konfigurace, kterou BIOS a OS precte.
Potom zapis/cteni probiha zhruba nasledovne: na sbernici se objevi adresa, jestli existuje karta ktera spada do nastaveneho adresniho prostoru tak se provede cteni/zapis. Karta muze mit namapomavanou interni pamet a/nebo HW registry nebo do pametoveho prostoru v PC ve dvou modech: v adresnim a v registrovem modu, v prvnim pripade se do karty zapisuji data pres instrukci mov, etc a v druhem pripade pres instrukce procesoru in a out.
Potom zapis/cteni probiha zhruba nasledovne: na sbernici se objevi adresa, jestli existuje karta ktera spada do nastaveneho adresniho prostoru tak se provede cteni/zapis. Karta muze mit namapomavanou interni pamet a/nebo HW registry nebo do pametoveho prostoru v PC ve dvou modech: v adresnim a v registrovem modu, v prvnim pripade se do karty zapisuji data pres instrukci mov, etc a v druhem pripade pres instrukce procesoru in a out.
Medvěd (neregistrovaný)
16. 10. 2008 13:21
Nový
Re: dotaz k činnosti PCI
celé vlákno
Nojo, ale PCI je prece od adresni sbernice procesoru oddelena (!!) Karta, pripojena k PCI prece nemuze detekovat spravnou adresu, ktera se objevi na adresni sbernici procesoru. To by musel nejak delat chipset, ve kterem je zaroven i nejaky "radic PCI" ~ bridge. Chipset by detekoval na sbernici procesoru spravnou adresu a pak by nalezite na PCI vygeneroval cykly pro presun dat - jenze to uz je neco docela jineho nez na sbernici procesoru.
A prave toto me zajima - jak presne to funguje ?
Na ISA sbernici je to predstavitelne docela dobre - ta je totiz ke sbernici procesoru mnohem blize.
A prave toto me zajima - jak presne to funguje ?
Na ISA sbernici je to predstavitelne docela dobre - ta je totiz ke sbernici procesoru mnohem blize.
atarist (neregistrovaný)
16. 10. 2008 18:43
Nový
Re: dotaz k činnosti PCI
celé vlákno
Podle me to prave takto funguje, ovsem s tim rozdilem, ze spravna karta je dopredu vybrana svoji pozici v PCI slotu. Prime mapovani instrukci IN a OUT procesoru je tak rozlozeno na dve casti - cesta od mikroprocesoru k north bridge a nasledne cesta od north bridge k PCI karte.
Mimochodem, dnes je ISA prave dal od procesoru nez byla v dobach 88/86/286/386, v podstate je cela emulovana v south bridgi.
Mimochodem, dnes je ISA prave dal od procesoru nez byla v dobach 88/86/286/386, v podstate je cela emulovana v south bridgi.
uživatel si přál zůstat v anonymitě
16. 10. 2008 19:05
Nový
Re: dotaz k činnosti PCI
celé vlákno
Kazda karta ma BAR registry ktere nakonfiguruje OS. Tyhle BAR registry se prave pouzivaji k urceni toho, jake fyzicke I/O porty a memory regiony bude karta pouzivat. Pak je tam jeste PCI configuration space jestli si dobre pamatuji, s fixnimi adresami, ktere se prave pouziva pro zjisteni pevne danych informaci o PCI karte (a taky jake prostredky potrebuje priradit)
Medvěd (neregistrovaný)
16. 10. 2008 22:12
Nový
Re: dotaz k činnosti PCI
celé vlákno
Pochopitelně. Měl jsem na mysli ISA v její ryzí podobě. Mimochodem se takto vyskytovala i na základních deskách s 486 - ano, zpočátku se desky pro 486 dělaly pouze s ISA sběrnicí.
16. 10. 2008 19:31
Nový
Re: dotaz k činnosti PCI
celé vlákno
Pokusím se to popsat podrobněji:
Každá PCI karta má přístupné PCI konfigurační registry. Jedním z těchto registrů je i PCI command register neboli PCICMD, v něm se dá nastavit, zda má karta reagovat (a správně dekódovat) paměťové adresy a adresy IO portů (konfigurace jsou nezávislé, možné jsou všechny čtyři kombinace).
Dále jsou zde umístěny v článku popsané registry Base Address Registers neboli BADR (BADR0-BADR5). V těchto registrech jsou po resetu karty umístěny požadované rozsahy adres, například grafická karta bude požadovat dejme tomu v BADR0 rozsah 16 MB. Kromě toho je v nultém bitu flag, zda se jedná o paměťový region nebo o I/O region. To znamená, že nějaká karta může mít například tři paměťové regiony a tři regiony I/O. Kromě toho je prvním bitem nastaveno, zda se má region mapovat pod 1 MB či ne - opět se u grafických karet minimálně jeden region mapuje pod 1 MB do rozsahu a0000-b0000, tj. tam kde očekává video RAM jak BIOS, tak i DOSové programy.
Takže typicky se třeba pro paralelní port na PCI kartě vytvoří I/O region mapovaný pod 1 MB.
Každá PCI karta má přístupné PCI konfigurační registry. Jedním z těchto registrů je i PCI command register neboli PCICMD, v něm se dá nastavit, zda má karta reagovat (a správně dekódovat) paměťové adresy a adresy IO portů (konfigurace jsou nezávislé, možné jsou všechny čtyři kombinace).
Dále jsou zde umístěny v článku popsané registry Base Address Registers neboli BADR (BADR0-BADR5). V těchto registrech jsou po resetu karty umístěny požadované rozsahy adres, například grafická karta bude požadovat dejme tomu v BADR0 rozsah 16 MB. Kromě toho je v nultém bitu flag, zda se jedná o paměťový region nebo o I/O region. To znamená, že nějaká karta může mít například tři paměťové regiony a tři regiony I/O. Kromě toho je prvním bitem nastaveno, zda se má region mapovat pod 1 MB či ne - opět se u grafických karet minimálně jeden region mapuje pod 1 MB do rozsahu a0000-b0000, tj. tam kde očekává video RAM jak BIOS, tak i DOSové programy.
Takže typicky se třeba pro paralelní port na PCI kartě vytvoří I/O region mapovaný pod 1 MB.
16. 10. 2008 19:36
Nový
Re: dotaz k činnosti PCI
celé vlákno
ještě pokračujeme:
Jak se provádí vlastní adresování?
Na PCI sběrnici neexistují signály typu memory-read, memory-write, IO-read, IO-write apod. Vše se místo toho - jak je u universálních sběrnic zvykem - řeší příkazy, které jsou posílány po vodičích C/BE0 až C/BE3. Díky tomu je možné rozeznat 16 příkazů, mezi jinými i:
I/O READ
I/O WRITE
Memory READ
Memory WRITE
Configuration Read
atd.
Nás zajímají I/O READ a I/O WRITE. Právě ty slouží k adresování I/O portů. O překlad mezi instrukcí IN a OUT mikroprocesoru a vysláním nějakého příkazu na PCI kartu, se musí postarat north bridge. Ten je z jedné strany připojený na mikroprocesor a zdetekuje vykonávání příslušné instrukce (hlídá si adresovací "nožičky" :-) a provede překlad.
Jak se provádí vlastní adresování?
Na PCI sběrnici neexistují signály typu memory-read, memory-write, IO-read, IO-write apod. Vše se místo toho - jak je u universálních sběrnic zvykem - řeší příkazy, které jsou posílány po vodičích C/BE0 až C/BE3. Díky tomu je možné rozeznat 16 příkazů, mezi jinými i:
I/O READ
I/O WRITE
Memory READ
Memory WRITE
Configuration Read
atd.
Nás zajímají I/O READ a I/O WRITE. Právě ty slouží k adresování I/O portů. O překlad mezi instrukcí IN a OUT mikroprocesoru a vysláním nějakého příkazu na PCI kartu, se musí postarat north bridge. Ten je z jedné strany připojený na mikroprocesor a zdetekuje vykonávání příslušné instrukce (hlídá si adresovací "nožičky" :-) a provede překlad.
Medvěd (neregistrovaný)
16. 10. 2008 22:10
Nový
Re: dotaz k činnosti PCI
celé vlákno
Díky. Docela mě potěšilo, že jsem nebyl ve svých úvahách příliš daleko od pravdy. Už léta jsem občas přemýšlel, jak to vlastně je a že instrukce IN a OUT musí vlastně konvertovat chipset (north bridge).
tomas z. (neregistrovaný)
16. 10. 2008 12:16
Nový
Jak to zkoušet?
celé vlákno
Lze si s PCI kartami hrát nějakým způsobem v Linuxu v userspace? (přesun dat, zápis/čtení registrů...)
Jinak se připojuji k poděkování autorovi za hezké články (nejen tento).
Jinak se připojuji k poděkování autorovi za hezké články (nejen tento).
BLEK. (neregistrovaný)
16. 10. 2008 12:56
Nový
Re: Jak to zkoušet?
celé vlákno
Na I/O porty můžeš lézt z userspace normálně instrukcemi assembleru in a out (poté, co si povolíš přístup na porty pomocí syscallu iopl --- na to musíš být root). Do paměťově-mapovaných registrů tak, že si namapuješ příslušnou část /dev/mem pomocí syscallu mmap a pak k ní přistupuješ. Co se týče PCI-konfiguračního prostoru, tak buď přes I/O porty --- tam ovšem hrozí, že se popereš s kernelem, který na ty PCI porty bude přistupovat současně (steré Xservery to tak dělaly), nebo přes sysfs (třeba /sys/bus/pci/devices/0000:00:01.0/config).
Medvěd (neregistrovaný)
16. 10. 2008 13:24
Nový
Re: Jak to zkoušet?
celé vlákno
A co treba /dev/port ?
To je prece taky cesta.
To je prece taky cesta.
tomas z. (neregistrovaný)
16. 10. 2008 13:54
Nový
Re: Jak to zkoušet?
celé vlákno
Díky, nevím proč jsem si myslel že přímé I/O instrukce jdou jen z jádra.
16. 10. 2008 17:21
Nový
Re: Jak to zkoušet?
celé vlákno
Asi proto, že dokud nezměníš IOPL pro daný proces, tak opravdu jen z userspace opravdu nejdou. Jinak pozor, iopl() opravdu nastavuje bity IOPL v EFLAGS, což má i jiné vedlejší efekty, např. povolení instrukce "cli".
BTW ví někdo, jak to funguje na jiných architekturách než x86? Co třeba powerpc?
BTW ví někdo, jak to funguje na jiných architekturách než x86? Co třeba powerpc?
16. 10. 2008 19:09
Nový
Re: Jak to zkoušet?
celé vlákno
Buď to jde řešit způsobem, jaký naznačili předřečníci, nebo je možné použít nějaký dummy driver, který funkce nějaké karty zpřístupní v user space. Podobná věc, jakýsi universální driver pro PCI zařízení (s podporou pass thru i bus-masteru) v Linuxu, před pár lety řešili v rámci diplomek na VUT v Brně na automatizaci, asi by se dalo zjistit, v jakém je celá věc stavu. Viděl jsem zdrojáky ještě neodladěné verze (ta byla určena pro jednu konkrétní kartu) a bylo to docela čitelné, hlavně v porovnání s funkčně stejnými zdrojáky určenými pro Windows (DDK) :-)
Otas (neregistrovaný)
16. 10. 2008 17:21
Nový
64bit -> 32bit slot?
celé vlákno
Z článku mi není jasné, zda jde použít 64bit PCI kartu v běžném 32bit PCI slotu?
Vím, asi to není moc typické a čisté, protože část konektorů na kartě tak visí nezapojena "ve vzduchu", ale nebrání-li tomu na boardu nic mechanicky... ?
Každopádně díky za článek.
Vím, asi to není moc typické a čisté, protože část konektorů na kartě tak visí nezapojena "ve vzduchu", ale nebrání-li tomu na boardu nic mechanicky... ?
Každopádně díky za článek.
16. 10. 2008 19:01
Nový
Re: 64bit -> 32bit slot?
celé vlákno
Pracovat by taková karta měla, v módu kompatibility s 32bitovou PCI. Co se týče adresování, tam 32 bitů dostačuje, datová část přenosu bude probíhat poloviční rychlostí. Ovšem za předpokladu, že se tam 64bitová karta doopravdy vleze, protože těsně za PCI konektory bývají na základní desce další součástky.
Třeba (když bych se měl vrátit k předchozím částem seriálu) mám doma stařičkou funkční 486ku s VESA Local Busem na které je dlouhatááánskááá grafická karta, která buď musí být trošičku ohnutá nebo ne zcela zastrčená do konektoru, zavazí další součástky :-)
Třeba (když bych se měl vrátit k předchozím částem seriálu) mám doma stařičkou funkční 486ku s VESA Local Busem na které je dlouhatááánskááá grafická karta, která buď musí být trošičku ohnutá nebo ne zcela zastrčená do konektoru, zavazí další součástky :-)
AX (neregistrovaný)
17. 10. 2008 11:04
Nový
Re: 64bit -> 32bit slot?
celé vlákno
Jednou jsem takhle updatoval ve stolnim kompu s 32b PCI firmware na 64b RAID radici, takze to skutecne funguje.
pc2005 (neregistrovaný)
18. 10. 2008 17:10
Nový
Tiskařský šotek
celé vlákno
... je maximální rychlost stanovena na 10 GBps-1. ...
podle mě by tam mělo být buď GBs-1 nebo jen GBps. Ale je to jen drobnost, každopádně opět skvělý článek :-).
podle mě by tam mělo být buď GBs-1 nebo jen GBps. Ale je to jen drobnost, každopádně opět skvělý článek :-).
SB (neregistrovaný)
24. 10. 2008 10:44
Nový
jazyk
celé vlákno
Pěkný článek, tentokrát podrobnější a odbornější. Akorát ty amerikanismy jsou tam navíc ("Pass Thru operace", "PCI sběrnice" a podobně).
honza (neregistrovaný)
11. 3. 2009 18:40
Nový
USB
celé vlákno
Dobry den prosim Vas moc o radu, potrebuju vyrobit USB do PCI slotu dostal jsem to za ukol na dlouhodobou praci ve skole a potrebuju s tim poradit kde sezenu nejake veci k tomu uz jsem se dival a nic jsem nenasel jsem uplne bezradny prosim Vas o pomoc dekuji
na jan.priky@seznam.cz
nebo na ICQ 311695456
kdyby jste vedeli o cemkoliv jak to vyresit tak budu moc rad, prosim Vas vsechny o rady diky
na jan.priky@seznam.cz
nebo na ICQ 311695456
kdyby jste vedeli o cemkoliv jak to vyresit tak budu moc rad, prosim Vas vsechny o rady diky

