Forum: FPGA, VHDL & Co. SD-Karte initialisiert sporadisch nicht auf älterem Embedded-System (ATmega + Spartan-6)


von Yannick F. (Firma: LEWATANA) (yannick_2010)



Lesenswert?

Hallo zusammen,

ich habe ein Problem mit einem älteren Embedded-System und komme alleine 
nicht mehr weiter.
Generell ist zu sagen, dass wir nur eine Firma sind welche dieses System 
nutzt wir sind nicht der Hersteller. Dieser stellt sich aber leider quer 
und möchte uns nicht wirklich mit unseren SD-Karten Problemen helfen. 
Daher bin ich als einziger Softwareentwickler in dieser Firma nun in das 
Embedded System eingetaucht und versuche aktuell die Ursache unseres 
Problemes zu finden.

Es geht um einen sogenannten „Batcorder“ (Fledermaus-Detektor), der wohl 
ursprünglich um ~2004 entwickelt wurde.
Verbaut sind u. a.:

ein AVR-Mikrocontroller (vermutlich ATmega128A)
ein FPGA (Xilinx Spartan-6)
SD-Karten-Slot (kein SPI, sondern SD-Mode)
Die SD-Karte wird also im nativen SD-Modus angesprochen.

Ich komme auch gleich zu unserem Problem:

Ältere Karten (z. B. SanDisk Ultra 64 GB, gekauft ~2023)
→ funktionieren immer
neue Karten (gleiche Serie, gekauft ~2025/2026)
→ in ca. 98 % der Fälle Fehler beim Start („SD Card Error“)
→ in seltenen Fällen (~2 %) funktioniert dieselbe Karte ganz normal, 
aber auch nur bis zu einem Restart dann funktioniert sie meistens nicht.

Die neuen Karten selbst sind in Ordnung, am PC und in Kameras 
funktionieren sie einwandfrei.

Was ich bisher gemacht habe
Ich habe die Firmware decompiled und mithilfe von KI interpretieren 
lassen, ich bin schnell zu dem Entschluss gekommen, dass die SD-Karten 
Initialisierung über den FPGA läuft, das habe ich mir auch von einem 
Bekannten bestätigen lassen, der sich mit embedded Entwicklung auskennt.

Ich habe die Kommunikation zwischen Gerät und SD-Karte mit einem Logic 
Analyzer (Kingst LA2016) aufgenommen und mit sigrok/PulseView dekodiert.

Dabei sehe ich im Prinzip zwei Verläufe:

Fall 1 – funktioniert
CMD13
CMD0
CMD8 (Antwort kommt korrekt zurück)
danach mehrere CMD55 / ACMD41
irgendwann geht es weiter mit CMD2, CMD3, CMD7 usw.

Fall 2 – funktioniert nicht
CMD13
CMD0
CMD8 (auch hier kommt eine Antwort zurück)
danach CMD55 / ACMD41 in einer Schleife
die Karte kommt aber nie aus dieser Phase raus
es geht nicht weiter zu CMD2/CMD3

Auffälligkeiten
Die Kommunikation an sich funktioniert, es kommen Antworten von der 
Karte
CMD8 wird korrekt beantwortet, also scheint Spannung / Kartentyp 
grundsätzlich zu passen
Das Problem scheint bei der Initialisierung (ACMD41) zu liegen. Ich habe 
dort eine Sache beobachten können, und zwar wird von dem Host das Busy 
Bit falsch mitgeschickt zumindest sollte es laut "SD Specifications Part 
1 Physical Layer" 0 sein und nicht 1. Hier die Quelle zu der PDF 
https://www.sdcard.org/downloads/pls/pdf/?p=Part1_Physical_Layer_Simplified_Specification_Ver9.10.jpg&f=Part1PhysicalLayerSimplifiedSpecificationVer9.10Fin_20231201.pdf&e=EN_SS9_1 
.

Ich vermute aktuell eher ein Problem mit der Art, wie die 
Initialisierung implementiert ist
Evtl. reagieren neuere Karten empfindlicher auf bestimmte Parameter oder 
Abläufe?
Ich bin mir aber nicht sicher, ob ich da auf dem richtigen Weg bin.

