Heim / Arbeiten Sie im Internet / Dynamischer Speichercontroller. Direct Memory Access Controller: Diagramm, Logik, Zustände und Betriebsmodus Cache-Controller-Funktionen

Dynamischer Speichercontroller. Direct Memory Access Controller: Diagramm, Logik, Zustände und Betriebsmodus Cache-Controller-Funktionen

Prozessorkern von Mikrocontrollern:
- Arithmetik-Logikeinheit
- Organisation des Gedächtnisses

Guten Tag liebe Funkamateure!
Ich begrüße Sie auf der Website ""

Heute (genauer gesagt im Zuge mehrerer Artikel) schauen wir uns das genauer an Basis irgendein MikrocontrollerProzessorkern.

Hauptelemente:

1. Rechenwerk

Alu- das Herz (und vielleicht der Verstand, mit Ehre und Gewissen) des Mikrocontrollers.
Hier werden wir nicht in die Rolle eines „Verstümmelungswahns“ schlüpfen und im Inneren dieses Geräts herumstochern. Wir erfahren nur, dass dank der ALU die gesamte Arbeit des Mikrocontrollers stattfindet. Wenn Sie jemals tiefer lernen möchten, wie das "Herz" des Mikrocontrollers funktioniert (und es wird schön sein, wenn es erscheint), dann in den Büchern der wunderbaren Autoren Belov, Ryumik, Evstifeev, Revich, Baranov und vielen anderen , finden Sie immer eine ausführliche Antwort .

2. Mikrocontroller-Speicher (Speicherorganisation)

Bevor wir uns mit dem Speicher des Mikrocontrollers befassen, lassen Sie uns ein wenig über den Speicher im Allgemeinen sprechen.
Das menschliche Gedächtnis - damit ist alles klar - es kann "solide" sein (wenn Sie sich in einem soliden Gedächtnis befinden und manchmal sogar bei klarem Verstand sind) und leider "undicht". Und alle Informationen werden in den sogenannten „Neuronen“ – kleinen Gedächtniszellen – gespeichert.
Bei Mikrocontrollern ist fast alles gleich. Nur wenn ein Mensch die kleinste Zelle zum Speichern von Informationen hat, die man „Neuron“ nennt, dann die kleinste Speicherzelle für einen Mikrocontroller Informationen zu speichern heißt " bisschen“.
Ein Bit kann entweder eine logische Eins oder eine logische Null speichern.
Bisschendie minimale Maßeinheit für die Speichergröße in der Mikroprozessortechnik.
Die nächste große oder häufigste Gedächtniseinheit ist Byte.
Bytedas sind acht Informationsbits. Ein Byte kann nur acht Nullen und Einsen speichern.
Die maximale Anzahl, die in ein Byte geschrieben werden kann, ist 255. Wenn Sie im Programm arbeiten große Zahlen dann sollten Sie wissen (um zu wissen, wie viele Bytes zum Speichern einer Zahl benötigt werden), dass die maximale Zahl, in die geschrieben werden kann, Folgendes ist:
– ein Byte = 255
– zwei Bytes = 65535
– drei Bytes = 16 777 215
- vier Bytes - eine Zahl von mehr als 4 Milliarden (wenn Sie nicht mindestens hundert vom Forbes-Magazin sind, benötigen Sie keine vier Bytes Speicher, um Zahlen zu speichern).
Das Schreiben in den Speicher und das Lesen aus dem Speicher erfolgt in Bytes (Sie können nicht ein Bit an Informationen schreiben oder lesen).
Die nächste Maßeinheit ist Kilobyte.
Ein Kilobyte enthält 1024 Bytes an Informationen. (genau 1024, nicht 1000 Bytes).
Es gibt auch große Werte zur Messung der Speichermenge (Megabyte, Gigabyte), die jedoch noch nicht in Mikrocontrollern verwendet werden.
Ich hoffe, dass uns mit den Maßeinheiten elektronischer Speicher alles klar ist:

Organisation des Speichers im Mikrocontroller

AVR-Chips haben drei Arten von Speicher:
Programmspeicher, auch FLASH-Speicher genannt
Datenspeicher, auch RAM genannt (RAM)alias SRAM
nichtflüchtiger Speicher, auch bekannt als EEPROM, auch bekannt als EEPROM
Der Mikrocontroller hat drei Adressräume in denen sich die oben genannten Speichertypen befinden. Gleichzeitig erweist sich der Datenspeicher (im Sinne des allokierten Adressraums) als etwas benachteiligt – er muss sich seinen Adressraum mit Speicherzellen teilen, in denen Register abgelegt sind allgemeiner Zweck und E / A-Register (Sie werden im nächsten Artikel ausführlich darüber informiert). Diese Register gehören physikalisch nicht zum Datenspeicher, sondern befinden sich im gleichen Adressraum. Wenn die Startadressen des Programmspeichers und des nichtflüchtigen Speichers bei Adresse Null beginnen, beginnt die Startadresse des Datenspeichers nicht bei Adresse Null - Allzweckregister und E / A-Register nehmen ihre Plätze ab Adresse Null ein, und nur sie gefolgt von Adressen von Programmspeicherzellen.
Einige Arten von ATiny-MCUs haben keinen Datenspeicher.

Programmspeicher (FLASH-Speicher)

Programmspeicher dient dazu, unsere Programme darin zu speichern, sowie alle Daten, die wir benötigen, die sich während der Ausführung des Programms nicht ändern (Konstanten). Wenn die Stromversorgung des Mikrocontrollers abgeschaltet wird, werden alle Daten im Programmspeicher gespeichert.
Programmspeicher haben natürlich alle Mikrocontroller. Die Größe des Programmspeichers variiert je nach MK-Typ zwischen 1 Kilobyte und 256 Kilobyte.
Zugriff auf Programmspeicher nur der Programmierer hat beim Programmieren des MK, der MK selbst hat auch Zugriff auf den Programmspeicher, aber nur um Daten aus dem Speicher zu lesen, er kann dort nichts schreiben (man weiß ja nie, er will plötzlich unser Programm verderben). Der MK der Mega-Familie hat zwar die Möglichkeit (mit Erlaubnis des Programmierers), Änderungen im Programmspeicher vorzunehmen, aber das ist eine andere Geschichte.
Für den Programmspeicher gibt es zwei weitere Arten der Speichermessung - „ Wort" und " Seite“.
Die Sache ist die Programmspeicher besteht aus Zellen, die aus zwei Bytes bestehen. Eine solche Zelle wird als "Wort" bezeichnet.. Und zwar deshalb, weil fast alle MK-Befehle aus zwei Bytes bestehen und dementsprechend zwei Bytes im Programmspeicher benötigt werden, um sie zu schreiben. Jeder MK-Befehl ist ein „Wort“. Es gibt mehrere Befehle, die zum Schreiben 4 Bytes Speicher erfordern - zwei Wörter, aber solche Befehle finden sich in MKs mit einem Programmspeicher von mehr als 8 Kilobyte.
Auf diese Weise, in eine Zelle des Programmspeichers geschrieben werden kann:
- ein beliebiger Befehl, der aus zwei Bytes besteht
- Hälfte des Befehls, bestehend aus 4 Bytes
- zwei Konstanten, von denen jede in ein Byte passt, oder eine 16-Bit-Konstante. Wenn Sie gleichzeitig drei Ein-Byte-Konstanten in den Speicher schreiben, belegen sie immer noch vier Bytes (zwei Wörter) im Speicher.
Außerdem, das Schreiben in den Programmspeicher erfolgt nicht nur durch „Wörter“, sondern auch durch „Seiten“ . Seitengröße liegt zwischen 64 und 256 Bytes (je größer der Programmspeicher, desto größer die „Seite“). Was bedeutet das. Wenn Sie ein kleines Programm erstellen, das 11 Wörter (22 Byte) lang ist, belegt es immer noch eine Seite Programmspeicher, d. h. mindestens 64 Byte. Die „zusätzlichen“ 42 Bytes werden entweder mit Nullen oder Einsen aufgefüllt. Das sind die Torten.
Aber das ist nicht alles.
Der Programmspeicher kann drei Zustände haben(wenn ich das sagen darf):
1. Der gesamte Speicher steht dem Programmierer zur Verfügung
In diesem Fall können wir den gesamten Speicher vollständig mit unserem Programm und unseren Daten füllen. Und das Programm beginnt bei der Speicheradresse Null.
2. Ein Teil des Speichers nimmt MK
Für den Fall, dass MK während des Betriebs verwendet wird (und ich hoffe, Sie erinnern sich, was es ist), nimmt der MK einen Teil des Speichers für die Bedürfnisse der Interrupt-Verarbeitung und speichert ihn darin. Vektoren unterbrechen“.
Was ist das.
Wenn wir dem MK erlauben, Interrupts zu verarbeiten, nimmt er, ausgehend von der Nulladresse des Speichers, einige der Zellen, um die Adressen darin zu speichern, zu denen der MK gehen muss, um die Interrupt-Routine auszuführen. Für jeden Interrupt weist der MK zwei Speicherbytes (ein Wort) zu, die die Adressen von Interrupt-Routinen speichern. Diese Adressen, die angeben, wo sich das Unterprogramm zur Verarbeitung dieses oder jenes Interrupts im Speicher befindet, heißen „ Vektoren unterbrechen“. Und der gesamte Speicherbereich, in dem „Interrupt-Vektoren“ gespeichert sind, wird aufgerufen Interrupt-Vektortabelle. Die Anzahl der belegten Speicherzellen für Interrupts hängt direkt von der Anzahl möglicher Interrupts für einen bestimmten Mikrocontroller ab (von einigen wenigen bis zu mehreren Dutzend). Alle Interrupts befinden sich am Anfang des Programmspeichers ab Adresse Null und haben eine eindeutige Reihenfolge. An der Adresse Null befindet sich immer der Reset-Interrupt-Vektor. Wenn wir das Gerät einschalten oder mit der Taste zurücksetzen, wird der Reset-Interrupt ausgelöst. Der MK liest von der Nulladresse (von der Zelle) die Adresse, die angibt, wo sich im Speicher der Anfang unseres Programms befindet, und indem er zu dieser Adresse geht, beginnt er mit der Ausführung des Programms. Das Programm selbst befindet sich in diesem Fall unmittelbar nach der Unterbrechungstabelle im Programmspeicher.
3. MK nimmt einen anderen Teil des Programmspeichers (genauer gesagt nimmt es keinen, sondern weist einen Bereich am Ende des Speichers zu, in dem der Programmierer ein spezielles Programm ablegt - den „Loader“).
Dies ist in MCUs der „MEGA“-Familie möglich, die die Möglichkeit haben, der MCU zu erlauben, Änderungen am Programmspeicher vorzunehmen. Was bedeutet das.
Einige MKs haben die Fähigkeit Selbstprogramm. In der Amateurpraxis wird diese Möglichkeit des MK äußerst selten genutzt. Die Fähigkeit zur Reprogrammierung (Selbstprogrammierung) wird vor allem bei der industriellen Fertigung eines Gerätes auf einem Mikrocontroller benötigt, für den dann ein Update freigegeben werden kann Software. Wir werden diese Möglichkeit nicht in Betracht ziehen, zumindest noch nicht. Wir müssen nur wissen, dass bei MKs, die die Selbstprogrammierung unterstützen, der Programmspeicher in zwei Teile geteilt ist :
- Oberer, höher - Abschnitt Anwendungsprogramm, wo sich unser Programm befindet und Interrupt-Vektoren
- niedriger - Bootloader-Bereich (Abschnitt Bootloader- in Englisch), wo der Programmierer sein Ladeprogramm ablegt. Die Größe des Bootloader-Abschnitts hängt von der Gesamtgröße des MK-Programmspeichers ab und kann zwischen 128 Byte und 4096 Byte liegen. Wenn wir die Möglichkeit der Selbstprogrammierung des MK nicht nutzen, dann ist dieser Abschnitt für unser Programm und unsere Daten angegeben.
Nun, FLASH-Speicher wird Programmspeicher genannt, weil er mit der sogenannten Flash-Technologie hergestellt wird (wie die üblichen Computer-„Flash-Laufwerke“ für uns alle).
Der Programmspeicher erlaubt 10.000 Umprogrammierzyklen.

