Pinout ATA IDE rozhraní

Ahoj, chtěl bych zkusit připojit ke kontroléru HDD, a nyní nastal problém s číslováním pinů konektoru. N netu jsem sice něco našel; třeba tohle: pinouts.ws/ata-ide-pinout.html a jen mi není jasné, z jaké strany z jakého pohledu je to číslované.

Když se dívám na konektor na kabelu, konektor proti očím, kabel odemně pryč, klíč je nahoře, tak pin 1 je vlevo nahoře, pin 2 vlevo dole??

EDIT: Planý poplach, už jsem na to přišel. Je to tak jak jsem to napsal o kousek výš. Nechám to tady pro ostatní kdyby to něldo potřeboval…

Z druhého odkazu, který zde vložil Jan16 připojuji obrázek a ještě dodatek, že červený drát se dává na pin 1. Tak teď by to mělo být jasné a snad se tu s postupem času objeví i nějaká ta rutina.
ata-ide-connector.gif

Jestli by byl zájem o stručný púopis jak to funguje, tak sem klidně i něco připíšu, budeli zájem… Jinak asi před 30ti minutam jsem s tím konečně začqal experimentovat, kupodivu mi to fungovalo na prvý pokus.
Jen momentálně mám problém, že mě nechce poslouchat jeden disk, nereaguje na příkaz E0h - vypnout otáčení ploten… ale usilovně zjišťuji závadu…

Co zamýšlíš udělat? Nějaký obvod, který bude kontrolovat činnost disku?

Myslel jsem že vaše nápaditost je větší :open_mouth:
elektronika.kvalitne.cz/ATMEL/MP … erHDD.html
tohle sice dělat nebudu, ale inspirace dobrá :wink:
Na tej samej stránce najdeš ještě PCM wav player a MOD player… ten wav player bych moh zkusit :wink:

Ten problém, s tím jak mě neposlouchá slave, jsem nevyřešil. Fakt už nevím co s tím. Dělám to přesně podle postupu, jak se to má. Vyšlu na ATA sběrnici příkaz výběru zařízení, vyberu slave. Vyberu to správně, protože když vybírám master, tak to funguje. Pokud chci vybrat slave, jen upravím jeden bit (konkrétně 7. bit v SDH registru). Poté vyšlu příkaz E0h - zastavit plotny. Master disky reagují OK, když to chci udělat se slavem, nefunguje to… Nesetkal jste se s tím už někdo??

Neviem preco nekomunikujes len s MASTERom. Teoreticky by to malo byt jedno ci si zvolis master alebo slave( volba jedneho bitu v registry), ale niektore disky zapojene osamote ako slave na zbernici nechcu komunikovat…musia sa zvlastne inicializovat.
Mam skusenosti s inicializaciou a komunikaciou len s HDD a CF zapojenymi ako master, pricom low level rutiny su velmi jednoduche. Vyskusane to je sice pre jadro x51 konkretne pre starsi IO AT89C51SND1C, co je mcu s integrovanymi roznymi pereiferiami, tj. Mp3 dekoder, USB, SD/MMC, IDE rozhranie a ine…
HDD je “posadeny” do vonkajsej datovej pamate mcu a pomocou instrukcii movx sa pristupuje do registrov HDD. Je tam samozrejme “latch” konkretne 74HCT573. Rutiny su pisane v asm
Integrovany MP3 dekoder zvlada dokonca pesnicky s konstantnym bitrate 320kbps, ale niektore mp3 s variabilnym bitrate (vyssie hodnoty bitrate) nezvlada a v reprodukci zvuku je to pocut.

