Forum: Mikrocontroller und Digitale Elektronik S-ATA Schnittstelle ansprechen, Daten senden


von Kolja Windeler (Gast)


Lesenswert?

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

von Kolja Windeler (Gast)


Lesenswert?

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

von Εrnst B. (ernst)


Lesenswert?

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

von Kolja W. (jkw)


Lesenswert?

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

von Claude S. (claudeschwarz)


Lesenswert?

Kennst Du diese Seite ?
http://www.controllersandpcs.de/ata.htm

von Kolja W. (jkw)


Lesenswert?

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

von Klaus (Gast)


Lesenswert?


von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

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.

von Kolja W. (jkw)


Lesenswert?

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

von Claude S. (claudeschwarz)


Lesenswert?

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
Noch kein Account? Hier anmelden.