Datenspeicher (Statisches RAM, SRAM)

RAM, es ist Datenspeicher Typ SRAM, das dazu bestimmt ist, darin verschiedene Daten zu speichern, die als Ergebnis des Programms erhalten wurden.
Wenn die Stromversorgung des Mikrocontrollers ausgeschaltet wird, gehen alle darin gespeicherten Daten verloren.
Datenspeicher ist in fast allen Mikrocontrollern verfügbar (fehlt in den einfachsten MKs der Tiny-Familie).
Bei allen MCs der Mega-Familie (und einem Teil der MCs der Tiny-Familie) reicht die Größe des eingebauten Datenspeichers von 128 Byte bis 8 Kilobyte und steht uns fast vollständig zur Verfügung. Es braucht nur ein wenig MK, um den Stapel zu organisieren (wir werden später herausfinden, was es ist). Einige MKs bieten eine Verbindung Externer Speicher(es kann jeder Typ sein - FLASH, SRAM, EEPROM) bis zu 64 Kilobyte. Beim Anschluss von externem Speicher in solchen MKs wird es sozusagen zu einer Fortsetzung des Datenspeichers.
Das Schreiben und Lesen des Datenspeichers erfolgt byteweise und ist im Gegensatz zum Programmspeicher nicht in Seiten und Wörter unterteilt.

Nichtflüchtiger Speicher (EEPROM)

Nichtflüchtiger Speicher bezieht sich auch auf Datenspeicher, hat aber im Gegensatz zu letzterem mehrere Funktionen. Es soll Daten und Konstanten speichern, die im stromlosen Zustand erhalten bleiben müssen.
Alle Mikrocontroller haben EEPROMs.
Wenn die Stromversorgung des Mikrocontrollers ausgeschaltet wird, werden alle im nichtflüchtigen Speicher gespeicherten Daten gespeichert (weshalb er als nichtflüchtig bezeichnet wird).
Die Menge an nichtflüchtigem Speicher, je nach MK-Typ, reicht von 64 Byte bis 4 Kilobyte.
Informationen schreiben und lesen in den Speicher erfolgt byteweise. Bei den älteren Modellen der MEGA-Familie hat der nichtflüchtige Speicher sowie der Programmspeicher jedoch einen Seitendatensatz. Die Seitengröße ist klein, nur 4 Bytes. In der Praxis spielt dieses Feature keine Rolle - sowohl das Schreiben als auch das Lesen erfolgt weiterhin byteweise.
Anzahl der Schreib- und Löschzyklen Speicher erreicht 100.000.
Das Hauptmerkmal des EEPROM ist, dass es beim Schreiben von Daten sehr „langsam“ wird – das Schreiben eines Bytes kann 2 bis 4 Millisekunden dauern (dies ist eine sehr niedrige Geschwindigkeit), und es kann beispielsweise vorkommen, dass einige - oder Unterbrechung, in diesem Fall wird der Datenschreibvorgang ruiniert.
Darüber hinaus wird nicht empfohlen, Daten von Adresse Null in den nichtflüchtigen Speicher zu schreiben (ich erinnere mich nicht an die Quelle dieser Informationen, aber ich erinnere mich genau, was ich irgendwo gelesen habe) - Daten können während des Betriebs des MK beschädigt werden . Manchmal gehen Programmierer ein paar Bytes vom Beginn des Speichers zurück und beginnen erst in den nächsten Zellen mit dem Schreiben von Daten.

Das Herzstück eines jeden Flash-Speichers ist ein Siliziumkristall, auf dem nicht ganz gewöhnliche Feldeffekttransistoren ausgebildet sind. Ein solcher Transistor hat zwei isolierte Gates: Control (Steuerung) und Floating (Floating). Letzteres ist in der Lage, Elektronen, also Ladung, zu halten. In einer Zelle gibt es, wie bei jedem Feldeffekttransistor, einen Drain und eine Source (Abb. 4.1). Beim Schreiben wird eine positive Spannung an das Control Gate angelegt und ein Teil der Elektronen, die sich vom Drain zur Source bewegen, wird zum Floating Gate abgelenkt. Einige der Elektronen überwinden die Isolatorschicht und dringen (diffundieren) in das schwebende Gate ein. Dort können sie viele Jahre bleiben.

Die Elektronenkonzentration im Bereich des Floating Gate bestimmt einen der beiden stabilen Zustände des Transistors - die Speicherzelle. Im ersten Anfangszustand ist die Anzahl der Elektronen am schwebenden Gate klein und die Schwellenspannung zum Öffnen des Transistors relativ niedrig (logische Eins). Wenn genügend Elektronen auf das schwebende Gate geladen werden, befindet sich der Transistor in seinem zweiten stabilen Zustand. Seine Öffnungsspannung steigt stark an, was einer logischen Null entspricht. Beim Lesen wird gemessen

Reis. 4.1. Flash-Speicherzelle

Schwellenspannung, die an den Drain angelegt werden muss, um den Transistor einzuschalten. Um Informationen zu entfernen, wird kurzzeitig eine negative Spannung an das Steuergate angelegt, und die Elektronen aus dem schwebenden Gate diffundieren zurück zur Source. Der Transistor geht wieder in den Zustand einer logischen Einheit und bleibt darin, bis der nächste Schreibvorgang durchgeführt wird. Es ist bemerkenswert, dass im Flash-Speicher ein Transistor ein Informationsbit speichert - es ist eine Zelle. Der gesamte Prozess des "Memorierens" basiert auf der Diffusion von Elektronen in einem Halbleiter. Dies führt zu zwei nicht sehr optimistischen Schlussfolgerungen.

Die Ladungsspeicherzeit ist sehr lang und wird in Jahren gemessen, ist aber immer noch begrenzt. Die Gesetze der Thermodynamik und der Diffusion besagen, dass sich die Konzentration von Elektronen in verschiedenen Bereichen schließlich ausgleichen wird.

Aus dem gleichen Grund ist die Anzahl der Write-Rewrite-Zyklen begrenzt: von einhunderttausend bis zu mehreren Millionen. Mit der Zeit treten unvermeidlich eine Verschlechterung des Materials selbst und p-n-Übergänge auf. Beispielsweise sind Kingston Compact Flash-Karten für 300.000 Schreibzyklen ausgelegt. Compact Flash überschreiten - an

1.000.000, während das Transcend 32 GB USB-Flash-Laufwerk nur 100.000 ist.

Es gibt zwei Flash-Speicherarchitekturen. Sie unterscheiden sich durch den Zugang zu den Zellen und dementsprechend durch die Organisation der inneren Leiter.

Memory NOR (OR-NOT) ermöglicht es Ihnen, auf einzelne Zellen zuzugreifen. Jede Zelle hat einen separaten Leiter. Der Adressraum des NOR-Speichers ermöglicht es Ihnen, mit einzelnen Bytes oder Wörtern zu arbeiten (jedes Wort enthält

2 Byte). Diese Architektur erlegt der maximalen Speichermenge pro Flächeneinheit des Chips ernsthafte Einschränkungen auf. NOR-Speicher wird derzeit nur in BIOS-Chips und anderen ROMs mit geringer Kapazität wie Mobiltelefonen verwendet.

In einem NAND-(NAND-)Speicher befindet sich jede Zelle am Schnittpunkt einer "Bitleitung" und einer "Wortleitung". Zellen werden ähnlich einem Cluster in kleine Blöcke gruppiert Festplatte. Sowohl Lesen als auch Schreiben werden nur in ganzen Blöcken oder Zeilen ausgeführt. Alles modern Wechselmedien auf NAND-Speicher aufgebaut.

Die größten Hersteller von NAND-Chips sind Intel, Micron Technology, Sony und Samsung. Die Palette der hergestellten Chips ist ziemlich groß und wird mehrmals im Jahr aktualisiert.

Controller

Der Speichercontroller wird verwendet, um das Lesen und Schreiben zu steuern. Derzeit wird der Controller immer als separates Element implementiert (es ist entweder ein Mikrochip mit einem der Standardformfaktoren oder ein unverpackter Chip, der in eine Speicherkarte eingebettet ist), obwohl daran gearbeitet wird, den Controller direkt in einen Flash-Speicherchip zu integrieren .

Controller werden für ganz bestimmte Flash-Speicherchips entwickelt und hergestellt. Das Verfahren zum Adressieren von Zellen ist strukturell in die Steuerung eingebettet. Beim Schreiben auf einen Flash-Speicherchip werden Daten auf eine bestimmte Weise angeordnet, die von Modell zu Modell unterschiedlich ist. Die Hersteller halten diese Feinheiten geheim und haben offenbar nicht vor, sie offenzulegen. Offensichtlich wird viel mehr Controller-Firmware erstellt als die Controller-Modelle selbst. Die Controller-Firmware (Firmware) und die Adressübersetzungstabelle (Übersetzer) werden in den Servicebereich des Flash-Speichers geschrieben. Es ist dieser Bereich, den der Controller unmittelbar nach dem Anlegen von Strom zu lesen beginnt. Neben der eigentlichen Adressierung der Zellen übernimmt der Controller noch eine Reihe weiterer Funktionen: die Überwachung fehlerhafter Sektoren, die Fehlerkorrektur (ECC - error check and correct) und sogar den Verschleiß der Zellen (wear leveling).

