Guten Morgen, auf der Suche nach dem Fehler auf einer anderen Leiterplatte bin ich auf ein Kuriosum gestoßen. Ich will ein ILI9341 per SPI mit einem STM32F407 ansteuern. Das funktioniert hervorragend bis 42 MHz mit SPI1 und SPI2. Bei SPI3 funktionieren nur Takte bis 18 kHz, also Vorteiler 256. Schon bei Vorteiler 128 versagt die Verbindung. SPI3 unterscheidet sich von den beiden anderen, da hier 10k-Pull-Ups verbaut sind (für ein SDIO-Interface). Da ich nicht damit gerechnet habe, daß diese Pull-Ups für das Nicht-funktionieren verantwortlich sein können, habe ich erst einmal nach Nebenschlüssen etc. gesucht, um schließlich den Einfluß in einem anderen Aufbau (siehe Bild) nachzuspielen. Und tatsächlich: Ein 10k-Pull-Up in der Clock-Leitung sorgt dafür, daß maximal 18 kHz SPI-Takt noch funktionieren (per Bit-Banging gehen immer noch 12 MHz), während es ohne trotz des primitiven fliegenden Aufbaus bis 42 MHz funktioniert. Es bleibt die Frage: Warum? Wie kann ein 10-Kiliohm-Pull-Up den SPI derart heftig beeinflussen? Ein Pull-Down der gleichen Größe hat übrigens keine negativen Auswirkungen. Zur Quellimpedanz finde ich nichts im Datenblatt, aber aus Tabelle Table 49. Output voltage characteristics lassen sich grob 65 Ohm abschätzen. Dann sollte der 10 kOhm-Widerstand (induktive Komponente hin oder her) keine wesentliche Rolle spielen. Wird die Quellimpedanz bei AFIO größer? Das Speed-Register zeigt immer noch 0x2 an. Oder welches Phänomen sorgt dafür, daß der SPI durch einen mittelmäßig schwachen Pull-Up so beeinträchtigt werden kann?
:
Bearbeitet durch User
Du baust damit einen Schwingkreis auf, vor allem da der Widerstand am Ende der Leitung ist. Wenn man sowas macht dann am Anfang der Leitung dann wirkt es sogar dämpfend und es kann die Signalqualität verbessern. Maßgebend wird der Widerstand bei dir vor allem deswegen weil vorher der Widerstand des Eingangs deutlich größer war als dein Pullup.
Kenne den Chip nicht, aber es hört sich für mich so an als ob die ersten beiden SPIs push/pull-Endstufen haben, der dritte jedoch nur auf den Pullup lauscht. Entweder ist der Pin defekt, dein Setup falsch (schaltet statt H/L auf Z/L, oder In+weak pullup/Out), oder die Schnittstelle ist primär für I²C-SDA gedacht. Ein Pullup an irgendwelchen SPI-Pins außer CS kommt mir auch komisch vor. Hab ich noch nie gemacht, die Pins liegen seitens des Controllers immer auf festem Ruhepegel. MAl mit'm Scope nachgesehen, wie das Signal aussieht?
Beitrag #5958432 wurde von einem Moderator gelöscht.
Die Funktionen sind kein Geheimnis. Sie entsprechen im wesentlichen einem der Standard peripheral library beiliegenden Beispiel (siehe Anhang).
Walter T. schrieb: > Ein 10k-Pull-Up in der Clock-Leitung sorgt dafür, daß > maximal 18 kHz SPI-Takt noch funktionieren Dein 10kOhm-PullUp ist keiner. Du kannst keine Widerstands-Codes korrekt entziffern.
Fern Schätzer schrieb: > Dein 10kOhm-PullUp ist keiner. > Du kannst keine Widerstands-Codes korrekt entziffern. Woran hast du das erkannt?
Wenn da auf dem Foto schon die Oszi-Probe daneben liegt - wie sehen denn die verschiedenen Signale des SPI auf dem Oszi aus, einmal mit diesem Pullup und einmal ohne?
Walter T. schrieb: > Dann sollte der 10 kOhm-Widerstand ... Hast du den Wert nachgemessen? Leider kann man auf deinem Photo wegen der Blickrichtung den Farbcode nicht erkennen.
Walter T. schrieb: > 10k-Pull-Ups verbaut sind (für ein SDIO-Interface Aber warum? Muss man bei SDIO die Pullups nicht abschalten können, um den maximalen Takt erreichen zu können, weshalb man die internen Pullups verwendet (und auch die internen der SD-Karte)? Bis auf den Card Detect Pin, aber der ist ja nicht Teil von SDIO und kann ein beliebiger GPIO sein.
Dr. Sommer schrieb: > Aber warum? Muss man bei SDIO die Pullups nicht abschalten können, um > den maximalen Takt erreichen zu können, Ein 10kOhm-PullUp ist für die allermeisten Controller-I/Os ohne Relevanz wenn ein I/O auf Ausgang und Push/Pull gesetzt ist.
Fern Schätzer schrieb: > Ein 10kOhm-PullUp ist für die allermeisten Controller-I/Os > ohne Relevanz wenn ein I/O auf Ausgang und Push/Pull gesetzt ist. Naja, bei 48MHz SDIO sieht das vielleicht schon anders aus. Jedenfalls ist der Widerstand m.E. unnötig (insb. bei der Clock Leitung) und macht nur Ärger.
Dr. Sommer schrieb: > Naja, bei 48MHz SDIO sieht das vielleicht schon anders aus. An 10kΩ Pull-Up darf es auch bei 48MHz nicht scheitern. Wie soll eine Push-Pull Ausgangsstufe, die schon an 10kΩ scheitert, mit dem Umladen der Leitungskapazität klar kommen. Da ist irgendetwas anderes faul. Ein Vergleich der Oszi-Bild (mit vs. ohne), aufgenommene mit 1:10 Tastkopf und ein Nachmessen des Widerstandes dürften eher Klarheit bringen als blindes Rumrätseln.
Walter T. schrieb: > Ich will ein ILI9341 per SPI mit einem STM32F407 > ansteuern. Das funktioniert hervorragend bis 42 MHz mit SPI1 und SPI2. Im Datenblatt des ILI9341 ist SCL mit max. 10 MHz spezifiziert (100ns clock cycle).
:
Bearbeitet durch User
Wolfgang schrieb: > Da ist irgendetwas anderes faul. Er kann keine Widerstands-Codes korrekt entziffern. Fern Schätzer schrieb: > Du kannst keine Widerstands-Codes korrekt entziffern. Es sollte ein Leichtes sein den Widerstandswert zu verifizieren. Auch beim Thema Oszillogramm hören wir nichts .....
Joe F. schrieb: > Im Datenblatt des ILI9341 ist SCL mit max. 10 MHz spezifiziert Mit SCL wird im Allgemeinen ein I2C Bus Clock bezeichnet. In diesem Thread geht es um SPI. Falls es noch nicht aufgefallen sein sollte .... Dass ein SPI Display mit einer maximalen Clockrate spezifiert ist heisst noch lange nicht dass es nicht auch schneller funktionieren mag.
Fern Schätzer schrieb: > Joe F. schrieb: >> Im Datenblatt des ILI9341 ist SCL mit max. 10 MHz spezifiziert > > Mit SCL wird im Allgemeinen ein I2C Bus Clock bezeichnet. > In diesem Thread geht es um SPI. Falls es noch nicht aufgefallen > sein sollte .... Danke für den Hinweis, mir ist allerdings durchaus bewusst, dass es um SPI geht. In besagtem Datenblatt ist das Signal allerdings auch für den SPI Betrieb als "SCL" bezeichnet. > Dass ein SPI Display mit einer maximalen Clockrate spezifiert > ist heisst noch lange nicht dass es nicht auch schneller > funktionieren mag. Oder eben auch nicht. 42 MHz ist jedenfalls weit out of spec. 16 MHz ist da schon eher in dem Bereich, wo man sagen könnte man befindet sich noch in der Grauzone.
:
Bearbeitet durch User
Joe F. schrieb: > Oder eben auch nicht. Walter T. schrieb: > während es ohne trotz des primitiven fliegenden Aufbaus > bis 42 MHz funktioniert.
Fern Schätzer schrieb: > Joe F. schrieb: >> Oder eben auch nicht. > > Walter T. schrieb: >> während es ohne trotz des primitiven fliegenden Aufbaus >> bis 42 MHz funktioniert. Ja, erstklassige Ingenieursleistung. Datenblätter sind ja sowas von überschätzt...
Joe F. schrieb: > Ja, erstklassige Ingenieursleistung. Datenblätter sind ja sowas von > überschätzt... Du Knaller hälst es also für nicht möglich dass der TO beurteilen kann ob sein Testaufbau mit 42 MHz Clock funktioniert oder nicht.
Fern Schätzer schrieb: > Joe F. schrieb: >> Ja, erstklassige Ingenieursleistung. Datenblätter sind ja sowas von >> überschätzt... > > Du Knaller Nicht nötig unfreundlich zu werden. > hälst es also für nicht möglich dass der TO beurteilen > kann ob sein Testaufbau mit 42 MHz Clock funktioniert oder nicht. Doch. Es kann sein, dass es mit viel Glück mal funktioniert. Wie man sieht, funktioniert es aber nicht immer. Offenbar hat der andere Pin ein leicht anderes Timing, einen anderen Pegel, andere Rise-/Fall-Zeiten, weiss der Henker. Es lohnt auch gar nicht, darüber nachzudenken, da die 42 MHz wie gesagt weit ausserhalb des Bereiches liegen, in dem der Hersteller einen zuverlässigen Betrieb garantiert.
Joe F. schrieb: > Wie man sieht, funktioniert es aber nicht immer. Und das liegt garantiert an einem jämmerlichen 10k Pullup der bei Null Volt gerade mal 0.33mA zieht. Fachmann!
Fern Schätzer schrieb: > Joe F. schrieb: >> Wie man sieht, funktioniert es aber nicht immer. > > Und das liegt garantiert an einem jämmerlichen 10k Pullup der > bei Null Volt gerade mal 0.33mA zieht. > > Fachmann! Nein, ich sage ja, es gibt noch viele andere Möglichkeiten an denen es liegen kann, über die es sich aber nicht lohnt nachzudenken. Die 10K als Ursache halte ich persönlich auch eher als nicht ursächlich. Das ist dann auch meine letzte Antwort an dich, da ich deine andauernde Unhöflichkeit nicht mag.
Fern Schätzer schrieb: > Dein 10kOhm-PullUp ist keiner. Was Du für den Pull-Up hälst, ist keiner, sondern der Vorwiderstand für die LED-Beleuchtung. Der Pull-Up/Pull-Down ist längs zur Blickrichtung. Gerd E. schrieb: > wie sehen denn > die verschiedenen Signale des SPI auf dem Oszi aus Mit Pull-Up sind die Überschwinger oberhalb VDD deutlich heftiger. Mit dieser Masseführung weigere ich mich allerdings, im Oszilloskopbild mehr als eine Hausnummer zu sehen. Wolfgang schrieb: > Hast du den Wert nachgemessen? Das Discovery spielt nur Modell. Das Board, das die Pull-Ups fest verbaut hat, ist ein STM32F407 black: ( Beitrag "STM32F407 Black und Arduino" ). Beim Discovery läßt sich nur schneller zwischen "pull up" und "kein pull up" wechseln, um nachzuweisen, daß es genau an diesem liegt. Auch bei der "Rückreise" auf das Black-Board macht das Entfernen von R12, der auch nach dem Ausbau noch 10kOhm hat, den Unterschied aus zwischen "funktioniert" und "funktioniert nicht". Das Phänomen ist nicht auf SPI3 beschränkt. Zumindest an SPI2 ist es auch sichtbar. Ich habe kein zweites Displaymodul für einen Kreuztest da. Joe F. schrieb: > Im Datenblatt des ILI9341 ist SCL mit max. 10 MHz spezifiziert (100ns > clock cycle). Stimmt. Ich habe meinen Test trotzdem von 18 kHz bis 42 MHz gemacht. Und mit dem Pull-Up ist bei 18 kHz Schluß. Fern Schätzer schrieb: > Ein 10kOhm-PullUp ist für die allermeisten Controller-I/Os > ohne Relevanz wenn ein I/O auf Ausgang und Push/Pull gesetzt ist. So weit der naive erste Gedanke. Jetzt liegt aber der Fall vor, wo ein Pull-Up bei läppischen 36 kHz den Unterschied zwischen "funktioniert" und "funktioniert nicht" ausmacht, wärend ein Pull-Down bis 42 MHz keine Probleme macht.
:
Bearbeitet durch User
Ich hatte die 18 *K*Hz für einen Tippfehler gehalten. Wie sieht das 18 KHz CLK Signal denn auf dem Oszilloskop aus?
:
Bearbeitet durch User
Joe F. schrieb: > Wie sieht das 18 KHz CLK Signal denn auf dem Oszilloskop aus? Wie aus dem Malbuch. Mal eine naive Frage: Kann SPI_Cmd(SPIx, DISABLE) (löscht Bit SPI in SPIx->CR1) einen floatenden Clock-Pin zurücklassen?
:
Bearbeitet durch User
Walter T. schrieb: > Joe F. schrieb: >> Wie sieht das 18 KHz CLK Signal denn auf dem Oszilloskop aus? > > Wie aus dem Malbuch. Und die Daten liegen auch noch mit der richtigen Phase an (SPI Mode 0)? Evtl. ist da ja was nicht richtig konfiguriert, und dann wirkt sich bereits eine minimale Verschiebung der CLK Flanke ggü. der Datenleitung negativ aus.
:
Bearbeitet durch User
Walter T. schrieb: > Mal eine naive Frage: Kann SPI_Cmd(SPIx, DISABLE) (löscht Bit SPI in > SPIx->CR1) einen floatenden Clock-Pin zurücklassen? Nachtrag: Ja, tut er. Der Pegel läßt sich danach mit 10 kOhm lustig in der Gegend herumschieben. Was passiert also: Der Pull-Up generiert bei jedem Abschalten einen weiteren Flankenwechsel als Artefakt. Danach stimmt nichts mehr. Warum das bei der einen niedrigsten Taktrate keine Rolle spielt, muß ich noch suchen. Bei Bitbanging passiert das nicht, weil da nichts hochohmig geschaltet wird.
:
Bearbeitet durch User
Walter T. schrieb: > Nachtrag: Ja, tut er. Der Pegel läßt sich danach mit 10 kOhm lustig in > der Gegend herumschieben. SPI sollte Push-Pull Ausgangsstufen verwenden. Ein Pull-Up darf da gar nichts schieben. Ohne die Ausgangskennlinie der Ausgangsstufe angeguckt zu haben, dürfen die 0.3mA vom Pull-Up allenfalls den L-Pegel im 1/10-Volt Bereich beeinflussen. > Was passiert also: Der Pull-Up generiert bei jedem Abschalten einen > weiteren Flankenwechsel als Artefakt. Danach stimmt nichts mehr. Warum > das bei der einen niedrigsten Taktrate keine Rolle spielt, muß ich noch > suchen. Schaltest du die Ausgangsstufe ab (High-Z) oder was treibst du da?
Ich muß mal zusehen, wie man SPI/DMA pausieren kann, ohne die Treiberstufe hochohmig zu schalten. Am kommenden Wochenende werde ich wohl nicht dazu kommen, aber generell wird das ja keine Raketenwissenschaft sein.
Walter T. schrieb: > Der Pull-Up generiert bei jedem Abschalten einen > weiteren Flankenwechsel als Artefakt. Nur so mal eine Idee, vielleicht mal den SPI-Mode zu den Pullups anpassen.. auf Ruhelage HIGH!
Philipp K. schrieb: > Nur so mal eine Idee, vielleicht mal den SPI-Mode zu den Pullups > anpassen.. > > auf Ruhelage HIGH! Das schmeckt dem ILI9341 nicht gut... ;-)
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.