Suchen

Speicher von Miniaturgeräten per HyperBus erweitern

| Autor / Redakteur: Rich Miron * / Michael Eckstein

Wearables und IoT-Geräte sind häufig winzig, benötigen aber oft mehr Speicher, als der verwendete Controller an Bord hat. HyperBus hilft, zusätzlichen Speicher mit geringem Aufwand anzubinden.

Firmen zum Thema

Bild 1: In vielen Wearables – zum Beispiel Hörgeräten – ist wenig Platz für eine Speichererweiterung. MCUs mit HyperBus-Unterstützung können eine Lösung sein.
Bild 1: In vielen Wearables – zum Beispiel Hörgeräten – ist wenig Platz für eine Speichererweiterung. MCUs mit HyperBus-Unterstützung können eine Lösung sein.
(Bild: gemeinfrei / Pixabay )

Da IoT-Knoten und Wearable-Geräte immer kleiner werden, müssen Entwickler den On-Board-Speicher ihrer Mikrocontroller optimal nutzen, um den benötigten Kartenplatz, den Stromverbrauch und die Kosten zu minimieren. Oft reicht der vorhandene Speicher jedoch nicht für die geplante Anwendung aus. Für eine Erweiterung bietet sich HyperBus an: Eine schnelle 8-Bit-DDR-Schnittstelle, die Adress- und für Dateninformationen mit 333 MBit/s übertragen kann.

Im Vergleich zum 16-Bit-Daten- und 16-Bit-Adressbus sowie den zugehörigen Steuerungs-Pins einer typischen 32-Bit-Schnittstelle können Microcontroller per HyperBus externen Flash-Speicher und wahlfreien Zugriffsspeicher (Random Access Memory, RAM) über ein und denselben Bus ansprechen. Der Busbetrieb ist für die Firmware transparent. Trotzdem sollten sich Entwickler, die noch keine Erfahrung mit HyperBus haben, zuerst mit dem Betrieb der Bussignale vertraut machen. Dies ist die Voraussetzung für ein robustes Design.

HyperBus überträgt Adress- und Dateninformationen über eine 8-Bit-DDR-Schnittstelle. Ihr stehen ein differenzieller Takteingang, ein Latch-Signal für Lese- und Schreibvorgänge sowie ein Chip-Select-Signal für das jeweilige Speichergerät zur Seite. Das Interface ist als eine Master/Slave-Schnittstelle konzipiert, bei der ein Master (Host) mit einem oder mehreren Slave-Speichergeräten am Bus verbunden ist. HyperBus-Flash-Speichergeräte werden als HyperFlash bezeichnet und HyperBus-DRAM-Speichergeräte als HyperRAM. Der Bus nutzt einen differenziellen Takteingang mit den Signalen CK und CK#. Da es sich bei HyperBus um eine DDR-Schnittstelle handelt, werden Daten sowohl an steigenden als auch an fallenden Taktflanken übertragen (Double Data Rate, DDR). Der Takt wird nur vom Master vorgegeben und seine Frequenz darf die Nenntaktfrequenz des langsamsten HyperBus-Speichers am Bus nicht überschreiten.

Stolperfallen beim HyperBus-Design umgehen

Der bidirektionale 8-Bit-Bus trägt die Bezeichnung DQ0 bis DQ7 (DQ[0-7])und überträgt Adress-, Daten- und Befehlsinformationen zwischen den Master- und Slave-Geräten. Ein bidirektionales Strobe-Signal zum Lesen und Schreiben von Daten (Read-Write Data Strobe, RWDS) wird zum Speichern von Daten verwendet. Das RWDS-Signal wird von jedem Gerät geregelt, das Daten liest. Wenn also der Mikrocontroller-Host Daten in das HyperRAM schreibt, regelt das HyperRAM das RWDS-Signal. Die an DQ[0-7] gelesenen Daten werden an beiden Taktflanken ausgerichtet. Jedes Slave-Gerät wird über Chipauswahl-Signale (Aktiv-Low) ausgewählt, die mit CS0#, CS1#, CS2# usw. bezeichnet sind.

Es kann immer nur eine Chipauswahl aktiv sein. Alle Bustransaktionen werden initiiert, wenn das jeweilige Chipauswahlsignal von „High-Pegel“ zu „Low-Pegel“ wechselt. Alle Bustransaktionen werden beendet, wenn das jeweilige Chipauswahlsignal von „Low-Pegel“ zu „High-Pegel“ wechselt. Die Entwickler müssen also dafür sorgen, dass zu jedem Zeitpunkt ein Chipauswahlsignal aktiv ist. Tun sie dies nicht, kann es passieren, dass mehrere HyperBus-Slave-Geräte gleichzeitig das RWDS-Signal senden, was zu einer Korruption der Daten führen kann. Der Master sendet ein Reset-Signal (Aktiv-Low) mit der Bezeichnung RESET# zum Zurücksetzen der Hardware. Wird es auf „Low“ gezogen, setzt das Signal den Status aller externen HyperBus-Speichergeräte zurück, die mit dem Signal verbunden sind. Dabei werden auch die internen Konfigurationsregister des Speichergeräts zurückgesetzt. Der Status des internen Speichers der HyperBus-Speichergeräte ist jedoch nicht betroffen.

