Tuli mieleeni säästää muutama io-nasta kontrollerista, kun siinä on SPI-liitäntä saatavilla. Etsin sopivaa serial/parallel muunnin piiriä ja tuo näytti tarkoitukseen sopivalta. Onko kukaan tuolla kokeillut jotain vastaavaa? Idea olisi käyttää "EPP moodia", eli data-io:n suunnan määräisi nWrite. Samoin olisi pelkkä data-moodi käytössä, eli nDataStrobe:lla siirtäisi dataa rinnakkaismuodossa ja nWait muodostettaisiin ihan vaan invertterillä strobesta.
Tuo piiri tarvitsee lisäksi S0 ja S1 ohjausnastoihin "load" ja "shift" komennot, eli vähän irtologiikkaa siihen. Lisäksi OE0 ja OE1 kytketään suoraan nDataStrobe:en ja invertterin kautta nWrite:en.
Kellopulssi on kytkettävä ainakin nDataStrobe:en "load":n aikana. Lisäksi "shift":n aikana pitää kontrollerin kello kytkeä tähän nastaan.
Katsotaanpa toimiiko tällä reseptillä.
Tuo piiri tarvitsee lisäksi S0 ja S1 ohjausnastoihin "load" ja "shift" komennot, eli vähän irtologiikkaa siihen. Lisäksi OE0 ja OE1 kytketään suoraan nDataStrobe:en ja invertterin kautta nWrite:en.
Kellopulssi on kytkettävä ainakin nDataStrobe:en "load":n aikana. Lisäksi "shift":n aikana pitää kontrollerin kello kytkeä tähän nastaan.
Katsotaanpa toimiiko tällä reseptillä.
Vastaukset 5
Vanhimmat
Ei ole tullut tuollaisella kokeiltua, mutta 74HC165 inputtina (MISO) ja 74HC595 outputtina (MOSI) , niin saa samalla siirrolla molemmat suunnat ja nuo muistaakseni pystyi ketjuttamaan.
t:p
Katselin tuota hiukan uudemman kerran ja kyllä se näyttää jo siltä, että pitää kokeilla. S0/S1 voisi periaatteessa olla normaalisti "shift" tilassa ja "load" tulisi yksinkertaisesti nStrobe:sta invertoituna.
nWait tulisi myös nStrobe:sta, mutta jos se ei riitä, niin periaatteessa SPI:n /SS-signaalia voisi kanssa hyödyntää tässä.. voi muuten mennä vähän datavuon hallinta hankalaksi.
Master-moodissa ajattelin ajaa, jolloin kellot tulee kontrollerilta automaattisesti. Ainoastaan tuo nStrobe/"load" kello pitää kiikuttaa jotenkin.
Kyllä tällä pitäisi 2MB/s nopeuteen päästä, mikä kyllä riittää. Lisäksi data ei kärsi jitteristä, kuten USB-väyläisten kohdalla => ohjelmien kirjoittaminen yksinkertaistuu merkittävästi, kun bufferointia ei välttämättä tarvita.
Sain kyhättyä komponentit yhteen tuossa. Nyt näyttää siltä, että driverit on NetMos:n parallel-kortilla(9865) niin sekaisin, että jopa ajurin latauskerrat vaikuttaa lopputulokseen.. veikkaan, että tämä kortti ei toimi ihan siinä moodissa, missä olettaisi.
Päädyin kirjoittamaan portin komentoja ihan inb/outb:llä. EPP:n mukaisesti, kun alustaa linjat, päätyy tilanteeseen, jossa ei näytä data-write rekisteriin toimivalta. Sitten kun vähän yleismittarin kanssa mittaillen - lopussa tarvitsee muisti skooppiakin - saa signaalit oikein päin, onkin ihmettelyn aika. nWrite: tämä 0V:hen. nDataStrobe: pitää asettaa vastoin ohjetta signaali siten, että on 0V:ssä ennakolta. Tämän jälkeen datan kirjoitus EPP rekisteriin aiheuttaa 0V-5V-0V pulssin nastassa 14. Jos siis tarvitsee sen 5V-0V-5V stroben, pitää kirjoittaa data normirekisteriin ja ctrl-rekisteriin strobet.. Jos jättää 5V:hen, ei pulssia tule!
Loput softasta onkin vielä täysin hukassa.. no, kontrollerin pitäisi osata väläyttää lediä, kun tulee strobe:sta keskeytys, mutta mitään ei välky.
Nyt kun tarkemmin miettii, niin nuo kuvatukset speksissä taitaa olla piirtänyt joku softa-heebo, koska näkökanta ei ole fyysisen tason signaaleissa - jotka on nimetty jopa väärin! :)
Menihän siihen aikaa, mutta nyt alkas olla toimintakunnossa tuo värkki ;) Nopeutta on n. 200kt/s, eli ei paljoakaan enempää kuin mitä standardi-moodissa olisi. Periaatteessa tuo siirtorekisteri antaa kuitenkin mahdollisuuden, kun käyttää F-sarjaa jopa 100mbit/s nopeuksiin. EPP-moodille puolestaan luvataan "hyvällä" kortilla 8Mt/s ja tavallisella PC:n takaa löytyvällä 1-2Mt/s. LS-sarjan logiikka siis riittää vielä tuolle.
Toteutus menee käytännössä 74ls-sarjan logiikalla - ei riitä 8bit kontrollerissa nopeus millään.. 74ls299:ä on sinänsä mukava ohjata suoraan EPP-portilla, mutta itse tarvitsin lisäksi not, nand, nor ja and-piirit.
Juuh.. ja on ne piirretty netissä EPP- addr/data read-write kuvat oikein. Holtekin HT-6535 piirin datakirjassa on hyvät kuvat, mikäli aikoo itse toteuttaa jotakin vastaavaa.
Vielä on koodissa vähän hiomista. '299 toimii käytännössä itsenäisesti PC:n suuntaan ja nDataStrobe:lla generoidaan vaan luku/kirjoitus keskeytys(mikä kontrollerin näkökulmasta on sama asia). nAddrStrobea en edes käyttänyt, koska kontrollerin hitaus ei oikein sitä kannattanut. Toisaalta - nyt voin halutessani kytkeä kaksi kontrolleria samaan porttiin!
Softapuolesta tulikin helppo: Linuxista löytyy käsky outsb(port, buf, buf_length), jonka avulla saa lähetettyä EPP-porttiin buf_length tavua dataa kerrallaan.
Ajattelin tehdä tähän vielä sellaisen binäärilaskurin, joka laskee 8 bittiä ja käyttää 2-porttista muistia, jonka voi kytkeä suoraan kontrollerin osoiteväylälle. Eli komennot menee SPI:n kautta, mutta datan voi viedä suoraan muistiin/muistista.