Hallo, ich habe einen STM32 mit QSPI FLASH auf einem Custom Board. Ist es moeglich einen separaten NSC fuer den QSPI zu definieren und auf dem gleichen Bus ein zweiten QSPI Flash zu legen und diesen auch mit einem zweiten separaten NSC anzusteuern? Wenn ich in der IDE STM32CubeIDE den NCS manuell als GPIO_Output definiere kann der QUADSPI1 nicht initialisiert werden. Vielleicht kenn hier ja jemand eine Moeglichkeit den QUADSPI1 mit externen/separaten NCS zum laufen zu bekommen.
Bobby schrieb: > moeglich einen separaten NSC fuer den QSPI zu definieren und auf dem > gleichen Bus ein zweiten QSPI Flash zu legen und diesen auch mit einem > zweiten separaten NSC anzusteuern? > Wenn ich in der IDE STM32CubeIDE den NCS manuell als GPIO_Output > definiere kann der QUADSPI1 nicht initialisiert werden. > Vielleicht kenn hier ja jemand eine Moeglichkeit den QUADSPI1 mit > externen/separaten NCS zum laufen zu bekommen. Vmtl. geht es um NCS, nicht um NSC? Je nach Gehäuse und Derivat haben tatsächlich mehrere Pins als AF-Auswahlmöglichkeit NCS für Bank1 und/oder Bank2. In dem Fall kann man problemlos (logisch gesehen) mehrere Flash Chips bis auf NCS parallel schalten. Allerdings kann dann immer nur einer aktiv sein, die Umschaltung geht dann über Umkonfiguration von den betreffenden Pins zwischen AF und GPIO (mit Ausgang auf '1'). Ob das e-technisch ebenso geht, hängt vom Takt, Layout etc. ab, denn die Leitungen werden zwangsläufig deutlich länger, stärker kapazitiv belastet usw. Ggf. muss man denn Takt halt etwas reduzieren. Habe ich schon mal ausprobiert, geht prinziell ganz einfach.
A. B. schrieb: > Bobby schrieb: >> moeglich einen separaten NSC fuer den QSPI zu definieren und auf dem >> gleichen Bus ein zweiten QSPI Flash zu legen und diesen auch mit einem >> zweiten separaten NSC anzusteuern? >> Wenn ich in der IDE STM32CubeIDE den NCS manuell als GPIO_Output >> definiere kann der QUADSPI1 nicht initialisiert werden. >> Vielleicht kenn hier ja jemand eine Moeglichkeit den QUADSPI1 mit >> externen/separaten NCS zum laufen zu bekommen. Ach, noch dazu: Als NCS einfach einen als GPIO konfigurierten Pin zu nehmen ist keine gute Idee. Bei indirect read/write geht das prinzipiell schon, man muss halt vor dem Start des Transfers NCS aktivieren und hinterher deaktivieren - soweit problemlos - in der Theorie. Leider gibt es wohl auch Fälle, wo das QSPI fälschlicherweise einen extra Takt vor dem Aktivieren von NCS spendiert. Normalerweise ist so ein Bug ja irrelevant, aber mit softwaremäßigem NCS ist das tödlich. Bei memory mapped read geht das aber gründlich in die Hose, da das QSPI einen Prefetch macht, und erst bei nicht-sequenziellem Zugriff oder längerer Inaktivität NCS deaktiviert und eine neue Leseoperation (mit anderer Adresse halt) startet. Leider ist dieser Prefetch-Mechanismus nicht klar dokumentiert, also kaum vorhersagbar. Es gibt also sinnvollerweise nur die Möglichkeit, mehrere Pins mit AF zu nutzen, oder auch einfach über einen Demultiplexer. Über dessen Adresseingange halt den gewüschten Flash auswählen.
Laut RefMan RM0410 für F76x/F77x scheint das nicht vorgesehen zu sein. Im Gegensatz zum einfachen SPI scheint er kein Software CS zu unterstützen. Ein Multiplexer könnte funktionieren, allerdings müsste das wohl ein sehr flinker sein. Kann mich aber irren. Schau besser selbst im RefMan für deinen µC nach.
Hi A.B. danke fue deine schnelle Antwort. Ja ich meine natuerlich den NCS ;) Ich nutze zur Konfiguration des QUADSPI1 das IOC File in mein STM32CubeIDE Projekts. Da kann ich aber nur separat Bank 1 oder Bank 2 oder Dual Bank mit Quad SPI Line auswaehlen, eine Moeglichkeit ein QSPI Bus mit 4 Liens und mehreren NCS gibt es da leider nicht bzw. wenn ich den NCS Pin manuell als Output definiere kann der "hqspi1" nicht in der Software generiert werden. Ich bin relativ ne i der IDE STM32CubeIDE und STM32 Thematik und steh da etwas auf dem schlauch. Ich dacht auch das ich die Pins die ich als NCS definiere manuell schalte und dann via Software den BSP QSPI Read/Write Befehl nutzen koennte. Was genau meinst du mit "AF-Auswahlmöglichkeit" ?
Meinst du mit AF "Alternate Functions"? Da koennt ich den zweiten CS auf einen anderen PIN legen (ist vorhanden fuer die Bank 1) aber wie kann ich diesen im Betrieb wechseln? Sorry falls es eine Dumme Frage ist, ich weiss es wirklich (noch) nicht ;)
Bobby schrieb: > Da kann ich aber nur separat Bank 1 oder Bank 2 > oder Dual Bank mit Quad SPI Line auswaehlen, eine Moeglichkeit ein QSPI > Bus mit 4 Liens und mehreren NCS gibt es da leider nicht Ja genau. Ist so. Du könntest allerdings den CS durch einen Demultiplexer wie 74LVC138 schicken (CS an Pin 4, Pin 5 auf GND, Pin 6 auf VCC) und dann mit 3 Leitungen (Pins 1-3) einen von 8 CS auswählen (Pins 7, 9-15). fchk
Bobby schrieb: > Meinst du mit AF "Alternate Functions"? Da koennt ich den zweiten Ja. > CS auf > einen anderen PIN legen (ist vorhanden fuer die Bank 1) aber wie kann > ich diesen im Betrieb wechseln? Sorry falls es eine Dumme Frage ist, ich > weiss es wirklich (noch) nicht ;) Einfach im GPIOx_MODER register bei den betreffenden Pins zwischen '01' (output mode) und '10' (Alternate function mode) hin- und herschalten. Die AF-Nummer für die beiden (oder mehr) Pins in GPIOx_AFRL bzw. GPIOx_AFRH braucht man nur einmal einzustellen, ebenso den '1'-Pegel in GPIOx_ODR und ggf. GPIOx_OTYPER, GPIOx_PUPDR. Allerdings sind solche "dynamischen" Umschaltungen in CubeMX nicht vorgesehen, man muss also für den zweiten, dritten NCS-Pin die Initialisierung "zu Fuß" machen. Das erspart man sich bei Verwendung vom 74lvc138. Mit max. 6ns ist der auch hinreichend schnell und hat passenderweise ja auch low-aktive Ausgänge. Aber generell gilt natürlich: Erst QSPI deaktivieren (event. mittels ABORT), warten, bis BUSY auf '0' geht, und erst dann umschalten. Sonst gibt's Salat.
Sorry fuer die spaete Antwort und vielen dank fuer deine Infos. Ich werde es gerne mal ausprobieren, danke ;)
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.