Bei den meisten HyperBus-Master-Mikrocontrollerschnittstellen ist RESET# nicht Bestandteil des HyperBus-Peripheriegeräts, sondern stattdessen ein allgemeiner I/O-Pin. HyperBus-Slave-Geräte verfügen über einen geringen Pull-up am RESET#-Pin. Wenn er also unbelegt bleibt, wird er auf „High“ gezogen. Jedes HyperBus-kompatible Peripheriegerät an einem Mikrocontroller muss der HyperBus-Spezifikation entsprechen. Ein gutes Beispiel für einen HyperBus-kompatiblen Mikrocontroller ist der STM32L4R9 ARM Cortex-M4F von STMicroelectronics. Der STM32L4R9 verfügt über 2 MByte internen Flash-Speicher und 640 kByte SRAM. Er bietet eine Vielzahl von Peripheriegeräten, einschließlich zwei OctoSPI-Schnittstellen, die als HyperBus-Schnittstellen konfigurierbar sind.

Unbedingt Speichergrenzen bei Zugriffen beachten

Der STM32L4R9 greift auf die externen Speicheradressen von HyperBus als Speicher zu, der auf den Adressraum des AHB-Busses des Mikrocontrollers abgebildet ist. Lese- und Schreibzugriffe auf den externen Speicher werden also grundsätzlich auf dieselbe Weise wie bei internem Speicher durchgeführt. Sobald die externen Speichergeräte konfiguriert sind, ist der Betrieb von HyperBus für den Controller-Kern transparent. Bei HyperBus-Speichern handelt es sich um Speicher mit 16-Bit-Datenbreite. Jeder Zugriff vom STM32L4R9 muss daher innerhalb dieser 16-Bit-Speichergrenzen erfolgen. Datenzugriffe vom STM32L4R9-Master können als 16-Bit- oder 32-Bit-Zugriff erfolgen und müssen daher ebenfalls an den Grenzen ausgerichtet sein.

Eine typische Lese- oder Schreibtransaktion an HyperBus umfasst eine Sequenz von 16-Bit-Datenübertragungen innerhalb einer Taktperiode über zwei entsprechende 8-Bit-Datenübertragungen innerhalb einer halben Taktperiode, eine davon an jeder Taktflanke oder differenziellen Taktkreuzung. Lese- und Schreibtransaktionen übertragen immer vollständige 16-Bit-Datenwörter. Datenwörter von Lesetransaktionen enthalten immer zwei gültige Byte. Bei Datenwörtern von Schreibtransaktionen kann es sein, dass ein oder beide Byte maskiert sind, um zu verhindern, dass innerhalb eines Schreib-Burst einzelne Byte geschrieben werden. Byte-Übertragungen werden vom HyperBus-Protokoll nicht unterstützt. Gleiches gilt für Vorgänge wie Bit-Banding (Emulation einer Hardware-Schnittstelle). Jeder HyperBus-kompatible Port des STM32L4R9 verfügt über einen 256 MByte großen Adressraum, der folgendermaßen abgebildet wird:

  • HyperBus1 (OctoSPI1) 0x90000000 bis 0x9FFFFFFF
  • HyperBus2 (OctoSPI2) 0x70000000 bis 0x7FFFFFFF

Die interne Adresse des HyperFlash- oder HyperRAM-Speichergeräts, auf das zugegriffen wird, wird von der Basisspeicheradresse des obigen Speicherorts abgeleitet. Wenn der STM32F4L9 beispielsweise einen Lesevorgang für den Speicherort 0x90000047 durchführt, liest er den im Speichergerät, auf das an HyperBus1 zugegriffen wird, am Speicherort 0x0047 gespeicherten Wert zurück.

Cypress Semiconductor hat sowohl die HyperBus-Spezifikation als auch eine Produktlinie mit HyperBus-Speichern entwickelt. Der HyperFlash-Speicher S26KS512SDPBHI020 (64 MByte x 8) kann problemlos mit einem der OctoSPI-Ports verbunden werden. Er unterstützt Wrap-Burst-Zugriffe mit bis zu 32 16-Bit-Wörtern. Mit einer maximalen Taktrate von 166,6 MHz unterstützt der S26KS512 HyperFlash durchgängig die komplette Leserate von 333 MByte/s. Bei der maximalen Taktrate des OctoSPI-Ports von 60 MHz kann der STM32L4R9 jeden externen HyperBus-Speicher mit 120 MByte/s (Maximalwert) lesen. Er kann Code direkt aus diesem Flash-Speicher heraus ausführen, falls über den Cortex-M4-Systembus auf den HyperFlash zugegriffen wird.