Die technologische Norm bei der Herstellung von Speicherchips ist das Vorhandensein von durchschnittlich bis zu 2% nicht funktionierender Zellen in ihnen. Im Laufe der Zeit kann ihre Anzahl zunehmen, daher wird wie bei Festplatten ein Reservevolumen im Flash-Speicher bereitgestellt. Wenn ein fehlerhafter Sektor auftritt, ersetzt der Controller während des Formatierens oder Schreibens seine Adresse in der Dateizuordnungstabelle durch die Sektoradresse aus dem Ersatzbereich. Die Korrektur wird vom Controller durchgeführt, wird jedoch auf der Ebene des Dateisystems eines bestimmten Mediums implementiert.

Aufgrund der begrenzten Ressourcen der Zellen (jeweils in der Größenordnung von mehreren Millionen Lese-/Schreibzyklen) hat der Controller eine Funktion zur Berücksichtigung der Gleichmäßigkeit des Verschleißes. Um sicherzustellen, dass Informationen gleichmäßig aufgezeichnet werden, wird der freie Speicherplatz bedingt in Abschnitte unterteilt, und für jeden von ihnen wird die Anzahl der Schreibvorgänge berücksichtigt. Zyklusstatistiken werden in einem verborgenen Servicebereich des Speichers aufgezeichnet, und der Controller greift regelmäßig auf diese Informationen zu, um diese Informationen zu erhalten. Die Adressierung wird dadurch nicht beeinflusst.

Aufbau eines USB-Flash-Laufwerks

Trotz der Gehäusevielfalt sind alle USB-Sticks gleich aufgebaut. Wenn die Gehäusehälften miteinander verrastet sind, lassen sie sich in der Regel leicht lösen. Wasserdichte oder modische Hüllen müssen durch destruktive Methoden, wie z. B. Schneiden, geöffnet werden.

Auf der Platine im Inneren des USB-Sticks (Abb. 4.2) befinden sich zwangsläufig zwei Mikroschaltkreise: ein Speicherchip und ein Controller. Beide sind werkseitig gekennzeichnet. Manchmal trägt das Board zwei Flash-Speicherchips, die paarweise arbeiten. Die Verrohrung von Mikroschaltkreisen besteht aus mehreren Widerständen und Dioden, einem Leistungsstabilisator und einem Quarzresonator. Neuerdings wird der Stabilisator zunehmend direkt in die Steuerung integriert und die Anzahl der Anbauteile auf ein Minimum reduziert. Darüber hinaus kann die Platine enthalten LED-Anzeige und ein Minischalter für den Schreibschutz.

Reis. 4.2. Flash-Disk-Gerät

Der USB-Stecker wird direkt auf die Platine gelötet. Die Lötstellen der Kontakte sind bei vielen Modellen recht anfällig, da sie die mechanische Belastung beim An- und Abstecken des Gerätes tragen.

Arten und Design von Speicherkarten

Viele Unternehmen haben den Benutzern von Zeit zu Zeit unterschiedliche Speicherkartendesigns angeboten. Bis auf seltene Ausnahmen sind sie alle untereinander hinsichtlich Anzahl und Anordnung der Kontakte unvereinbar Elektrische Eigenschaften, Flash-Karten gibt es in zwei Ausführungen: mit paralleler (paralleler) und serieller (serieller) Schnittstelle.

Im Tisch. Tabelle 4.1 listet die 12 Haupttypen von Speicherkarten auf, die derzeit gefunden werden. Innerhalb jedes Typs gibt es zusätzliche Varianten, unter Berücksichtigung dessen, dass wir über die Existenz von fast 40 Kartentypen sprechen können.

Tabelle 4.1. Arten von Speicherkarten

Speicherkartentyp

Gesamtabmessungen, mm)

Maximal

konstruktiv

Schnittstelle

CompactFlash (CF)

Parallel 50 Pins

Serielle 9 Pins

Multimedia-Karte (MMS)

Serielle 7 Pins

Serielle 7 Pins

Highspeed mms

Seriell 13 Pins

Serielle 10 Pins

Memorystick PRO

Serielle 10 Pins

Memory Stick Duo

Serielle 10 Pins

SmartMedia (SSFDC)

Parallel 22 Pins

Parallel 22 Pins

Seriell 8 Pins

MMC-Karten können in zwei Modi betrieben werden: MMC (MultiMedia Card) und SPI (Serial Peripheral Interface). Der SPI-Modus ist Teil des MMC-Protokolls und dient zur Kommunikation mit dem SPI-Kanal in Mikrocontrollern von Motorola und einigen anderen Herstellern.

In den SD (Secure Digital)-Kartensteckplatz können Sie einlegen MMS-Karte(MultiMedia Card), aber nicht umgekehrt. Der SD-Kartencontroller enthält eine Hardware-Datenverschlüsselung, und der Speicher selbst ist mit einem speziellen Bereich ausgestattet, in dem der Verschlüsselungsschlüssel gespeichert ist. Dies geschah, um das illegale Kopieren von Musikaufnahmen zu verhindern, für deren Speicherung und Verkauf ein solches Medium konzipiert wurde. Die Karte hat einen Schreibschutzschalter.

CompactFlash (CF)-Karten können einfach in den PCMCIA Typ II-Steckplatz eingesetzt werden. Obwohl PCMCIA 68 Pins hat und CF nur 50, hat das Design CompactFlash-Karten bietet volle Kompatibilität und verfügt über alle Funktionen des PCMCIA-AT A-Formats.

Alle Memory Stick-Medien (Sony-Standard) sind relativ kompatibel. Der Standard sieht theoretisch eine Speicherkartenkapazität von bis zu 2 TB vor, tatsächlich reicht die Kapazität jedoch bis in Gigabyte-Einheiten.

SmartMedia-Karten sind praktisch veraltet, nur in sehr alten Digitalkameras zu finden. Bemerkenswert ist, dass dies der einzige Standard war, bei dem sich der Controller nicht in der Karte, sondern im Lesegerät befand.

Das Design von Speicherkarten ist nicht trennbar - dies ist ein Gerät, das nicht zur Reparatur geeignet ist. Unverpackte Mikroschaltkreise werden zusammen mit den Schlussfolgerungen in die Masse gegossen und alle zusammen in eine Kunststoffhülle gepresst. Der einzige Weg, an den Kristall zu gelangen, ist das Öffnen des Geräts, aber eine Beschädigung der Leiter ist fast unvermeidlich.

Leser

Um einen USB-Stick zu lesen, ein normaler USB-Anschluss: Der Computer sieht solche Geräte als Standard Wechsellaufwerk dank ihres Controllers. Die Controller aller Speicherkarten werden über serielle oder parallele Schnittstellen an den Computer adressiert - Kontakte auf der Karte. Für jede dieser Schnittstellen wird ein entsprechender Adapter benötigt - zusätzlicher Controller, passend zu dieser Schnittstelle mit einem Standard-USB-Anschluss.

Ein Kartenleser ist ein Gerät, das aus einem oder mehreren ähnlichen Controllern, einem Stromrichter und Anschlüssen für verschiedene Speicherkarten besteht (Abb. 4.3). Die Stromversorgung erfolgt aus einer +5-V-Quelle über ein USB-Kabel.

Reis. 4.3. Kartenleser

Meistens gibt es "Kombinationen", die für mehrere Kartentypen ausgelegt sind: von 6 bis 40. Es gibt viel weniger Steckplätze in einem Kartenleser, da jeder Steckplatz für mehrere Kartentypen verwendet wird, die in Größe und Position der Kontakte ähnlich sind. Nach seinen Eigenschaften verschiedene Modelle sind praktisch gleichwertig, unterscheiden sich aber hauptsächlich in der Anzahl der unterstützten Kartentypen und im Design.

Logische Organisation

Bevor wir zu den Dateisystemen von Flash-Laufwerken übergehen, müssen wir uns an die NAND-Architektur erinnern. In diesem häufig genutzten Speicher erfolgt das Lesen, Schreiben und Löschen von Informationen nur blockweise.

Auf Festplatten und Disketten beträgt die Blockgröße 512 Bytes, ohne 59 Servicebytes, die nur für den Festplattencontroller sichtbar sind. Alle Dateisysteme wurden unter Berücksichtigung dieser Werte erstellt. Das Problem ist, dass bei Flash-Speichern die Größe des Löschblocks mit seltenen Ausnahmen nicht der Größe eines Standard-Festplattensektors von 512 Byte entspricht und normalerweise 4,8 oder sogar 64 KB beträgt. Andererseits muss der Lese-/Schreibblock aus Gründen der Kompatibilität mit der Größe des Festplattensektors übereinstimmen.

Dazu wird der Löschblock in mehrere Lese-/Schreibblöcke mit einer Größe von 512 Byte aufgeteilt. In der Praxis ist der Block etwas größer: Neben 512 Byte für Daten hat er auch einen 16 Byte langen „Schwanz“ (Tail) für Serviceinformationen über den Block selbst. Physikalisch sind der Ort und die Anzahl der Lese-/Schreibblöcke durch nichts begrenzt. Die einzige Einschränkung besteht darin, dass ein Lese-/Schreibblock keine Löschblockgrenze überschreiten darf, da er nicht zu zwei verschiedenen Löschblöcken gehören kann.

Lese-/Schreibblöcke werden in drei Typen unterteilt: gültig, ungültig und defekt. Blöcke, die aufgezeichnete Daten enthalten und zu einer Datei gehören, sind gültig. Benutzte Blöcke mit veralteten Informationen gelten als ungültig und müssen gelöscht werden. Die Kategorie der defekten Blöcke besteht aus Blöcken, die nicht beschrieben und gelöscht werden können.

Ein weiteres Merkmal des Flash-Speichers besteht darin, dass Informationen nur in einen Bereich geschrieben werden können, der zuvor von früheren Informationen befreit wurde. Wenn Informationen geschrieben werden müssen, muss die Controller-Firmware entscheiden, welche ungültigen Blöcke zuerst gelöscht werden sollen. In den meisten Mikroprogrammen wird das Problem des Entfernens ungültiger Blöcke auf einfachste Weise gelöst: Sobald ein bestimmter Teil der Kapazität der Flash-Disk mit Informationen gefüllt ist, wird automatisch der Mechanismus zum Reinigen ungültiger Blöcke gestartet.

