die Suche nach dem USB Problem mit diesem Board https://github.com/mcauser/MCUDEV_DEVEBOX_H7XX_M https://github.com/mcauser/MCUDEV_DEVEBOX_H7XX_M/blob/master/docs/STM32H7XX_M_schematics.pdf wurde mir noch erschwert duch ein Problem dem 32k LSE clock. Dieser wird für den LPTImer verwendet und weckt die CPU aus dem sleep mit WFI auf. Zum Testen habe ich den HSE dann auf den MCO1 geschaltet und siehe da, Frequenz = 0. Ich habe noch zwei Boards von diesen und die auch getestet: das zweite schwingt schon mehr, aber sehr schwankend mit ca. 25 +/- 5 kHz. Das dritte hatte einen korrekten Takt von 32,76 kHz. Sind diese 32 k Quarze generell so schlecht? Insgesamt machen diese DevEBox Boards einen guten Eindruck, mit über 20 € ist das auch keine Ramschware. Bringt es was den mit Lötkolben oder Heissluft nachzubraten? Den Quarz könnte ich vielleicht noch wechseln, aber die 10p C8/C9 sind eine Nummer zu klein.
ich habe jetzt den Quarz getauscht, durch einen etwas grösseren, aber gleicher Fehler: Frequenz springt bei ca. 25 kHz hin und her. Dann die C8/C9 ausgelötet und mit SMD Tester nachgemessen: glatte 10 pF wie soll im Schaltplan. Dann im RefMan gefunden das man beim H7 den Treiber vom Oszillator in vier Stufen einstellen kann, alle probiert, immer noch negativ. So, die __HAL_RCC_LSEDRIVE_CONFIG darf man nur verstellen wenn LSE nicht läuft. Nach einem Power off/on wirkt die Einstellung und die Uhr tickt richtig. Sheisse, ist der H7 kompliziert. Da wollte STM die beste ELWMS des Universums bauen. Und Mist, wie kriege ich die Mikroskopisch kleinen C wieder eingelötet?
Johannes S. schrieb: > wie kriege ich die Mikroskopisch kleinen C wieder eingelötet? Mit zwei Lötkolben mit kleinen spitzen Spitzen. Zur Unterstützung kann man mit einer Heizplatte (oder Ofenplatte) die gesamte Leiterplatte auf z.B. 80°C hochheizen, dann geht das schon recht einfach.
Johannes S. schrieb: > So, die __HAL_RCC_LSEDRIVE_CONFIG darf man nur verstellen wenn LSE nicht > läuft. Verrätst du uns noch auf welchen Wert du sie eingestellt hast damit dein Zeugs funktioniert?
aber sicher doch: Im RefMan RM0433 Rev 7, S. 424 ist die Beschreibung vom 'RCC Backup Domain Control Register (RCC_BDCR)'. Da gibts die Bits 'LSEDRV[1:0]: LSE oscillator driving capability', default ist 00: Lowest drive. Mein Quarz lief mit der nächsthöheren Einstellung '01: Medium low drive'. Um zu sehen was die Treibereinstellung macht muss man wieder ins Datasheet gucken, das sind 290 390 550 / 900 nA bei 00..11. Und man muss tatsächlich warten bis der clock weg ist, das dauert ein paar Sekunden bis der C von der Backup Power Domain leer ist. Oder vielleicht den HSE explizit vorher stoppen, aber die Einstellung macht man ja eigentlich nur einmal wenn man sie kennt. über die HAL Makros ging das mit:
1 | /** Configure LSE Drive Capability
|
2 | */
|
3 | HAL_PWR_EnableBkUpAccess(); |
4 | __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_MEDIUMLOW); |
und in dem __HAL_RCC_LSEDRIVE_CONFIG ist noch eine Revisionsabhängigkeit vom Chip mit drin, das will man nicht mehr alles selber über Registerprogrammierung machen.
Löt Mann schrieb: > Mit zwei Lötkolben mit kleinen spitzen Spitzen. ich hatte auch schonmal den Finger auf dem Button für eine zweite einfache Lötstation für sowas, war dann aber doch zu geizig. Aber ich glaube auch dafür darf ich zwei Tage lang keinen Kaffee getrunken haben :) Ich hatte auch schon Daten zu dem Quarz Y1 gesucht, da steht A805C drauf, aber google konnte mir nicht helfen. Was für ein Teil könnte das sein?
Johannes S. schrieb: > Was für ein Teil könnte das sein? Naja, eben ein 32KHz-Quarz in entsprechend kleiner Bauform, vermutlich das kleinste was zur Zeit erhältlich ist. Oder was willst du sonst noch darüber wissen? Deine Frage ist hiermit nicht klar genug gestellt.
welchen drive level der lt. Datenblatt braucht um das passend einzustellen. Es läuft jetzt mit minimum, reicht das? Zuviel ist nicht gut für die Lebensdauer habe ich gelesen, also macht es schon Sinn das richtig einzustellen. Das ist aber auch der este µC den ich habe der das so genau nimmt. Die Abmessungen sind 3,2 x 1,5 x 0,8 mm. Aber für heute habe ich genug Detektiv gespielt. doch noch bei Mouser geguckt, findet 53 mit diesen Abmessungen. Ich suche später weiter. Danke für die Tipps.
Johannes S. schrieb: > welchen drive level der lt. Datenblatt braucht um das passend > einzustellen. Es läuft jetzt mit minimum, reicht das? Der Einstellbereich umfasst einen Bereich 1 bis 3-fach, das ist jetzt nicht soviel dass man da was kaputt machen könnte. Ist wohl eher dazu gedacht den Oszillator sicher anschwingen zu lassen. Ich nehme an dass die interne Beschaltung dafür sorgt dass nicht zuviel Aussteuerung auf den Quarz kommt.
Bei Epson Quarzen in der Größe steht was von 0,5 und 1,0 μW Max.
Mit ner 0,2mm Lötspitze und der passenden Pinzette sollte das doch noch gehen? Jedenfalls danke für die Detektivarbeit. Johannes S. schrieb: > Sheisse, ist der H7 kompliziert. Warts ab bis du was mit den Caches zu tun hast ;) Aber da kann ich dir dann helfen, mit dem LSE hab ich einfach noch nie was zu tun gehabt.
Habe mich gerade mal hier durchgewühlt: https://www.st.com/resource/en/application_note/cd00221665-oscillator-design-guide-for-stm8afals-stm32-mcus-and-mpus-stmicroelectronics.pdf Ich behaupte mal der LSE Quarz ist das komplizierteste Teil bei dem Board Design, alleine die Liste der recommended parts für LSE ist 13 Seiten lang. Und mit 3,2 x 1,5 mm gehört der auf meinem Board schon zu den dicken Brummern... Der Default für den DL beim H7 ist jedenfalls definitiv zu niedrig für einen Quarz mit 10 pF Last C, die Einstellung mid-high sollte auch ok sein. Die Caches scheinen im Mbed Code berücksichtigt zu sein, da habe ich einige DSB/ISB in den ISR gesehen. Auch locks und Fallunterscheidungen für Dualcores, weil es geht ja noch komplizierter. Und in og Dokument sind die ST Familien aufgelistet, die Einstellungen für LSE sind sehr unterschiedlich.
Da erwarte ich eher sowas wie Cache clean/invalidate. (SCB_InvalidateDCache_by_Addr() / SCB_CleanDCache_by_Addr()) Die Membarriers sind für andere Dinge hilfreich. Warscheinlich haben die einfach per MPU in den Speicherbereichen der DMA Buffer den Cache deaktiviert. https://www.st.com/content/ccc/resource/technical/document/application_note/group0/08/dd/25/9c/4d/83/43/12/DM00272913/files/DM00272913.pdf/jcr:content/translations/en.DM00272913.pdf Nur damit du nicht in noch größere Probleme rennst ;)
Danke, das sind auch tückische Fehler weil die Ursache ja nicht so offensichtlich ist. ST scheint die H7 Serie trotzdem als Mädchen für alles zu sehen, wenn die schon beim STLink einen F103 durch einen H7 ersetzen.
Johannes S. schrieb: > Da gibts die Bits 'LSEDRV[1:0]: LSE oscillator driving capability', > default ist 00: Lowest drive. Mein Quarz lief mit der nächsthöheren > Einstellung '01: Medium low drive'. Da gibt's aber noch die nette Falle im Errata Sheet "2.2.14 LSE oscillator driving capability selection bits are swapped" bei Rev. Y gegenüber Rev. V zu beachten ...
Johannes S. schrieb: > ST scheint die H7 Serie trotzdem als Mädchen für alles zu sehen, wenn > die schon beim STLink einen F103 durch einen H7 ersetzen. Nein, das ist ein F723, kein H7. Der F723 ist wohl der einzige STM32 mit internem USB-HS-PHY. Irgendwie seltsam, bei NXP ist das eher normal, bei ST ein absoluter Exot.
A. B. schrieb: > Da gibt's aber noch die nette Falle im Errata Sheet Ja, schrieb ich ja das im HAL Makro die Revisionsabhängigkeit berücksichtigt wird: https://github.com/STMicroelectronics/STM32CubeH7/blob/beced99ac090fece04d1e0eb6648b8075e156c6c/Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_rcc.h#L7727-L7757 Aber da ist die Frage wo das Define RCC_VER_X herkommt, das muss ich wohl noch selber setzen. Edit: das RCC_VER_X wird im CMSIS header stm32h743xx.h für das device gesetzt. Die github Suche findet nicht alles, auch blöd. A. B. schrieb: > Nein, das ist ein F723, kein H7. Auch richtig, werfe gerne die F und H durcheinander. Und über den fehlenden HS Phy schimpfen auch viele. Vor allem weil die ULPI Anschlüsse schön verteilt sind, prima bei 8 Daten Leitungen @ 60 MHz.
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.