Wir brauchen eine Technisch fundierte Aussage, damit der Hersteller 
seine Geräte die einen Stück Preis von 3-4k€ haben endlich fixen…


Ich hänge euch noch die Sigrok mitschnitte an.
"SD_2023_200MHz_5GSamples" ist ein Mitschnitt von einer 2023 Karte die 
immer funktioniert
"SD_2026_200MHz_5GSamples" ist ein Mitschnitt von einer 2026 Karte die 
fast nie funktioniert
"SD_2026_200MHz_5GSamples_funktioniert?" Ist ein Mitschnitt wo es beim 
Testen 1-2 mal funktioniert hat, den ich zum Glück mitschneiden konnte 
:D

Fragen
Hat jemand schon einmal ein ähnliches Verhalten gesehen, dass:

Neuere SD-Karten auf älterer Hardware nur sporadisch initialisieren?
Die Initialisierung in einer CMD55/ACMD41-Schleife hängen bleibt?

Oder gibt es bekannte Stolperstellen bei der SD-Initialisierung 
(SD-Mode, nicht SPI), die bei neueren Karten problematisch sind?

Danke schon mal für eure Hinweise!

: Bearbeitet durch User
von Vanye R. (vanye_rijan)


Lesenswert?

Deine ganze Vorgehensweise ist grosser Misst. Besorg dir den Source, 
stelle fest an welcher Stelle etwas schief laeuft, verstehe warum das so 
ist und verbesser die ganze Sache.

Der Grund wieso die meisten Leute keinen Bock haben SD-Karten selber zu 
programmieren sondern lieber eine fertige Libary (elm-chan) nutzen liegt 
darin das es wohl tausende von unterschiedlichen SD-Karten gibt die sich 
alle in irgendwelchen Kleinigkeiten unterscheiden.
Ich hab anfang der 2000er mal sowas programmiert und hatte da bestimmt 
20-30 unterschiedliche Karten zum testen. Heute brauchst du vermutlich 
10-100x soviele. Da ist natuerlich fremder Code den 10000Leute im 
Internet mit jeweils 20 verschiedenen Karten genutzt haben und da auf 
unterschiedlicher Hardware irgendwie robuster.
Und es muss auch keinesfalls an dir liegen wenn etwas nicht geht. Es 
kann durchaus auch Karten geben die an einer Stelle etwas neben der Spec 
liegen. Besonders hervorgetan haben sich da immer "intelligente" Karten. 
Also Karten die gleichzeitig SD-Karte und USB-Stick oder 
Wlan-Accesspoint sind.

Es kann aber auch an der Hardware liegen. Es gab da ein paar Vorgaben 
zum Stromverbrauch in dem Moment wo man eine Karte einsteckt. Pruef also 
wenigstens mal wie die Spannungen aussehen wenn du das machst. Das 
wuerde dazu passen das dein Verhalten mit einer Karte nicht immer gleich 
ist.

Alles in allem hast du da eine grosse Dose mit Wuermern geoeffnet. Viel 
Spass. :)

Naja, und warum man fuer soetwas ein FPGA braucht wollen wir auch lieber 
nicht wissen.

Vanye

von Yannick F. (Firma: LEWATANA) (yannick_2010)


Lesenswert?

Vanye R. schrieb:
> Deine ganze Vorgehensweise ist grosser Misst.

Kann sein, lässt sich aber auch etwas sachlicher formulieren.
Ich komme ursprünglich aus der Softwareentwicklung und habe mit 
Embedded-Systemen bisher wenig Erfahrung, daher taste ich mich da gerade 
heran.
Hintergrund ist, dass wir aktuell mit dem Hersteller der Geräte in 
Diskussion sind, der sämtliche Probleme pauschal auf die SD-Karten 
schiebt.
Wir haben inzwischen Karten von 6 verschiedenen Herstellern und etwa 9 
unterschiedliche Serien getestet. Bisher funktioniert von den neueren 
Karten nur eine (Intenso) zuverlässig.
Die SanDisk Ultra Karten aus einer älteren Charge (~2023) funktionieren 
hingegen problemlos, die neueren (~2026) dagegen überwiegend nicht mehr.

