STM32L4 memory-mapped QSPI Lesegeschwindigkeit maximieren

OP #6309114
Lesenswert?

Grüß euch

Ich würde gerne die Lesegeschwindigkeit eines IS25LP128 Flash an einem 
STM32L431 maximieren. Der Prozessor und das Flash wird mit 80MHz 
getaktet und ich nutze bereits das "FAST READ QUAD I/O OPERATION" 
Kommando um auf allen 4 Datenleitungen zu empfangen.

Leider entsprechen meine Tests nicht der erwarteten Performance. Meines 
Verständnis nach müsste alle 2 Takte ein Byte empfangen werden. Das 
Kopieren eines 1kB großen Blocks aus dem QSPI-Flash ins Prozessor RAM 
müsste also ohne Berücksichtigung des Instruction/Address-Overheads in
1
1 / 80MHz * 1024B * 2 = ~26µs

erledigt sein.

Tatsächlich dauert der komplette Lesevorgang allerdings 100µs. Woher 
kann dieser Unterschied kommen?

Da es sich ausschliesslich um BGA Bauteile handelt kann ich leider grad 
etwas schlecht ein Oszilloskop anhängen. Es existiert zwar ein Layout 
mit Testpins, das müsste ich allerdings erst wieder in Betrieb nehmen.
Angehängte Dateien:
OP #6309163
Lesenswert?

Jim M. schrieb:
> Vincent H. schrieb:
>> 1 / 80MHz
>
> Die QSPI Schnittstelle wird mit Sicherheit keine 80MHz Takt haben. Ein
> Takt Teiler von 4 (= 20 MHz) würde die 100µs komplett erklären.
>
> Teiler kleiner als 2 sind für (Q)SPI eher selten anzutreffen.

Die wird tatsächlich mit 80MHz betrieben (siehe Anhang).
Theoretisch wären laut Datenblatt sogar 133MHz möglich. Der Prozessor 
taktet allerdings nicht so hoch.
Angehängte Dateien:
OP #6316568
Lesenswert?

So, bin jetzt mit 40MHz QSPI-Takt und DDR-Mode bei meinen theoretischen 
26µs angekommen. Interessant fand ich noch dass man für optimalen Code 
32Bit-Leseoperationen erzwingen muss... Das macht Code für memory-mapped 
Zugriffe sehr häßlich weil man um einen reinterpret_cast nicht herum 
kommt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren