Hallo Leute, ich bin zur Zeit an einem Projekt, bei dem wir eine Art Plattform "bauen" wollen, mit der wir Daten aus dem PC an einen FPGA senden wollen ( was ja sicher nichts außergewöhnlich ist ). Wir nutzen dazu ein Xilinx Board das die Daten per S-ATA Schnittstelle entgegen nehmen soll. ( Die Schnittstelle steht nicht zur Diskussion da wir im Endeffekt 480Mbit für ein UWB Modul nutzen wollen ) Mein Problem ist es jetzt wie man in C (++) unter Linux Daten an die S-ATA Schnittstelle senden kann. Könnt ihr mir da weiterhelfen? Gibt es so eine Art dll die man einbinden kann die einem dann eine Art Funktion Write_to_Sata() zur Verfügung stellt? Ich hab selbst schon google bemüht, finde sowas in Hülle und Fülle, aber nur für den Serialen Port ( Com1 ) und nicht den SATA Anschluss. Vielen Dank im Vorraus Gruß Kolja
Als erstes mal: Entschuldigt bitte, ich hatte zu viele Fenster auf und scheinbar die Übersicht verlohren, kann jemand den Artikel in das PC-Programmierungs Forum verschieben? dann noch was inhaltliches: Beitrag "Re: Serielle Schnittstelle in C ansprechen" Genau das bräuchte ich, nur halt für Linux und Sata ;) Gruß Kolja
Was emultiert dein FPGA denn am anderen Ende des SATA-Kabels? Eine Platte? => einfach auf /dev/sdX zugreifen, evtl mit O_DIRECT. ansonsten: Linux verwaltet SATA wie SCSI, d.H. es sollte möglich sein den SCSI-Generic-Treiber für dein Gerät einzusetzen. Dann kannst du entweder direkt auf /dev/sgX arbeiten, oder du nimmst eine Library, wie z.B. die ominöse libschilly. Dokumentation gibts hier: http://www.tldp.org/HOWTO/SCSI-Generic-HOWTO/ Beispiel, das ein simples Kommando sendet: http://www.tldp.org/HOWTO/SCSI-Generic-HOWTO/pexample.html
Hi Ernst, vielen Dank für die Info. Das macht mir erstmal Mut. Ich weiß ehrlich gesagt nicht was er emuliert aber das kann ich dann ja rausfinden wenn ich ihn in Händen halte und angeschlossen habe und mir linux ein neues /dev/sd* Device anbietet oder nicht ( oder ich lese einfach mal dann das Manual ). Ich werde erstmal lesen wie das mit dem SCSI klappt. Gruß Kolja
Hey, nein kannte ich nicht. Ich hab schon viel gelesen und erfahren, wirklich gut! Vielen Dank dafür. Eines fehlt mir immer noch, was wohl auch an noch nicht vorhandenen Kenntnissen in C liegen könnte, hat jemand von euch einen Code Schnippsel in dem auf ein SATA Gerät geschrieben wird ? Ich gehen fürs erste davon aus das der FPGA ein Massenspeicher Emulieren wird .. hoffentlich ;). Gelesen hab ich schon das der Sata Anschluss eigentlich so eine Art Schattenregister ist und man "einfach" nur in diese Register schreibt, also die Parameter anlegt und dann den Befehl gibt, dann die Daten übertragen werden, die Abfrage im Controller gemacht wird und das Ergebnis danach wieder in dem Register liegt wo man es dann abfragen kann. Nur wie komme ich denn an die Adresse von dem Register? ist die Hardware abhängig vom PC oder stellt Linux mir eine Art /dev/sata-aschluss1 zur Verfügung ? Sorry wenn ich so doof fragen muss, ich wüsste sonst nur nicht wo ich so etwas erfahren könnte :) Gruß Kolja
Kolja Windeler wrote: > Mein Problem ist es jetzt wie man in C (++) unter Linux Daten an die > S-ATA Schnittstelle senden kann. > Könnt ihr mir da weiterhelfen? > Gibt es so eine Art dll die man einbinden kann die einem dann eine Art > Funktion Write_to_Sata() zur Verfügung stellt? Kann es sein dass Du Dich da ein bisschen uebernimmst? Also Grundkenntnisse in Linux waeren fuer so ein Vorhaben sicherlich nicht verkehrt.
Hi Michael, das Gefühl habe ich auch ;) aber vielleicht ist es gar nicht so schlimm wie es sich jetzt anhört. C Kenntnisse habe ich durchaus und auch mit Linux klappt es an sich recht gut. In der Tat habe ich vom Ansprechen von externer Hardware unter Linux in C noch keine Ahnung, aber zum Glück arbeite ich ja nicht alleine an dem Projekt. Genau genommen bin ich ja nur der HiWi, wohingegen 2 andere wirkliche Mitarbeiter den Großteil der Probleme erledigen. Ich dachte mir nur, das es super wäre für mich nur wenn ich ein Beispiel Programm hätte das mir prinzipiell sagt wie so etwas abläuft damit ich ungefähr weiß wonach ich suchen kann/muss. Gruß Kolja
Im einfachsten Fall über /dev/mem direkt in die Register des Host Controllers schreiben (Kamikaze ... wenn man nicht genau weiß was man tut!)? Oder schau Dir mal das hier an : http://linux-ata.org/
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.