Bei Verwendung als Code-Speicher unterstützt der OctoSPI-Port eXecute In Place (XIP) mit einem integrierten Prefetch-Puffer, der die nächste Speicheradresse aus dem externen Speicher lädt. Der HyperRAM-Speicher S27KS0641DPBHI020 (8 MByte x 8) von Cypress Semiconductor ist ein Self-Refresh-DRAM, mit dem der Datenspeicher des STM32L4R9 erweitert werden kann. Er unterstützt Wrap-Burst-Zugriffe mit bis zu 64 16-Bit-Wörtern. Der S27KS0641 HyperRAM unterstützt außerdem durchgängige Leseraten von bis zu 333 MByte/s und kann vom STM32L4R9 mit maximal 120 MByte/s gelesen werden.

Differenzielle Taktsignale sollten nebeneinander liegen

Bild 1: Der Mikrocontroller STMicroelectronics STM32F4L9 basiert auf einem ARM-Cortex-M4-Kern mit FPU und verfügt über zwei HyperBus-kompatible Schnittstellen (orange markiert).
Bild 1: Der Mikrocontroller STMicroelectronics STM32F4L9 basiert auf einem ARM-Cortex-M4-Kern mit FPU und verfügt über zwei HyperBus-kompatible Schnittstellen (orange markiert).
(Bild: STMicroelectronics)

Der STM32L4R9 verfügt über zwei HyperBus-kompatible Ports. An jeden davon können jeweils separat externe HyperRAM- und HyperFlash-Speichergeräte angeschlossen werden. Sowohl mit dem HyperFlash als auch dem HyperRAM kann der interne Speicher des STM32L4R9 mit minimalen Auswirkungen auf Leiterplattengröße und Designkomplexität erweitert werden. Die wichtigsten Signale für das Layout sind DQ[0-7] und RWDS.

Für optimale Leistung sollte der Weg zwischen Mikrocontroller und Speicher für diese Signale auf der Leiterplatte so kurz wie möglich sein. Die differenziellen Taktsignale CK und CK# sollten nebeneinander liegen mit konstantem zeitlichem Abstand für die Dauer des Signals. Sofern möglich, sollten Entwickler CK und CK# mit VSS abschirmen, um EMI zu minimieren. Zur Minimierung von Impedanz-Fehlanpassungen sollten alle Signale auf der obersten Schicht der Leiterplatte liegen mit einer durchgängigen VSS-Schicht darunter.

Entwickler, die noch nicht mit HyperBus gearbeitet haben, sollten Prüfpunkte für Messfühler einplanen. Für DQ[0-7] und RWDS sollten sich sowohl am Mikrocontroller STM32L4R9 als auch am Speichergerät Prüfpunkte befinden. Wenn der STM32L4R9 einen Schreibvorgang ausführt, sollten die Prüfpunkte betrachtet werden, die sich am nächsten am Speichergerät befinden. Wenn der STM32L4R9 einen Lesevorgang ausführt, sollten die Prüfpunkte betrachtet werden, die sich am nächsten am STM32L4R9 befinden. Die Prüfpunkte für CK, CK# und CS sollten näher am Speichergerät liegen.

Bild 2: Der STM32L4R9 verfügt über zwei HyperBus-kompatible Ports. An jeden davon können separat externe HyperRAM- und HyperFlash-Speichergeräte angeschlossen werden.
Bild 2: Der STM32L4R9 verfügt über zwei HyperBus-kompatible Ports. An jeden davon können separat externe HyperRAM- und HyperFlash-Speichergeräte angeschlossen werden.
(Bild: STMicroelectronics)

Aufgrund der hohen Taktfrequenzen im Zusammenhang mit der DDR-Schnittstelle muss die Spannungsversorgung des STM32L4R9 und der Speichergeräte so rauscharm wie möglich sein. Eine Versorgung mit starkem Rauschen beeinträchtigt den Signaltakt und kann Busübertragungsfehler verursachen. Daher ist der Einsatz von Entkopplungskondensatoren sinnvoll. HyperBus-Speichergeräte verfügen für die I/O-Pins über eine separate Stromversorgung und Masse und auf der oberen oder der unteren Schicht sollten Kondensatoren mit 1 Mikrofarad (µF) und 0,1 µF zur I/O-Versorgungsspannung VCCQ hinzugefügt werden.

Wichtig ist eine rauscharme Spannungsversorgung