Um die Speicherlebensdauer zu erhöhen, wird eine Wear-Leveling-Steuerungstechnologie verwendet, die sich verlängert Lebenszyklus Speicherkristall aufgrund der gleichmäßigen Verteilung von Schreib- / Löschzyklen von Speicherblöcken. Ein Nebeneffekt – der Ausfall eines Speicherblocks – wirkt sich nicht auf den Betrieb anderer Speicherblöcke des gleichen Kristalls aus. Feste Blöcke gehören zu Dateien, die längere Zeit oder überhaupt nicht geändert oder verschoben wurden. Das Vorhandensein von festen Datenblöcken führt dazu, dass der verbleibende Teil der Zellen einem erhöhten Verschleiß ausgesetzt ist und seine Ressourcen schneller verbraucht. Die Firmware berücksichtigt solche Blöcke und verschiebt ihren Inhalt gegebenenfalls in andere Zellen.

Die Dateisysteme von Flash-Disks und Speicherkarten sind Anwendern auf den ersten Blick von Festplatten und Disketten bekannt. Dies ist FAT16, seltener FAT32: So schlägt das Windows-Betriebssystem vor, eine Festplatte zu formatieren. Standard bedeutet Windows XP- und Windows 7-Datenträger können formatiert werden NTFS-System! Dazu müssen Sie zunächst in den Geräte-Manager gehen und im Eigenschaftenfenster des angeschlossenen Flash-Laufwerks auf der Registerkarte Richtlinie den Wert Optimierung für schnelle Ausführung auswählen. Spezielle Programme von Herstellern, wie das HP USB Disk Storage Format Tool, ermöglichen es Ihnen, Flash-Laufwerke ohne solchen Aufwand auf NTFS zu formatieren.

Allerdings ist die äußere Ähnlichkeit von Dateisystemen Solid State Drives und herkömmliche Festplatten täuschen. Das Dateisystem Flash File System (FFS) emuliert nur ein herkömmliches Laufwerk und besteht aus Steuereinheiten und einer Initialisierungseinheit. Tatsächlich kennt nur der Controller einer Flash-Disk oder Speicherkarte die wahre Position und Adressierung von Speicherblöcken.

Dies ist sehr wichtig, wenn verschiedene Wege Wiederherstellen des Inhalts des Flash-Speicherchips. Beim Lesen eines Speicherchips über seinen "nativen" Controller enthält die Bilddatei eine Folge von Blöcken in der Reihenfolge ihrer Nummern oder Offsets. Am Anfang stehen der Header und die Dateisystemtabelle. Wenn das Lesen auf dem Programmiergerät durchgeführt wird, enthalten die Anfangsblöcke des Dumps Dienstinformationen, und die Datenblöcke werden fast zufällig gemischt. Gleichzeitig sind Serviceinformationen wahrscheinlich nicht nützlich, da sie vollständig vom Steuerungsmodell und seiner Firmware abhängen - die richtige Reihenfolge der Blöcke muss sehr mühsam zusammengestellt werden.

Einige Kameras arbeiten nur mit Datei RAW-System Die Methode zum Aufzeichnen von Fotos auf Medien mit einem solchen Dateisystem sowie die Formatierungsfunktionen der Karte selbst hängen vom Gerätemodell und sogar von der Firmware eines bestimmten Modells ab. Dieses Format ist nicht standardisiert und weist viele Variationen auf. Normalerweise können nur Serviceprogramme des Kameraherstellers Daten von solchen Karten wiederherstellen, und es ist ratsam, die Kamera selbst als Kartenleser zu verwenden.

Reis. 4.4. Fenster Flash-Laufwerk formatieren Windows Vista SPl

Die Innovation ist Dateisystem exFAT (Erweitertes FAT - erweitertes FAT). Die Unterstützung für dieses Dateisystem, das speziell für Flash-Laufwerke entwickelt wurde, erschien erstmals in Windows Embedded CE 6.0. Windows Vista Service Pack 1 und Windows 7 funktionieren mit exFAT (Abbildung 4.4).

Der Zweck des neuen Dateisystems ist der schrittweise Ersatz von FAT und FAT32 auf Flash-Laufwerken. Es enthält einige Funktionen, die zuvor nur für das NTFS-Dateisystem verfügbar waren:

Die Dateigrößenbeschränkung von 4 GB wurde überwunden: Die theoretische Grenze liegt bei 2^ Bytes (16 Exabytes);

Verbesserte Verteilung Freiraum durch Einführung einer Bitmap mit freiem Speicherplatz, wodurch die Festplattenfragmentierung reduziert wird;

Die Begrenzung der Anzahl von Dateien in einem Verzeichnis wurde entfernt;

Unterstützung für eine Liste von Zugriffsrechten hinzugefügt.

Wie schnell dieses Dateisystem zur Norm für Flash-Laufwerke wird, wird die Zeit zeigen. Anscheinend wird dies vorher nicht passieren Betriebssystem Windows 7 wird von der überwiegenden Mehrheit der Benutzer übernommen.

Manchmal müssen bei der Entwicklung eines Geräts einige Daten in einem nichtflüchtigen Speicher gespeichert werden. In solchen Fällen wird üblicherweise das interne EEPROM des Mikrocontrollers verwendet. Reicht es nicht, kommen meist externe EEPROM-Chips der 24lxx-Serie zum Einsatz. Mikroschaltungen dieser Serie sind sehr beliebt. Meistens sind sie in alten zu finden Mobiltelefone, etwas Motherboards, Patronen aus Druckern und vielen anderen Orten. Auch der Preis dieser Chips ist sehr attraktiv. Zum Beispiel kostet 24LC16 11 Rubel.
Diese Mikroschaltung ist in verschiedenen Paketen erhältlich, von denen die beliebtesten DIP und SOIC sind. Die Mikroschaltung hat die folgende Pinbelegung:

Wie Sie sehen können, gibt es nur sehr wenige Schlussfolgerungen. Versuchen wir also herauszufinden, was was ist.
A0, A1, A2- werden in dieser Mikroschaltung nicht verwendet. Sie können an Masse oder an Power Plus angeschlossen werden. In einigen anderen Mikroschaltungen der 24lxx-Serie können diese Pins die Adresse der Mikroschaltung einstellen, um bis zu 8 Speichermikros gleichzeitig an einen i2c-Bus anschließen zu können.
Vss- Erde.
SDA- Datenleitung
SCL- Taktleitung
WP- Schreibschutz. Wenn dieser Pin logisch 0 ist, dann ist das Schreiben in den Speicher freigegeben. Wenn Sie eine logische Einheit verwenden, ist nur das Lesen aus dem Speicher möglich.
Vcc- Stromversorgung der Mikroschaltung. Laut Datenblatt wird es mit einer Spannung von 2,5 Volt bis 5,5 Volt betrieben.

Verbindung zur Steuerung.
Das Anschließen des Speichers an den MK ist sehr einfach. Von der Umreifung wird nur noch ein Widerstandspaar mit einem Widerstandswert von ca. 4,7 kOhm benötigt.

Software

Um mit Speicher zu arbeiten, wurde eine Bibliothek entwickelt, die die folgenden Funktionen implementiert:

i2c_init- passt die Geschwindigkeit der Taktimpulse entlang der Linie an SCL.

Der 24LC16-Chip unterstützt Frequenzen bis 400 kHz. Sie können die Frequenz wie folgt berechnen:

CPU-Taktfrequenz- die Frequenz, mit der der Mikrocontroller arbeitet

TWBR- die im gleichnamigen Register eingetragene Nummer.

TWPS- Vorherseher. Die Prescaler-Werte werden durch die Bits TWPS1 und TWPS0 im TWSR-Register gesetzt.

Für den Atmega 32 Controller gilt folgende Tabelle:

i2c_start- sendet Startmeldung

i2c_stop- sendet eine Stop-Meldung

i2c_send- sendet ein Byte

i2c_recive- empfängt ein Byte

i2c_recive_last- Nimmt das letzte Byte. Der Unterschied zur vorherigen Funktion besteht darin, dass der Mikrocontroller beim Empfang eines Bytes kein Bestätigungsbit sendet. Wenn Sie beim Empfang des letzten Bytes verwenden i2c_recive dann bleibt die SDA-Leitung am Boden gedrückt.

Schreiben von Daten auf einen Speicherchip

Sie können Daten sowohl in zufälliger Reihenfolge als auch Seite für Seite schreiben. Da sich mehrere Geräte gleichzeitig auf dem i2c-Bus befinden können, müssen Sie, um auf ein Gerät zugreifen zu können, dessen 7-Bit-Adresse kennen. Chipadresse 24LC16 in binäre Form sieht so aus:

Die Bits A, B, C werden verwendet, um den Speicherblock auszuwählen. Es gibt 8 Speicherblöcke im Chip, jeder 256 Bytes. Dementsprechend nehmen die ABC-Bits Werte von 000 bis 111 an.

Um Bytes auf den Chip zu schreiben, müssen Sie die folgende Abfolge von Aktionen ausführen:

  1. i2c-Schnittstelle initialisieren
  2. Startmeldung senden
  3. Chipadresse + Speicherblockadresse senden
  4. Senden Sie die Adresse des zu beschreibenden Speicherplatzes
  5. Senden Sie ein Datenbyte
  6. Senden Sie ein Stop-Paket

Beispiel: Muss ein Byte schreiben 0xFA an die Adresse 0x101.

rcall i2c_init
rcall i2c_start
ldi temp,0b 1010 001 0 // Chipadresse wobei:
// 1010 - Chipadresse
// 001 - Adresse des Speicherblocks (Zelle 0x101 gehört zu Block 1)
// 0
rcall i2c_send
ldi temp.1 //Adresse der Speicherzelle. (Block 1, Zelle 1)
rcall i2c_send
lditemp,0xFA //Lade das zu schreibende Byte in das Register
rcall i2c_send //Schreibe ein Byte
rcall i2c_stop

Sie können Daten nicht nur Byte für Byte, sondern auch Seite für Seite in den Speicher schreiben. Die Seitengröße beträgt 16 Bytes. Das Schreiben pro Seite impliziert Folgendes: Senden der Adresse des Nullbytes gewünschte Seite und danach 16 mal senden wir die notwendigen Daten. Der Adresszähler wird automatisch um eins erhöht. Wenn Sie zum 17. Mal Daten senden, wird das Null-Byte überschrieben, wenn Sie das Byte zum 18. Mal senden, wird Byte Nummer 1 überschrieben usw.

