Forum: Mikrocontroller und Digitale Elektronik STM32H7 mit 8-Bit-SDRAM ohne FMC_NBLx/DQM?


von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Bei den STM32H7 (konkret: STM32H755BIT6) lässt sich der FMC für externe 
SDRAMs nutzen. In den Konfigurationen für 16 Bit und 32 Bit breite 
SDRAMs werden durch STM32CubeMX auch die Signale FMC_NBLx (zu verbinden 
mit DQMx des SDRAMs) korrekt generiert. In der 8-Bit-Variante fehlt 
jedoch ein entsprechendes Signal. Übliche 8-Bit-SDRAMs (z.B. Alliance 
AS4C32M8SA) wollen jedoch auch ein DQM-Signal sehen. Hat STM hier Mist 
gebaut oder kann man in diesem Fall DQM mit CS# bzw. FMC_SDNE0 
verbinden?

Laut Datenblättern soll für eine korrekte Initialisierung DQM zunächst 
auf High liegen und erst später auf Low gepulst werden. Darf man etwa 
DQM auf einen GPIO-Ausgang legen und nach der Initialisierung dauerhaft 
auf Low legen, ohne dass es bei der RW-Richtungsumschaltung zu 
Buskollisionen kommen kann?

: Bearbeitet durch User
von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Dieses Problem wurde auch schon hier thematisiert, aber leider ohne 
erprobte Lösung:

https://electronics.stackexchange.com/questions/422204/connect-micron-sdram-to-stm32h7-fmc-what-should-i-do-with-the-dqm-pin

Setzt hier wirklich niemand (wegen Pinmangels) ein 8-Bit-SDRAM ein?

von Falk B. (falk)


Lesenswert?

Andreas S. schrieb:
> Setzt hier wirklich niemand (wegen Pinmangels) ein 8-Bit-SDRAM ein?

Klingt zu exotisch, fast so exotisch wie 4 Bit SDRAM, den es am ATXmega 
mal gab.

von J. S. (jojos)


Lesenswert?

sind das die Hyper RAM die auf den Discos drauf sind? Da müsste es ja 
eine funktionierende Konfig geben.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

J. S. schrieb:
> sind das die Hyper RAM die auf den Discos drauf sind? Da müsste es ja
> eine funktionierende Konfig geben.

Nein, die Hyperbus RAMs gibt es nur für diejenigen STM32H7-Derivate mit 
einem OCTOSPI-Periherieblock. "Unser" STM32H757 hat keinen solchen, 
könnte aber ggf. PSRAMS mit gemultiplextem Bus ansteuern, und zwar über 
den FMC und nicht OCTSPI. Bei beiden dieser Busse sind Adressen und 
Daten gemultiplext. Das macht die Sache nicht unbedingt schneller.

Eigentlich will ich lieber ein 16-Bit-SDRAM verwenden, bin mir aber noch 
nicht hundertprozentig sicher, ob ich alle benötigten Pins 
freigeschaufelt bekomme. Derzeit habe ich noch ein paar Konflikte. Mit 
einem konventionellen 8-Bit-SDRAM gäbe es noch eine gewisse 
Rückfalllösung.

Wir haben beschlossen, eine offizielle Anfrage bei STM zu stellen, da 
mein Kunde dort einen direkten technischen Ansprechpartner hat. Mal 
schauen, welche Information es dort gibt. Vielleicht ist es ja wirklich 
nur ein Fehler im STM32CubeMX, und man kann einfach PE0 auf AF12 
konfigurieren.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Andreas S. schrieb:
> Eigentlich will ich lieber ein 16-Bit-SDRAM verwenden,

Tu das. Man sollte so weit wie möglich Standardkram benutzen, wenn man 
sich nicht sinnlos Stress machen will.

> bin mir aber noch
> nicht hundertprozentig sicher, ob ich alle benötigten Pins
> freigeschaufelt bekomme.

Wofür brauchst du die Pins? Für schnelle Sachen oder langsame? Letzeres 
machen Portexpander. Oder Multiplexing (für Tasten, LEDs, etc.)

von Max H. (nilsp)


Angehängte Dateien:

Lesenswert?

Andreas S. schrieb:

> Vielleicht ist es ja wirklich
> nur ein Fehler im STM32CubeMX, und man kann einfach PE0 auf AF12
> konfigurieren.

Öh, also laut Datenblatt von St geht das so. Siehe Bild.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Falk B. schrieb:
> Andreas S. schrieb:
>> Eigentlich will ich lieber ein 16-Bit-SDRAM verwenden,
>
> Tu das. Man sollte so weit wie möglich Standardkram benutzen, wenn man
> sich nicht sinnlos Stress machen will.

Wie schon gesagt: voraussichtlich Pinknappheit.

> Wofür brauchst du die Pins? Für schnelle Sachen oder langsame? Letzeres
> machen Portexpander. Oder Multiplexing (für Tasten, LEDs, etc.)

Volldampf per Ethernet, vier SPIs, drei UARTs, zwei I2C, zwei CAN und 
beiden USB. Und dazu noch ein eMMC. Alleine diese ganzen dedizierten 
Blöcke auf die Pins zu verteilen ist schon nicht ohne Kompromisse zu 
machen. Aber das ist ja auch der Grund, aus dem wir solch einen dicken 
Microcontroller wie den STM32H757 einsetzen.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Max H. schrieb:
> Öh, also laut Datenblatt von St geht das so. Siehe Bild.

Genau das meinte ich ja damit, AF12 für PE0 zu konfigurieren. Ich finde 
nirgendwo etwas gegenteiliges in der Dokumentation von STM. Dort wird ja 
eine Datenbusbreite von 8 Bit für SDRAM explizit aufgeführt.