HyperBus-Speichergeräte verfügen über On-Chip-Register, die zum Festlegen von Optionen und Takten für das Gerät verwendet werden. HyperBus bezeichnet diese Register als Konfigurationsregister (CR). Alle HyperRAM-Geräte verfügen über interne CRs, über die bestimmte Betriebsmerkmale eingestellt werden können. Für den HyperRAM S27KS0641 können mit der Firmware die Energiesparmodi, Wrap-Burst-Länge, Wrap-Burst-Typ, Timing-Parameter für das Lesen und Schreiben sowie die Ansteuerungsstärke am Ausgang des externen 8-Bit-Datenbusses konfiguriert werden. HyperFlash verfügt zwar nicht über CRs, dafür aber über Statusregister.

Der HyperFlash S26KS512 verfügt über drei Statusregister. Er unterstützt internen Fehlerkorrekturcode (Error Correction Code, ECC) zur Validierung von Schreibvorgängen und verfügt über ein ECC-Statusregister, um Schreibfehler anzuzeigen. Ein weiteres Register enthält die Adressen sämtlicher ECC-Fehler. Ein drittes Register zählt die ECC-Korrekturen und die nicht korrigierbaren Fehler. Alle diese Register sind schreibgeschützt.

HyperBus-Transaktionen unterstützen zwei Arten von Speicheroperationen. Bei der ersten handelt es sich um Lese- und Schreibvorgänge für externen Speicher. Bei der zweiten handelt es sich um Lese- und Schreibvorgänge für CRs oder das Lesen von Statusregistern. Sobald der OctoSPI-Port des STM32L4L9 als HyperBus-Port konfiguriert ist, kann der Kern auf den Speicher zugreifen. Jeder Lese- oder Schreibvorgang im speicherabgebildeten HyperBus-Raum initiiert eine Transaktion zwischen dem Mikrocontroller und dem externen Speicher. Jede HyperBus-Transaktion beginnt damit, dass der Mikrocontroller drei 16-Bit-Wörter mit Befehls-/Adressanweisungen an das externe Speichergerät sendet.

Die Befehls-/Adresssequenz übermittelt dem externen Speichergerät, ob es sich um einen Lese- oder Schreibvorgang handelt, ob Speicherplatz oder Konfigurationsregister adressiert werden, ob es sich um eine Wrap- oder lineare Burst-Transaktion handelt und enthält Zeile und Spalte der Zieladresse. Obwohl all das für den Mikrocontroller über die Firmware transparent ist, spielt die Befehls-/Adresssequenz beim Debugging eine wichtige Rolle.

Bild 3: Das STM32L4R9I-EVAL-Board dient der Evaluierung des Mikrocontrollers STM32L4R9. Das HyperRAM-Speichergerät ist rot eingekreist und die Prüfpunkte des Geräts befinden sich an der Steckerleiste rechts.
Bild 3: Das STM32L4R9I-EVAL-Board dient der Evaluierung des Mikrocontrollers STM32L4R9. Das HyperRAM-Speichergerät ist rot eingekreist und die Prüfpunkte des Geräts befinden sich an der Steckerleiste rechts.
(Bild: STMicroelectronics)

HyperBus-Evaluierungsboard hilft beim Schaltungsdesign

Nach dem Einstieg in die Welt des HyperBus-Protokolls geht es darum, erst einmal einige praktische Erfahrungen damit zu sammeln. Auf dedizierten Evaluierungsboards lassen sich eigene Software-Codes ausprobieren. Das hilft vor allem dann, wenn man bislang noch nie mit dieser Schnittstelle gearbeitet hat. Die Evaluierungskarte STM32L4R9I-EVAL von STMicroelectronics für den Mikrocontroller STM32L4R9 ist hierfür ein guter Ausgangspunkt (Bild 3). Das HyperRAM-Speichergerät ist rot eingekreist und die Prüfpunkte des Geräts befinden sich an der Steckleiste rechts. Die STM32L4R9I-EVAL hat einen großen Funktionsumfang und bietet unter anderem eine Kameraschnittstelle, zwei MEMS-Mikrofone, einen Joystick sowie ein TFT-LCD-Farbdisplay mit 4,3 Zoll und 480 x 272 Pixel. Die Evaluierungskarte unterstützt die OctoSPI-Schnittstelle und verfügt über das HyperRAM-Gerät IS66WVH8M8BLL mit 64 MBit/s von ISSI, das auf die Leiterplatte gelötet ist.

Weiterführende Lesetipps

Dieser Beitrag ist erschienen im Sonderheft Embedded Systems Development und Internet of Things I der ELEKTRONIKPRAXIS (Download PDF)

* Rich Miron ist Applications Engineer und Sr. Technical Content Developer bei Digi-Key Electronics in Wadena, Minnesota.

(ID:46294150)