Beispiel: Es ist erforderlich, die erste Seite von Block 0 zu schreiben.

rcall i2c_init // Initialisieren Sie die i2c-Schnittstelle
rcall i2c_start // Senden Sie die Startnachricht
ldi temp,0b 1010 000 0 // Chipadresse wobei:
// 1010 - Chipadresse
// 000 - Adresse des Speicherblocks (uns interessiert der Nullblock)
// 0 - Bit lesen/schreiben. 0 - schreiben, 1 - lesen
rcall i2c_send
Ldi-Temp, 16 //Adresse der ersten Seite
rcall i2c_send
LDI-Temp, 0x01 //Byte Nummer 0 in das Register laden
rcall i2c_send //Schreibe ein Byte
LDI-Temp, 0x02 //Byte Nummer 1 in das Register laden
rcall i2c_send //Schreibe ein Byte
/// den Rest der Bytes hier schreiben.....
LDI-Temp, 0x0E //Byte Nummer 14 in Register laden
rcall i2c_send //Schreibe ein Byte
LDI-Temp, 0x0F //Byte Nummer 15 in Register laden
rcall i2c_send //Schreibe ein Byte
rcall i2c_stop //Sende eine Stop-Nachricht

Auslesen von Daten aus einem Chip
Wir haben den Rekord irgendwie herausgefunden, jetzt fangen wir an zu lesen. Gehen Sie wie folgt vor, um ein Byte zu lesen:

  1. Initialisieren Sie die i2c-Schnittstelle (falls sie noch nicht initialisiert wurde)
  2. Startpaket zusenden
  3. Senden Sie die Adresse der Mikroschaltung und die Adresse des Speicherblocks, aus dem wir lesen werden
  4. Speicherplatzadresse senden
  5. Starter-Nachricht erneut senden
  6. Chipadresse und Speicherblockadresse mit „Lese“-Bit senden
  7. Bytes empfangen
  8. Stopppaket senden

rcall i2c_init // Initialisieren Sie die i2c-Schnittstelle
rcall i2c_start // Senden Sie die Startnachricht
lditemp, 0b1010 011 0 // Chipadresse + Adresse des 3. Speicherblocks.
// Lese-/Schreibbit immer noch 0 !
rcall i2c_send
LDI-Temp, 0x41 //Adresse der Speicherzelle
rcall i2c_send
rcall i2c_start //Erneutes Senden der Startnachricht
lditemp, 0b1010 011 1 // Chipadresse + Speicherblockadresse + Lese-/Schreibbit wurde 1
rcall i2c_send // Jetzt können Sie die Daten lesen
rcall i2c_recive_last //Ein Byte lesen. Erstes und Letztes.
rcall i2c_stop //Sende eine Stop-Nachricht

Das Lesen kann sequentiell byteweise erfolgen, d.h. Ruf einfach ani2c_recive So viel wie nötig. Der Befehl zum Erhöhen der Adresse um eins muss nicht gesendet werden. Auch das Umschalten der Blockadressen beim sequentiellen Lesen entfällt. Diese. Sie können problemlos den gesamten Chip auf einmal entnehmen und auslesen.

Die Bibliothek für die Arbeit mit i2c wurde auf dem Mikrocontroller Atmega32 entwickelt und getestet. Ich denke, es wird auf vielen anderen Controllern ohne Änderungen funktionieren. Natürlich muss der Controller Hardware-Unterstützung für i2c, oder wie es auch TWI genannt wird, haben. Natürlich kann i2c auch programmatisch implementiert werden, aber ich habe mich nicht darum gekümmert und es war auch kein Bedarf. Das Demo-Beispiel ist ein Programm, das Bytes von 0 bis 15 auf die ersten 16 Adressen schreibt und nach dem Schreiben auf Port A ausgibt. Wie das funktioniert, können Sie nicht nur live, sondern auch in Proteus beobachten.

Und zum Schluss füge ich ein Oszillogramm bei:

So sieht der i2c-Bus in meinen Augen aus :-)
Alle Fragen und Anregungen sind in den Kommentaren willkommen.

Betrachten Sie als Beispiel für die Implementierung der Prinzipien des direkten Speicherzugriffs (DMA) die Mikroschaltung KR580VT57. Der programmierbare PDP-Controller ist für den Hozwischen dem Systemspeicher und vier externen Geräten (ED) ausgelegt.

Der Controller führt einen bidirektionalen Datenaustausch zwischen dem Speicher und der VU durch (auf Anforderung der VU), während die Parameter des spezifizierten Arrays von Speicherzellenadressen (Anfangsadresse und Anzahl der Zyklen) und Steuersignale im Adresskanal von erzeugt werden das Mikroprozessorsystem. Jeder der vier Kanäle des Controllers bietet die Adressierung (durch Inkrementieren der generierten Adresse) des externen Speichers mit Arrays von bis zu 16 KByte mit der Möglichkeit, jede der 64 K-Startadressen einzustellen.

Zusammensetzung des PDP-Controllers

Die folgenden Blöcke können in der Steuerung unterschieden werden (Abb. 3.11.1): ein Anforderungsverarbeitungsblock, ein Adressgenerator, ein Lese-Schreib-Logikblock, ein Steuerblock, ein Datenpuffer und zwei Register – ein Moduseinstellungsregister und ein Kanalstatusregister. Betrachten Sie ihre Eigenschaften.

Der Anfragebearbeitungsblock ist vorgesehen für:

● für Rezeption Anforderungssignale ZDAP0–ZDAP3 für direkten Speicherzugriff von der VU;

● für Maskierung Eingänge der Kanäle K0–K3;

● für Auslieferung Anforderungsbestätigung signalisiert ¯PPDP0 – ¯PPDP3 des direkten Speicherzugriffs und informiert die VU über die Bereitschaft des Controllers, Daten über den DMA-Kanal auszutauschen.

Der Adressgenerator enthält 16-Bit-Register der Startadresse (PHA0…PHA3) und der Anzahl der Zyklen (RCHTs0…RCHTs3), ein Inkrement-Dekrement-Schema und einen Trigger. Während der Ausführung des anfänglichen Installationsprogramms wird die Anfangsadresse der Speicherzelle, auf die von der VU über den DMA-Kanal zugegriffen wird, in den RHA geschrieben. In den 14 niederwertigsten Stellen des Registers der Anzahl der Zyklen des RFC wird die Zahl N - 1 eingetragen, wobei N die Anzahl der Zyklen ist. Die zwei höchstwertigen Bits dieses Registers werden verwendet, um den Austausch über den DMA-Kanal zu steuern.

In jedem Zyklus werden zwei Bytes der Adresse aus dem PHA gelesen. Der Trigger gibt den Leseauftrag vor: Das High-Byte wird über den Datenpuffer an den Schrittmotor ausgegeben, das Low-Byte der Adresse wird über die Busse A0 ... A3, A4 ... A7 ausgegeben. Am Ende des Zyklus inkrementiert das Inkrement-Dekrement-Schema den Inhalt des RHA und verringert den Inhalt des RFC um eins. Zu beachten ist, dass die Ausgänge A4…A7 der Steuerung immer als Ausgänge für die Bits A4…A7 des Adresscodes verwendet werden und die Ausgänge A0…A3 verwendet werden:

  • wie Ausgänge für die Übertragung der niedrigstwertigen Stellen des Adresscodes während des Betriebs des DMA-Kanals;
  • wie Eingänge um das Register auszuwählen, mit dem Informationen ausgetauscht werden. Diese Notwendigkeit entsteht beim Schreiben des Setup-Programms in den DMA-Controller sowie beim Lesen des Inhalts des Adressregisters, des Registers für die Anzahl der Zyklen oder des Statusregisters.

Lese-Schreib-Logikblock

empfängt, erzeugt und gibt Signale aus, die den Informationsaustausch zwischen dem Prozessor und dem PDP-Controller, dem Speicher und der VU sicherstellen. Der Lese-Schreib-Logikblock hat die folgenden Ausgänge:

● ¯Зп - bidirektionale Steuerung tristabiler Eingang/Ausgang verwendet:

Wie Eingang für Empfangen eines Signals vom Prozessor Eintrag Daten in die internen Register des PDP-Controllers während seiner anfänglichen Installation;

Wie Ausfahrt, auf dem ein Signal erzeugt wird, das ein externes Gerät zulässt Eintrag Daten aus dem Speicher;

● ¯Th ist ein bidirektionaler Steuereingang/-ausgang mit drei Zuständen, der verwendet wird von:

Wie Eingang um ein Signal vom Prozessor zu erhalten, das es ermöglicht lesen(Ausgabe) der Inhalte der internen Register des Controllers;

Wie Ausgang für ein Signal für die Erlaubnis aussenden Lesungen Daten von der VU zum Speicher;

● ¯ChtP, ¯ZpP - Ausgänge zum Steuern des Lesens aus dem Speicher und des Schreibens in den Speicher;

● ¯VK - Eingang (Quarzauswahl), an den ein Null-Chipauswahlsignal angelegt wird, nachdem die Schreib- oder Lesesignale gesetzt sind. Das Signal ¯VK initiiert den Datenaustausch zwischen dem Prozessor und den internen Registern des DMA-Controllers während des Programmierens; im Direktzugriffsmodus automatisch gesperrt. Der Eingang ¯VK ist direkt oder über einen Decoder mit dem SHA des Mikroprozessorsystems verbunden.

Schlussfolgerungen ¯Zp, ¯Cht sind mit dem Prozessor als Eingänge und mit der VU als Ausgänge verbunden, und Ausgänge ¯ZpP, ¯ChtP - mit dem Speicher des Mikroprozessorsystems.

Auf der Bühne Erstinstallation Im Adressgenerator werden die niederwertigen Bits А3…А0 des Adresscodes decodiert, und nachdem die Signale ¯Зп, ¯Тт vom Prozessor empfangen wurden, wird das Schreiben oder Lesen der softwarezugänglichen Register des DMA-Geräts organisiert . Bei im Kreislauf arbeiten PDP-Logikschaltungen der Lese-Schreib-Einheit bilden Signalpaare ¯Cht, ¯ZpP und ¯Zp, ¯ChtP an den Ausgängen der Vorrichtung, die den Datenaustauschprozess zwischen der VU und dem Speicher takten.