Vanye R. schrieb:
> Besorg dir den Source,
> stelle fest an welcher Stelle etwas schief laeuft, verstehe warum das so
> ist und verbesser die ganze Sache.

Da sich der Hersteller aktuell querstellt und alles auf die SD-Karten 
schiebt, gehe ich nicht davon aus, dass wir Zugriff auf den Source Code 
bekommen werden.
Ich sehe uns als Kunden auch nicht in der Verantwortung, die Firmware 
eines solchen Geräts selbst zu debuggen oder anzupassen.
Da der Hersteller aber aktuell keine Lösung anbietet, versuchen wir 
zumindest nachzuweisen, dass das Problem nicht einfach pauschal an 
„ungeeigneten SD-Karten“ liegt.

Vanye R. schrieb:
> Es kann aber auch an der Hardware liegen. Es gab da ein paar Vorgaben
> zum Stromverbrauch in dem Moment wo man eine Karte einsteckt. Pruef also
> wenigstens mal wie die Spannungen aussehen wenn du das machst. Das
> wuerde dazu passen das dein Verhalten mit einer Karte nicht immer gleich
> ist.

Das ist ein guter Hinweis, danke dafür. :)
Gerade weil dieselbe Karte gelegentlich funktioniert und meistens nicht, 
passt das tatsächlich gut ins Bild. Das werde ich mir als nächsten 
Schritt genauer anschauen.

Vanye R. schrieb:
> Alles in allem hast du da eine grosse Dose mit Wuermern geoeffnet. Viel
> Spass. :)

Ja, leider.
Wir sind auf die Geräte angewiesen und haben davon auch entsprechend 
viele im Einsatz, daher ist das Thema für uns nicht ganz trivial. :/
Die Probleme bestehen schon seit Jahren, wurden aber bisher immer mit 
dem Hinweis auf „inkompatible SD-Karten“ abgetan. Inzwischen 
funktionieren jedoch fast keine neueren Karten mehr, während 
gleichzeitig empfohlen wird, die Karten regelmäßig durch neue zu 
ersetzen. Das macht die Situation natürlich nicht einfacher.
Dadurch das ich seit einem Jahr als Softwareentwickler in der Firma bin, 
wurde ich nun darauf angesetzt… Eigentlich Programmiere ich nur Web-Apps 
und QGis Plugins :D

von Vanye R. (vanye_rijan)


Lesenswert?

> Ich sehe uns als Kunden auch nicht in der Verantwortung, die Firmware
> eines solchen Geräts selbst zu debuggen oder anzupassen.

Da stimme ich dir zu. Im Zweifel schick dem doch 2-3 Problemkarten und 
bitte um eine Stellungnahme. Wenn ihr das so einkauft sollte das 
wirklich nicht euer Problem sein. Allerdings moechte ich auch kein 
Hersteller sein der garantiert das es mit jeder Karte laeuft. :)

> Das werde ich mir als nächsten Schritt genauer anschauen.

Pruef mal ob die Spannung beim reinstecken unzulaessig zusammenbricht. 
Ich bin da jetzt auch nicht mehr so drin, aber da gab es vorgaben zu 
bestimmten Kapazitaeten. Ich koennte auch vorstellen das gerade neue und 
sehr schnelle Karten viel Strom ziehen. Allerdings sollte das dann ja 
nicht schon bei der Initialisierung auftreten.

Vanye

von Falk B. (falk)


Lesenswert?

Yannick F. schrieb:
> Ältere Karten (z. B. SanDisk Ultra 64 GB, gekauft ~2023)
> → funktionieren immer
> neue Karten (gleiche Serie, gekauft ~2025/2026)
> → in ca. 98 % der Fälle Fehler beim Start („SD Card Error“)
> → in seltenen Fällen (~2 %) funktioniert dieselbe Karte ganz normal,
> aber auch nur bis zu einem Restart dann funktioniert sie meistens nicht.

Sowas hatte ich auch mal.

Beitrag "Intitialisierung einer SD-Karte"
Beitrag "Re: Intitialisierung einer SD-Karte"

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Yannick F. schrieb:
> Da sich der Hersteller aktuell querstellt und alles auf die SD-Karten
> schiebt,