Inak ak chces robit nejaky mp3 player z HDD, tak bude zaujimave napisat podporu pre niektory suborovy system, zrejme asi FAT16, 32…NTFS je dost zlozity a nesiel by som do toho. Pre spominany mcu mam napisane rutiny pre subor. system FAT32 v asm(HDD do cca 128Gb), pricom napisat ich bola dost drina a takisto bola haluz napisat rutinu pre citanie Mp3 headeru (hlavicky mp3 suboru)…
Ked uz som pri FAT, tak vela suborov (pre nas zrejme mp3 suborov) je fragmentovanych tj. casti suboru su ulozenie na roznych miestach disku, pricom pri citani (prehravani mp3) je vhodne pred samotnym citanim zistit , ci je dany mp3 subor fragmentovany, ak ano, tak je vhodne zistit adresy (sektory) jednotlivych fragmentov( zaciatky a konce fragmentu) a ulozit ich niekam do dataram, lebo pri samotnom citani nie je vhodne stale zistovat z HDD, konkretne z FAT tabulky adresu dalsieho clustra resp. sektoru…jednoducho pri vacsich bitrate by mcu nemusel “stihat” citat data z HDD a posielat do mp3 dekodera
ak budes studovat FAT32, tak doporucujem tuto stranku pjrc.com/tech/8051/ide/fat32.html
a este “White Paper” pre FAT32 od Mrkvasoftu

Zas tak blbý nejsem, vím jak jsou soubory uložené na disku, to mi nevysvětluj… :slight_smile: Na NTFS ***.

SPíš bych potřeboval vysvětlit proč to nefachá se slavem… Jestli jsou na sběrnici zařízení 2 nebo 1 je myslim jedno… Na tej IDE kšandě jsem měl i disky 2, ovšemže vždycky fungoval jen ten MASTER… Ale snad na to přídeme, čím to je…

Díky, Honza

Ja som nepovedal, ze si blby…len som nemohol vediet ake komunikacne protokoly/ suborove systemy mas nastudovane :wink:
Osobne som nikdy neriesil dve zariadenia na zbernici…jednoducho som to nepotreboval, stacil mi jeden disk ci karta nastavena ako master a vzdy to fungovalo…len jeden stary HDD (160Mb) sa nechcel prepnut do LBA modu adresovania sektorov, podporoval iba CHS…

Na tom není nic divného, staré disky LBA neuměly :wink:

Netvrdim, že potřebuj 2 zařízení na 1 kšandě, ale chtěl jsem zkusit komunikovat i se SLAVE zařízením. Bohužel nemám možnost napsat o problému tvůrci webu, kde je ten popis komunikace… As před měsícem jsem mu napsal mejl kvůli něčemu jinému - stále žádná odpověď. Tak se už ani neobtěžuju mu psát kvůli tomuto. I když zkusit bych to mohl…

Jen mám tedka jiný problém - jak číst data z disku? Na tom webu je psáno že shodit IORD do log.0, počkat cca 300ns, přečíst data, IORD do log.1 Už asi 2 hodiny se takhle snažím přečíst status registr, a stále ***. Na druhé SLAVe zařízení jsem se vykašlal, protože chyba není na mé straně, ale zřejmě na tom webu. Asi to není jen o tom, že se nastaví 7. bit Drive/Head registru do log. 1
A k tomuto problému: měl by být nastaven busy flag když se roztáčí plotny uvnitř disku? Já jen že jestli opravdu mi funguje čtení toho status registru, tak disk tvrdí že je připraven, přitom roztáčí plotny (třeba po zapsání příkazu E0h)

Jinak zde je ten web: elektronika.kvalitne.cz/ATMEL/ne … F_HDD.html

Díky moc, Honza

neskumal som ci ma byt busy flag nastaveny pri roztacani disku HDD, ale zrejme by mal byt nastaveny. Este ma napadlo, ze ci mas spravne nastavene adresne vodice tj. CS1,CS0,A2,A1,A0…pre status register to je CS1=1,CS0=0,A2=1,A1=1,A0=1

flagy v status registri su:
bit 7: Busy 1=busy, 0=not busy
bit 6: Ready 1=ready for command, 0=not ready yet
bit 5: DF 1=fault occured inside drive
bit 4: DSC 1=seek complete
bit 3: DRQ 1=data request ready, 0=not ready data
bit 2: CORR 1=correctable error occured
bit 1: IDX vendor specific
bit 0: ERR 1=error occured
inak status a command register maju rovnake adresy, tj pri citani to je status register a pri zapise to je command register, ale to vsetko zrejme vies…