Steuerblock

regelt den Ablauf der Operationen während aller RAP-Zyklen unter Verwendung von Steuersignalen und überführt auch die Steuerung von dem Standby-Zustand in den Service-Zustand gemäß dem Capture-Bestätigungssignal (PCx). Das Steuergerät hat folgende Ausgänge:

  • ЗЗх (Н RQ) - Ausgang, von dem das Signal abgenommen wird Anfrage erfassen für Mikroprozessor;
  • ПЗх (HLDA) - Eingang, an dem das Signal empfangen wird Bestätigung erfassen vom Mikroprozessor;
  • Гт (RDY) - Steuereingang Bereitschaft. Das Signal Гт = 1 von der VU aktiviert den Betrieb des PDP-Controllers; das Signal Гт = 0 versetzt die Steuerung in den Standby-Zustand;
  • M128 - Ausfahrt Zyklus 128 Marker: M128 = 1 zeigt an, dass der aktuelle DAP-Zyklus der 128. Zyklus vom Ende des Datenarrays ist;
  • KS (TS) - Ausfahrt Ende der Zählung: CS = 1 zeigt der WU an, dass der aktuelle Austauschzyklus über den DMA-Kanal der letzte in der Übertragung des Datenarrays ist. Wenn das Bit „KS-stop“ im Moduseinstellungsregister auf 1 gesetzt ist, wird der Kanal deaktiviert. Der CS-Ausgang wird aktiviert (CS = 1), wenn der Inhalt des 14-Bit-Registers der Anzahl der Zyklen in diesem Kanal auf 0 gesetzt wird;
  • RA (AE) - Ausgang Adressberechtigungen: PA = 1 zeigt dem System an, dass Direktzugriffszyklen auftreten. In diesem Fall werden alle Busse vom Mikroprozessor getrennt. Das Signal kann verwendet werden, um den Adressbus in Geräten zu blockieren, die nicht am direkten Zugriff teilnehmen, sowie um die oberen acht Bits des Adresscodes in das Adresspufferregister zu schreiben und die Geräteabrufschaltung zu deaktivieren. Im PDP-Modus wird das Gerät mit den Signalen ¯PPDP0 – ¯PPDP3 abgetastet;
  • STA (STBA) - Ausgang Adressblitz, dessen Signal das hohe Byte der Speicheradresse abtastet, das durch den Schrittmotor zu einem zusätzlichen Datenpuffer übertragen wird. Über diesen Puffer gelangt das High-Byte der Adresse auf den Adressbus des Mikroprozessorsystems;
  • TI - Eingang für Taktimpulse;
  • Zurücksetzen - die Eingabe der Erstinstallation des Geräts. Das Anlegen eines einzelnen Signals an diesen Eingang setzt den Inhalt aller über Software zugänglichen Register zurück, was zur Trennung der Kanäle K0 - K3 führt.

Der Datenpuffer ist ein bidirektionaler 8-Bit-Tristate-Bus, der den DMA-Controller mit dem Systemdatenbus des Schrittmotors verbindet.

Über den Datenpuffer:

  • bei Programmierung im Schreibmodus werden acht Datenbits D 7 ... D 0 vom Mikroprozessor zum Schreiben in das Startadressenregister, das Register für die Anzahl der Zyklen oder das Moduseinstellregister an den PDP-Controller übertragen; wenn der Prozessor von der DMA-Vorrichtung liest, werden die Inhalte des Startadressenregisters, des Registers für die Anzahl der Zyklen und des Kanalstatusregisters angezeigt;
  • bei Kanalbetrieb DMA Zu Beginn jedes Zyklus werden die oberen acht Bits der Adresse vom Adressregister des entsprechenden Kanals zum Speicher übertragen. Dann wird das SD für den weiteren Zyklus zum direkten Datenaustausch zwischen dem Speicher und der VU freigegeben. Diese Daten passieren nicht das PDP-Gerät.

Installationsregister

modes speichert Informationen über die programmierten Autoload-Modi, erweiterte und regelmäßige Aufzeichnung, feste Priorität und zyklische Prioritätsverschiebung, KS-Stop usw. Beim Programmieren des DMA-Controllers wird ein 8-Bit-Steuerwort darauf geschrieben. Das Moduseinstellungsregister wird normalerweise nach geladen Adressbuch(RgA) und Zyklus registrieren(RgC). Der Zweck der Bits des Moduseinstellungsregisters ist in der Tabelle angegeben. 3.11.1.

Kanalstatusregister

zeigt an, in welchem ​​der vier Kanäle der Array-Übertragungsprozess endete. Dazu wird der Wert des Signals KS = 1 des Zählendes, das am Ausgang des KS erscheint und das Ende des Arrays auf dem entsprechenden Kanal anzeigt, in die niederwertigen Bits von PC0– geschrieben. PC3 (Dienstbeendigungsflags). Ernennung von Rängen Moduseinstellungsregister ist in der Tabelle angegeben. 3.11.2.

Grundzustände und Betriebsarten des Gerätes.

Die wichtigsten Staaten sind Ausgangszustand, Programmierung, Warten und Wartung.

Der Anfangszustand.

Beim Eintritt Zurücksetzen ein einzelnes Signal, auf das das Gerät umschaltet Initial Bedingung. In diesem Zustand werden die Anforderungen aller DMA-Kanäle maskiert (P0 = P1 = P2 = P3 = 0), die Pufferschaltungen des Busses A0 ... A3 werden in den Zustand zum Empfangen von Informationen überführt.

Programmierung.

Fähig Programmierung Gerät schreibt der Mikroprozessor am Datenbus (SM - D 0 ... D 7) die Startadresse, die Anzahl der Zyklen und andere Daten in die entsprechenden Register, deren Adresse durch den Code A 3 A 2 A festgelegt wird 1 A 0 in den Bussen A0–A3 (Tabelle 3.11.3). Mit dem Senior-Bit des A3-Codes können Sie unterscheiden, wann A3 \u003d 0 - Kanalregister K0…K3; bei A3 = 1 - Moduseinstellungsregister(funktioniert nur zum Schreiben) und Kanalstatusregister(funktioniert nur zum Lesen). Das niedrigstwertige Bit von A0 wählt die Register der Startadresse (A0 = 0) und der Anzahl der Zyklen (A0 = 1). Die beiden mittleren Ziffern A 2 A 1 geben die Nummern der Register (oder Kanäle) an Binärcode. Code 0101 entspricht beispielsweise RFC2 - Channel 2 Cycle Count Register Die Register des DMA-Controllers werden geladen oder Informationen aus ihnen gelesen, wenn der Mikroprozessor einen Schreib- oder Lesebefehl ausführt, indem er auf das Gerät und seine Register zugreift. Dazu muss der Mikroprozessor die entsprechenden Schreibsignale ¯Zp ausgeben oder ¯Cht lesen und die Registeradresse in Form des Codes A 3 A 2 A 1 A 0 an die Systemadressbusse SHA setzen. Zu diesem Zeitpunkt werden die notwendigen Informationen D 7 ... D 0 an den Datenbus des Schrittmotors geliefert, um in die Register zu schreiben, oder Informationen werden von der PDP-Steuerung über den Datenbus des Schrittmotors gelesen. Um den Programmierzustand einzustellen, müssen Sie zusätzlich das Device-Fetch-Signal ¯VK = 0 anlegen. Aufgrund der Tatsache, dass die Kanalregister 16-Bit sind, werden zwei Programmbefehlszyklen benötigt, um sie zu laden oder zu lesen. BEI Adressgenerator Der Controller verfügt über einen Trigger, der die Schaltungen während eines Lese- oder Schreibvorgangs automatisch umschaltet. Dieser Trigger bestimmt den Zugriff auf das High- oder Low-Byte eines Registers. Der Trigger wird zurückgesetzt, indem ein einzelnes Signal an den Eingang angelegt wird zurücksetzen, und auch immer dann, wenn das Moduseinstellregister geladen wird.

Um eine korrekte Synchronisation beim Zugriff auf die Kanalregister zu gewährleisten, müssen alle Befehle paarweise vom Mikroprozessor kommen, es dürfen keine Lücken zwischen ihnen sein.

Erwartung.

Fähig Erwartungen der Controller empfängt von der VU ein Anforderungssignal zum Empfangen eines PDP-Zyklus (ZPDP0–ZPDP3) und erzeugt ein Erfassungsanforderungssignal (ЗЗх) für den Mikroprozessor. In diesem Zustand werden die Systembusse vom Mikroprozessor gesteuert.

Service.

Nach Empfang des Erfassungsbestätigungssignals (PZx) vom Mikroprozessor bei Vorhandensein eines Anforderungssignals (ZPDP0–ZPDP3) von der VU erzeugt die Steuerung ein Anforderungsbestätigungssignal (¯PPDP0–¯PPDP3) für eine der VU und schaltet um zu Service Status. BEI In diesem Zustand werden die Systembusse vom Controller gesteuert und einer der programmierten DMA-Modi wird implementiert:

  • die unteren 8 Bits der Speicheradresse werden an die Busse A0–A3, A4–A7 gesendet, die oberen 8 Bits - an den Datenbus des Schrittmotors;
  • die entsprechenden Steuersignale ¯ChtP und ¯ZpP, ¯Zp und ¯Cht werden gebildet, die es der VU ermöglichen, Datenbytes in einem Zyklus von der Speicherzelle zu empfangen oder zu der Speicherzelle zu übertragen.

Im ersten Betriebszyklus überträgt die PMA-Vorrichtung die Startadresse der Speicherzelle. In nachfolgenden Zyklen wird die Adresse erhöht und die Anzahl der Zyklen um eins verringert, bis der Inhalt des Registers der Anzahl der Zyklen (oder vielmehr seine 14 Bits) gleich Null wird. Danach wird ein Signal erzeugt Ende der Zählung CS und folgende Betriebsarten sind möglich:

  • weiteres Erhöhen der Adresse durch Hinzufügen von eins nach dem nächsten Zyklus;
  • Blockieren des PDP-Kanals ("KS-Stop"-Modus);
  • Wiederholung eines zuvor ausgewählten Arrays von Adressen (Autoload-Modus).