In STM32CubeMX steckt heutzutage aber auch ziemlich viel Insiderwissen 
über Fehler in den Bausteinen selbst. Wenn man sich den generierten Code 
anschaut, findet sich so mancher Workaround, vermutlich auch für nicht 
öffentlich dokumentierte Fehler. Vielleicht ist ja STM ein Fehler bei 
der NBL0-Erzeugung im 8-Bit-Modus bekannt. Statt das ins Errata Sheet zu 
schreiben, wird NBL0 einfach nicht aktiviert. Problem gelöst. Mal 
schauen, wie die offizielle Stellungnahme von STM aussieht.

von Falk B. (falk)


Lesenswert?

Andreas S. schrieb:
> Volldampf per Ethernet, vier SPIs, drei UARTs, zwei I2C, zwei CAN und
> beiden USB. Und dazu noch ein eMMC.

Klingt ja nach der ultimativen Killerapplikation! Viel Erfolg!

von J. S. (jojos)


Lesenswert?


: Bearbeitet durch User
von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Falk B. schrieb:
> Klingt ja nach der ultimativen Killerapplikation! Viel Erfolg!

Nö, es geht nur um einen Demonstrator, um die Machbarkeit verschiedener 
Dinge zu zeigen. Darauf basierend werden dann die Leistungsmerkmale für 
das eigentliche Serienprodukt bestimmt und die Hardware entsprechend 
zusammengestrichen. Das ist in diesem Fall deutlich besser als der 
umgekehrte Weg, nämlich ein Minimalprodukt zu definieren und es 
anschließend immer wieder aufzubohren und dabei dann einen Haufen fauler 
Kompromisse eingehen zu müssen. Es geht in diesem Projekt für meinen 
Kunden darum, eine Plattform für eine sehr langlebige Produktfamilie zu 
schaffen.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

J. S. schrieb:
> Ja, die H7 sind schon eine harte Nummer, auch für STM selber.
> Es gibt noch keinen fehlerfreien generierten oder Beispielcode für
> Ethernet:

Diese Diskussion bezieht sich wohl primär auf den lwIP-Stack, der eben 
bei STM aus der Tüte fällt, bzw. den HAL-Treiber für Ethernet. Hier eine 
weitere Problemschilderung:

https://stmh7.com/001-the-ethernet-hal/

Jedoch gibt es auch den FreeRTOS-eigenen TCP/IP-Stack ("FreeRTOS plus 
TCP"), zu dem es wiederum auch zwiespältige Diskussionen bezüglich der 
Eignung bzw. Portierung auf den STM32H7 gibt, z.B.:

https://forums.freertos.org/t/freertos-tcp-stm32h7-support/12802

Die FreeRTOS-Version (10.3.1), die bei STM32CubMX herausfällt, ist 
dummerweise auch rund drei Jahre gegenüber der aktuellen Version 
veraltet. FreeRTOS Plus ist darin nicht enthalten. Da es großenteils in 
einer separaten Verzeichnisstruktur liegt, kann man durchaus auch 
unterschiedliche Versionen des Kernel und der Erweiterungen nutzen. 
Mittlerweile ist AWS ja auch dazu übergegangen, nicht mehr alles mit 
einer festen Versionskennung zu versehen, sondern die verschiedenen 
Anteile separat zu versionieren. Zusammengefasst wird das dann durch 
Pakete wie z.B. FreeRTOS 202212.01.

Natürlich möchten wir die aktuellste Version des Netzwerkteils usw. 
nutzen und nicht die korrespondierende, uralte Version. Allerdings kann 
es ja durchaus subtile Abhängigkeit geben, so dass man auch der Kernel 
nachziehen muss und sich somit der Codegenerierung durch STM32CubeMX 
entzieht. Andererseits fand ich es bisher auch oft eher lästig, die 
FreeRTOS-Konfiguration immer mit STM32CubeMX durchführen zu müssen; 
insbesondere die Default-Task lässt sich ja nicht entfernen.

Erst für neue Prozessoren wie STM32H5 bietet STM neuere 
FreeRTOS-Bibliotheken an. Der H7 gilt da schon als "legacy". :-/

von J. S. (jojos)


Lesenswert?

Andreas S. schrieb:
> Diese Diskussion bezieht sich wohl primär auf den lwIP-Stack, der eben
> bei STM aus der Tüte fällt, bzw. den HAL-Treiber für Ethernet

die Probleme gehen da tiefer, sind auch ohne RTOS vorhanden, kommen rein 
von DMA und Cache.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

J. S. schrieb:
> Andreas S. schrieb:
>> Diese Diskussion bezieht sich wohl primär auf den lwIP-Stack, der eben
>> bei STM aus der Tüte fällt, bzw. den HAL-Treiber für Ethernet
>
> die Probleme gehen da tiefer, sind auch ohne RTOS vorhanden, kommen rein
> von DMA und Cache.

Klar, deswegen schrieb ich ja auch: "zwiespältige Diskussionen bezüglich 
der Eignung bzw. Portierung auf den STM32H7". Die dort geschilderten 
Probleme beziehen sich ja auch auf den reinen Ethernet-Treiber.

Gibt es überhaupt irgendwelche STM32H7-basierten Produkte auf dem Markt, 
bei denen der Ethernet-Port zuverlässig funktioniert? Wer die 
beschriebenen Probleme gelöst hat, hat damit ggf. einen ordentlichen 
Wettbewerbsvorteil.

: Bearbeitet durch User
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.