Koennt ihr nicht die SD-Karten ueber den Hersteller beziehen? Klar, kann 
schon sein, dass der dann Apothekenpreise dafuer aufruft, aber ihr habt 
dann das Problem vom Schuh, denn dann ist es zweifelsfrei seines.

Gruss
WK

von Yannick F. (Firma: LEWATANA) (yannick_2010)


Lesenswert?

Dergute W. schrieb:
> Koennt ihr nicht die SD-Karten ueber den Hersteller beziehen? Klar, kann
> schon sein, dass der dann Apothekenpreise dafuer aufruft, aber ihr habt
> dann das Problem vom Schuh, denn dann ist es zweifelsfrei seines.
>
> Gruss
> WK

Würden wir ja liebend gerne, wenn sie das Anbieten würden. Ihre Aussage 
dazu war, dass sie keine SD-Karten empfehlen könnten, aufgrund von sich 
ständig wechselnder Qualität der SD-Karten… Wirklich im Thema sind sie 
da anscheinend auch nicht und es wird alles pauschal auf minderwertige 
SD Karten geschoben, das kann ja aber nicht sein, da jedes andere Gerät 
was wir mit SD-Karten nutzen, mit der neuen Charge funktioniert nur 
ihres nicht.
Wenn sie sowas fahren würden wie Siemens es zum Beispiel tut und wir 
dafür funktionierende Karten hätten wären wir ja Happy. Auf deren 
Website schreiben sie nur Folgendes zu den SD-Karten: "Gespeichert 
werden die Aufnahmen auf SDHC/SDXC-Speicherkarten."

Ich kann es verstehen, dass nicht alle SD-Karten unterstützt werden 
können, aber dann sollte man nicht sowas schreiben und dem potenziellen 
Käufer vermitteln das man handelsübliche SD-Karten verwenden kann und 
dann in der Realität Karten die vor 2-3 Jahren noch funktionierten in 
der neuen Charge plötzlich nicht mehr gehen.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Yannick F. schrieb:
> Würden wir ja liebend gerne, wenn sie das Anbieten würden. Ihre Aussage
> dazu war, dass sie keine SD-Karten empfehlen könnten, aufgrund von sich
> ständig wechselnder Qualität der SD-Karten… Wirklich im Thema sind sie
> da anscheinend auch nicht und es wird alles pauschal auf minderwertige
> SD Karten geschoben,

Eine beliebte Standardausrede. ;-)

> das kann ja aber nicht sein, da jedes andere Gerät
> was wir mit SD-Karten nutzen, mit der neuen Charge funktioniert nur
> ihres nicht.

Eben.

> Ich kann es verstehen, dass nicht alle SD-Karten unterstützt werden
> können, aber dann sollte man nicht sowas schreiben und dem potenziellen
> Käufer vermitteln das man handelsübliche SD-Karten verwenden kann und
> dann in der Realität Karten die vor 2-3 Jahren noch funktionierten in
> der neuen Charge plötzlich nicht mehr gehen.

Das Problem liegt bei euch. Kann Software oder Hardware sein. Und 
normale SDHC/SDXC Karten sind ja nun weiß Gott keine Raktenwissenschaft. 
Man sollte versuchen, daß Problem einzukreisen. Erstmal nur mit 
einfachen, alten SDHC Karten testen. Dann mit neuen SDHC. SDXC zum 
Schluß.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Yannick F. schrieb:
> Wirklich im Thema sind sie
> da anscheinend auch nicht und es wird alles pauschal auf minderwertige
> SD Karten geschoben, das kann ja aber nicht sein, das jedes andere Gerät
> damit funktioniert nur ihres nicht.

Ja, wuerd' ich dann auch so sehen, dass die selber im Dunkeln tapsen und 
es nicht gebacken kriegen. Dann wird wohl nur der Wechsel zu einem 
anderen Hersteller helfen koennen.
Dass du da selber ohne Info/SW/HW-Unterlagen vom Hersteller verlaesslich 
auf was Zielfuehrendes stoesst, halte ich fuer ziemlich 
unwahrscheinlich.