Während der Ausführung der RAP-Zyklen sind drei Betriebsarten möglich:

  • Modus lesen, Bereitstellen von Datenübertragung vom Speicher zur VU;
  • Modus Aufzeichnungen, Bereitstellen von Datenübertragung von der VU zum Speicher;
  • Modus Schecks. In diesem Modus erzeugt der PMA-Controller nicht die Signale ¯ChtP, ¯ZpP, ¯Ch und ¯Zp, wodurch ein Datenaustausch zwischen dem Speicher und der VU verhindert wird. Jedoch steuert der PMA-Controller in jedem Zyklus den Systembus und bestätigt die Anfragen der VU. Externe Geräte kann Bestätigungssignale verwenden, um internen Zugriff auf jedes Byte in dem Datenarray zu ermöglichen, um einige Verifizierungsoperationen durchzuführen. Das Array von Prüfzyklen kann dem Array von Lesezyklen folgen, um es der RT zu ermöglichen, die neu angekommenen Daten zu prüfen.

Der Embedded Flash Controller (EFC) ist Teil des Memory Controller (MC) und bietet eine Schnittstelle für den Zugriff auf Flash-Speicherblöcke über einen internen 32-Bit-Bus. Dadurch können Sie die Geschwindigkeit beim Abrufen von Anweisungen aus dem Flash-Speicher erheblich erhöhen, wenn der Prozessorkern aufgrund des Betriebs des 32-Bit-Puffers im Thumb-Modus (16-Bit-Anweisungssystem) arbeitet. Darüber hinaus unterstützt der integrierte Flash-Controller Komplett-Set Befehle zum Lesen, Schreiben, Löschen des Flash-Speichers, Setzen und Löschen von Sicherheitsbits.

20.2 Funktionsbeschreibung

20.2.1 Organisation des eingebauten Flash-Speichers

Die integrierten Flash-Speicherschnittstellen sind direkt mit einem internen 32-Bit-Bus verbunden, der auf mehreren der folgenden Schnittstellen basiert.

  • Einfache Speicherorganisation: mehrere Seiten gleicher Größe.
  • Zwei 32-Bit-Lesepuffer zur Erhöhung der Flash-Lesegeschwindigkeit (siehe „Lesebefehle“ auf Seite 101).
  • Ein Schreibpuffer zum Speichern von Daten beim Programmieren einer Flash-Seite. Dieser Puffer hat die Größe einer Seite und ist schreibgeschützt. Außerdem adressiert der Schreibpuffer den gesamten 1 MB-Bereich des Flash-Speichers (siehe „Schreibbefehle“ auf Seite 101).
  • Mehrere Sicherheitsbits (Sperrbits), um das Löschen und Schreiben des Flash-Speichers zu verhindern. Jeder geschützte Bereich des Flash-Speichers (alle Bereiche haben die gleiche Größe) besteht aus einer festen Anzahl von Seiten, die nacheinander platziert werden. Jeder dieser Bereiche ist direkt nur einem Sicherheitsbit zugeordnet.
  • Ein paar Bits nichtflüchtiger Speicher – NVM-Bits (Non Volatile Memory) für allgemeine Zwecke. Jedes dieser Bits ist für die Steuerung bestimmter Knoten des Mikrocontrollers verantwortlich. Für mehr genaue Information für jedes NVM-Bit siehe die entsprechenden Kapitel dieses Dokuments.
Die Größe des integrierten Flash-Speichers, seine Seitengröße und die Organisation der Sicherheitsbits werden in Kapitel 9 Speicher beschrieben.

Tabelle 20-1. Anzahl der Sicherheitsbits und Allzweck-NVM-Bits für Mitglieder der AT91SAM7S-Familie

Abbildung 20-1. Eingebaute Flash-Speicherkarte

20.2.2 Lesebefehle

Um das Lesen des Flash-Speichers zu beschleunigen, ist ein dedizierter 32-Bit-Puffer in den EFC-Controller integriert. Aufgrund des Vorhandenseins dieses Puffers erfolgt der Zugriff auf den Flash-Speicher doppelt so selten, wenn der Prozessor im Thumb-Modus (16-Bit-Befehlssatz) arbeitet, wodurch die Befehlsabrufrate und folglich die Geschwindigkeit erhöht werden des Prozessors (Abb. 20-2, Abb. 20-3 und Abb. 20-4).

Diese Optimierung wird nur beim Abrufen von Anweisungen und nicht beim Lesen von Daten aus dem Flash-Speicher durchgeführt.

Lesebefehle können mit oder ohne zusätzliche Wartezyklen ausgeführt werden. Im Feld FWS (Flash Wait State) des Flash Mode Registers MC_FMR (siehe „Flash Mode Register“, Seite 110) können nur bis zu drei (inklusive) Wartezyklen eingestellt werden. Bei FWS = 0 wird in einem Zyklus auf den eingebauten Flash-Speicher zugegriffen.

Der Flash-Speicherzugriff ist in 32-Bit (Wörterbuch), 16-Bit (Halbwort) und 8-Bit verfügbar.

Da die Größe des eingebauten Flash-Speichers kleiner als der Mikrocontroller ist als die Größe des Adressraums des ihm zugewiesenen internen Speichers (1 MB), implementiert der Speichercontroller die sog. Vervielfältigung dieses Flash-Speicherblocks im gesamten dafür zugewiesenen Adressraum. Beispielsweise wird beim AT91SAM7S64 der 64-KB-Flash-Speicher genau 1024/64 = 16-mal in diesen Adressraum gemappt.


Abbildung 20-2. Optimierung beim Lesen von Befehlscode im Thumb-Modus für FWS = 0


Abbildung 20-3. Optimierung beim Lesen von Befehlscode im Thumb-Modus für FWS = 1


Abbildung 20-4. Optimierung beim Lesen von Befehlscode im Thumb-Modus für FWS = 3

20.2.3 Schreibbefehle

Auch der für den eingebauten Flash-Speicher reservierte interne Speicherbereich kann nur über einen dedizierten Puffer beschrieben werden. Bei der Ausführung von Schreibbefehlen in den Flash-Speicher werden nur die unteren 8 Bit der Adresse berücksichtigt (weil wir reden bei 32-Bit-Daten werden die niederwertigsten 10 Bit der Adresse tatsächlich berücksichtigt). Die oberen 10 Bits der Adresse des internen Bereichs (1 MB) wiederum sind für diese sogenannte Flash-Speicheradresse reserviert. ein Fenster, das 256 Wörter (1024 Byte) groß ist. Also das alles innere Erinnerung besteht aus 1024 solcher Fenster.

Jeder Schreibbefehl auf den eingebauten Flash-Speicher kann durch die MPU (Memory Protection Unit) deaktiviert werden.

Flash-Speicher können nur in Wörtern (32 Bit) beschrieben werden, sodass jeder Versuch, Halbwörter (16 Bit) oder Bytes (8 Bit) zu schreiben, zu einem unvorhersehbaren Ergebnis führt.

Schreibbefehle werden in der für Lesebefehle angegebenen Anzahl von Wartezyklen (FWS-Feld in MC_FMR) plus einem zusätzlichen Zyklus ausgeführt, außer wenn FWS = 3 (siehe "Flash Mode Register", Seite 110).

20.2.4 Flash-Controller-Befehlssatz

EFCS enthält Befehle zum Programmieren des Flash-Speichers, Befehle zum Setzen des Schutzes (Aufheben des Schutzes) seiner Bereiche, Befehle zum sequentiellen Programmieren und Setzen des Flash-Speicherschutzes und einen Befehl zum vollständigen Löschen des gesamten Flash-Speichers.

Tabelle 20-2. Flash-Controller-Befehlssystem

Bevor irgendeiner dieser Befehle ausgeführt wird, muss das FCMD-Feld des MC_FCR-Registers auf den Code für diesen Befehl gesetzt werden. Da MC_FCR schreibgeschützt ist, wird das FRDY-Flag automatisch gelöscht. Nachdem die Ausführung der Anweisung beendet ist, wird das Flag FRDY automatisch gesetzt, das den entsprechenden Interrupt auslösen kann, wenn es über den Speichercontroller (MC) freigegeben wird.

Alle Flash-Befehle sind vor versehentlicher Ausführung durch ein gemeinsames Schlüsselwort geschützt, das jedes Mal, wenn der nächste Befehl ausgeführt wird, in den oberen 8 Bits des MC_FCR-Registers angegeben werden muss.

Eine Anweisung mit einem falsch angegebenen Schlüsselwort und/oder einem falsch angegebenen Code für diese Anweisung wird nicht ausgeführt, selbst wenn das PROGE-Flag im MC_FSR-Register gesetzt ist. Dieses Flag wird automatisch zurückgesetzt, wenn das MC_FSR-Register das nächste Mal gelesen wird.

Ein Versuch, eine Seite zu schreiben oder zu löschen, die sich in einem geschützten Bereich befindet, hat keine Auswirkung auf den Inhalt des Flash-Speichers (tatsächlich wird dieser Befehl ignoriert), selbst wenn das PROGE-Flag im MC_FSR-Register gesetzt ist. Dieses Flag wird automatisch zurückgesetzt, wenn das MC_FSR-Register das nächste Mal gelesen wird.


Abbildung 20-5. Befehlsflussdiagramm

Um Flash-Befehle korrekt auszuführen, muss das Feld Cycle Time in Microseconds (FMCN) im Flash Controller Mode Register (MC_FMR) auf den richtigen Wert gesetzt werden (siehe „Flash Memory Controller Mode Register“, Seite 110).

20.2.4.1 Flash-Programmierung

Mit nur wenigen Befehlen kann der Flash-Speicher programmiert werden.

Gemäß der Technologie des Flash-Speichers muss dieser unmittelbar vor dem Vorgang des Programmierens gelöscht werden. Entweder ein ganzer Flash-Bereich oder eine einzelne Seite kann gelöscht werden, indem das NEBP-Flag im MC_FMR-Register direkt gelöscht wird, indem ein Befehlscode in das MC_FCR-Register geschrieben wird.

Durch Setzen des NEBP-Flags im MC_FMR-Register kann eine Seite in einer bestimmten Anzahl von Schritten programmiert werden, wenn sie zuvor bereits gelöscht wurde (siehe Abbildung 20-6).


Abbildung 20-6. Beispiel für die Programmierung eines Abschnitts einer Flash-Seite

Nach Abschluss des Programmiervorgangs kann die Seite gegen versehentliches oder mutwilliges Löschen oder Schreiben geschützt werden (wenn der gesamte Bereich, der diese Seite enthält, geschützt ist). Mit dem WPL-Befehl kann der Schutz unmittelbar nach dem Ende eines Seitenschreibzyklus automatisch gesetzt werden.

Die geschriebenen Daten werden in einem internen Puffer gespeichert, dessen Größe der Größe einer Flash-Seite entspricht. Dieser interne Buffer umspannt den gesamten Adressraum des internen Flashs, d.h. Tatsächlich kann es auf jeder seiner Seiten vollständig angezeigt werden.

