Hallo Leute, kurz zu meinen Anwendungsfall: Ich habe einen STM32F4 und daran eine SD Karte über SPI verbunden. Als Zugriff für das Dateisystem kommt ein FatFS zum Einsatz. Als Debugger nehme ich den Jlink her. Jetzt zu meiner Frage: Ich speichere auf der SD Karte Daten ab und möchte diese gern (ohne die SD Karte entnehmen zu müssen) auslesen. Ich würde die Daten gerne über den Jlink auslesen. Es wäre kein Problem wenn ich ein extra Programm dafür auf den STM32 flashen müsste, schön wäre aber auf PC seite (Linux) so eine Art Dateibrowser. Wer hat Ideen? Gibt es vielleicht bereits ähnliche Projekte oder Ideen? Hat sowas schonmal jemand umgesetzt?
:
Gesperrt durch User
Irgendwie geht das sicher. Im ST Link Utility gibt es eine Einstellung External Loader. Damit ist der Zugriff auf externe Speicherbausteine möglich. Ich denke damit wird ein kleines Programm in den STM32 Ram geladen und ausgeführt. Gibt auch bestimmt eine AppNote dazu.
pegel schrieb: > Im ST Link Utility gibt es eine Einstellung External Loader. > Damit ist der Zugriff auf externe Speicherbausteine möglich. Jaaaaaaa, aber: Das ist für SPI Flash. Zwar kann man SD-Karten auch über SPI ansprechen, aber das ist nur das "Low-Level" Interface. SD-Karten brauchen halt noch ein wenig "oben drauf". Und dann nochmal das Dateisystem drüber. Letzteres könnte man sich natürlich sparen, wenn man auf PC Seite ein Filesystem in einer Datei (unter Linux mit 'nem loop-dev.) anlegt und dann nur noch die einzelnen Sektoren hin und her kopiert. Das kopieren einzelner Sektoren von SD-Karte ins RAM des F4 und zurück ist sicher noch mit überschaubarem Aufwand über ein kleines Programm, dass vom Debugger in RAM geschrieben wird, möglich. Müsste man aber halt schreiben. Ob sich das lohnt, hängt auch von der Größe der Speicherkarte ab. Wieviele kByte/s bekommt man über die Leitung (des Debuggers)? Wenn man darüber ein paar GByte kopieren will, kommt da keine rechte Freude auf ...
ui schrieb: > Als Debugger nehme ich den Jlink her. Dann schau Dir mal Segger RTT an. Der Zugriff mit eigenem Programm ist via TCP/IP möglich, Terminal 0 liegt auf Port 19021. Dateizugriffe könnte man über (X,Y,Z)Modem via Telnet Client (z.B. TeraTerm Pro) lösen.
Jim M. schrieb: > Dann schau Dir mal Segger RTT an. Der Zugriff mit eigenem Programm ist > via TCP/IP möglich, Terminal 0 liegt auf Port 19021. > > Dateizugriffe könnte man über (X,Y,Z)Modem via Telnet Client (z.B. > TeraTerm Pro) lösen. Danke für den Hinweis, das schaut doch recht interessant und hilfreich aus. Da ich eh ein Betriebssystem habe wäre das quasi eine Möglichkeit: 1) Task anlegen der nicht aktiv wird bis man anfängt irgendein Steuerzeichen zum starten zu senden 2) Nur der Task wird aktiv, die restliche Software schläft implizit. 3) Einen kleines Protokoll einbauen, sowas wie "ls" und "cd" 4) Das Unterprogramm auf dem STM gibt Antworten als characters raus 5) Auch Daten können so geladen werden, muss man halt zweimal parsen (auf dem STM und am PC) 6) Wenn man die Verbindung löst legt sich der Task wieder schlafen und macht seine normalen Dinge. Hört sich doch nach nem Plan an.
ui schrieb: > Ich speichere auf der SD Karte Daten ab und möchte diese gern (ohne die > SD Karte entnehmen zu müssen) auslesen. Ich würde die Daten gerne über > den Jlink auslesen. Wieso kommst du bloß auf so eine absonderliche Idee? Weil der Jlink grad so bei dir herumliegt? Der ist für so einen Einsatzfall absolut NICHT erdacht worden. Also: bringe deiner Firmware im µC ein USB-CDC bei (Beispiel dafür gibt es hier ja genug), dann bringe deiner Firmware ein kleines Kommandoprogramm bei und implementiere dort irgend eine Art, deine Datei auf der SD-karte anzuzeigen oder per UU zum PC zu schicken. So (ungefähr) macht man das. Auf dem PC kannst du dann dein Lieblings-Terminalprogramm benutzen - welches, ist relativ egal, es muß nur in der Lage sein, den Traffic in irgendeine Datei zu loggen. W.S.
W.S. schrieb: > Also: bringe deiner Firmware im µC ein USB-CDC bei Also wenn schon mit richtigem USB, dann kann man doch gleich MSC implementieren, oder einfach einen SD-Karten-Leser. Dann kann man direkt per Windows Explorer zugreifen... PS: Ist nicht der Hauptgrund für die Nutzung von SD-Karten, dass man die einfach herausnehmen und in den PC stecken kann...?
Das Problem daran: Ich will die Kommunikation über den JLink USB-Port machen, ohne Dinge an der Hardware ändern zu müssen. Gibts denn bessere Vorschläge?
Die Frage ist, ob das irgendeinen Sinn macht. SD-Karten nimmt man, wenn's um ein großes Datenvolumen geht (bis mehrere GByte). Und so etwas bekommt man nicht in erträglicher Zeit über USB-FS (12 MBit/s physikalisch). Selbst mit einem SD-Kartenleser am PC, der nur USB-FS kann, wird heutzutage niemand mehr so richtig glücklich. Und JLink mit SWD oder JTAG knabbert davon noch krätig was ab. Mein JLink (naja, etwas älter) mag's nur bis 4 MHz SWD Takt (allerdings nicht nachgemessen ...). Noch etwas Protokoll-Overhead abgezogen und schon ist man bei sehr optimistisch max. vielleicht 300 kByte/s. Verzeichnisse browsen ok, aber Dateitransfer??? Ein paar kBytes gut, aber spätestens bei MBytes ist Schluss. Via USB-HS als Mass-Storage-Device wär natürlich eine Alternative, da braucht's auf PC-Seite nicht einmal extra Software. Auf Controllerseite sollten sich in den Beispielen von ST etwas dazu finden lassen. Aber ohne externen USB-HS-Phy geht's dann nicht (außer STM32F723, der hat einen an Bord). Wenn es um ein kleineres Datenvolumen gehen sollte (leider gab's dazu keine Info außer "Ich würde die Daten gerne über den Jlink auslesen"), würde man eher einen SPI-Flash nehmen, z. Z. so etwa bis 64 MByte bezahlbar. Aber die Problematik mit dem gemächlichen Transfer bleibt natürlich, man erspart sich zumindest die SD-Schicht ... Deshalb: Erst genau über die Anforderungen, dann über die möglichen Optionen zur Realisierung nachdenken! Da SD-Handling und Filesystem ja offenbar schon "stehen" geht's doch offenbar nur noch um den Transport. Via JLink m. E. einfach unrealistisch bei größerem Dateiumfang ...
A. B. schrieb: > Da SD-Handling und Filesystem ja offenbar schon "stehen" geht's doch > offenbar nur noch um den Transport. Via JLink m. E. einfach > unrealistisch bei größerem Dateiumfang ... Zum Datenumfang: Es wird sich um einzelne *.txt Dateien handeln. Das größte der Gefühle werden wohl vielleicht mal kleiner Bilder (max. ca. 300kB) sein. Es wird sich eigentlisch ausschließlich um log Dateien und/oder Kalibrierungsdaten handeln, nicht mehr. Der SD-Karten Anschluss ist zwar verfügbar, warum ich das gerne vermeiden wollen würde: Es handelt sich um ein Projekt bei dem Schüler/Studenten bisserl programmieren lernen sollen. Nicht alle unsere PCs haben SD-Karten anschluss, sodass es dann einfach frickelig und nicht schön handhabbar ist. Deswegen die Idee das über den Debug USB zu handhaben. Es ist auch kein Problem wenn das mal 1-2 Minuten dauert.
Wenn's was fertiges sein soll, fällt mir außer dem RTT auch nichts ein. Etwas ähnliches selber machen, sollte allerdings auch nicht schwer sein: Zwei Software-FIFOs, die Zugriffssteuerung geht implizit über die Schreib-/Lesezeiger (automatisch atomar), über den Debug-Adapter hat man ja transparent Zugriff aufs RAM des Controllers, ohne dem in die Quere zu kommen. Das ist auch der übliche Weg, wie man z. B. das Flash übers Debug-Interface programmiert. Zum Nachlesen: In openocd gibt's "target_run_flash_async_algorithm", das genau (die Host-Seite) von so einem FIFO implementiert. Zwar nur Host->Target, aber das ganze kann man natürlich auch gleichzeitig in beide Richtungen machen. Einziges potenzielles Problem: Wenn ohnehin schon größere Applikation, dann noch die RTT-Lib und X-/Y-/Z-Modem, könnte es je nach Flash-Größe eng werden. Und ständig "umflashen", nur um auf die SD-Karte zugreifen zu können, ist ja auch nicht so toll.
ui schrieb: > Es handelt sich um ein Projekt bei dem Schüler/Studenten bisserl > programmieren lernen sollen. MAL EIN BISSEL HERUMPROGRAMMIEREN? Und da denkst du dir etwas derart ungewöhnliches aus, siehst dich selber obendrein außerstande, es selbst zu realisieren - und willst damit Pädagogik betreiben? Also mein Lieber, denke dir besser etwas wirklich pädagogisch sinnvolles aus, als da wäre: - planvolles Herangehen an ein Gerätekonzept mit einem Mikrocontroller - sinnvolle Konzepte für low-level Treiber im Controller, angefangen beim simplen UART-In und -Out mit Zwischenpuffern und Entkopplung von Zugriffen und tatsächlichem Datenverkehr auf dem Übertragungsweg - bis hin zu selbigem, aber intern eben paketeweise per USB. Ein Gleiches dann auch für Dinge wie graqfische Displays, also Displaytreiber zur Hardware hin und GDI zu den Anwendungen hin. Und und und.. Sinn des Ganzen ist es, zu lernen, in der Firmware mit einer Art Schichtenmodell zu arbeiten, also die Algorithmen und die Ablaufgestaltung und die Lowlevel-Dienste voneinander zu trennen, damit nicht alles wie Kraut und Rüben durcheinander geht. Ich unterstelle mal, daß du den Schülern/Studenten tatsächlich Wissen und Können BEIBRINGEN willst - und dazu solltest du wenigstens etwas Ahnung nicht nur haben, sondern auch weitergeben können. Ich habe vor Jahren die "Lernbetty" für derartige Zwecke konzipiert und zusammen mit einigen (wenigen) anderen ist damals auch etwas draus geworden. Also versuche du mal, dein Thema, was du dir so vorgestellt hast, zu allererst in so ein (ähnliches) Dokument zu fassen. Jaja, für ein klares Konzept sollte man es möglichst frühzeitig in ein einigermaßen förmliches Dokument fassen, das sich lesen und diskutieren läßt. Zumeist merkt man beim Verfassen recht bald selber, wo man noch schwammig gedacht hat und hat dann Gelegenkeit, sich selber zu konkretisieren. Bei mir hat sich diese Verfahrensweise seit vielen langen Jahren als Geräteentwickler sehr bewährt, denn sie hält einen davon ab, in unausgegorene Spinnereien zu verfallen. W.S.
W.S. schrieb: > MAL EIN BISSEL HERUMPROGRAMMIEREN? > > Und da denkst du dir etwas derart ungewöhnliches aus, siehst dich selber > obendrein außerstande, es selbst zu realisieren - und willst damit > Pädagogik betreiben? > > Also mein Lieber, denke dir besser etwas wirklich pädagogisch sinnvolles > aus, als da wäre: > - planvolles Herangehen an ein Gerätekonzept mit einem Mikrocontroller > - sinnvolle Konzepte für low-level Treiber im Controller, angefangen > beim simplen UART-In und -Out mit Zwischenpuffern und Entkopplung von ... > läßt. Zumeist merkt man beim Verfassen recht bald selber, wo man noch > schwammig gedacht hat und hat dann Gelegenkeit, sich selber zu > konkretisieren. Bei mir hat sich diese Verfahrensweise seit vielen > langen Jahren als Geräteentwickler sehr bewährt, denn sie hält einen > davon ab, in unausgegorene Spinnereien zu verfallen. > > W.S. Vielleicht war es von mir etwas salopp ausgedrückt, aber schon (wie so oft) landen wir hier im forum bei Besserwisserei. Ja ich weiß, ich habe wenig über mein Projekt geschrieben, aber ich glaube ich konnte sehr klar in Worte fassen was das Problem ist und was ich gerne hätte. Es kamen auch ein paar gute Vorschläge, und jetzt kommst du und meinst alles besser zu wissen. Das Projekt ist schon ziemlich weit fortgeschritten, es geht auch gar nicht darum das Schüler die Welt der low-level Treiber kennenlernen. Macht manchmal Sinn, oft auch nicht. Also: leck mich.