Gruss
WK

von Yannick F. (Firma: LEWATANA) (yannick_2010)


Lesenswert?

Dergute W. schrieb:
> Ja, wuerd' ich dann auch so sehen, dass die selber im Dunkeln tapsen und
> es nicht gebacken kriegen. Dann wird wohl nur der Wechsel zu einem
> anderen Hersteller helfen koennen.
> Dass du da selber ohne Info/SW/HW-Unterlagen vom Hersteller verlaesslich
> auf was Zielfuehrendes stoesst, halte ich fuer ziemlich
> unwahrscheinlich.
>
> Gruss
> WK

Das habe ich mir leider schon fast gedacht, dass wir so nicht viel 
weiter kommen werden. Ich hätte nur gerne eine Technisch fundierte 
Aussage die ich dem Hersteller um die Ohren werfen könnte, um so 
Aussagen wie:

> Man kann nicht sagen, dass wenn die eine SanDisk High Endurance 128GB gut 
funktioniert, dann muss die andere SanDisk High Endurance 128GB auch gut laufen!
> Es geht nicht darum, dass bestimmte Marken oder Kartengrößen generell zu Fehler 
führen.

oder:
> meine Kollegin hat Sie ja schon darauf hingewiesen bitte keine Micro-SD zu 
verwenden. Micro-SD sind nicht 100% kompatibel mit SD-Karten!

oder:
> Vereinfacht gesagt gibt es weltweit einige wenige Firmen bei denen alle SD 
Karten Hersteller einkaufen, je nachdem wo Bauteile verfügbar oder günstig sind. 
Daher können in SD Karten desselben Herstellers ja sogar innerhalb der gleichen 
Charge unterschiedliche Bauteile verwendet werden, egal welcher Marke und egal ob 
billig im Discounter oder teuer im Fachhandel gekauft.

zu entkräften. Aus meiner Sicht wird da viel mit nicht vorhandenem 
Wissen argumentiert und versucht sich aus der Verantwortung zu ziehen. 
Ich habe auch kein fundiertes wissen dazu, aber alles, was ich im 
Internet dazu finde und mir von Bekannten ran hole spricht eindeutig 
gegen ihre Aussagen...

von Yannick F. (Firma: LEWATANA) (yannick_2010)


Lesenswert?

Falk B. schrieb:
> Sowas hatte ich auch mal.
>
> Beitrag "Intitialisierung einer SD-Karte"
> Beitrag "Re: Intitialisierung einer SD-Karte"

Danke das werde ich mir auch mal anschauen! :)

von Gerd E. (robberknight)


Lesenswert?

Ausreichende Stromversorgung ist für SD-Karten essentiell. Schnellere 
Karten haben oft einen schnelleren Prozessor und der zieht oft mehr 
Strom, vor allem beim Initialisieren. Da neuere Karten tendenziell 
schneller sind, kann das daher gut mit dem Alter korrellieren.

Nimm doch mal ein Oszi, ordentliche Anbindung des Tastkopfes und keine 
Krokoklemme, und miss damit die Stromversorgung der SD-Karte beim 
Initialisieren. Am besten natürlich mit einer Power-Rail-Probe oder auch 
mit einer guten Differenziellen.

Wie weit bricht da die Spannung ein?

Dann vergleich das zwischen einer guten und einer problematischen Karte.

Dann löte nen dicken Polymer-Elko, so 470µ aufwärts, genau an die 
Versorgungspins direkt an dem SD-Kartenschacht an und probier nochmal.

: Bearbeitet durch User
von Dieter S. (ds1)


Lesenswert?

Yannick F. schrieb:
>
> Ich habe die Firmware decompiled und mithilfe von KI interpretieren
> lassen, ich bin schnell zu dem Entschluss gekommen, dass die SD-Karten
> Initialisierung über den FPGA läuft, das habe ich mir auch von einem
> Bekannten bestätigen lassen, der sich mit embedded Entwicklung auskennt.

Ich nehme an es geht um die Geräte von ecoObs.

Zumindest für die Firmware des GSM-batcorder 1.0 von hier

https://www.ecoobs.de/firmwaregsm.html