Notiz: das Schreiben von Bytes (8 Bit) oder Halbwörtern (16 Bit) ist verboten, weil da dies zu einer Beschädigung der aufgezeichneten Daten führt.

Der Vorgang des Schreibens von Daten in den zuvor im internen Puffer zugewiesenen Flash-Speicher wird durch das Flash-Befehlsregister (MC_FCR) gesteuert. Unten ist die Reihenfolge der Arbeit mit diesem Register.

  • Nur als Dictionary (32-Bit-Daten) ist ein ganzseitiger Schreibvorgang möglich, der an beliebiger Adresse innerhalb des gesamten Flash-Adressraums platziert werden kann.
  • Der Seitenschreibzyklus beginnt unmittelbar nachdem die Seitennummer und der Schreibbefehlscode selbst im MC_FCR-Register spezifiziert sind. Dadurch wird das FRDY-Flag im Flash Programming Status Register (MC_FSR) automatisch zurückgesetzt.
  • Unmittelbar nach Abschluss eines Programmierzyklus wird das FRDY-Flag im Flash Programming Status Register (MC_FSR) gesetzt. Wenn Interrupts vom FRDY-Flag freigegeben sind, tritt das entsprechende Interrupt-Signal in der Speichersteuerung (MC) auf.
  • Programmierfehler: Ein ungültiger Wert wurde in das MC_FSR-Register geschrieben. Stichwort und/oder es wurde ein ungültiger Befehl angegeben.

20.2.4.2 Vollständiger Flash-Löschbefehl

Der gesamte On-Chip-Flash-Speicher kann gelöscht werden, wenn das MC_FCR-Register mit dem "Erase All"-Befehl - EA (Erase All) - beschrieben wird.

Das Löschen des gesamten Flash-Speichers ist nur möglich, wenn keiner seiner Bereiche vor dem Löschen und Schreiben geschützt ist (keine der Flash-Speicher-Schutz-Flags gesetzt sind). Andernfalls (mindestens eines der Schutzflags ist gesetzt) ​​wird dieser Befehl ignoriert. Wenn das LOCKE-Flag im MC_FMR-Register gesetzt ist, tritt das entsprechende Unterbrechungssignal auf.

Das FRDY-Flag wird automatisch im MC_FSR-Register gesetzt, nachdem der letzte Programmierbefehl oder der Flash-Speicher gelöscht wurde. In diesem Fall erscheint sofort das entsprechende Interrupt-Signal am Ausgang des Memory Controllers (MC), sofern dieser freigegeben ist.

Während der Ausführung des Programmierzyklus können Fehler auftreten, die im MC_FSR-Register aufgezeichnet werden. Diese Fehler sind unten aufgeführt.

  • Programmierfehler: Ein ungültiges Schlüsselwort wurde in das MC_FSR-Register geschrieben und/oder ein ungültiger Befehl wurde angegeben.
  • Sperrfehler: Es wurde versucht, einen sicheren Bereich zu programmieren. Um diesen Bereich korrekt zu programmieren, muss er zunächst mit dem Befehl unprotect entschützt werden.

20.2.4.3 Blitzschutzbits

Jedes der Sicherheitsbits ist an einen bestimmten Bereich des Flash-Speichers gebunden, der aus einer bestimmten Anzahl von Seiten besteht. Der Zweck dieser Bits besteht darin, den Flash-Speicher vor versehentlichem oder absichtlichem Löschen/Programmieren zu schützen.

Während des Herstellungsprozesses des Mikrocontrollers können einige der Schutzbits darin gesetzt werden. Ihr Zweck besteht darin, einen bestimmten Bereich des Flash-Speichers zu schützen, der standardmäßig ein Programm enthält, das während seiner Produktion auf den Mikrocontroller geschrieben wird. Vor dem Programmieren/Löschen eines geschützten Bereichs muss dieser ungeschützt sein.

In der folgenden Reihenfolge wird der Schutz für einen Bereich festgelegt:

In das Flash-Befehlsregister soll folgender Wert geschrieben werden: (0x5A, nach Ausführung des Schutzbefehls wird das FRDY-Flag im MC_FSR-Register gesetzt. Dies bewirkt sofort das entsprechende Interrupt-Signal am Ausgang des Speichercontrollers ( MC), wenn es aktiviert ist. ul>

Nachdem der Schutz eingestellt wurde, kann er entschützt werden. Im Folgenden ist die Reihenfolge zum Aufheben des Schutzes eines Bereichs aufgeführt:

  • der folgende Wert sollte in das Flash-Befehlsregister geschrieben werden: (0x5A nach Abschluss des Schutzbefehls wird das FRDY-Flag im MC_FSR-Register gesetzt. In diesem Fall erscheint sofort das entsprechende Interrupt-Signal am Ausgang des Speichers Controller (MC), wenn er aktiviert ist.

Wenn während der Befehlsausführung ein Fehler auftritt (ein ungültiges Schlüsselwort und/oder ein falscher Befehlscode ist im MC_FCR-Register angegeben), wird dieser Umstand im MC_FSR-Register aufgezeichnet.

Das Ausführen des Befehls zum Löschen eines Sperrbits schreibt physikalisch eine "1" in das entsprechende Bit, obwohl das Lesen des MC_FSR-Registers das entsprechende LOCKx-Bit als "0" liest. Umgekehrt schreibt die Ausführung eines Lock-Bit-Setzbefehls physikalisch eine "0" in das entsprechende Bit, und das Lesen des MC_FSR-Registers liest das entsprechende LOCKx-Bit als "1".

Notiz: Unabhängig davon, ob der Flash-Speicher geschützt ist, kann immer noch durch Lesen darauf zugegriffen werden.

20.2.4.4 Allzweck-NVM-Bits

Allzweckbits – NVM-Bits – sind nicht mit dem eingebauten Flash-Speicher verbunden, sondern sollen andere Knoten des Mikrocontrollers schützen. Jedes dieser Bits kann unabhängig von den anderen gesetzt (gelöscht) werden. Einzelheiten zu NVM-Bits finden Sie in den entsprechenden Kapiteln dieses Dokuments.

Das Folgende ist die Aktivierungssequenz für die Allzweck-NVM-Bits.

  • Ausführung des Befehls Set General Purpose NVM Bit (SGPB) durch Schreiben des Codes dieses Befehls und der Anzahl dieser Bits in das Flash-Speicher-Befehlsregister (MC_FCR) in das PAGEN-Feld desselben Registers.
  • nach Abschluss des SGPB-Befehls wird das FRDY-Flag im MC_FSR-Register gesetzt. In diesem Fall erscheint sofort das entsprechende Interrupt-Signal am Ausgang des Memory Controllers (MC), sofern dieser freigegeben ist.

Während der Ausführung des Programmierzyklus können Fehler auftreten, die im MC_FSR-Register aufgezeichnet werden. Diese Fehler sind unten aufgeführt.

  • Das PAGEN-Feld des MC_FCR-Registers gibt die Anzahl von Allzweckbits an, die größer ist als die maximal zulässige Anzahl von NVM-Bits, die in dem Chip implementiert sind. Es folgt die Sequenz zum Löschen der Allzweck-NVM-Bits.
  • Ausführung des Befehls „Clear General Purpose NVM Bit“ (CGPB) durch Schreiben des Befehlscodes und der Anzahl dieser Bits in das Flash-Speicher-Befehlsregister (MC_FCR) in das PAGEN-Feld desselben Registers.
  • wenn der CGPB-Befehl abgeschlossen ist, wird das FRDY-Flag im MC_FSR-Register gesetzt. In diesem Fall erscheint sofort das entsprechende Interrupt-Signal am Ausgang des Memory Controllers (MC), sofern dieser freigegeben ist.

Während der Ausführung des Programmierzyklus können Fehler auftreten, die im MC_FSR-Register aufgezeichnet werden. Diese Fehler sind unten aufgeführt.

  • Programmierfehler: Ein ungültiges Schlüsselwort wurde in das MC_FSR-Register geschrieben und/oder ein ungültiger Befehl wurde angegeben.
  • Das PAGEN-Feld des MC_FCR-Registers gibt die Anzahl von Allzweckbits an, die größer ist als die maximal zulässige Anzahl von NVM-Bits, die in dem Chip implementiert sind.

Das Ausführen eines Befehls "NVM-Allzweckbits löschen" schreibt physikalisch eine "1" in das entsprechende Bit, obwohl das Lesen des MC_FSR-Registers das entsprechende GPNVMx-Bit als eine "0" liest. Umgekehrt schreibt die Ausführung eines Befehls "Allzweck-NVM-Bits setzen" physisch "0" in das entsprechende Bit, und das Lesen des MC_FSR-Registers liest das entsprechende GPNVMx-Bit als "1".

Notiz: Unabhängig vom Zustand der Allzweck-NVM-Bits ist der Flash-Speicher immer lesbar.

20.2.4.5 Sicherheitsbit

Das geheime Bit soll externe Zugriffsversuche auf den internen Systembus verhindern. Nach dem Setzen des Sicherheitsbits erfolgt der Betrieb der JTAG-Schnittstelle, der Flash-Speicher-Schnellprogrammierschnittstelle und der Zugriff auf den Flash-Speicher über serielle Schnittstelle. Der Zugriff auf den Flash-Speicher über die oben genannten Schnittstellen wird erst wieder erlaubt, wenn komplette Reinigung Quarz auf den externen ERASE-Pin - siehe Kapitel 4. Pinbelegung. Wenn der ERASE-Pin hoch getrieben wird (siehe Abschnitt 7.4. „Löschsteuerpin“), werden alle On-Chip-Flash, alle Flash-Schutzbits und alle Allzweck-NVM-Bits gelöscht, und erst danach wird das Datenschutzbit gelöscht .

Die Sequenz zum Setzen des Datenschutzbits ist unten angegeben.

  • Führen Sie den Befehl Set Security Bit (SSB) aus, indem Sie den Befehlscode in das Flash-Befehlsregister (MC_FCR) schreiben.
  • nach Abschluss des SSB-Befehls wird das FRDY-Flag im MC_FSR-Register gesetzt. In diesem Fall erscheint sofort das entsprechende Interrupt-Signal am Ausgang des Memory Controllers (MC), sofern dieser freigegeben ist.

Unmittelbar nach dem Setzen des Sicherheitsbits wird das SECURITY-Flag im MC_FSR-Register gesetzt.