(Scherz jetzt, obwohl mich mein Problem schier umbringt) Da sagt noch
einmal jemand etwas gegen ein Steckbrett: Nachdem ich eine Schaltung,
die auf dem Steckbrett super läuft, als PCB geroutet und bestückt habe,
läuft die Schaltung auf der Platine nicht.
Für alle die mich (mal wieder) anstänkern wollen: Ich suche den Fehler
ganz klar bei mir!!!
- Sagt mir bitte bitte bitte nicht, ich solle alle Leitungen auf der
Platine noch einmal kontrollieren, ich hab das bestimmt 1000 mal
gemacht. Ich habe eine noch unbestückte Platine genommen und alle
Verbindungen durchgeklingelt ob ich im PCB auch keine Leitung vergessen
habe (und das ganze zuvor natürlich auch im Layoutprogramm).
Ein Unterschied zum Steckbrett ist, dass ich auf dem PCB soviele GPIO
Pins auf einen Header gelegt habe, sollte ich mit der Platine etwas
anderes als EasyPdkProgrammer machen wollen.
Hier kann ich auch jeden einzelnen Pin auch ansprechen und Programme für
den STM32F72 über DFU-Util flashen
- ja, ich habe jedem Vcc-Pin einen 100nF Kondensator gegeben, auch dem
bei Vbat (den ich bei Fehlersuche auch einmal abgelötet habe. Es könnte
ja sein.
- ich habe die Dämpfungswiderstände in der USB-Leitung variiert, von 10
Ohm bis 100 Ohm in der E12 Reihe.
So, jetzt kommt mein Kuriosum, das mich schier "umbringt":
Die Platine habe ich "Scheibchenweise" aufgebaut (und dabei einen
eigentlichen Test "vergessen").
Zuerst also den STM32 aufgelötet mit sämtlichen 100nF Kondensatoren und
der Beschaltung für Reset und Boot0 mit samt den Tastern. Quarz 8 MHz
mit 22 pF Ziehkondensatoren, Header für ST-Link und USB-Buchse.
Leuchtdiode an PC15.
Erster Test: Versuch Programmupload mit ST-Link. Erfolgreich, Blinken
lassen an PC15 => LED blinkt
Zweiter Test: STM32 in Bootloadermodus versetzen und Blinkupload mittels
DFU-Bootloader (ST-Link ist natürlich abgezogen). Erfolgreich, Blinken
an PC15 funktioniert.
Aufbau Stepupwander, Messen der Spannung => Funktioniert.
Also den Rest bestückt (Fehler, ich hätte schon auch einmal die Firmware
des Programmers aufspielen sollen, hier hätte ich gemerkt, dass er sich
mit dem USB dann nicht anmeldet).
Das ist dann auch mein großes Problem, das mich schier umbringt.
Also, Firmware auf die Steckbrettversion aufgespielt (beide Chips sind
STM32F072C8) und dieselbe Binärdatei auf dem Seckbrett meldet sich an:
1
Bus 002 Device 003: ID 05e3:0607 Genesys Logic, Inc. Logitech G110 Hub
2
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
3
Bus 008 Device 002: ID 413c:2106 Dell Computer Corp. Dell QuietKey Keyboard
4
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
5
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
6
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
7
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
8
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
9
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
10
Bus 003 Device 014: ID 0483:5740 STMicroelectronics STM32F407
11
Bus 003 Device 012: ID 046a:000c Cherry GmbH
12
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Hier irritiert mich STMicroelectronics STM32F407 nicht, das war schon
immer so und ist in der Firmware (nicht von mir geschrieben) so
verankert.
Gleiche Firmware auf meine PCB-Version aufgespielt: Schaltung meldet
sich NICHT an.
Wie kann das sein? Die Verbindung zu USB (Hardware) muß doch
funktionieren, sonst könnte ich den Chip doch nicht mittels USB
DFU-Bootloader flashen.
Die Ausgabemeldung beim Flashen der Chips ist bei Steckbrett und PCB
absolut identisch.
By the way: Flashe ich den Chip mittels ST-Link funktionierts auf dem
Steckbrett (natürlich) und auf der Platine (natürlich) nicht!
Und dann meine (ganz eindeutige) Frage: was mache ich falsch und was
kann ich noch kontrollieren (bevor ich eine zweite Platine bestücke)?
PS: und im Anhang an die Blockkondensator-Fanatiker ein Screenshot des
PCB. Man kann die besser positionieren, aber glaubt ihr wirklich, dass
das daran liegt (immerhin geht ja DFU-Bootloader mit USB).
Ralph S. schrieb:> - ich habe die Dämpfungswiderstände in der USB-Leitung variiert, von 10> Ohm bis 100 Ohm in der E12 Reihe.
Zitat Datenblatt: No external termination series resistors are required
on USB_DP (D+) and USB_DM (D-); the matching impedance is already
included in the embedded driver.
Ralph S. schrieb:> By the way:
Spannungsregler belastet man an seinem Ausgang grundsätzlich
nicht mit grossen Kapazitäten. 10uF wären eine gängige Grösse.
Ausnahmen bestätigen die Regel.
Grosse Kapazitäten am Ausgang verschlechtern die Regel-
eigenschaften eines Spannungsreglers. Ob das bei deinem
"Design" eine Rolle spielt wage ich von hier aus nicht zu
beurteilen.
Zino schrieb:> Zitat Datenblatt: No external termination series resistors are required> on USB_DP (D+) and USB_DM (D-); the matching impedance is already> included in the embedded driver.
natürlich hatte ich die Widerstände auch schon draußen und mit 0-Ohm
Brücken gesetzt. Das war es nicht!
Zino schrieb:> Die Leiterplatte stimmt nicht mit dem Schaltplan überein. Der> 1,5kΩ-Widerstand von PA13 zu VBUS fehlt in letzterem. Der muß raus.Zino schrieb:> Die Leiterplatte stimmt nicht mit dem Schaltplan überein. Der> 1,5kΩ-Widerstand von PA13 zu VBUS fehlt in letzterem. Der muß raus.
Wenn du dir den Layoutscreenshot anschaust dann wirst du sehen, dass der
1,5k Widerstand erst über die Lötbrücke BR1 mit VBus verbunden wird. Ich
hatte die Platine so gemacht, dass sie eben auch für andere Dinge evtl.
genutzt werden kann.
Natürlich hatte ich den Widerstand zuerst draußen, aber in meiner "Not"
hab ich alles ausprobiert (auch die Dinge, die eigentlich keinen Sinn
machen.... :-) ich sollte sinnlose Dinge bleiben lassen).
Also, der 1,5k Widerstand ist es definitiv auch nicht !
Wastl schrieb:> Grosse Kapazitäten am Ausgang verschlechtern die Regel-> eigenschaften eines Spannungsreglers. Ob das bei deinem> "Design" eine Rolle spielt wage ich von hier aus nicht zu> beurteilen.
Weiß ich eigentlich auch (Regeflverhalten wird "langsam")... aaaaber
(auch wenn ich das nicht glaube) werde ich den C am Ausgang wegnehmen
(der ist eigentlich ein Angst-Kondensator des Stepup-Wandlers wegen).
Ralph S. schrieb:> was kann ich noch kontrollieren
Zeige den Verlauf deiner Masse im Layout. Auf dem Steckbrett
hast du ja nicht kapiert dass man Lastkapazitäten (nein, es
heisst nicht Ziehkondensatoren) mit ihrer Masse auf den
nächstgelegenen Massepin des Controllers legt und nicht auf
irgendeine Masse. Ja, Masse != Masse.
Ralph S. schrieb:> werde ich den C am Ausgang wegnehmen
Du brauchst direkt dort am Regler einen Kondensator, aber
keinen so grossen. Ohne geht's auch nicht.
Der Kondensator am Spannungsreglerausgang war es natürlich (leider) auch
nicht. Am Ausgang 100nF, dann 100nF // 1µF.... und 100nF // 4,7µF
Allerdings hatte ich nicht wirklich erwartet, dass der Fehler dort
liegt.
Puuuh, ich weiß gar nicht, wie oft ich kontrolliert habe, ob das
überhaupt der richtige Chip ist (hier habe ich unterschiedliche STM32 im
LQFP48 - Gehäuse)
Aber (auch hier leider): es ist ein STM32F072C8.
Natürlich habe ich auch das originale Programm überprüft. Da wird zwar
auch eine Datei eingebunden (Startupdatei) namens startup_stm32f072xb.S,
aber in der Beschreibung dort ist zu lesen, dass diese Datei
gleichermaßen für 072x8 und 072xb gilt. Der Unterschied der beiden liegt
im maximalen Flashspeicher (64k zu 128k), Ram ist bei beiden 16k. Das
Programm selbst bindet dann aber auch einen STM32F072C8TX_FLASH.ld ein,
in dem die Angabe
Wastl schrieb:> Zeige den Verlauf deiner Masse im Layout. Auf dem Steckbrett> hast du ja nicht kapiert dass man Lastkapazitäten (nein, es> heisst nicht Ziehkondensatoren) mit ihrer Masse auf den> nächstgelegenen Massepin des Controllers legt und nicht auf> irgendeine Masse. Ja, Masse != Masse.
Wenn du dir das Bild des Steckbretts (welches im Übrigen problemlos
läuft) genau anschaust, dann wirst du feststellen, dass die
LASTKAPAZITÄTEN (ist es nicht egal wie die geschrieben werden, jeder
weiß was damit gemeint ist) nicht auf die Masseschine des Bretts gehen,
sondern quer zum PIN 8 (eben Masse).
Dass das auf dem Steckbrett nicht besser geht, ist schlicht dem
geschuldet, dass es eben auf einem Steckbrett aufgebaut ist.
Auf dem Layout (komme ich gerade nicht ran) weiß ich, dass die
Masseverbindung schon sehr knapp an Pin 8 geht.
Im Übrigen finde ich das Wort "kapiert" schon xyz (zensiert),
"verstanden" wäre besser mal ganz davon abgesehen, dass ich das schon
sehr wohl verstanden habe! Von daher vielen Dank für die "Belehrung".
Natürlich habe ich, so gut es geht dennoch versucht das umzusezten was
du schreibst und einen Draht von den "Lastkapazitäten" direkt nach Pin 8
verlegt. Natürlich ohne Erfolg.
Dann habe ich ein kleines Programm geschrieben, dass über einen Timer
ein Rechtecksignal 4096 Hz an PA3 erzeugen soll. Ergebnis mit einem
alten Hameg Frequenzzähler HM8021-3 (was anderes habe ich halt nicht)
sagt mir, dass die Frequenz um kleiner als 60 ppm (nach unten) abweicht.
Glaubst du wirklich, dass mein Problem an einer Masseleitung bei den
Lastkapazitäten des Quarzes liegt (wenn doch ein DFU-Bootloading so
problemlos funktioniert).
Meine nächsten Versuche (allerdings nicht heute) werden sein, einen Chip
aus dieser Charge zu nehmen, ihn auf einer Adapterplatine löten und in
die Schaltung auf dem Steckbrett einsetzen um zu sehen wie der dort
reagiert.
Ralph S. schrieb:> Hier irritiert mich STMicroelectronics STM32F407 nicht, das war schon> immer so und ist in der Firmware (nicht von mir geschrieben) so> verankert.>> Gleiche Firmware auf meine PCB-Version aufgespielt: Schaltung meldet> sich NICHT an.>> Wie kann das sein? Die Verbindung zu USB (Hardware) muß doch> funktionieren, sonst könnte ich den Chip doch nicht mittels USB> DFU-Bootloader flashen.
Da gibt's schon einen Unterschied: Der Bootloader aktiviert CRS und
gewinnt den Takt für USB via HSI48 und CRS (s. AN2606 13.1). Bei der
Firmware ist das Sache der Firmware. Vielleicht über HSE und Quarz???
Wenn der Aufbau auf Steckbrett und Platine tatsächlich im Wesentlichen
identisch ist, spielt event. die Leitungsführung etc. am Quarz eine
Rolle. Schon eine geringe Abweichung von der Sollfrequenz, und USB
klappt nicht mehr (zuverlässig).
Sowohl HSI48 als auch PLL-Takt (nur die beiden sind für USB möglich)
kann man auf den MCO-Ausgang legen und messen - der Eingriff in die
Firmware ist minimal (wenn man die Sourcen hat und der Pin nicht
anderweitig fest belegt ist).
Das... wird dann eine heikle Sache, die Firmware liegt zwar im Source
vor, aaaaber, zumindest für mich, etwas sehr undurchsichtig. Ich werde
mal sehen ob ich nicht ein einfaches USB Programm selbst erstelle und
schau was geht oder nicht. Mit dem 72er habe ich das noch nie gemacht.
@Guido: einfache Sache: weil es die Firmware schon fix und fertig gibt.
Ralph S. schrieb:> Das... wird dann eine heikle Sache, die Firmware liegt zwar im Source> vor, aaaaber, zumindest für mich, etwas sehr undurchsichtig. Ich werde> mal sehen ob ich nicht ein einfaches USB Programm selbst erstelle und
Dann weiß man aber immer noch nicht, was die Firmware macht ...
> schau was geht oder nicht. Mit dem 72er habe ich das noch nie gemacht.
Testweise 8Mhz-Oszillator oder Funktionsgenerator statt Quarz
anschließen ...
Um einen Hardwarefehler auszuschließen könntest du ein kleines
Hello-World auf Basis der HAL oder dem hier im Forum veröffentlichten
Code ausprobieren.
Ich denke, die Vorschläge auf
http://stefanfrings.de/stm32/stm32l0.html#usb lassen sich mit minimalem
Aufwand für deinen Mikrocontroller anpassen.
Schwingt der Oszillator? Die Masseleitung von den C's zum GND scheint
mir recht lang zu sein, ggf. vertausche mal die Position des Quarzes und
der beiden C's. Ich persönlich schwöre ja auf fertige Oszillatoren:
klein und no trouble
Du hast die Vias sind in der Lötstop maske freigestellt. Eine Via ist am
Quarzgehäuse. Setz den Quarz mal ein paar 10tel mm höher. Pads am Quarz
sind auch sehr groß. Vermutlich produziert das Quarzgehäuse einfach
einen Kurzschluss.
Ich habe bei mir deshalb bei HC49 Quarzen auf der Top Seite immer eine
sehr kleine Freistellung in der Lötstopmaske. Das ist bei fest in den
Libs drin.
Im Anhang ein Beispiel
Den STM32F072 betreibe ich typischerweise mit einem 12MHz Quarz in
USB-Applikationen (oder eben quarzlos mit internem Oszillator und PLL
Tuning). Die 12MHz begegnen mir auch immer wieder in öffentlichen
Schaltplänen. Von daher finde ich die 8MHz zumindest ungewöhnlich (kann
aber natürlich so funktionieren).
Stephan S. schrieb:> Schwingt der Oszillator?
Gute Frage, zur Kontrolle könnte man clock out (MCO) benutzen. Und: Bei
diesem STM32 Modell kann die USB Schnittstelle auch ohne Quarz
funktionieren, wenn er entsprechend konfiguriert ist (mein vorhin
verlinktes Beispiel tut das).
Thomas Z. schrieb:> Du hast die Vias sind in der Lötstop maske freigestellt. Eine Via ist am> Quarzgehäuse. Setz den Quarz mal ein paar 10tel mm höher. Pads am Quarz> sind auch sehr groß. Vermutlich produziert das Quarzgehäuse einfach> einen Kurzschluss.
Das wäre das nächste was ich versucht hätte oder machen werde.
Harald A. schrieb:> Von daher finde ich die 8MHz zumindest ungewöhnlich (kann aber natürlich> so funktionieren).>
Na ja, ich habe die Firmware nicht geschrieben.
Stephan S. schrieb:> Die Masseleitung von den C's zum GND scheint mir recht lang zu sein,> ggf. vertausche mal die Position des Quarzes und der beiden C's.
Es sind 8mm. Die Platine ist fertig und da geht so einfach tauschen
nicht!
Ralph S. schrieb:> Es sind 8mm. Die Platine ist fertig und da geht so einfach tauschen> nicht!
Quarz und C's auslöten, Quarzoszillator mit Fädeldraht einlöten und mit
Heisskleber festmachen, dann ins Forum Thread "Quick & Dirty" :)
Sodele, mein Problem ist gelöst. Die Zusammenfassung meiner Versuche:
- mit dem eingelöteten Chip läuft USB ohne ext. Quarz nicht (was mich
stutzig gemacht hat)
- Chip aus der Charge auf einen Adapter gelötet und in das Steckbrett
gesteckt => läuft nicht (USB ohne ext. Quarz läuft hier auch nicht)
- Chip aus anderer Charge und STM32F072B (nicht 8) auf Adapter gelötet
und in das Steckbrett gesteckt => funktioniert
- neue Platine bestückt (sogar mit nicht wirklich vorteilhaftem Sockel
für den Quarz) und Chip STM32F072B => funktioniert sofort nach
einschalten.
Versuch mit dem funktionierenden PCB (und gesockeltem Quarz):
- DFU USB-Bootloader läuft beim STM32F072 auch ohne externen Quarz
Grundsätzlich stellt sich mir jetzt die Frage, ob es einen grundlegenden
Unterschied zwischen -8 und -C Typ gibt (was ich mir nicht vorstellen
kann, weil auf dem ursprünglichen Steckbrett ein -8 eingebaut ist), oder
ist da dann evtl. doch ein Fake-Chip zugange (Lieferant war
www.lcsc.com). Allerdings so recht glauben mag ich das nicht.
Wie dem auch sei: vielen Dank für die Hinweise, gelernt habe ich
einiges.
- im Gegensatz zu STM32F4 geht DFU auch ohne Quarz
- ich werde (da ich immer mehr Chips, min. 5, bestelle) einen Chip erst
ausserhalb einer Platine oder auf einer funktionierenden Platine testen.
Ralph S. schrieb:> Wie dem auch sei: vielen Dank für die Hinweise, gelernt habe ich> einiges.
Ein wichtiger Punkt darunter fehlt: Quarze sind rechte Mimosen ;-)
Andreas B. schrieb:> Ralph S. schrieb:>> Wie dem auch sei: vielen Dank für die Hinweise, gelernt habe ich>> einiges.> Ein wichtiger Punkt darunter fehlt: Quarze sind rechte Mimosen ;-)
Deswegen werden heute immer öfter fertige Oszillatoren verbaut, teils
sogar auf billigen µC-Platinen (Pico 2, ESP32-C3 ...)
Stephan S. schrieb:> Deswegen werden heute immer öfter fertige Oszillatoren verbaut, teils> sogar auf billigen µC-Platinen (Pico 2, ESP32-C3 ...)
na ja, am Quarz lag es ja nicht !
Einen Punkt habe ich, dank rubel-die-katz vergessen:
- ich habe mich seit gefühlt 1000den von Jahren wieder mit STM32 Cube
beschäftigt, normalerweise werkel ich mit libopencm3
Ralph S. schrieb:> Grundsätzlich stellt sich mir jetzt die Frage, ob es einen grundlegenden> Unterschied zwischen -8 und -C Typ gibt (was ich mir nicht vorstellen> kann, weil auf dem ursprünglichen Steckbrett ein -8 eingebaut ist)
Du könntest ja auch mal die vollständigen Device Typen angeben anstatt
immer von -8. -C und -B zu reden. Die Device Vielfalt ist bei ST ja
enorm. Dann könnte man in den DBs suchen.
Thomas Z. schrieb:> Du könntest ja auch mal die vollständigen Device Typen angeben anstatt> immer von -8. -C und -B zu reden. Die Device Vielfalt ist bei ST ja> enorm. Dann könnte man in den DBs suchen.
vom "-C" habe ich nicht gesprochen. Es sind die Typen STM32F072C8 und
STM32F072CB.
Beide besitzen ein gemeinsames Datenblatt (siehe auch Screenshot). Im
Datenblatt wird hier explizit aufgeführt: STM32F072x8/xB !
Aber für mich hat es sich sowieso erledigt, weil ich eben einen
STM32072C8 habe der funktioniert und einen, der nicht funktioniert
(warum auch immer).
Mittlerweile habe ich 3 Platinen komplett bestückt (weil 2 meiner
Bekannten des Programmer haben möchten) und alle 3 laufen einwandfrei !
Ralph S. schrieb:> vom "-C" habe ich nicht gesprochen.
Doch, hast du
Ralph S. schrieb:> Grundsätzlich stellt sich mir jetzt die Frage, ob es einen grundlegenden> Unterschied zwischen -8 und -C Typ gibt
Damit konnte ich auch nichts Anfangen, denn dein C8 ist beides, wenn man
es locker sieht. Nur ist dann nicht klar, welches Modell denn der andere
sein soll, der funktioniert.
Ralph S. schrieb:> vom "-C" habe ich nicht gesprochen. Es sind die Typen STM32F072C8 und> STM32F072CB.
natürlich hast du siehe
Beitrag "Re: USB Problem bei STM32F072C8"
ich habe dich auch korrekt zitiert.
Wenn man ins ERATA schaut sind dort 3 Chip Revisionen mit
unterschiedlichen Chip IDs aufgeführt.
Zumindest ein USB issue scheint in den beiden letzten Refs gefixt zu
sein.
"The USB BCD electrical parameter not in line with specification"
Mich würde das an deiner Stelle schon interessieren warum ein Chip geht
und der andere nicht.
Bei Quarzen gibt es viele Unterschiede, vielleicht mag der Controller
die alten dicken Quarze nicht. Es gibt eine AppNote von ST dazu. Ich
kenne die Probleme von den 32 kHz Quarzen, zum Strom sparen werden die
mit geringem Strom betrieben und einige Controller haben dafür eine
Einstellung.
Thomas Z. schrieb:> Mich würde das an deiner Stelle schon interessieren warum ein Chip geht> und der andere nicht.
sagen wir es einmal so: Ich habe entnervt aufgegeben, und neue
STM32F072C8 bestellt um zu sehen, ob das ein Ausrutscher war.
Außerdem bin ich auf der Suche, ob etwas bekannt darüber ist, ob der
Chip (ähnlich dem STM32F103) gefaked wurde und wenn ja, ob es ein
"Erkennungsprogramm" dafür gibt.
(boah, was "schwierig", wenn man die komplette Chipbezeichnung schreiben
soll. Es war doch klar, dass es hier um einen STM32F072 geht ... und da
sollte es doch eigentlich reichen wenn man schreibt: die C8 oder die CB
Version... oder auch x8 oder xB Version ... wie das ST in seinen
Datenblättern auch macht)
Ralph S. schrieb:> und da> sollte es doch eigentlich reichen wenn man schreibt: die C8 oder die CB> Version... oder auch x8 oder xB Version ... wie das ST in seinen> Datenblättern auch macht
Ja gerne, das hätte so gereicht.
Aber du hast Verwirrung gestiftet, indem nach den "generellen"
Unterschieden zwischen Modell -8 und -C fragtest, während es zuvor um
den STM32F072C8 ging.
Anders gesagt:
Ich habe hier einen kleinen roten Apfel. Wo ist nun der Unterschied
zwischen klein und rot? Sind kleine Äpfel grundsätzlich anders als rote?
(Falls ja: wie kann es dann sein, dass mein Apfel klein und rot ist?)