die auf einem AVR basiert erfolgt die Ansteuerung der SD-Card vom AVR, 
auch wenn vielleicht ein FPGA beteiligt ist (ich habe nur kurz in die 
Firmware geschaut). Man sieht auf jeden Fall dort auch die 
Initialisierung.

: Bearbeitet durch User
von Yannick F. (Firma: LEWATANA) (yannick_2010)


Lesenswert?

Dieter S. schrieb:
> Ich nehme an es geht um die Geräte von ecoObs.
>
> Zumindest für die Firmware des GSM-batcorder 1.0 von hier
>
> https://www.ecoobs.de/firmwaregsm.html
>
> die auf einem AVR basiert erfolgt die Ansteuerung der SD-Card vom AVR,
> auch wenn vielleicht ein FPGA beteiligt ist (ich habe nur kurz in die
> Firmware geschaut). Man sieht auf jeden Fall dort auch die
> Initialisierung.

Du bist fast richtig :D
Es geht um die Batcorder 3.1 https://ecoobs.de/firmware31.html

von Dieter S. (ds1)


Lesenswert?

Yannick F. schrieb:
>
> Es geht um die Batcorder 3.1 https://ecoobs.de/firmware31.html

Und auch da initialisiert der AVR die SD-Card.

von Yannick F. (Firma: LEWATANA) (yannick_2010)


Lesenswert?

Dieter S. schrieb:
> Und auch da initialisiert der AVR die SD-Card.

Uuh das ist natürlich ein sehr guter Hinweis!
Könntest du mir bitte verraten, wie du die Firmware dekompiliert hast? 
:)
Evtl. habe ich da auch etwas falsch gemacht oder die KI hat einfach 
schlichtweg das, was dekompiliert wurde falsch interpretiert.

Vielen Dank schonmal für deinen Beitrag :)

von Dieter S. (ds1)


Lesenswert?

Jeder Disassembler kann das, man nimmt aber für solche Dinge 
üblicherweise Ghidra oder IDA Pro.

Und man sieht mit entsprechender Erfahrung sofort dass z.B. das hier der 
Code für ein "CMD8" an die SD-Card ist:

1
CMD_8:
2
3
  sbi PORTD, PORTD6
4
  nop
5
  nop
6
  nop
7
  nop
8
  cbi PORTD, PORTD6
9
  ldi r16, 0x48
10
  sts 0x1300, r16
11
  clr r16
12
  sts 0x1300, r16
13
  sts 0x1300, r16
14
  ldi r16, 1
15
  sts 0x1300, r16
16
  ldi r16, 0xAA
17
  sts 0x1300, r16
18
  sts 0x1300, r16
19
  ret

Die anderen SD-Card Kommandos findet man ebenfalls in der Firmware.

Nur gut dass die KI ja alles kann...

von Kilo S. (kilo_s)


Lesenswert?

Ich finde Ghidra ganz gut.
Damit schau ich mir die FW der Vapes an, den Output durch die KI jagen 
geht auch sehr gut und bringt viel zu Tage.

IDA Pro kostet halt Geld.

von Yannick F. (Firma: LEWATANA) (yannick_2010)


Lesenswert?

Dieter S. schrieb:
> Nur gut dass die KI ja alles kann...

Deshalb ist es gut, dass es so Menschen wie dich gibt!
Vielen Dank das du da nochmal nachgeschaut hast und mich entsprechend 
korrigiert hast, das macht eine Anpassung der Firmware für den 
Hersteller theoretisch ja noch einfacher :D
Genau für sowas habe ich mich auch an dieses Forum gewendet, KI kann 
eben nicht alles und man sollte das ganze auch nochmal hinterfragen. 
Grad, wenn einem die Erfahrung fehlt, kann da viel Mist bei Herumkommen.

Wenn man in seinem Bereich Ahnung hat und dann die KI als Werkzeug nutzt 
um schneller zu einem Ergebnis zu kommen, kann dabei auch was Gutes bei 
Herumkommen. Aber ohne Expertise ist das meist schwierig einzuschätzen, 
ob das, was die KI ausgibt, auch richtig ist.

Vielen Dank für deinen Beitrag! :)

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.