Jo, tohle všechno vím, nastavené to mám taky dobře… Zjistil jsem tohle: Pokud disku připojíš napájení, začne se rozjíždět (nevykonává žádný příkaz) proto se busyflag nenastaví. Pokud ovšem pošleš příkaz E0h nebo E1h (zastavení/rozjetí ploten) ta se busyF samozřejmně nastaví… :slight_smile:

Funguje ti prikaz spin_down alebo spin_up? pripoj napajanie, pockaj kym sa rozbehne disk a potom skusaj spominane prikazy…teraz si spominam, ze som chcel, aby sa disk po privedeni napajania nerozbehol, ale stala sa taka vec, ze po reste mcu a hdd som posielal prikaz spin_down, pricom disk sa najskor rozbehol a potom hned po prevedeni prikazu zastal…z uvedeneho mi vyplyva, ze busy flag je nastaveny pocas rozbehu HDD…aj by som to vyskusal, ale nemam to momentalne zapojene, pracujem na niecom inom

U těch diusků comám tady, je to všetko divné… Jinak tyhle dva příkazy mi fungují velmi spolehlivě :slight_smile:

Divné je to, že po připojení napájení do obvodu (napájim všechno z PC ATX zdroje) se sice disky rozeběhnou, nekterým to trvá pod 3 sekundy, jiné se rozebíhají i přes 10 sekund. Po zapnutí napájení, tedy počkám cca 5 sekund, pak čekám na busy flag (u některých disků se ho dočkám až asi po 20ti sekundách) potom nastavim v SDH (drive/head) registru že komunikuju s masterem, a potom odešlu příkaz identifikace disku. a přijmu 256Wordů dat… to pak posílám po RS232 do kompu…

Divný je to, že některý disky se chovaj podivně po připojení napájení. Například když čekám na busy flag, dokud neni v log. 0 (připraveno), tak některým diskům to trvá neuvěřitelně dlouho, než ten flag dají do log.0. Třeba 20 sekund i víííc. Jak čtu busy flag? A0,1 a 2 do log. 1 (CS vstupy mám připojené “natvrdo”) potom shodim IORD, NOP, potom přečtu bit D7, a pokud je v 0, tak čekání ukončím, a pokud je stále v log. 1, tak NOP NOP NOP a skok na začátek… Takže to čtu takřka furt dokola… Nemůže zrovna tohle něčemu vadit?

To citanie dookola by nemalo vadit…ja som mal tiez take disky, boli to WD, nejake starsie, jeden napr. WD1200 ,1,2Gb…u neho bolo zaujimane to, ze ked bol sam na zbernici a nastaveny jumperom na master, tak som tiez dlho cakal na odozvu ( do 30sec)…potom som jumper vyhodil a problem bol vyrieseny…mam dojem, ze taketo veci robili len starsie Western Digital disky

Díky Kado, tohle mě fakt nenapadlo… starší disky měly totiž na nastavení kromě master/slave taky ještě single, a některé novější i cs. I když je to divné. Jak ten disk pozná že je na sběrnici sám??

ALe určitě tohle zkusím…

Zrejme po resete resp. po pripojeni napajania maju zariadenia pripojene na IDE implementovane nejake testovacie procesy na zistenie stavu na zbernici resp. host musi po resete pripojenych zariadeni vyslat potrebne prikazy napr. (EXECUTE DEVICE DIAGNOSTIC, #90h), a tak zistit ci je nejake zariadenie pripojene…inak neviem ako si na tom s technickou anglictinou, ale ak nemas stiahnutu normu ATA, tak si ju stiahni a pozri…tu je link normy kt. som pouzival pri studiu: t13.org/Documents/UploadedDo … -ATA-3.pdf