Hallo, bei allen China STM32H7 Boards die ich habe ist der Card detect Schalter nicht verdrahtet und führt dazu, wenn keine SD Karte gesteckt ist, das SDMMCx_SD_Init nicht funktioniert und in der Error Loop landet. Der Schalter ist am Adapter vorhanden, schaltet nach GND, und kann auf einen Eingang mit pullup, evtl. mit Schutzwiderstand, nach verdrahtet werden. Oder die HAL muss angepasst werden dann gibt es aber keinen Interrupt wenn Karte gesteckt/entfernt wird. Betroffen sind die Boards von Fanke und DevEBox mit STM32H750 oder STM32H743 Controller und von WEACT mit STM32H7R3. Ist das in China so üblich, den Pin nicht zu verdrahten ?
Hans-Georg L. schrieb: > Ist das in China so üblich, den Pin nicht zu verdrahten ? Nicht nur in China. Fakt ist nämlich, dass dieser primitive Mechanismus zur presence detection eigentlich überflüssig ist. Das kann man auch auf andere Weise ermitteln.
Ob S. schrieb: > Hans-Georg L. schrieb: > >> Ist das in China so üblich, den Pin nicht zu verdrahten ? > > Nicht nur in China. Fakt ist nämlich, dass dieser primitive Mechanismus > zur presence detection eigentlich überflüssig ist. Das kann man auch auf > andere Weise ermitteln. Und wie unterscheide ich zwischen einer defekten und einer nicht gesteckten Karte ?
Hans-Georg L. schrieb: > Und wie unterscheide ich zwischen einer defekten und einer nicht > gesteckten Karte ? Wozu sollte das wichtig sein? Benutzbar ist die Karte in beiden Fällen nicht und eine Fehlermeldung á la "Keine Karte gesteckt oder gesteckte Karte defekt" überläßt dem Benutzer die Wahl. Der wird ja wohl wissen, ob er eine reingesteckt hat oder nicht. Oder kann zumindest nachschauen.
Ob S. schrieb: > Hans-Georg L. schrieb: > >> Und wie unterscheide ich zwischen einer defekten und einer nicht >> gesteckten Karte ? > > Wozu sollte das wichtig sein? Benutzbar ist die Karte in beiden Fällen > nicht und eine Fehlermeldung á la "Keine Karte gesteckt oder gesteckte > Karte defekt" überläßt dem Benutzer die Wahl. Der wird ja wohl wissen, > ob er eine reingesteckt hat oder nicht. Oder kann zumindest nachschauen. Wenn du davon ausgehst, das immer eine Anzeige vorhanden und jemand vor Ort ist mag das sein. Wenn ich nun so etwas realisieren will ...
1 | if( detect_card() ) { |
2 | |
3 | if( connect_card() ) { |
4 | do_A() |
5 | else { |
6 | call_service(); |
7 | }
|
8 | |
9 | }
|
10 | else { |
11 | do_B(); |
12 | }}
|
Hans-Georg L. schrieb: > Wenn du davon ausgehst, das immer eine Anzeige vorhanden und jemand vor > Ort ist mag das sein. Auch wenn das nicht der Fall ist. Denn wenn niemand vor Ort ist, muss bei Nichtverfügbarkeit in jedem der beiden Fehlerfälle der Service gerufen werden, wenn eine funktionsfähige Karte benötigt wird, um den Job der Gesamtsache erledigen zu können. Was deinen Pseudocode betrifft: Was soll denn do_B() ausrichten? Den CD-Card-Einlegeroboter anwerfen?
Ob S. schrieb: > Hans-Georg L. schrieb: > >> Wenn du davon ausgehst, das immer eine Anzeige vorhanden und jemand vor >> Ort ist mag das sein. > > Auch wenn das nicht der Fall ist. Denn wenn niemand vor Ort ist, muss > bei Nichtverfügbarkeit in jedem der beiden Fehlerfälle der Service > gerufen werden, wenn eine funktionsfähige Karte benötigt wird, um den > Job der Gesamtsache erledigen zu können. > > Was deinen Pseudocode betrifft: Was soll denn do_B() ausrichten? Den > CD-Card-Einlegeroboter anwerfen? Nö warum, die Karte ist nur Optional. Wenn sie nicht da ist, ist es kein Fehler aber wenn sie da ist muss es die richtige sein und funktionieren. Plan B funktioniert immer ;-) Vor Ort hast du oft nur angelerntes Personal oder auch einen Endkunden. Da funktioniert das genau so: "Lauf mal dahin und stecke die Karte rein, wenn die grüne LED weiter leuchtet ist alles Ok, wenn sie ausgeht und die rote LED angeht rufe den Service an". Dazu muss der Bediener auch nicht in den Kartenslot steigen ;-))) Selbst die ganzen Arduino Adapter vom Chinesen haben den Kontakt herausgeführt, teilweise mit pullup und Längswiderstand.
Wer baut mit China Eval Boards Industrieprodukte mit Servicetechniker und Fernwartung?
Niklas G. schrieb: > Wer baut mit China Eval Boards Industrieprodukte mit Servicetechniker > und Fernwartung? Das ist eine ganz andere Frage. Es ging doch darum, das alle es angeblich so machen ... Ob S. schrieb: > Nicht nur in China. Fakt ist nämlich, dass dieser primitive Mechanismus > zur presence detection eigentlich überflüssig ist. Das kann man auch auf > andere Weise ermitteln. Dafür habe ich Beispiele aus der Praxis genommen. Bei einer Eigenentwicklung würde ich diese Leiterbahn und die 2 Widerstände auch nicht einsparen. Bisher ist auch noch nichts über alternative Methoden bekannt. Die Geschichte mit CD/D3 funktioniert nur mit 1Bit SPI. Die SDMMC benutzt aber 4 Bit Daten. Clock und CMD. Was wäre die Alternative ?. eine Menge clock Signale senden und schauen ob was an den anderen Pins wackelt und das im poll Modus ? . Da ist mir ein Pin mit Interrupt lieber.
Hans-Georg L. schrieb: > . Die Geschichte mit CD/D3 funktioniert nur mit 1Bit SPI. Die SDMMC > benutzt aber 4 Bit Daten. Nö, das 4bit Interface wird erst später aktiviert, die Karte startet im 1bit SDMMC ("SD bus") Modus (CMD, CLK, D0). Ist schon viele Jahre her, aber ich meine man kann die Karte wunderbar über D3 erkennen. Außer eben der Widerstand in der Karte ist defekt, das kann man dann nicht unterscheiden von "keine Karte drin".
:
Bearbeitet durch User
Niklas G. schrieb: > Hans-Georg L. schrieb: >> . Die Geschichte mit CD/D3 funktioniert nur mit 1Bit SPI. Die SDMMC >> benutzt aber 4 Bit Daten. > > Nö, das 4bit Interface wird erst später aktiviert, die Karte startet im > 1bit SDMMC ("SD bus") Modus (CMD, CLK, D0). > Ist schon viele Jahre her, aber ich meine man kann die Karte wunderbar > über D3 erkennen. Außer eben der Widerstand in der Karte ist defekt, das > kann man dann nicht unterscheiden von "keine Karte drin". ST scheint das aber nicht zu wissen. Die HAL schmiert bei der Initialisierung ohne Karte jedenfalls ab. Müsste ich mir bei Gelegenheit mal näher anschauen, habe aber im Moment andere Prioritäten. Mein Post war nur dazu gedacht darauf aufmerksam zu machen das es bei den Boards an der Stelle Probleme geben kann.
Hans-Georg L. schrieb: > Vor Ort hast du oft nur angelerntes Personal oder auch einen Endkunden. > Da funktioniert das genau so: "Lauf mal dahin und stecke die Karte rein, > wenn die grüne LED weiter leuchtet ist alles Ok, wenn sie ausgeht und > die rote LED angeht rufe den Service an". Kommt auf das Produkt an, man kann Speicherkarten auch versenden. Hans-Georg L. schrieb: > Selbst die ganzen Arduino Adapter vom Chinesen haben den Kontakt > herausgeführt, teilweise mit pullup und Längswiderstand. Unsinn, zeige mir den Anschluß auf dem Foto. Ich habe SD-Karten in selbst programmierter Umgebung im Einsatz, das ist es nicht schwierig, deren Abwesenheit oder Nichtbeschreibbarkeit zu erkennen.
Hans-Georg L. schrieb: > Niklas G. schrieb: >> Hans-Georg L. schrieb: >>> . Die Geschichte mit CD/D3 funktioniert nur mit 1Bit SPI. Die SDMMC >>> benutzt aber 4 Bit Daten. >> >> Nö, das 4bit Interface wird erst später aktiviert, die Karte startet im >> 1bit SDMMC ("SD bus") Modus (CMD, CLK, D0). >> Ist schon viele Jahre her, aber ich meine man kann die Karte wunderbar >> über D3 erkennen. Außer eben der Widerstand in der Karte ist defekt, das >> kann man dann nicht unterscheiden von "keine Karte drin". > > ST scheint das aber nicht zu wissen. Die HAL schmiert bei der > Initialisierung ohne Karte jedenfalls ab. Es wird Dir nicht helfen, aber Du bist nicht allein: https://community.st.com/t5/stm32-mcus-products/stm32h755-stalls-when-sdmmc-interface-is-enabled/td-p/207968 https://community.st.com/t5/stm32-mcus-products/sd-init-failure-on-stm32h743i-eval2-with-example-code/td-p/317214 https://stackoverflow.com/questions/78894967/sdmmc-not-working-on-stm32h7-ucontrollers Es scheint auch eine Abhaengigkeit von Firmware-Staenden zu geben. Ich erinnerte mich (an einem STM32F407) dass ich die MX_SDMMC1_SD_Init(void) veraendern musste (Start der Card in 1B-Bit, dann manuell auf 4Bit umschalten). Ob Dir bei einem H7 hilft, weiss ich nicht.
:
Bearbeitet durch User
Hans-Georg L. schrieb: > ST scheint das aber nicht zu wissen Das heißt nichts. Ich hatte damals meinen eigenen Treiber für SDIO/SDMMC implementiert. Ist nicht so schwierig.
Habe mir nochmal das RM durchgelesen, von der SDMMC Hardware wird bei der Karteninitialisierung der D3 pin nicht abgefragt. Man kann aber eine Bootsequenz schicken und einen acknowledge Interrupt mit Timeout aktivieren. Das könnte man der HAL Initialisierung vielleicht davor schalten. Aber bei all diesen Methoden muss ich in Abständen pollen ob eine Karte gesteckt oder gezogen wird. Den detect pin kann ich beim booten abfragen und später bekomme ich einfach einen Interrupt und kann sogar schneller reagieren. Die Karte dann initialisieren und mounten oder unmounten. Finde ich einfacher und den extra pin kann ich verschmerzen ;-).
Hans-Georg L. schrieb: > von der SDMMC Hardware wird bei der Karteninitialisierung der D3 pin > nicht abgefragt Ja, das macht man einfach per GPIO. Hans-Georg L. schrieb: > Den detect pin kann ich beim booten abfragen Den D3 Pin kann man exakt genau so abfragen. Hans-Georg L. schrieb: > später bekomme ich einfach einen Interrupt und kann sogar schneller > reagieren Der D3 Pin lässt sich sicher auch als Interrupt konfigurieren... Wenn man unbedingt auf die Mikrosekunde genau auf das Einstecken reagieren muss... Entprellen nicht vergessen. Hans-Georg L. schrieb: > Aber bei all diesen Methoden muss ich in Abständen pollen ob eine Karte > gesteckt oder gezogen wird Musst du sowieso immer, auch beim Detect Pin. Jeder Befehl kann schief gehen, das musst du erkennen können. Ob die Ursache Wackelkontakt oder Karte gezogen ist, ist für die Software egal.
Langsam klärt sich die Sache ... Nach etlichen erfolglosen Versuchen mit Oszi und einem Adapter habe ich folgendes gefunden: Die SDCard hat intern an D3 einen 50kOhm pullup, und kann mit einem externen (hochohmigen) pulldown detektiert werden. Quelle: https://community.st.com/t5/stm32-mcus-products/how-to-check-from-firmware-whether-sd-card-inserted-in-slot/td-p/370237 Das ist auch mit dem Oszi nachvollziehbar. Die von mir genannten Boards haben einen 10kOhm pullup auf D0,D1,D2,D3, also parallel zu den 50kOhm und daher funktioniert das bei den Boards nicht. Die HAL Funktion MX_SDMMC1_SD_Init initialisiert nicht nur das SDMMC Peripheral, sondern auch die "nicht" vorhandene Karte und geht deshalb in die Error Loop. jetzt sind wir hoffentlich wieder beieinander ;-)
Hans-Georg L. schrieb: > Die SDCard hat intern an D3 einen 50kOhm pullup, und kann mit einem > externen (hochohmigen) pulldown detektiert werden. Genau. > Die von mir genannten Boards haben einen 10kOhm pullup auf D0,D1,D2,D3, Schrott. Sollte sich aber mit Hilfe eines gewöhnlichen Lötkolbens innerhalb kürzester Zeit beheben lassen. Warum Schrott? Weil die Datenleitungen Push-Pull sind und Pullups bei hoher Geschwindigkeit störend wirken können. U.a. deswegen ist sogar der interne Pullup der Karte an D3 per Software-Kommando abschaltbar.
Ob S. schrieb: > Hans-Georg L. schrieb: > >> Die SDCard hat intern an D3 einen 50kOhm pullup, und kann mit einem >> externen (hochohmigen) pulldown detektiert werden. > > Genau. > >> Die von mir genannten Boards haben einen 10kOhm pullup auf D0,D1,D2,D3, > > Schrott. Sollte sich aber mit Hilfe eines gewöhnlichen Lötkolbens > innerhalb kürzester Zeit beheben lassen. > > Warum Schrott? Weil die Datenleitungen Push-Pull sind und Pullups bei > hoher Geschwindigkeit störend wirken können. U.a. deswegen ist sogar der > interne Pullup der Karte an D3 per Software-Kommando abschaltbar. Damit ist das Problem noch nicht ganz gelöst. Der Pulldown fehlt dann noch. Der interne Pulldown liegt auch bei ca. 50kOhm das ist zu wenig. Da ist ein Kondensator in der Nähe da müsst man GND abgreifen können.
Ob S. schrieb: > Warum Schrott? Weil die Datenleitungen Push-Pull sind und Pullups bei > hoher Geschwindigkeit störend wirken können. U.a. deswegen ist sogar der > interne Pullup der Karte an D3 per Software-Kommando abschaltbar. So ist es, mit ACMD42. Hans-Georg L. schrieb: > Da ist ein Kondensator in der Nähe da müsst man GND abgreifen können. Wenn du einen Pull-Down einlötest wird der wieder die Datenübertragung stören. Also wenn schon einen abschaltbaren externen Pulldown benutzen, oder den internen benutzen und per ADC prüfen ob die Spannung > 1V ist oder so...
Niklas G. schrieb: > Ob S. schrieb: >> Warum Schrott? Weil die Datenleitungen Push-Pull sind und Pullups bei >> hoher Geschwindigkeit störend wirken können. U.a. deswegen ist sogar der >> interne Pullup der Karte an D3 per Software-Kommando abschaltbar. > > So ist es, mit ACMD42. > > Hans-Georg L. schrieb: >> Da ist ein Kondensator in der Nähe da müsst man GND abgreifen können. > > Wenn du einen Pull-Down einlötest wird der wieder die Datenübertragung > stören. Also wenn schon einen abschaltbaren externen Pulldown > benutzen, oder den internen benutzen und per ADC prüfen ob die Spannung >> 1V ist oder so... Das ganze war ein Missverständnis, ich bin davon ausgegangen die 10k Pullups sind ok und man muss die SD karte irgendwie anschubsen damit sie D3 auf 0 zieht. Deshalb haben wir auch wegen dem pollen aneinander vorbei geredet. Hat sich aber jetzt geklärt. Dann ist es wohl einfacher die Widerstände aus löten und den mechanischen Schalter zu benutzen. Bisher hatte noch keine Probleme ein paar Bytes in File zu schreiben und sie zurück zu lesen. Aber wenn man Probleme vermeiden kann sollte man es tun ...
Niklas G. schrieb: > Also wenn schon einen abschaltbaren externen Pulldown > benutzen Ich mache das ganz ohne Pulldown. Sehr kurzen Low-Puls auf den µC-Ausgang, dann umschalten auf Eingang und ein paar Mal in gewissen Zeitabständen (µs) nachschauen, ob da jeweils immer noch Low zu sehen ist. Falls das durchgängig bei den letzten drei Messungen nicht so ist, ist es recht wahrscheinlich, dass der Pullup einer eingelegten Karte seine Hand im Spiel hat.
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.

