www.mikrocontroller.net

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


Autor: Kolja Windeler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Kolja Windeler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Kolja Windeler (jkw)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Claude Schwarz (claudeschwarz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kennst Du diese Seite ?
http://www.controllersandpcs.de/ata.htm

Autor: Kolja Windeler (jkw)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kolja Windeler (jkw)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Claude Schwarz (claudeschwarz)
Datum:

Bewertung
0 lesenswert
nicht 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/

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.