<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=0%3A0%3A0%3AFFFF%3A194%3A39%3A218%3A10</id>
	<title>Mikrocontroller.net - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=0%3A0%3A0%3AFFFF%3A194%3A39%3A218%3A10"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/0:0:0:FFFF:194:39:218:10"/>
	<updated>2026-04-10T18:05:46Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32&amp;diff=73168</id>
		<title>STM32</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32&amp;diff=73168"/>
		<updated>2013-02-28T16:35:59Z</updated>

		<summary type="html">&lt;p&gt;0:0:0:FFFF:194:39:218:10: /* Vorteile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;STM32 ist ein Mikrocontroller-Familie von [http://www.st.com/mcu/inchtml-pages-stm32.html ST] mit einer 32-Bit [http://www.arm.com/products/processors/cortex-m/index.php ARM Cortex-M0/M3/M4] CPU. Diese Architektur ist speziell für den Einsatz in Microcontrollern neu entwickelt und löst damit die bisherigen ARM7-basierten Controller weitestgehend ab. Den STM32 gibt es von ST in unzähligen Varianten mit variabler Peripherie und verschiedenen Gehäusegrößen und -formen. Durch die geringe Chipfläche des Cores ist es ST möglich, eine 32 Bit-CPU für weniger als 1&amp;amp;nbsp;€ anzubieten.&lt;br /&gt;
&lt;br /&gt;
[[Bild:stm32F103xc.png|thumb|right|340px|Blockdiagramm STM32F103xC/D/E]]&lt;br /&gt;
&lt;br /&gt;
== STM32-Familien ==&lt;br /&gt;
&lt;br /&gt;
Bisher gibt es sieben STM32-Familien:&lt;br /&gt;
* [http://www.st.com/internet/mcu/subclass/1588.jsp STM32F0]&lt;br /&gt;
** Cortex M0&lt;br /&gt;
** µC zum Einstieg&lt;br /&gt;
* [http://www.st.com/internet/mcu/subclass/1169.jsp STM32F1]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
**Verschiedene Unterfamilien:&lt;br /&gt;
*** Connectivity line&lt;br /&gt;
*** Performance line&lt;br /&gt;
*** USB Access line&lt;br /&gt;
*** Access Line&lt;br /&gt;
*** Value line &lt;br /&gt;
* [http://www.st.com/internet/mcu/product/250173.jsp STM32F2]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Wie die STM32F1 Serie, jedoch 120MHz, Camera-Interface, 32-Bit Timer, Crypto-Engine...&lt;br /&gt;
* [http://www.st.com/internet/mcu/subclass/1605.jsp STM32F3]&lt;br /&gt;
** Cortex M4&lt;br /&gt;
** DSP und FPU&lt;br /&gt;
** Fast 12-bit 5 MSPS and precise 16-bit sigma-delta ADCs&lt;br /&gt;
** Touch sensing controller (TSC)&lt;br /&gt;
* [http://www.st.com/internet/mcu/subclass/1521.jsp STM32F4]&lt;br /&gt;
** Cortex M4&lt;br /&gt;
** DSP und FPU&lt;br /&gt;
** STM32F40X / STM32F41X bis 1MB Flash &lt;br /&gt;
** STM32F42X / STM32F43X bis 2MB Flash&lt;br /&gt;
* [http://www.st.com/mcu/inchtml-pages-stm32l.html STM32L]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Low Power &lt;br /&gt;
** mit LCD Treiber&lt;br /&gt;
* [http://www.st.com/mcu/inchtml-pages-stm32w.html STM32W]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** RF-MCU &lt;br /&gt;
[http://www.st.com/internet/mcu/class/1734.jsp Hier eine Übersicht zum Auswählen eines STM32Fxxx]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* Cortex-M0 / Cortex-M3 / Cortex-M4 Kern&lt;br /&gt;
* 16KB ... 1MB  [[Flash-ROM]]&lt;br /&gt;
*  4KB ... 192KB [[Speicher#SRAM|SRAM]]&lt;br /&gt;
* 4KB [[Speicher#EEPROM|EEPROM]] (STM32L)&lt;br /&gt;
* 512 one-time programmable Bytes(STM32F2/4)&lt;br /&gt;
* [[IC-Gehäuseformen | Gehäuse]] 36 ... 176 Pins als QFN, LQFP und BGA&lt;br /&gt;
* Derzeit sind über &#039;&#039;&#039;250&#039;&#039;&#039; STM32 Derivate/Varianten verfügbar&lt;br /&gt;
* Bis 72MHz CPU-Takt, bis 120MHz beim STM32F2xx, bis 168 MHz beim STM32F4xx, wobei eine spezielle prefetch-hardware bis 120/168 MHz eine Geschwindigkeit erzielen soll, die 0 Wait-States entspricht. Der CPU-Takt wird über einen Multiplikator aus dem internen RC-Takt oder einem externen Quarz-Takt abgeleitet.&lt;br /&gt;
* Externes Businterface (nur bei Gehäusen ab 100 Pin und nur bei STM32F4, STM32F2 und STM32F1 Performance line)&lt;br /&gt;
* LCD Treiber für 8x40 Punkte (nicht beim STM32F2xx)&lt;br /&gt;
* Spannungsbereich 1,65 ... 3,6V, nur eine Betriebsspannung nötig&lt;br /&gt;
* Temperaturbereich bis 125 °C&lt;br /&gt;
* Bis zu 140 IOs, viele davon [[Pegelwandler|5V-tolerant]]&lt;br /&gt;
* Interner, kalibrierter RC-Oszillator mit 8MHz (16MHz bei STM32F2/F4xx)&lt;br /&gt;
* Externer Quarz&lt;br /&gt;
* Real Time Clock mit eigenem Quarz und separater Stromversorgung&lt;br /&gt;
* Bis zu 16 [[Timer]], je Timer bis zu 4 IC/OC/PWM Ausgänge. Davon 2x Motion Control Timer (bei STM32F103xF/G)&lt;br /&gt;
* Systick Counter&lt;br /&gt;
* Bis zu 3 12-Bit [[AD-Wandler]] mit insgesamt 24 AD-Eingängen, integrierter [[Temperatursensor]], Referenzspannung Vrefint und VBatt Spannungsmessung (STM32F4xx)&lt;br /&gt;
* Bis zu 2 12-Bit [[DA-Wandler]]&lt;br /&gt;
* Bis zu 2 [[DMA]] Controller mit bis zu 12 Kanälen (16 beim STM32F2/4xx)&lt;br /&gt;
* Bis zu 2x [[I2C|I²C]]&lt;br /&gt;
* Bis zu 5x [[UART|USART]] mit LIN, IrDA und Modem Control (6 beim STM32F2/F4xx)&lt;br /&gt;
* Bis zu 3x [[SPI]]&lt;br /&gt;
* Bis zu 2x [[I2S|I²S]]&lt;br /&gt;
* Bis zu 2x [[CAN]]&lt;br /&gt;
* Unique device ID register (96 Bits)&lt;br /&gt;
* RNG - Random Number Generator (STM32F2/4xx)&lt;br /&gt;
* Cryptographic Processor (CRYP) (STM32F2/4xx)&lt;br /&gt;
* Hash Processor (HASH) (STM32F2/4xx)&lt;br /&gt;
* Kamera-Interface (DCMI) (STM32F2/4xx)&lt;br /&gt;
* [[USB]] 2.0 Full Speed / OTG&lt;br /&gt;
* [[USB]] 2.0 Hi Speed OTG mit extra PHY-Chip (STM32F2/4xx)&lt;br /&gt;
* SDIO Interface (z.B. SD-Card Reader)&lt;br /&gt;
* Ethernet&lt;br /&gt;
* Watchdog mit Window-Mode&lt;br /&gt;
* Jedes Peripheriemodul ist separat einschaltbar, wodurch sich erheblich [[Ultra low power|Strom sparen]] lässt&lt;br /&gt;
* [[JTAG]] und SWD (Serial Wire Debug) Interface&lt;br /&gt;
* Bis zu 6 Hardware-Breakpoints für Debuggen&lt;br /&gt;
* und vieles mehr . . .&lt;br /&gt;
&lt;br /&gt;
== Struktur der Dokumentation: ==&lt;br /&gt;
&lt;br /&gt;
Als Beispiel der Dokumentation soll stellvertretend der [http://www.st.com/mcu/devicedocs-STM32F103RC-110.html STM32F103RC] genannt werden. Die Seite von ST beinhaltet alle nötigen Informationen passend zu diesem Prozessor.&lt;br /&gt;
&lt;br /&gt;
Diese Dokumente von ST beschreiben den Controller:&lt;br /&gt;
&lt;br /&gt;
* [http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00191185.pdf  Datasheet STM32F103xC/D/E]&lt;br /&gt;
* [http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00171190.pdf  Reference Manual (RM0008)]&lt;br /&gt;
* [http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/PROGRAMMING_MANUAL/CD00228163.pdf  Cortex-M3 Programming Manual]&lt;br /&gt;
* [http://www.st.com/stonline/products/literature/pm/13259.pdf Flash Programming Reference]&lt;br /&gt;
&lt;br /&gt;
Im Datasheet sind die speziellen Eigenschaften einer bestimmten Modellreihe beschrieben und die exakten Daten und Pinouts aufgeführt. Die Peripheriemodule werden nur aufgeführt, nicht detailliert beschrieben. In der Referenz ist der gesamte Controller mit Peripheriemodulen im Detail beschrieben, gültig für eine STM32-Familie. Details zum Prozessorkern selbst und den nicht STM32-spezifischen mit dem Cortex-M3 Core assoziierten Modulen wie dem Interrupt-Controller und dem Systick-Timer findet man jedoch nicht dort, sondern im Cortex-M3 Manual. Wer nicht die ST Firmware-Library verwendet, der benötigt zusätzlich die Flash Programming Reference für die Betriebsart des Flash-ROMs, d.h. die frequenzabhängige Konfiguration der Waitstates. Hinzu kommen optionale Dokumente von ARM, die den [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0337-/ Cortex-M3 Kern] / [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439c/index.html Cortex-M4 Kern] beschreiben. Hier gibt es den Opcode wenn man ihn in [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0403-/ Assembler] programmieren möchte. Zusätzlich sollten auch die [http://www.st.com/stonline/products/literature/es/14732.pdf Errata Sheets] beachtet werden. Empfohlen sei auch die Appnote &amp;quot;[http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/CD00164185.pdf STM32F10xxx hardware development: getting started]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== ‎STM32F10x Standard Peripherals Library ==&lt;br /&gt;
&lt;br /&gt;
ST bietet eine umfangreiche Firmwarebibliothek, eine einzige Bibliothek für alle STM32 Derivate. Das ist der große Vorteil von ST (gibt es beispielsweise auf den Cortex-M3 Controllern von TI auch, ist teilweise in einem separaten ROM untergebracht). Einmal programmieren und in allen STM32 verwendbar. Alle Funktionen sind gekapselt in einfache Strukturen und Funktionsaufrufe. Somit muss man sich nicht selbst um die Peripherieregister kümmern. Diese Library und ihre Dokumentation setzen das grundlegende Verständnis der Funktion des jeweiligen Peripheriemoduls voraus, wie es die o.A. Referenz und diverse Appnotes vermitteln. Diese FW-Lib (Download von ST) ist ein MUSS für jeden, denn darin sind auch jede Menge Beispiele für alle Peripheriemodule. &lt;br /&gt;
&lt;br /&gt;
Details siehe: [[‎STM32F10x Standard Peripherals Library]].&lt;br /&gt;
&lt;br /&gt;
Mit [http://www.libopencm3.org/wiki/Main_Page libopencm3] ist derzeit auch eine Open-Source Alternative (GPL, Version 3 oder höher) zur ST Library in Entwicklung, die zukünftig auch Cortex-M3 Controller von anderen Herstellern unterstützen soll.&lt;br /&gt;
&lt;br /&gt;
== CMSIS ==&lt;br /&gt;
&lt;br /&gt;
Parallel zur Firmware-Library (FW-Lib) gibt es für die &amp;quot;Selbermacher&amp;quot; die CMSIS (ARM® &#039;&#039;&#039;C&#039;&#039;&#039;ortex™ &#039;&#039;&#039;M&#039;&#039;&#039;icrocontroller &#039;&#039;&#039;S&#039;&#039;&#039;oftware &#039;&#039;&#039;I&#039;&#039;&#039;nterface &#039;&#039;&#039;S&#039;&#039;&#039;tandard), die grundsätzlich nur den herstellerübergreifenden ARM-Core abdeckt. Hierzu gehört bei den Cortex-M4-Cores auch die DSP und Floating-Point Funktionalität. Weiterhin existieren eine Zahl von Helferfunktionen für den NVIC, den Sys-Tick-Counter, sowie eine SystemInit-Funktion, welche sich um die PLL kümmert. &lt;br /&gt;
&lt;br /&gt;
Im Rahmen des CMSIS-Standards ([http://www.onARM.com www.onARM.com]) wurden die Headerdateien standardisiert, der Zugriff auf die Register erfolgt per &#039;&#039;&#039;Peripheral-&amp;gt;Register&#039;&#039;&#039;. Die CMSIS C-Dateien bzw. Header enthalten auch Anpassungen für die verschiedenen Compiler. Die Portierung eines Real-Time-Betriebsystems sollte unter Verwendung der CMSIS, für Chips der verschiedenen Hersteller, stark vereinfacht möglich sein (z.B. einheitliche Adressen für Core-Hardware/Sys-Tick-Counter).&lt;br /&gt;
&lt;br /&gt;
Die CMSIS ist im Download der FW-Lib enthalten. Die Compiler-Hersteller liefern eine jeweils zur ihrer Tool-Version passende bzw. geprüfte FW-Lib (incl. CMSIS) aus. Diese Libs können, gegenüber den Downloads beim Chip-Hersteller, auch ältere Version beinhalten.&lt;br /&gt;
&lt;br /&gt;
== Debug- und Trace-Interface (CoreSight™ Debug and Trace Technologie)==&lt;br /&gt;
&lt;br /&gt;
Übersicht über beide Funktionalitäten und den Schnittstellen:&lt;br /&gt;
http://www.keil.com/support/man/docs/ulink2/ulink2_cs_core_sight.htm&lt;br /&gt;
&lt;br /&gt;
Die Coresight-Debug-Architektur ermöglicht ein nicht-invasives Debugging, d.h. es können während des Betriebes (meistens) ohne Beeinflussung des Prozessors Daten vom Speicher gelesen und in selbigen geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
=== Debugger Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Der Debugger-Teil besitzt drei Funktionen:&lt;br /&gt;
* Run Control: z.B. Programm-Start, Stopp und Einzel-Schritte.&lt;br /&gt;
* (Program) Break Points: Ein Programm hält an, wenn der Programm Counter eine bestimmte Programm-Adresse erreicht.&lt;br /&gt;
** Die maximale Anzahl der gleichzeitig möglichen Break Points ist begrenzt (z.B. 6 bei einem STM32).&lt;br /&gt;
** Die Anzahl der Break Points ist nahezu unbegrenzt, wenn ein Debugger über den Memory Access (s.u.) sogenannte Flash Break Points unterstützt. Dabei wird ein geladenes Programm im Flash umprogrammiert, um den Debugger anzuhalten. Diese Funktionalität ist meistens ein kostenpflichtiges Zusatz-Feature des Debugger-Herstellers. &lt;br /&gt;
** Beinhaltet keine Data Watch Funktionalität, welche im Trace-Teil (DWT) realisiert wird.&lt;br /&gt;
* Memory Access: Lesen und Schreiben von Speicheradressen. &lt;br /&gt;
** Diese Funktionalität beinhaltet keine direkte Flash-Programmierung. Der Programmiervorgang für einen Flash ist herstellerspezifisch und muss von dem verwendeten Debugger unterstützt werden.&lt;br /&gt;
&lt;br /&gt;
=== Trace Funktionen ===&lt;br /&gt;
Die Trace-Funktionalität wird in drei Funktionen aufgeteilt:&lt;br /&gt;
* ETM (Embedded Trace Macrocell): Optional, nicht jede CPU besitzt diese Hardware (Kostenfaktor, Austattung).&lt;br /&gt;
* ITM (Instrumentation Trace Macrocell): Über diesen Kanal kann ein vereinfachtes Trace des Core ermöglicht werden, sowie &amp;quot;printf-ähnlich&amp;quot; Daten über den ITM Channel 0 geschickt und im Debugger ausgegeben werden.&lt;br /&gt;
* DWT (Data Watchpoint &amp;amp; Trace Unit): &lt;br /&gt;
** Data Watch: 4 Access-Break-Points ( z.B. der Debugger bleibt stehen, wenn das Programm auf einen Speicher zugreift oder der Wert einer Variablen einen bestimmten Wert annimmt). &lt;br /&gt;
** Trace Unit: Programmverlauf (durch Lesen des Program Counters) und Interrupt Aufrufe verfolgen, sowie Zeitmessungen.&lt;br /&gt;
&lt;br /&gt;
Einige der Trace-Funktionalitäten können über die JTAG-Schnittstelle angesprochen werden. Die schnelle Trace-Funktionalität (mit 4 bit Parallel-Port) steht nur mit der erweiterten DEBUG + ETM Schnittstelle zur Verfügung. Im Gegensatz zum Debugger-Teil (Run Control, Break Points und Memory Access) werden Trace-Funktionen nicht von allen Debuggern unterstützt. Debugger mit der vollen Trace-Funktionalität kosten deutlich mehr.&lt;br /&gt;
&lt;br /&gt;
* Beispiele für Trace-Port-Aktivierungen für verschiedene Hersteller: http://www.keil.com/support/man/docs/jlink/jlink_capture_tracedata.htm&lt;br /&gt;
&lt;br /&gt;
Die Aktivierung des parallelen Trace-Ports erfordert, je nach CPU Hersteller, zusätzliche Debugger-Makros für die Aktivierung und Port-Freischaltung. Zusätzlich sind die Schnittstellenauswahl und Einstellung (Frequenzen) im Entwicklungs-Tool (IDE) wichtig, um erfolgreich den Programm-Verlauf &amp;quot;tracen&amp;quot; zu können.&lt;br /&gt;
&lt;br /&gt;
=== Debug und Trace-Schnittstellen ===&lt;br /&gt;
Als Debug Interface stehen zwei Varianten zur Auswahl:&lt;br /&gt;
* [[JTAG]]: Dafür sind mindestens 6 Steuerleitungen nötig. Unterstützt Device Chaining: Mehrere verbundene Geräte können mit einem Debugger/Programmer gleichzeitig angesteuert werden.&lt;br /&gt;
* SWD (Serial Wire Debug): Hier mindestens 2  Steuerleitungen (3 mit SWO, zzgl GND und 3,3V). Die SWD Schnittstelle ist in der Regel schneller und kann auch Funktionen aus dem Trace-Teil beinhalten (z.B. ITM, dafür wird der SWO-Pin benötigt). Device Chaining ist mit dieser Schnittstelle nicht möglich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standard-JTAG Steckerbelegungen: &lt;br /&gt;
http://www.keil.com/support/man/docs/ulink2/ulink2_hw_connectors.htm&lt;br /&gt;
&lt;br /&gt;
=== Der 10polige JTAG-Stecker von mmvisual ===&lt;br /&gt;
mmvisual hat mit dieser Steckerbelegung die Standard JTAG Schnittstelle erweitert:&lt;br /&gt;
&lt;br /&gt;
Ich habe diesen Part in den Artikel [http://www.mikrocontroller.net/articles/JTAG#Der_10-Polige_JTAG_Stecker_von_mmvisual JTAG] verschoben.&lt;br /&gt;
Hinzu gekommen ist die Adapterplatine 10-Polig auf Standard JTAG 20 Polig mit TTL/V24 Wandler. [http://www.mikrocontroller.net/articles/JTAG#Die_Adapterplatine Siehe hier.]&lt;br /&gt;
&lt;br /&gt;
== Bootmodi ==&lt;br /&gt;
Unterschiedliche Bootmodi lassen sich mittels der PINs BOOT0 und BOOT1 auswählen . Siehe Application Note [http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/CD00167594.pdf AN2606].&lt;br /&gt;
&lt;br /&gt;
=== Boot from FLASH ===&lt;br /&gt;
Startadresse wird von 0x08000004 geladen&lt;br /&gt;
 BOOT0 Lo&lt;br /&gt;
 BOOT1 X &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Boot from SRAM === &lt;br /&gt;
PC Startadresse wird an 0x200001E0 direkt angesprungen.&lt;br /&gt;
 BOOT0 Hi&lt;br /&gt;
 BOOT1 Hi&lt;br /&gt;
Da der interne FLASH der stm32f1x laut Datenblatt nur für 1000 Schreibvorgänge ausgelegt ist, kann mittels BOOT0 (High) und BOOT1 (High) auch aus dem zuvor mit dem Debugger (JTAG/SWD) beschriebenen SRAM booten. &lt;br /&gt;
Hierbei gilt zu beachten:&lt;br /&gt;
 VTOR auf die NVIC Tabelle im SRAM vor dem auslösen des ersten Interrupts remappen.&lt;br /&gt;
&lt;br /&gt;
 Um ein vergleichbares Startverhalten zum FLASH zu erreichen, empfiehlt es sich,&lt;br /&gt;
 0xF1E0F85F an 0x200001E0 zu schreiben. Diese implizite Ausführung von &amp;quot;ldr.w pc,&lt;br /&gt;
 [pc, #-0x01E0]&amp;quot; beim Start erzwingt ein laden der Startadresse von 0x20000004.&lt;br /&gt;
&lt;br /&gt;
=== Boot from SYSMEM (RS232, CAN und USB) ===&lt;br /&gt;
PC Startadresse wird von 0x1FFFF004 geladen&lt;br /&gt;
 BOOT0 Hi&lt;br /&gt;
 BOOT1 Lo&lt;br /&gt;
Auch ohne JTAG lässt sich ein STM32 programmieren (Bootloader-Aktivierung). Dabei stehen, je nach CPU-Typ, verschiedene Möglichkeiten zur Verfügung:&lt;br /&gt;
* RS-232 (bisher alle STMs)&lt;br /&gt;
* USB (nur in bestimmten MCUs mit entsprechender Bootloader-Version und PIN-Anzahl, z.B. STM32F105/107)&lt;br /&gt;
* CAN (wie USB nur in bestimmten MCUs)&lt;br /&gt;
&lt;br /&gt;
3 zusätzliche Verbindungen müssen auf dem Board gepatcht werden. Für einen Test geht es auch mit Tastern für RESET und BOOT0.&amp;lt;br&amp;gt;&lt;br /&gt;
RESET=RTS (L-aktiv)&amp;lt;br&amp;gt;&lt;br /&gt;
BOOT0=DTR (H-aktiv)&amp;lt;br&amp;gt;&lt;br /&gt;
BOOT1=LOW&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Details sind hier im Forum: [http://www.mikrocontroller.net/topic/141711 STM32 Programmiertool]&lt;br /&gt;
&lt;br /&gt;
== Vorteile ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber ARM7:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Interrupt-Controller jetzt Teil des Prozessors (als Core Peripheral), die Vector Table ist jetzt eine echte Vektortabelle, keine Sprungliste wie bei ARM7. Durch Automatismen zwischen Core und NVIC (auto register save r0..r3, lr, sp, pc) bei Interrupt Entry wird eine deutlich schnellere Ausführungszeit bei Interrupts erreicht. Der Interrupt Code muss sich nicht mehr selbst um die Sicherung der o.g. Register kümmern und eine besondere Konfiguration der Handler im Compiler entfällt. Sind vor Beendigung einer ISR (d.h. Rücksprung zum User Code) weitere Interrupts pending, so werden diese ausgeführt, ohne dass eine komplette pop-push-sequenz der Register notwendig ist. Schön beschrieben ist es hier im [http://www.st.com/mcu/files/mcu/1221142709.pdf Insider&#039;s Guide] unter 2.4.5 / Seite 20.&lt;br /&gt;
* Thumb-2 Befehlssatz, deutlich schneller als Thumb-1 und ebenso kompakt&lt;br /&gt;
* Weniger Pins für Debugging benötigt durch SWD&lt;br /&gt;
* Mehr Hardware Breakpoints machen debuggen einfacher&lt;br /&gt;
* Software ist einfacher weil die Umschaltung zwischen ARM Mode und Thumb Mode wegfällt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber LPC1700 und LPC1300:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Flexiblere Gehäuseformen mit mehr Peripherie bei kleinen Gehäusen&lt;br /&gt;
* FW-Lib für alle STM32 gleich, alle AppNotes/Demos beziehen sich auf diese eine FW-Lib was die Entwicklung der eigenen Applikation sehr beschleunigt.&lt;br /&gt;
* Genauerer und flexiblerer ADC, insbesondere gegenüber LPC1300&lt;br /&gt;
* Flexiblere Varianten der Peripherie &amp;gt;&amp;gt; bei weniger einen deutlichen Preisvorteil&lt;br /&gt;
* ab 0,85 EUR (Stand 2010) Allerdings gibts den LPC1100 mit Cortex-M0 schon ab 0,65 $!&lt;br /&gt;
&#039;&#039;&#039;Nachteil gegenüber LPC1700:&#039;&#039;&#039;&lt;br /&gt;
* STM32F1xx: nur 72 MHz statt 100 MHz (LPC1759: 120 MHz) Taktfrequenz; STM32F2xx hat diesen Nachteil nicht (ebenfalls 120MHz, STM32F4xx mit 168MHz) (Aber NXP hat schon 150MHz angekündigt)&lt;br /&gt;
* Der LPC1700 besitzt deutlich mehr Mechanismen, um die Auswirkung der Waitstates des Flash-ROMs auf Code- und Datenzugriffe zu reduzieren und das bedeutet mehr Performance bei gleicher Taktfrequenz. Beim STM32F2 entfällt dieser Nachteil wohl aufgrund des ART accelerators. &lt;br /&gt;
* Alle LPC1xxx haben 32 Bit Timer. Bei den STM32 haben das nur die STM32F2xx (2 Stück)&lt;br /&gt;
* I2S Einheit von ST hat keinen FIFO und im 24/32Bit Modus müssen 2x16Bit Halbwörter übertragen werden. Wobei allgemein bei neuen ARM Prozessoren die vorhandenen DMA-Kanäle (basierend auf eigenen BUS-Kanälen und Speicherzugriffen) FIFO in beliebiger Größe bedeutet. &lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber anderen &amp;quot;Kleinen&amp;quot; wie z.B. PIC, Atmel usw.&#039;&#039;&#039;&lt;br /&gt;
* nahezu gleicher Preis bei Hobby Anwendungen&lt;br /&gt;
* 32 Bit ohne Umwege in Assembler rechenbar&lt;br /&gt;
* bessere Peripherie&lt;br /&gt;
* ... und weitere 1000 Punkte ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil für Hobby-Anwender&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Nicht direkt &amp;quot;Steckbrettauglich&amp;quot;, da kein DIL Gehäuse verfügbar. Der ebay-Shop dipmicro führt jedoch sehr günstige Lötadapter für Umsetzung von LQFP48 auf DIP48. QFP64 in 0.5mm Pinabstand und nicht 0.8mm wie AVR&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Hardware-Beschaltung ==&lt;br /&gt;
&lt;br /&gt;
Der STM32 benötigt für den Betrieb nur (Minimalbeschaltung):&lt;br /&gt;
&lt;br /&gt;
* VCC 2..3,3V (je nach Typ)&lt;br /&gt;
* AVCC 2..3,3V (sehr wichtig, der STM32 lässt sich ohne diese Spannung nicht programmieren)&lt;br /&gt;
* GND&lt;br /&gt;
* Reset Pin 100nF nach GND (ein Pull-Up Widerstand von ca. 40k ist intern vorhanden)&lt;br /&gt;
* Boot-Pins: Boot0 -&amp;gt; GND | Boot1 -&amp;gt; Egal ---&amp;gt; Mit der Konfiguration wird das Programm aus dem Flash ausgeführt.&lt;br /&gt;
&lt;br /&gt;
ansonsten nur ein paar einzelne Cs 100nF an VCC/GND.&lt;br /&gt;
&lt;br /&gt;
Um Programmieren zu können wird entweder noch die serielle Schnittstelle (Programmieren über den vorprogrammierten Bootloader) oder JTAG oder die SWD Schnittstelle benötigt.&lt;br /&gt;
&lt;br /&gt;
== Programmierung ==&lt;br /&gt;
&lt;br /&gt;
Als Programmieroberfläche kann eine kostenlose Struktur verwendet werden. Es ist für den Einsteiger schwierig herauszufinden welche Open-Source Programme man braucht damit es funktioniert, daher hier eine Zusammenstellung:&lt;br /&gt;
&lt;br /&gt;
* [http://www.eclipse.org Eclipse]&lt;br /&gt;
* [http://www.yagarto.de Yagarto Tools] oder [http://www.codesourcery.com/sgpp/lite_edition.html Codesourcery Lite Edition] oder [https://launchpad.net/gcc-arm-embedded Launchpad]&lt;br /&gt;
* Programmieradapter OOCD, Turtelizer2 oder andere JTAG Programmieradapter&lt;br /&gt;
* Eclipse Plugin &amp;quot;GDB Hardware Debugging&amp;quot; mit [http://www.firefly-power.de/ARM/debugging.html OpenOCD server]&lt;br /&gt;
* [http://www.st.com/internet/com/software/ides_mcu.jsp#stm32 ST Liste: IDEs, Toolsets and Debug tools for MCUs]&lt;br /&gt;
* [http://netbeans.org/ Netbeans] mit [http://plugins.netbeans.org/plugin/37426/gdbserver GDBserver-Plugin] [http://openocd.sourceforge.net/ OpenOCD] und [https://launchpad.net/gcc-arm-embedded Launchpad]-Toolchain&lt;br /&gt;
&lt;br /&gt;
* Zum Starten eine fertige Zusammenstellung: [http://www.mikrocontroller.net/topic/216554 Eclipse+codesourcery+st-link]&lt;br /&gt;
&lt;br /&gt;
* [http://www.coocox.org/ Coocox Eclipse IDE] kostenlose IDE für STM32F0 / F1 / F4 Hilfreiche Infos gibt es im [http://www.mikrocontroller.net/topic/214719?goto=new#2228482 hier] und [http://www.mikrocontroller.net/topic/214719?goto=new#2229943 hier] Forum&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/265600 STM32F4 mit Code::Blocks]&lt;br /&gt;
&lt;br /&gt;
* [http://emide.org/ emIDE] kostenlose IDE die mit dem Segger J-LINK funktioniert.&lt;br /&gt;
&lt;br /&gt;
Sehr nützlich für Linux-Anwender auch diese Seite: [http://fun-tech.se/stm32/index.php STM32/ARM Cortex-M3 HOWTO: Development under Ubuntu.]&lt;br /&gt;
&lt;br /&gt;
===Folgende kommerzielle Umgebungen sind verfügbar===&lt;br /&gt;
&lt;br /&gt;
* [http://www.keil.com/arm/mdk.asp Keil µVision] (Demo max. 32KB Code): Die sehr komfortable µVison IDE ist neben dem ARM Compiler per Menue auch für einen beliebigen GNU-Compiler konfigurierbar. Damit besteht das 32k-Limit nur noch für den integrierten Debugger / Simulator. µVison selbst kann kostenlos mit dem MDK-Evaluationkit heruntergeladen werden.&lt;br /&gt;
* [http://www.iar.com/en/Products/IAR-Embedded-Workbench/ IAR-Embedded-Workbench] (Demo max. 32KB Code)&lt;br /&gt;
* [http://www.isystem.com/products/itag winIDEAiTag] Keine Code Limitierung, GCC und Testwerkzeug beinhaltet. Läuft mit dem iTag Adapter.&lt;br /&gt;
* [http://www.raisonance.com Raisonance Ride7] (GCC Compiler, kostenlose Version auf Debugging von max. 32KB Code limitiert, keine Limitierung beim Complilieren)&lt;br /&gt;
* [http://www.atollic.com Atollic] (Lite Version (bis V2.3.0) ohne Code-Limit, auf GCC basierend. Die neueste Version ab V3 hat fast keine Beschränkungen mehr außer jetzt einen Code-Limit von 32kB. Außerdem werden jetzt die meisten ARM Familien unterstützt. )&lt;br /&gt;
* [http://www.coocox.org CoIDE] (Kostenlose GCC, Eclipse basierende IDE mit einem Code-Generator Tool)&lt;br /&gt;
* [http://www.rowley.co.uk/arm/ Rowley Crossworks] (Demo 30 Tage unbeschränkt, 150$ für nichtkommerzielle Nutzung, auf GCC basierend)&lt;br /&gt;
* [http://www.code-red-tech.com Code Red] (GCC basierend)&lt;br /&gt;
&lt;br /&gt;
===Programmieradapter===&lt;br /&gt;
* SEGGER [http://www.segger.com J-LINK / J-TRACE] ARM7..11, Cortex-M0..4, Cortex A8..15, als [http://www.segger.com/cms/j-link-edu.html NonComercial] J-LINK-EDU für ca. 60,- zu haben, läuft in µVision, IAR, gdb, Keil, ...&lt;br /&gt;
* [https://www.olimex.com/Products/ARM/JTAG/ Olimex] ARM-USB-OCD (ca. 60.-, hat zusätzlich einen Spannungsausgen und einen COM Port)&lt;br /&gt;
* Keil [http://www.keil.com/ulinkme/ ULINK-ME], [http://www.keil.com/arm/ulink2/ ULINK2], [http://www.keil.com/arm/ulinkpro/ ULINK pro]&lt;br /&gt;
* [http://www.st.com/internet/evalboard/product/219866.jsp ST-LINK], [http://www.st.com/internet/evalboard/product/251168.jsp ST-LINK/V2]&lt;br /&gt;
*[http://www.st.com/internet/com/press_release/p3065.jsp STM32xx Discovery] jedes STM32 Discovery board hat einen ST-Link für Programmierung/Debugging per SWD on-board, welcher auch für eigene STM32 Target Hardware benutzt werden kann (ca. 12,- bis 19,-€, je nach Typ).&lt;br /&gt;
* [http://www.raisonance.com/~rlink-debugger-programmer__microcontrollers__tool~tool__T018:4cn9ziz4bnx6.html Raisonance RLink]&lt;br /&gt;
* [http://www.amontec.com Amontec]&lt;br /&gt;
* [http://www.hjtag.com H-JTAG] Personal Edition für ca. 60,- zu haben, läuft mit ADS, SDT, IAR, Vision und RVDS &lt;br /&gt;
* [http://www.isystem.com/products/itag iTag] für 50.- bei Amazon zu bestellen, oder als Eigenbau version (offenes Design) läuft mit der freien winIDEAiTag version (siehe oben)&lt;br /&gt;
&lt;br /&gt;
Solch ein STM32FxDISCOVERY Demo-Board ist ideal für den Einstieg, da man kein extra [[JTAG]] Adapter kaufen muss. Das Board [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4DISCOVERY] mit 12..15 EUR ist sehr günstig und hat einen leistungsfähigen STM32F407 Prozessor mit 168MHz und einen ST-LINK/V2 schon drauf. Zusammen mit der [http://www.coocox.org/ Coocox] Entwicklungsumgebung hat man einen günstigen Einstieg in die STM32 Welt.&lt;br /&gt;
&lt;br /&gt;
In der Regel haben diese [[JTAG]] Adapter einen 20-Poligen Stecker, den man direkt auf die Demo-Boards, die auch einen 20-Poligen [[JTAG]]-Anschluss haben, einstecken kann. Die Pinbelegung ist genormt, siehe Artikel [[JTAG]].&lt;br /&gt;
&lt;br /&gt;
Andere [[JTAG]] Adapter wie z.B. der ULink von Keil funktionieren nur mit dem Keil Compiler.&lt;br /&gt;
&lt;br /&gt;
Zu erst sollte man sich die IDE heraus suchen mit der man Arbeiten mag, und dann darin den unterstützten JTAG Adapter.&lt;br /&gt;
&lt;br /&gt;
Aus eigener Erfahrung kann ich den J-LINK von Segger sehr empfehlen, da er mit der meisten Software, auch GCC sehr gut und vor allem schnell (FLASH programmieren) funktioniert und enorm viele Prozessoren (ARM7/9/11, Cortex-M0..M4, Cortex-A8..15, uvm., viele Hersteller) unterstützt.&lt;br /&gt;
&lt;br /&gt;
===Programmieradapter Open-Source===&lt;br /&gt;
&lt;br /&gt;
* [https://www.olimex.com/Products/ARM/JTAG/ARM-JTAG-COOCOX/ ARM-JTAG-COOCOX], CoLinkEX Nachbau von Olimex, unterstützt JTAG sowie SWD&lt;br /&gt;
** [http://www.coocox.org/colinkEx.htm unterstützte uC]&lt;br /&gt;
** unterstütze IDEs: [http://www.keil.com/arm/mdk.asp Keil MDK-ARM 4.03] oder neuer, [http://www.iar.com/en/Products/IAR-Embedded-Workbench/ IAR Embedded Workbench 5.xx] oder neuer sowie die [http://www.coocox.org/CooCox_CoIDE.htm CooCox CoIDE]&lt;br /&gt;
* [http://www.oocdlink.com/ OOCDLink]&lt;br /&gt;
* [https://github.com/texane/stlink Stlink]&lt;br /&gt;
* [http://www.randomprojects.org/wiki/Floss-JTAG FLOSS-JTAG]&lt;br /&gt;
* [http://capitanio.org/mlink/ Linux Demo Code für die Discovery&#039;s ST-Link Programmierung]&lt;br /&gt;
&lt;br /&gt;
Der Controller hat auch einen fest eingebauten Boot-Lader. Damit läßt er sich auch über eine gewöhnliche serielle Schnittstelle programmieren, ohne daß man einen JTAG-Adapter benötigt.&lt;br /&gt;
&lt;br /&gt;
Tipps für Installation mit Eclipse können in [http://www.mikrocontroller.net/topic/214719 diesem Thread] gelesen werden.&lt;br /&gt;
&lt;br /&gt;
=== Installation für STM32 (Linux) ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Variante A ====&lt;br /&gt;
&lt;br /&gt;
* Benötigte Hardware&lt;br /&gt;
** Ein Desktop PC oder Laptop mit Linux OS (openSuSE, Ubuntu, ...) alternativ: Ein Windows System mit Linux in einer virtuellen Maschine &lt;br /&gt;
** root Zugang zum Linux OS (superuser Passwort)&lt;br /&gt;
** GNU C Compiler&lt;br /&gt;
** Programmer ARM-USB-TINY-H (optimal) alternativ: OpenOCD kompatiblen Programmer&lt;br /&gt;
** Prototypboard Olimex STM32-P107 (optimal) alternativ: irgendein board mit STM32 uC und JTAG Port&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
* Download + Installation (in einem Terminal)&lt;br /&gt;
  wget http://hlb-labor.de/cortexm3/install_ToolChain_STM32.sh&lt;br /&gt;
  chmod +x install_ToolChain_STM32.sh&lt;br /&gt;
  ./install_ToolChain_STM32.sh&lt;br /&gt;
 &lt;br /&gt;
Die Installation sollte im Idealfall voll automatisch durchlaufen. Anschliessend wird ein Beispielprojekt mit Multitasking OS und LED-Heartbeat kompiliert und auf den uC programmiert.&lt;br /&gt;
Für andere Protoboards/ Programmer muss die ToolChain entsprechend der readme Anleitung umkonfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
Das Projekt kann im QtCreator (http://qt.nokia.com/) geöffnet und bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
==== Variante B ====&lt;br /&gt;
&lt;br /&gt;
Die Installation einer Toolchain (Make, Flash, Debug via JTAG, IDE) ist in folgendem Manual beschrieben:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;How-to manual - Installing a toolchain for Cortex-M3/STM32 on Ubuntu&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*http://www.seng.de/downloads/HowTo_ToolChain_STM32_Ubuntu.pdf&lt;br /&gt;
*http://www.seng.de/downloads/HowTo_ToolChain_STM32_Ubuntu.odt&lt;br /&gt;
&lt;br /&gt;
Die Beschreibung im OpenOffice Format erlaubt die Weiterbearbeitung des Textes und das Entnehmen von Quelltexten ohne den Verlust von Formatierungen.&lt;br /&gt;
&lt;br /&gt;
Verwendete Hardware:&lt;br /&gt;
*JTAG device&lt;br /&gt;
**Olimex “ARM-USB-OCD-H”, basierend auf FTDI “FT2232H”&lt;br /&gt;
*Microcontroller&lt;br /&gt;
**Olimex “STM32-H103” basierend auf STM32F103RBT6 mit 128KB Flash, 20KB RAM, 3xUART, ...&lt;br /&gt;
Die Toolchain sollte sich leicht an andere &amp;quot;FT2232&amp;quot; basierte JTAG Probes und &amp;quot;Cortex-M3&amp;quot; Derivate anpassen lassen.&lt;br /&gt;
&lt;br /&gt;
Das Manual umfasst die Installation und Inbetriebnahme sowie Hinweise und Bug-fixes zu folgenden Komponenten:&lt;br /&gt;
*OpenOCD&lt;br /&gt;
*Serial bootloader&lt;br /&gt;
*Sourcery CodeBench Lite for ARM EABI&lt;br /&gt;
*STM32F10x standard peripheral library&lt;br /&gt;
*USB full-speed device library&lt;br /&gt;
*Project templates&lt;br /&gt;
*Makefiles&lt;br /&gt;
*Linker Sript&lt;br /&gt;
*Startup Code&lt;br /&gt;
*Doxygen&lt;br /&gt;
*Git&lt;br /&gt;
*Terminal emulation&lt;br /&gt;
*Eclipse IDE&lt;br /&gt;
*Links zu Datenblättern, Manuals und Toools&lt;br /&gt;
&lt;br /&gt;
=== Installation für STM32 Eclipse(Windows) ===&lt;br /&gt;
&lt;br /&gt;
Hier ist der Anfang des Artikels [[STM32 Eclipse Installation]], hier ist neueres beschrieben als hier aufgeführt. Wenn der Artikel fertig ist, dann wird dieser Teil gelöscht.&lt;br /&gt;
&lt;br /&gt;
* Eclipse &amp;quot;Helios&amp;quot; installieren mit GNU ARM Eclipse Plug-in&lt;br /&gt;
Eclipse IDE for C/C++ Developers&amp;lt;ref&amp;gt;http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/heliosr&amp;lt;/ref&amp;gt; downloaden und installieren&lt;br /&gt;
&lt;br /&gt;
* GNU ARM Eclipse Plug-in&amp;lt;ref&amp;gt;http://sourceforge.net/projects/gnuarmeclipse/&amp;lt;/ref&amp;gt; runterladen und installieren. [http://sourceforge.net/apps/mediawiki/gnuarmeclipse/index.php?title=Main_Page Weitere Infos].&lt;br /&gt;
&lt;br /&gt;
Wird CodeSourcery G++ Lite verwendet, so muss die PATH Variable angepasst &lt;br /&gt;
werden, damit das Plugin die CodeSourcery exe-Files findet&amp;lt;ref&amp;gt;für Discovery notwendig&amp;lt;/ref&amp;gt;. Alternativ das eclipse von einem script aus starten und zuerst den PATH erweitern.&lt;br /&gt;
&lt;br /&gt;
Soll das ST-LINK verwendet werden, so kann der Atollic ST-LINK GDBSERVER aus der Atollic free version genutzt werden. Mit dem gdbclient im Eclipse kann damit problemlos geflasht und gedebuggt werden (JTAG und SWD). &lt;br /&gt;
&lt;br /&gt;
Neuere Versionen von OpenOCD können ebenfalls mit STLINK und STLINK2 Kontakt aufnehmen. Bei vorkompilierten OpenOCD-Packeten (z.B. die von Freddy Chopin) mit libusb-Support und installiertem Herstellertreiber von STM ist noch der libusb-Filtertreiber einzurichten (relativ einfach per libusb-win32 filter wizard GUI).&lt;br /&gt;
&lt;br /&gt;
Die Startup- und Linkerscripts der Atollic free version können für ein Projekt in dieser Konstallation genutzt werden.&lt;br /&gt;
&lt;br /&gt;
* Eclipse &amp;quot;Galileo&amp;quot; installation&amp;lt;ref&amp;gt;[http://www.eclipse.org/] → Downloads → &amp;quot;Eclipse IDE for C/C++ Developers (79 MB)&amp;lt;/ref&amp;gt;. Und das Servicepack 1&amp;lt;ref&amp;gt;[http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo/SR1/eclipse-cpp-galileo-SR1-win32.zip Eclipse SR1]&amp;lt;/ref&amp;gt;&lt;br /&gt;
Entpacken der Datei eclipse-cpp-galileo-SR1-win32.zip nach &amp;quot;C:\WinARM\&amp;quot; (Ordner neu erstellen)&lt;br /&gt;
&lt;br /&gt;
* Eclipse PlugIn&amp;lt;ref&amp;gt;http://download.eclipse.org/tools/cdt/releases/galileo&amp;lt;/ref&amp;gt; hinzufügen: Help → Install New Software... → &amp;quot;Eclipse C/C++ Development Tools&amp;quot; + &amp;quot;Eclipse C/C++ GDB Hardware Debugging&amp;quot; installieren&lt;br /&gt;
&lt;br /&gt;
* Yagarto Tools&amp;lt;ref&amp;gt;[http://www.yagarto.de/] &amp;quot;Download (for Windows)&amp;quot; → &amp;quot;YAGARTO Tools&amp;quot; http://www.yagarto.de/download/yagarto/yagarto-tools-20091223-setup.exe Installieren, Auswahl Verzeichnis &amp;quot;C:\WinARM\yagarto-tools&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CodeSourcery: Achtung! Die Menustruktur ändert sich durchaus mal, dann suchen gehen. http://www.codesourcery.com/ → Products → Sourcery G++ → Editions&amp;gt;Lite Edition → ARM → Downloads. Direkter Download&amp;lt;ref&amp;gt;[http://www.codesourcery.com/sgpp/lite/arm/portal/package6496/public/arm-none-eabi/arm-2010q1-188-arm-none-eabi.exe]&amp;lt;/ref&amp;gt;. Installieren, Auswahl Verzeichnis &amp;quot;C:\WinARM\CodeSourcery&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OpenOCD: Kompilierte Version für Windows&amp;lt;ref&amp;gt;[http://www.freddiechopin.info/] → Download → Software → OpenOCD&amp;lt;/ref&amp;gt; installieren nach &amp;quot;C:\WinARM\OpenOCD_0_4_0&amp;quot; ist auch auf der Seite&amp;lt;ref&amp;gt;[http://yagarto.de/#ocd Yagarto.de]&amp;lt;/ref&amp;gt; beschrieben. PS: Sollte der Olimex ARM-USB-OCD verwendet werden, dann darf nicht der Treiber von Olimex verwendet werden, sondern der vom OpenOCD Download&amp;lt;ref&amp;gt;[http://www.mikrocontroller.net/topic/173753#1668913]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* ST Firmware: http://www.st.com → Auswahl CPU STM32F103xxx → &amp;quot;Firmware&amp;quot; &amp;quot;STM32F10x_StdPeriph_Lib&amp;quot;&amp;lt;ref&amp;gt;http://www.st.com/mcu/devicedocs-STM32F103RC-110.html&amp;lt;/ref&amp;gt;. Das ZIP &amp;quot;stm32f10x_stdperiph_lib.zip&amp;quot; Entpacken nach &amp;quot;C:\WinARM\examples\stm32_FW3.4.0\&lt;br /&gt;
&lt;br /&gt;
=== Installation für STM32 auf einem zweiten Rechner===&lt;br /&gt;
&lt;br /&gt;
* Kopieren des Verzeichnisses C:\WinARM\ (Zuvor wurden aus diesem Grund alle Setup-Pakete nach C:\WinARM\... installiert)&lt;br /&gt;
* Die PATH-Variable in der Systemsteuerung mit den C:\WinARM\.... Verzeichnissen nachführen&lt;br /&gt;
* Fertig.&lt;br /&gt;
&lt;br /&gt;
=== Installation für STM32 mit AtollicTrueStudio (+Demo) ===&lt;br /&gt;
* Installation + Demo: [[STM32 LEDBlinken AtollicTrueStudio]]&lt;br /&gt;
&lt;br /&gt;
=== Installation für STM32 mit MDK-ARM Lite und Einstellungen STM32F0/F4-Discovery Board ===&lt;br /&gt;
* [https://www.keil.com/demo/eval/arm.htm KEIL MDK-ARM Download]&lt;br /&gt;
* [https://www.youtube.com/watch?v=RXOOxby5nns&amp;amp;list=PL6-W3FoUyb48WFI5PQv3SDJj2G1t2FonV&amp;amp;index=1 Installations Video STM32F4 Discovery Board]&lt;br /&gt;
* [https://www.youtube.com/watch?annotation_id=annotation_203294&amp;amp;feature=iv&amp;amp;index=4&amp;amp;list=PL6-W3FoUyb48WFI5PQv3SDJj2G1t2FonV&amp;amp;src_vid=sN4gDZ7H8gw&amp;amp;v=BeZcQjXxk9A Einstellungen STM32F0 Discovery Board Video]&lt;br /&gt;
&lt;br /&gt;
== Demo-Projekte ==&lt;br /&gt;
&lt;br /&gt;
* [[prog_bsp_timer_1_timer2|Programmbeispiel für die Verwendung von Timer2 zusammen mit dem Interrupt]]&lt;br /&gt;
* [http://www.firefly-power.de/ARM/printf.html Printf() debugging mit minimalem Aufwand]&lt;br /&gt;
* [[STM32_BLDC_Control_with_HALL_Sensor|Programmbeispiel für BLDC Motoransteuerung (Timer 1) mit HALLSensor (Timer 3)]]&lt;br /&gt;
* [[Cortex_M3_OCM3U]]&lt;br /&gt;
* Martin Thomas hat ein umfangreiches Projekt erstellt, in der die Eclipse Einstellungen enthalten sind:&lt;br /&gt;
** [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html &amp;quot;ChaN&#039;s FAT-Module with STM32 SPI&amp;quot;]&lt;br /&gt;
* [[STM32 USB-FS-Device Lib]]&lt;br /&gt;
* Modellbau-Sender auf STM32-Basis mit vielen Treibern [http://www.rcos.eu www.rcos.eu]&lt;br /&gt;
* Ausführliches [https://github.com/jkerdels/stm32edu Einstiegs-Tutorial] in Codeform für das [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4 discovery board]&lt;br /&gt;
* [http://www.redacom.ch/keillab/ Schweizer Gondelbahnsteuerung über Webserver auf ETT STM32F ARM KIT Board in Keil RTOS] mit Webcam&lt;br /&gt;
* Die [http://ethernut.svn.sourceforge.net/viewvc/ethernut/trunk/ Ethernut SVN Version] unterstützt inzwischen viele STM32 Typen, viele Devices und einige STM32 Demoboards&lt;br /&gt;
&lt;br /&gt;
== Errata, Tipps und Tricks ==&lt;br /&gt;
&lt;br /&gt;
* AD-Wandler PA0: Im Errata steht, dass hier Fehler in der Wandlung entstehen könnten, also einen anderen Pin verwenden.&lt;br /&gt;
* CAN-Bus PD0/PD1: Remap geht erst ab der 100-Pin-Version. Steht im RM0008 unter 9.3.3.: &amp;quot;CAN1 alternate function remapping&amp;quot;. Alle Infos von RM0008 9.3.x sind interessant&lt;br /&gt;
* CAN und USB sind nur bei der &amp;quot;◦Connectivity-Line&amp;quot; gleichzeitig nutzbar. Siehe Datenblätter.&lt;br /&gt;
* Mit internem RC-Oszillator kann die CPU mit maximal 64MHz betrieben werden. Mit einem externen Quarz sind dann 72MHz möglich.&lt;br /&gt;
* Für USB Betrieb muss die CPU mit 48MHz oder 72MHz betrieben werden (bei STM32F1xx).&lt;br /&gt;
* Der Idle Interrupt vom Usart wird zwar ausgelöst, aber nicht vom entsprechenden Statusflag angezeigt&lt;br /&gt;
* Der DMA fängt beim aktivieren immer von vorn an zu zählen, auch wenn er nur kurz angehalten wurde&lt;br /&gt;
* STM32F2xx hat kein Flash Size Register, bei STM32F4xx ist zwar ein flash Size Register beschrieben, kollidiert aber in der Adresse mit einem anderen Register&lt;br /&gt;
* Derivate mit internem EEPROM und nur einer Speicherbank haben das &amp;quot;Feature&amp;quot; bei write/erase des Data-Flashes (EEPROM) einen kompletten stall der code execution zu verursachen (inkl. ISR&#039;s, DMA). Desgleichen bei write/erase des internen Flash (ISP-routinen, EEPROM-Emulation).&lt;br /&gt;
* Der I2C hat diverse Fehler, welche im Errata des jeweiligen Modells (z.B. [http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/ERRATA_SHEET/CD00238166.pdf STM32F105xx and STM32F107xx Errata sheet] ) zu finden sind. Workarounds hierzu finden sich in der Application Note [http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/CD00209826.pdf AN2824]&lt;br /&gt;
* [http://blog.frankvh.com/category/stm32/ weitere undokummentierte Features]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tipps für Umsteiger von Atmel/PIC/8051 ===&lt;br /&gt;
* Prozessortakt hat unterschiedliche Taktquellen und eine PLL.&lt;br /&gt;
* Alle Peripheriemodule haben einen extra Clock, den man aktivieren muss.&lt;br /&gt;
* Wenn man z.B. einen UART benutzen möchte, so muss man den Clock vom UART, Alternate Function IO (AFIO) und dem GPIO-Port aktivieren.&lt;br /&gt;
* Ansonsten hat man nahezu doppelt so viele Möglichkeiten in den Peripheriemodulen.&lt;br /&gt;
* Interrupt-Flags müssen in der ISR selber gelöscht werden&lt;br /&gt;
* Forum zu [http://www.mikrocontroller.net/topic/175888 Interrupts vs. Events]&lt;br /&gt;
&lt;br /&gt;
=== Tipp FPU von STM32F4xx nutzen ===&lt;br /&gt;
Es benötigt dafür 2 Dinge, zum einen muss die Compileroption gesetzt sein, zum anderen auch die FPU aktiviert werden:&lt;br /&gt;
&lt;br /&gt;
Compileroption:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;COMMON_FLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Code für das Aktivieren der FPU:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;/*FPU settings*/&lt;br /&gt;
__asm volatile (&amp;quot;ldr     r0, =0xE000ED88&amp;quot;);           /* Enable CP10,CP11 */&lt;br /&gt;
__asm volatile (&amp;quot;ldr     r1,[r0]&amp;quot;);&lt;br /&gt;
__asm volatile (&amp;quot;orr     r1,r1,#(0xF &amp;lt;&amp;lt; 20)&amp;quot;);&lt;br /&gt;
__asm volatile (&amp;quot;str     r1,[r0]&amp;quot;);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Inline-Assembler in C wie in system_stm32f4xx.c aus den Beispielen von ST-Microelectronics:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
SCB-&amp;gt;CPACR |= ((3UL &amp;lt;&amp;lt; 10*2)|(3UL &amp;lt;&amp;lt; 11*2)); /* set CP10 and CP11 Full Access */&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiterhin sollte die Toolchain auch Laufzeitbibliotheken mit FPU-Unterstützung mitbringen (CodeBench lite wird ohne ausgeleifert, GCC for ARM embedded von launchpad.org mit).&lt;br /&gt;
&lt;br /&gt;
Mehr dazu in diesem Thread: [http://www.mikrocontroller.net/topic/261021 Floating Pointing Unit STM32F4]&lt;br /&gt;
&lt;br /&gt;
=== Errata vom STM32F4xx die nicht im Errata von ST stehen ===&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/267439#2788478 Aktivieren von DMA], wenn mehr als 3 DMA Kanäle aktiviert werden, kann es sein dass die nicht alle korrekt bedient werden. Auch klappt der DMA mit dem FSMC nicht immer zuverlässig. [https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2FWarning%20limit%20simultaneous%20DMAs%20to%202&amp;amp;FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&amp;amp;currentviews=811 siehe hier] [http://blog.frankvh.com/2012/01/13/stm32f2xx-stm32f4xx-dma-maximum-transactions/ und hier]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/260637#2700761 Nerviger Bug in &amp;quot;stm32f4xx.h&amp;quot;] Änderung Struktur GPIO_TypeDef&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/261690#2714754 Batterie wird leer gezogen], nur bei manchen Chips mit Rev. A&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
&lt;br /&gt;
Versandhäuser für Privatpersonen&lt;br /&gt;
* [http://www.reichelt.de/STM-Controller/2/index.html?;ACTION=2;LA=2;GROUPID=2950; Reichelt]&lt;br /&gt;
* [http://darisusgmbh.de/shop/index.php?cat=c2692_ARM-Cortex.html Darisus]&lt;br /&gt;
* [http://www.hbe-shop.de HBE (Farnell Programm für Private)] &lt;br /&gt;
* [http://www.sander-electronic.de/be00069.html Sander]&lt;br /&gt;
*[http://www.tme.eu/de/katalog/index.phtml#cleanParameters%3D1%26search%3DSTM32F10%26bf_szukaj%3D+ TME] &lt;br /&gt;
*[http://teske-electronics.de/index.php?cPath=3_9_53 Teske electronics]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Gewerblich liefern natürlich viele wie EBV, Mouser, Farnell, Digikey usw...&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Boards ===&lt;br /&gt;
&lt;br /&gt;
* [http://shop.embedded-projects.net/index.php?module=artikel&amp;amp;action=gruppe&amp;amp;id=14 Im Shop von Embedded Projects]&lt;br /&gt;
* [http://www.watterott.com/de/Boards-Kits/ARM/ARM-Cortex-M3 Cortex M3 bei Watterott]&lt;br /&gt;
* [http://www.raisonance.com/~primer-starter-kits__microcontrollers__tool~tool__T018:4enfvamuxbtp.html Primer und Primer2 von Raisonance]&lt;br /&gt;
* [http://www.sander-electronic.de/es0028.html Sander Electronic]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/MP32F103-Stick:_Ein_Mini-Mikrocontroller-Board_mit_USB_und_bis_zu_4MB_Datenspeicher Artikel im Wiki, ARM mit USB und 4MB Speicher]&lt;br /&gt;
* [http://www.futurlec.com/STM32_Development_Board.shtml Futurlec Evalboard, ebenso Header-Board]&lt;br /&gt;
* [http://www.propox.com/products/t_174.html Propox, Header-Boards für 103R und 103V sowie Trägerplatine dafür]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Cortex_M3_OCM3U Cortex M3 Artikel im Wiki]&lt;br /&gt;
* [http://olimex.com/dev/index.html STM32 bei Olimex]&lt;br /&gt;
* [http://de.farnell.com/jsp/displayProduct.jsp?sku=1824325&amp;amp;action=view&amp;amp;CMP=GRHS-1000962 STM32Discovery bei Farnell] Mikrocontroller Board (STM32F100RBT6B) mit onboard USB-Programming Interface für ca. 12,50€&lt;br /&gt;
* [http://www.de.rs-online.com/web/p/products/7458434/ STM32Discovery bei RS-Components] 12,65 € +MwSt.&lt;br /&gt;
* [http://www.segor.de/#Q=STM32 VL DISCOVERY] STM32 Discovery bei Segor&lt;br /&gt;
* [http://www.watterott.com/de/STM32F4Discovery STM32F4DISCOVERY] STM32F4 Cortex M4 Controller mit JTAG-Debugger auf der Platine bei Watterott für 16,66EUR.&lt;br /&gt;
* [http://www.steitec.net/ARM-Boards/ Steitec, STM32F103 Cortex M3 Board 34,80€]&lt;br /&gt;
* [http://www.mcu-raisonance.com/~open4-development-platform__microcontrollers__tool~tool__T018:g65gu6ghg2n.html/ Open 4 oder auch genannt Evo-Primer]&lt;br /&gt;
* [http://www.wayengineer.com/index.php?main_page=index&amp;amp;cPath=50_66&amp;amp;page=1&amp;amp;sort=3a WayEngineer]&lt;br /&gt;
* [http://thinkembedded.ch/ST-STMicroelectronics:::24.html Im Thinkembedded Shop] in der Schweiz / DiscoveryF4, div. ETT und Olimex Boarde ab 20,18 CHF / 16,15 EUR (inkl. MwSt.) zzgl. Versandkosten&lt;br /&gt;
* [http://shop.myavr.de/ARM-Produktlinie/STM32F4-Discovery.htm?sp=article.sp.php&amp;amp;artID=200072 Im myAVR Shop] DiscoveryF4 mit möglichem Zubehör 16,45 EUR (inkl. MwSt.) zzgl. Versandkosten&lt;br /&gt;
* [http://www.keil.com Keil Microcontollertechnik]&lt;br /&gt;
* [http://www.phytec.de Phytec]&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities, Tutorials ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/173753 Diskussion zum Artikel]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/mikrocontroller-elektronik?filter=ARM*+STM32*+Cortex* Suche im Forum]&lt;br /&gt;
* [https://my.st.com/public/STe2ecommunities/mcu/Lists/ARM%20CortexM3%20STM32/AllItems.aspx Forum auf der ST Homepage] &lt;br /&gt;
* [http://www.stm32circle.com/hom/index.php STM32 Community] &lt;br /&gt;
*[http://joe-c.de/pages/posts/einstieg_mikrocontroller_stm32f103_101.php Einstieg:  STM32board mit Kamera (deutsch)] &lt;br /&gt;
* [http://www.ebv.com/fileadmin/products/Press_Print/Brochures/Product_Brochures/EBV_Cortex%20Collection_V2.pdf Übersicht der Cortex Prozessoren und deren Hersteller (nicht nur ST, von EBV)]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/258652 Tutorial]&lt;br /&gt;
* [http://diller-technologies.de/stm32_wide.html STM32 Tutorial in Deutsch von Diller Technologies]&lt;br /&gt;
* [http://mySTM32.de STM32 C und C++ Tutorial in Deutsch ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:STM32| ]]&lt;/div&gt;</summary>
		<author><name>0:0:0:FFFF:194:39:218:10</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Speicher&amp;diff=71479</id>
		<title>Speicher</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Speicher&amp;diff=71479"/>
		<updated>2013-01-30T09:36:35Z</updated>

		<summary type="html">&lt;p&gt;0:0:0:FFFF:194:39:218:10: /* EEPROM Schreibzugriffe minimieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im Bereich der Mikrocontroller gibt es viele verschiedene Arten von Speicher.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Typ       || Geschwindigkeit || Größe  || Schreibzugriffe    || Datenerhalt ohne Spannung 	&lt;br /&gt;
|-&lt;br /&gt;
| RAM       || ++++            || ++++   || beliebig oft       || nein&lt;br /&gt;
|-&lt;br /&gt;
| EPROM     || +               || +++    || ~1000              || ja&lt;br /&gt;
|-&lt;br /&gt;
| EEPROM    || +               || +++    || 10.000-1.000.000   || ja&lt;br /&gt;
|-&lt;br /&gt;
| FLASH-ROM || ++              || +++++  || 1000-10.000        || ja&lt;br /&gt;
|-&lt;br /&gt;
| OTP-ROM   || +               || +++    || einmal             || ja&lt;br /&gt;
|-&lt;br /&gt;
| Register  || ++++++          || +      || beliebig oft       || nein&lt;br /&gt;
|-&lt;br /&gt;
| F-RAM||++++||+++||beliebig oft||ja&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Angaben von Geschwindigkeit und Größe sind nur prinzipiell dargestellt.&lt;br /&gt;
&lt;br /&gt;
== RAM ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;R&#039;&#039;&#039;andom &#039;&#039;&#039;A&#039;&#039;&#039;ccess &#039;&#039;&#039;M&#039;&#039;&#039;emory - Speicher mit wahlfreiem Zugriff.&lt;br /&gt;
&lt;br /&gt;
Damit ist gemeint, daß man beim Zugriff keine Reihenfolge einhalten muß und jederzeit auf alle Daten zugreifen kann, lesend und schreibend. Allerdings trifft diese Eigenschaft mittlerweile auf viele Speichertypen zu. Spricht man heutzutage von RAM, dann meint man damit meistens Speicher, den man beliebig oft lesen und beschreiben kann und der zum Datenerhalt Strom benötigt. Es gibt auch Speichertypen, die diese Eigenschaften nicht haben, aber trotzdem &amp;quot;RAM&amp;quot; im Namen tragen, z.&amp;amp;nbsp;B. FRAM. Über diese Speicher spricht man dann in ihrer vollen Form (z.&amp;amp;nbsp;B. FRAM), man nennt sie nicht einfach nur RAM.&lt;br /&gt;
&lt;br /&gt;
=== SRAM ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;tatic &#039;&#039;&#039;R&#039;&#039;&#039;andom &#039;&#039;&#039;A&#039;&#039;&#039;ccess &#039;&#039;&#039;M&#039;&#039;&#039;emory - statischer RAM.&lt;br /&gt;
&lt;br /&gt;
Hat man SRAM als einzelne ICs, dann liegt ihr Vorteil darin, dass sie zum Datenerhalt nur eine Versorgungsspannung brauchen und keinen Refresh (siehe DRAM weiter unten). Das hat unter anderem den Vorteil, daß ein Mikrocontroller beliebig langsam getaktet werden kann (z.&amp;amp;nbsp;B. 32,768 kHz Uhrenquarz) bzw. im Schlafmodus mit vollkommen gestopptem Takt betrieben werden kann, ohne die Daten zu verlieren. Er kann mit einer hohen Geschwindigkeit gelesen und geschrieben werden, ohne Begrenzung an Lese-/Schreibzyklen.&lt;br /&gt;
&lt;br /&gt;
Bei [[Mikrocontroller]]n und auch bei Mikroprozessoren (wie [[x86]]-kompatiblen) wird diese Speichertechnologie als RAM eingesetzt. Bei den heutigen Hochleistungsprozessoren, die im oberen MHz bis GHz-Bereich arbeiten und viel RAM benötigen ist meist jedoch nur ein kleiner Teil als SRAM ausgeführt: Der Cache, der auf dem CPU-IC untergebracht ist. &lt;br /&gt;
&lt;br /&gt;
SRAM-Zellen benutzen als Grundprinzip der Speicherung [[FlipFlop]]s, was ihn sehr schnell macht, er aber deswegen seine Daten nur mit Spannungsversorgung speichern kann. Technisch gesehen besteht ein SRAM-[[Digitaltechnik|Bit]] meist aus 4 oder 6 [[Transistor]]en, wodurch relativ viel Platz verbraucht wird. Die Stromaufnahme ist im inaktiven Zustand meist sehr gering (einige zehn Mikroampere oder weniger).&lt;br /&gt;
Im aktiven Zustand haben SRAMs allerdings einen beträchtlichen Stromverbrauch; ein typischer Wert für ein 32kx8-SRAM sind ca. 100mA bei 5V.&lt;br /&gt;
&lt;br /&gt;
==== Anschluss an den Mikrocontroller ====&lt;br /&gt;
&lt;br /&gt;
[[Bild:sram.png|thumb|200px|Ein typischer SRAM-IC]]&lt;br /&gt;
&lt;br /&gt;
Der Speicher wird über einen Daten- und einen Adressbus sowie die Steuerleitungen /OE (output enable, manchmal auch als /RD read enable bezeichnet), /WE (write enable) und /CS (chip select) angeschlossen. Der Datenbus für einen Speicher der Organisation 32k x 8 Bit hat eine Breite von 8 Bit, der Adressbus ist dann 15 Bit breit. Um den Speicher zu aktivieren, muß /CS auf LOW (Masse) gelegt werden. Dies kann verwendet werden, um mehrere Speicher- oder andere Bausteine am selben [[Bus]] zu betreiben. Hierbei muß sichergestellt sein, daß jeweils nur ein IC zur gleichen Zeit ein low-aktives /CS-Signal erhält, damit es nicht zum Kurzschluss auf dem Datenbus kommt (siehe [[Ausgangsstufen Logik-ICs]]). Ist außer dem Controller nur ein einziges IC an den Bus angeschlossen, kann /CS auch fest mit Masse verbunden und der Speicher somit permanent aktiviert werden. Das /OE-Signal dient hierbei dem Zweck, nach Anlegen einer Adresse am Adressbus den Speicher zum Übertragen eines Datenworts über den Datenbus zu veranlassen (Lesezugriff). Sollen Daten in das SRAM geschrieben werden, legt der Controller die Adresse und dann die Daten an, um den Speicher dann mit einem Low-Signal auf der /WE-Leitung zum Speichern zu bringen.&lt;br /&gt;
&lt;br /&gt;
Die Reihenfolge der einzelnen Daten- und Adresspins am RAM kann nach Belieben variiert werden, wenn dadurch das Layout der Platine vereinfach wird. D.h. D0 des RAMs kann auch an D5 des Controllers gehen. Der Grund dafür ist folgender: Die Daten werden zwar verstreut im RAM gespeichert (Adressleitungen vertauscht) oder in falscher Anordnung im Speicher angelegt (Datenleitungen vertauscht), jedoch kompensiert sich diese Unordnung beim Auslesen wieder. &#039;&#039;&#039;ACHTUNG&#039;&#039;&#039;, das geht nur bei einfachen SRAMs. DRAM oder neuere Speicher nehmen das fix übel, weil die Ansteuerung durcheinander kommt (Adressmultiplexing, Pagemodus, Byteslanes bei DDR-RAM etc.). Bei diesen ICs kann man bestenfalls Datenleitungen tauschen, bei DDR-RAMs nur innerhalb einer Byte-Lane. Prinzipiell sollte man davon aber nur sparsam Gebrauch machen, wenn es dem Layout wirklich hilft.&lt;br /&gt;
&lt;br /&gt;
===== Ohne Latch =====&lt;br /&gt;
&lt;br /&gt;
Die einfachste Art einen externen SRAM an den Mikrocontroller anzubinden ist die direkte Verkabelung. Jeder Pin des SRAMs bekommt einen Pin am MC. Jedoch verschwendet diese Anschlußweise auch ziemlich viele IO-Pins. Bei dem nebenstehenden 32-KiBi-RAM verbraucht der Anschluß so 8+15+2 (25) Pins.&lt;br /&gt;
&lt;br /&gt;
Am sinnvollsten verwendet man einen ganzen Port für die acht Datenleitungen, damit man schnell darauf zugreifen kann. Die Adressleitungen A0 bis A7 werden auch möglichst auf einen Port gelegt. An einen dritten Port wiederum werden A8-A14 angeschlossen; /WR und /OE können dann mit zwei weiteren freien Pins verbunden werden. Zusammen belegt diese Methode also 25 Pins für 32 KiBi. Auf diese Weise kann man an praktisch jeden Mikrocontroller einen SRAM anschließen, die Ansteuerung kann dann rein in Software vorgenommen werden. Das ist jedoch relativ aufwendig, in der Anwendung umständlich und langsam. Sinnvollerweise sollte der Mikrocontroller eine eingebaute Speicherschnittstelle haben, um den SRAM per Hardware direkt und schnell ansprechen zu können.&lt;br /&gt;
&lt;br /&gt;
===== Mit Latch =====&lt;br /&gt;
&lt;br /&gt;
Will man wertvolle Pins einsparen so benutzt man am besten ein [[Latch]], das die Signale zwischenspeichert. Man kann wählen, ob nur A0-A7 eingespart werden soll, oder gleich alle Adressleitungen. Für den ersten Fall benötigt man ein 8-Bit Latch das ausreichend schnell schalten kann, für den zweiten Fall zwei Latches.&lt;br /&gt;
&lt;br /&gt;
Die Eingänge des Latches werden mit den Datenleitungen des Mikrocontrollers verbunden und das Enable-Signal bekommt einen eigenständigen Pin. Die Einsparungen an Pins geht jedoch auf Kosten der Geschwindigkeit, da zuerst das Latch mit der Adresse geladen werden muß bevor die eigentliche Aktivierung des SRAMs beginnen kann. Bei einem 32-KiB-SRAM werden mit einem Latch nur noch 8+7+3 (18) Pins gebraucht, gegenüber der Variante ohne Latch also eine Einsparung von sieben Pins mit einem Bauteil.&lt;br /&gt;
&lt;br /&gt;
===== Mit XMEM-Interface =====&lt;br /&gt;
&lt;br /&gt;
[[Image:Sram_latch.png|thumb|250px|Verbindung zwischen einem AVR und einem 32-KiB-SRAM mit Latch und dem XMEM-Interface]]&lt;br /&gt;
&lt;br /&gt;
Viele Controller ([[AVR]], [[8051]]) besitzen ein Speicherinterface, das es ermöglicht SRAM anzuschließen und diesen als Erweiterung des internen RAMs zu benutzen. Dieser wird dann mit einem Latch angeschlossen, um Pins zu sparen. Das Enable-Signal des Latch muß mit dem Ausgang ALE (&#039;&#039;&#039;A&#039;&#039;&#039;ddress &#039;&#039;&#039;L&#039;&#039;&#039;atch &#039;&#039;&#039;E&#039;&#039;&#039;nable) verbunden werden, wie es im Schema gezeigt wird. Nach der Initialisierung des externen Speicherinterfaces steht der Software auch der externe SRAM zu Verfügung. Der Vorteil gegenüber den beiden erstgenannten Methoden ist die höhere Geschwindigkeit und einfachere Nutzung, denn die Steuersignale müssen nicht per Software erzeugt werden, das macht die Hardware in den Mikrocontrollern allein.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
=== BRAM ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;B&#039;&#039;&#039;lock &#039;&#039;&#039;RAM&#039;&#039;&#039; - Block RAM.&lt;br /&gt;
&lt;br /&gt;
Damit wird ein Speicher bezeichnet, welcher sich in [[FPGA]]s befindet. Die Blöcke von RAM sind physikalisch wie SRAM aufgebaut, sehr leicht anzusteuern und sehr schnell (200MHz++). Die Ansteuerung erfolgt jedoch synchron wie bei SDRAM mit einem Taktsignal. Die meisten FPGAs besitzen BRAM, welcher über zwei komplette Schnittstellen verfügt, (engl. Dual Port Memory). Damit ist es möglich von zwei Seiten gleichzeitig auf die Daten zuzugreifen. Das ist sehr vorteilhaft für [[FIFO]]s, da hier gleichzeitig Daten gelesen und geschrieben werden können. Bei den meisten FPGAs sind die beiden Ports komplett unabhängig und können mit unterschiedlichen Takten betrieben werden, was imense Vorteile für asynchrone FIFOs bringt.&lt;br /&gt;
&lt;br /&gt;
=== DRAM ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;D&#039;&#039;&#039;ynamic &#039;&#039;&#039;RAM&#039;&#039;&#039; - dynamischer RAM.&lt;br /&gt;
&lt;br /&gt;
Ein DRAM-[[Digitaltechnik|Bit]] besteht aus einem Transistor und einem Kondensator, wodurch man es sehr klein bauen kann. Allerdings kann der Kondensator seine Ladung nicht unbegrenzt lange halten, weswegen diese regelmäßig erneuert werden muß. Diese Erneuerung (englisch Refresh) macht DRAMs im Mikrocontrollerbereich etwas unbeliebt. Bei großen 16/32-Bit-Controllern befinden sich oft DRAM-Controller mit auf dem IC (on chip) die sich um den Refresh kümmern, da nur als DRAM große, schnelle und billige RAMs verfügbar sind. Heutzutage wird fast nur noch SDRAM hierfür verwendet, der klassiche DRAM ist ein Auslaufmodell. Auch einige 8-Bit Prozessoren wie der [[Z80]] unterstützten DRAM hardwareseitig. DRAM war bis zum Anfang der Pentium-Zeit der Hauptspeicher in PCs (EDO-RAM). Die Ansteuerung erfolgt &#039;&#039;&#039;asynchron&#039;&#039;&#039; über verschiedene Steuersignale. Die Adressen werden dabei [[Multiplexen | gemultiplext]].&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-4-121457.html Forenbeitrag zur Ansteuerung von DRAM per Software mit einem AVR]&lt;br /&gt;
&lt;br /&gt;
=== SDRAM ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;ynchronous &#039;&#039;&#039;DRAM&#039;&#039;&#039; - synchroner DRAM.&lt;br /&gt;
&lt;br /&gt;
Dabei handelt es sich um die Weiterentwicklung von DRAM. Wie der Name verrät ist dieser Speicher &#039;&#039;&#039;synchron&#039;&#039;&#039;, d.h. sämtliche Steuer -und Datentransfers zwischen SDRAM und Speichercontroller erfolgen synchron zu einem Taktsignal. Das vereinfacht das Design wesentlich und ermöglicht höhere Datentransfergeschwindigkeiten (Taktfrequenz, typisch bis 133 MHz).&lt;br /&gt;
&lt;br /&gt;
* Beschreibung von [http://de.wikipedia.org/wiki/Synchronous_Dynamic_Random_Access_Memory Synchronous Dynamic Random Access Memory] bei Wikipedia&lt;br /&gt;
* Artikel zum [[SDRAM-Timing]]&lt;br /&gt;
&lt;br /&gt;
=== DDR-SDRAM ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;D&#039;&#039;&#039;ouble &#039;&#039;&#039;D&#039;&#039;&#039;ata &#039;&#039;&#039;R&#039;&#039;&#039;ate &#039;&#039;&#039;SDRAM&#039;&#039;&#039; - SDRAM mit doppelter Datenrate.&lt;br /&gt;
&lt;br /&gt;
Oft als DDR-RAM abgekürzt. Hierbei handelt es sich um eine Weiterentwicklung von SDRAM. Dabei werden im Gegensatz zum Vorgänger Daten mit jeder Taktflanke übertragen, so dass pro Taktzyklus zwei Datenworte übertragen werden. Z.B. arbeitet DDR266 mit 133 MHz Taktfrequenz, DDR400 demzufolge mit 200 MHz. Die Steuerung erfolgt jedoch nach wie vor nur mit einfacher Taktfrequenz. Die höhere Taktfrequenz wird durch eine neue IC-Technologie, niedrigere Betriebsspannung (2,5V anstatt 3,3V) und andere IO-Standards (SSTL-2,5 anstatt 3,3V CMOS) erreicht. Das ist auch nötig, weil bei diesen Datenraten das Thema [[Wellenwiderstand]] bereits eine elementare Rolle spielt.&lt;br /&gt;
&lt;br /&gt;
=== DDR2-SDRAM ===&lt;br /&gt;
Dabei handelt es sich um die Weiterentwicklung von DDR-SDRAM. Durch weitere Verbesserungen der IC-Technologie, vor allem durch kleinere Strukturgrößen und niedrigere Betriebsspannung (1,8V anstatt 2,5V). Das Protokoll ist ähnlich zu DDR-RAM, die Taktfrequenzen sind höher als bei DDR-RAM.&lt;br /&gt;
&lt;br /&gt;
=== DDR3-SDRAM ===&lt;br /&gt;
&lt;br /&gt;
Hierbei handelt es sich um eine Weiterentwicklung der DDR2-Architektur.&lt;br /&gt;
Die Versorgungsspannung wurde auf 1,5V reduziert.&lt;br /&gt;
In heutigen PCs (Stand: Mai 2011) ist DDR3-RAM der am meisten eingesetzte Speicher.&lt;br /&gt;
Häufig wird DDR3-1333 verwendet; dieser Speicher hat eine Taktfrequenz von 667MHz. Die typische Rate von üblichen DDR3-Speichern liegt bei 800MHz (DDR3-1600).&lt;br /&gt;
&lt;br /&gt;
=== DDR4-SDRAM ===&lt;br /&gt;
Die neueste Variante ist die von Micron angekündigte DDR4-Speichertechnik. Sie lauft auf nur noch 1,2V statt 1,5V, bietet bis zu 16GB Speichervermögen je Chip&lt;br /&gt;
und hat einige Verbesserungen im Bereich der Adressierung und der Spannungsversorgung.&lt;br /&gt;
&lt;br /&gt;
=== PSRAM ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;P&#039;&#039;&#039;seudo &#039;&#039;&#039;S&#039;&#039;&#039;tatic RAM&lt;br /&gt;
&lt;br /&gt;
Pseudostatisches RAM ist intern ein DRAM, kann aber wie ein normales asynchrones SRAM angesteuert werden. Um den Refresh braucht man sich nicht zu kümmern. Der Nachteil ist die verglichen mit SRAMs langsame Zugriffszeit (z.&amp;amp;nbsp;B. 70 ns).&lt;br /&gt;
&lt;br /&gt;
Manche PSRAMs, z.&amp;amp;nbsp;B. das CellularRAM von Micron, implementieren zusätzlich einen synchronen Betriebsmodus der schnelle Burst-Zugriffe erlaubt. Um den Refresh kümmert sich das PSRAM auch hier intern, allerdings muss der Benutzer ggf. Wartezeiten beim Zugriff einhalten oder Busy-Leitungen abfragen.&lt;br /&gt;
&lt;br /&gt;
=== FRAM ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;F&#039;&#039;&#039;erroelectric &#039;&#039;&#039;RAM&#039;&#039;&#039; - Ferroelektrischer RAM.&lt;br /&gt;
&lt;br /&gt;
FRAM is a registered trademark of Ramtron International Corporation (U.S.A.)&lt;br /&gt;
&lt;br /&gt;
Bekannte Hersteller: &lt;br /&gt;
* [http://www.ramtron.com Ramtron]&lt;br /&gt;
* Fujitsu&lt;br /&gt;
* Epson&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [http://www.fujitsu.com/emea/services/microelectronics/fram/technology.html Technische Berschreibung von Fujitsu]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Ferroelectric_Random_Access_Memory FRAM in der Wikipedia]&lt;br /&gt;
&lt;br /&gt;
=== MRAM ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;M&#039;&#039;&#039;agnetic &#039;&#039;&#039;RAM&#039;&#039;&#039; - magnetischer RAM.&lt;br /&gt;
&lt;br /&gt;
Hierbei handelt es sich um Speicher, der die Daten nicht elektrisch sondern magnetisch speichert werden. MRAMs behalten ihren Speicherinhalt auch ohne Stromversorgung.&lt;br /&gt;
&lt;br /&gt;
Bekannte Hersteller: &lt;br /&gt;
* [http://www.everspin.com Everspin]&lt;br /&gt;
&lt;br /&gt;
=== NVRAM ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;N&#039;&#039;&#039;on &#039;&#039;&#039;V&#039;&#039;&#039;olatile &#039;&#039;&#039;RAM&#039;&#039;&#039; - nichtflüchtiger Speicher.&lt;br /&gt;
&lt;br /&gt;
NVRAM bezeichnet keine bestimmte Speichertechnologie sondern allgemein ein RAM das seinen Speicherinhalt beim Wegfall der Versorgungsspannung beibehält.&lt;br /&gt;
&lt;br /&gt;
Realisierungmöglichkeiten:&lt;br /&gt;
* SRAM mit Lithiumbatterie, Speicherdauer mehrere Jahre; Hersteller: [http://www.stm.com STM], [http://www.maxim-ic.com Maxim]&lt;br /&gt;
* SRAM mit Goldcap, Speicherdauer mehrere Wochen bis Monate&lt;br /&gt;
* FRAM, Speicherdauer 10 - 100 Jahre; Hersteller: Fujitsu, RamTron&lt;br /&gt;
* RAM mit automatischem EEPROM-Backup, Speicherdauer bis zu 100 Jahre; Hersteller: [http://www.intersil.com/html/ Intersil]&lt;br /&gt;
&lt;br /&gt;
=== Speichermodul ===&lt;br /&gt;
&lt;br /&gt;
Bei einem Speichermodul sind mehrere einzelne Speicherchips zu einem handlichen, steckbaren Bauteil zusammengefaßt, wie sie z.&amp;amp;nbsp;B. in PCs zum Einsatz kommen.&lt;br /&gt;
&lt;br /&gt;
* Übersicht über [http://www.hardware-bastelkiste.de/speichps.html Speicher-Module (ältere Modelle)] in der www.hardware-bastelkiste.de (SIPP, 30poliges-SIMM-Modul, 72poliges-PS/2-Modul)&lt;br /&gt;
* Forumsbeitrag: [http://www.mikrocontroller.net/topic/25053#186085 2MB DRAM an AVR]&lt;br /&gt;
* Forumsbeitrag: [http://www.mikrocontroller.net/topic/65601#524917 simm DRAMs parallel]&lt;br /&gt;
&lt;br /&gt;
== EPROM ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;E&#039;&#039;&#039;rasable &#039;&#039;&#039;P&#039;&#039;&#039;rogrammable &#039;&#039;&#039;R&#039;&#039;&#039;ead-&#039;&#039;&#039;O&#039;&#039;&#039;nly &#039;&#039;&#039;M&#039;&#039;&#039;emory&amp;quot; - löschbarer, programmierbarer Nur-Lese-Speicher. &lt;br /&gt;
&lt;br /&gt;
EPROMs sind elektronische Speicher, die in einem entsprechenden Programmiergerät elektrisch programmiert und mit UV-Licht eines Löschgeräts wieder gelöscht werden können. Dazu hat der IC ein Fenster aus UV-durchlässigem Quarzglas. Da dies aber relativ umständlich ist und diese Gehäuse groß und teuer sind, werden heutzutage auch oft andere Speicherformen benutzt, z.&amp;amp;nbsp;B. EEPROMs oder FLASH-ROMs.&lt;br /&gt;
&lt;br /&gt;
Was in den Speicherbaustein geschrieben oder von dort gelesen wird, kann als Binärdatei oder Textdatei definiert werden. Bei Textdateien werden oft Formate mit einer Fehlerkontrollmöglichkeit verwendet. Gängig sind die Formate Intel-HEX (IHEX) und Motorola S-Record.&lt;br /&gt;
&lt;br /&gt;
* [http://web.archive.org/web/20070610011547/http://www.cs.net/lucid/intel.htm Intel HEX-record Format]&lt;br /&gt;
* [http://www.amelek.gda.pl/avr/uisp/srecord.htm Motorola S-records]&lt;br /&gt;
* [http://home.earthlink.net/~tdickens/68hc11/docs/s19_file_format.html S19 File Format]&lt;br /&gt;
* [http://www.keil.com/download/docs/10.asp Motorola S-Record to BINARY File Converter] von keil.com&lt;br /&gt;
* [http://srecord.sourceforge.net/ SRecord 1.32] is a collection of powerful tools for manipulating EPROM load files. (GPL)&lt;br /&gt;
* [http://gnuwin32.sourceforge.net/packages/hex2bin.htm Hex2Bin Konverter]  unter GPL und [http://www.atmel.com/dyn/products/tools.asp?family_id=604 von Atmel]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/63448#new EPROM mit UV-LEDs löschen?]&lt;br /&gt;
* [http://members.misty.com/don/uvbulb.html#ep Using Alternate UV Sources to Erase EPROMS]&lt;br /&gt;
&lt;br /&gt;
== EEPROM ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;E&#039;&#039;&#039;lectrically &#039;&#039;&#039;E&#039;&#039;&#039;rasable &#039;&#039;&#039;P&#039;&#039;&#039;rogrammable &#039;&#039;&#039;R&#039;&#039;&#039;ead &#039;&#039;&#039;O&#039;&#039;&#039;nly &#039;&#039;&#039;M&#039;&#039;&#039;emory&amp;quot;) - elektrisch löschbarer, programmierbarer Nur-Lese-Speicher.&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu FLASH-ROMs muß man bei EEPROMs nicht immer einen ganzen Block auf einmal löschen sondern kann auch einzelne [[Digitaltechnik|Bytes]] löschen und neu beschreiben. Der Schreibzykls dauert ca 3-5 msec.&lt;br /&gt;
&lt;br /&gt;
Die meisten [[AVR]]-Controller haben ein integriertes EEPROM als Datenspeicher, es gibt jedoch auch externe EEPROMs die über den [[I²C]]- oder [[SPI]]-[[Bus]] angeschlossen werden können. Serielle EEPROMs können beispielsweise mit dem universellen und frei verfügbaren Programmer [http://www.lancos.com/ PonyProg] programmiert und ausgelesen werden. Eine Einführung dazu findet man im [[Pony-Prog Tutorial]].&lt;br /&gt;
&lt;br /&gt;
Wie oft ein EEPROM beschrieben werden kann, steht im Datenblatt. Typische Werte sind 10.000 bis 1 Million Schreibzugriffe. Danach kann es zu Datenverlusten kommen. Wer regelmäßig in ein EEPROM schreiben will sollte unbedingt nachrechnen wie viele Schreibzugriffe er denn konkret machen will. Schreibt man z.&amp;amp;nbsp;B. jede Sekunde auf die gleiche Stelle, dann macht man in drei Stunden 10.800 Schreibzugriffe und damit kann das EEPROM schon kaputt sein.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM Schreibzugriffe minimieren ===&lt;br /&gt;
&lt;br /&gt;
Sinnvollerweise schreibt man Daten nur direkt ins EEPROM, wenn man sicher ist, dass dies nur selten vorkommt. Anderenfalls speichert man die Daten im RAM und kopiert sie erst in den EEPROM, wenn die Versorgungsspannung ausfällt. Allerdings muss man durch eine Pufferschaltung gewährleisten, dass die Versorgungsspannung noch ein paar (hundert) Millisekunden stabil ist, nachdem das Netzteil ausgeschaltet wurde. Das kann man mit grossen Elektrolytkondensatoren, Goldcaps oder kleinen Batterien (Lithiumzellen) erreichen. Ein Schaltungsbeispiel findet man in der folgenden Schaltung.&lt;br /&gt;
&lt;br /&gt;
[[bild:eeprom_power_fail.png]]&lt;br /&gt;
&lt;br /&gt;
Wenn die Versorgungsspannung plötzlich abgeklemmt oder kurzgeschlossen wird, verhindert Diode D1 zunächst, dass sich der Pufferkondensator C2 sofort entlädt. Über R1 wird ein externer Interrupt im Prozessor ausgelöst (auf fallende Flanke oder Low Level einstellen!). Dort muss nun der Datensatz aus dem RAM ins EEPROM kopiert werden. Doch das darf nicht zu lange dauern, denn der Pufferkondensator C2 kann nur für ein paar Dutzend Millisekunden die Betriebsspannung aufrecht erhalten. Berechnet werden kann das durch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t=\frac{C \cdot \Delta V}{I}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* t : Pufferzeit&lt;br /&gt;
* &amp;amp;Delta;V : Spannungsabfall während der Pufferzeit&lt;br /&gt;
* I : Stromaufnahme der Schaltung&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
* Verbraucher: ATtiny2313@1 MHz, 5V ca. 0,9mA&lt;br /&gt;
* Datensatz: 32 Byte&lt;br /&gt;
* Schreibdauer / Byte: ca. 3,4 ms&lt;br /&gt;
&lt;br /&gt;
Wir brauchen also ca. 32x3,4ms=108,8ms, um die Daten im EEPROM zu speichern. Wenn wir den AVR mit 5V betreiben und zulassen, dass die Spannung bis auf 3V sinkt (&amp;amp;Delta;V=2V) ergibt sich daraus eine minimale Kapazität für C2 von&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C=\frac{I \cdot t}{\Delta V}=\frac{0,9mA \cdot 108,8ms}{2V}=48,9\mu F&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist das rechnerische Minimum! Real wird man eher den 2..5 fachen Wert wählen müssen, weil&lt;br /&gt;
&lt;br /&gt;
* man Reserven haben will&lt;br /&gt;
* besonders Elektrolytkondensatoren SEHR grosse Toleranzen haben (+20/-60%!!!)&lt;br /&gt;
* besonders Elektrolytkondensatoren bei niedrigen Temperaturen massiv an Kapazität verlieren&lt;br /&gt;
* während des Schreibens des EEPROMs mehr Strom benötigt wird.&lt;br /&gt;
&lt;br /&gt;
Verbraucht die Schaltung nun mehr Strom oder muss man grössere Datensätze speichern, werden die Kapazitäten bisweilen sehr gross. Was kann man tun? Aus der Formel oben geht hervor, dass durch ein Erhöhen des zulässigen Spannungsabfalls die Kapazität verringert werden kann. Doch unser Controller benötigt eine Mindestspannung, kann aber auch nicht mit 10V betrieben werden. Ja, der Controller nicht, aber ein Spannungsregler! Dieser kommt mit stark schwankenden Eingangsspannungen problemlos klar! Es sollte hier aber auf jeden Fall ein Typ mit geringem Stromverbrauch genutzt werden, wie z.&amp;amp;nbsp;B. der LP2950 (siehe [[Versorgung aus einer Zelle]]). Noch effizienter wäre der Einsatz eines Schaltreglers. Sinnvollerweise werden nur der Prozessor und minimal notwenig Komponenten von diesem Spannungsregler versorgt, Verbraucher mit hohem Stromverbrauch (LEDs, Relais, etc.) werden über einen zweiten Spannungsregler oder direkt vom Spannungseingang versorgt. Der [[Spannungsteiler]] aus R1 und R2 muss so berechnet sein, das beim Erreichen der minimalen Versorgungsspannung Vin ein Interrupt ausgelöst wird. Dazu kann man im [[AVR]] den Analogcomparator verwenden. Oder man rechnet mit einer Schaltschwelle von Vcc/2 und verwendet einen normalen externen [[Interrupt]]eingang.&lt;br /&gt;
&lt;br /&gt;
[[bild:eeprom_puffer_vreg.png]]&lt;br /&gt;
&lt;br /&gt;
Eine andere Lösung ist die Verwendung einer kleinen Lithiumzelle. Dabei springt diese nur ein, wenn sie wirklich gebraucht wird, sprich die Hauptstromversorgung ausfällt. Die unterbrechungsfreie Umschaltung wird durch zwei Dioden erreicht. Der Spannungsabfall über den Dioden diese Typs beträgt ca. 320mV bei 1mA und und 400mV bei 10mA. Noch besser ist die Verwendung eines kleinen MOSFETs, wie in diesem [http://www.mikrocontroller.net/topic/72275#591483 Beitrag] gezeigt wird. Damit erreicht man praktisch eine Umschaltung der Versorgungsspannung ohne nennenswerten Spannungsabfall. Wesentlicher Vorteil dieser Schaltung ist die um Grössenordungen längere Pufferzeit von Sekunden bis Minuten. Der Nachteil ist, dass sie, wenn sie oft genutzt wird irgendwann einmal leer ist, nicht mehr als Backup dienen kann.&lt;br /&gt;
&lt;br /&gt;
[[bild:battery-backup.png]]&lt;br /&gt;
&lt;br /&gt;
== Flash-ROM ==&lt;br /&gt;
&lt;br /&gt;
Flash-ROMs sind nichtflüchtige Datenspeicher ähnlich zu EEPROMs, die elektrisch lösch- und beschreibbar sind. Sie können Daten auch ohne Stromversorgung speichern. Man kann sie beliebig oft auslesen, aber nicht beliebig oft beschreiben. Wie oft genau ist unterschiedlich und steht normalerweise im Datenblatt (1.000-10.000 mal). Ein Flash-ROM kann im Gegensatz zum EEPROM nur sektorweise gelöscht werden, außerdem ist die Anzahl der erlaubten Lösch-/Schreibzyklen meist deutlich niedriger. Flash-ROMs sind als Programmspeicher in [[Mikrocontroller]]n weit verbreitet.&lt;br /&gt;
&lt;br /&gt;
== OTP-ROM ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;O&#039;&#039;&#039;ne &#039;&#039;&#039;T&#039;&#039;&#039;ime &#039;&#039;&#039;P&#039;&#039;&#039;rogrammable-&#039;&#039;&#039;R&#039;&#039;&#039;ead &#039;&#039;&#039;O&#039;&#039;&#039;nly &#039;&#039;&#039;M&#039;&#039;&#039;emory - einmal programmierbarer Nur-Lese-Speicher.&lt;br /&gt;
&lt;br /&gt;
Bisweilen auch als &#039;&#039;&#039;PROM&#039;&#039;&#039; bezeichnet. Ein Speicher der nur einmal beschrieben werden kann. Das bedeutet natürlich, daß man sich vorher sicher sein muß, daß die Daten bzw. das Programm korrekt sind.&lt;br /&gt;
&lt;br /&gt;
Die interne Struktur besteht aus Leiterbahnen auf dem Chip, die beim Programmieren durchgebrannt werden und danach eine der Diodenmatrix ähnliche Verschaltung bilden. Diese Technik wurde auch bei [[PAL]]s verwendet. Heute ist sie nur noch sehr selten anzutreffen. Bausteine die durch ihre einmalige Programmierbarkeit ein OTP-PROM vermuten lassen, wie z.&amp;amp;nbsp;B. die [[PIC|PIC-Controller]], benutzen meist die Eprom-Technik bei der einfach das Quarzglasfenster zum Löschen weggelassen wird. [[Mikrocontroller]] mit OTP-ROM benutzt man z.&amp;amp;nbsp;B. in der industriellen Serienfertigung. Dazu entwickelt man die Software auf relativ teuren Controllern mit wiederbeschreibbarem Speicher (FLASH-ROM) und wenn man fertig ist kommen die billigeren Versionen mit OTP-ROM zum Einsatz.&lt;br /&gt;
&lt;br /&gt;
== Register ==&lt;br /&gt;
&lt;br /&gt;
Die Register eines [[Prozessor]]s sind Speicher mit geringer Kapazität und kürzester Zugriffszeit. Sie dienen zur vorübergehenden Speicherung von Informationen, welche im Moment verarbeitet werden sollen. Viele CPU-Befehle funktionieren nur mit Registern. Will man z.&amp;amp;nbsp;B. zwei Zahlen addieren dann müssen sich die beiden Summanden bei den meisten Controllern in Registern befinden. Befinden sich die Summanden im RAM, dann müssen sie vor der Addition in Register kopiert werden. Die Klassifizierung der CPU bzw. des Mikrocontrollers gibt die Breite dieser Register an (8/16/32/64 Bit CPU).&lt;br /&gt;
&lt;br /&gt;
Weiterhin haben alle Mikrocontroller sogenannte &#039;&#039;&#039;S&#039;&#039;&#039;pecial &#039;&#039;&#039;F&#039;&#039;&#039;unction &#039;&#039;&#039;R&#039;&#039;&#039;egister (SFR, spezielle Funktionsregister). Das sind spezielle Register, welche sämtliche Funktionen und Module des Mikrocontrollers steuern ([[AVR-Tutorial: IO-Grundlagen | IO-Pins]], [[UART]], [[SPI]], [[AVR-Tutorial: Timer | Timer]], etc.). Diese befinden sich physisch zwar auf dem Mikrocontroller-IC, logisch allerdings ausserhalb der CPU und werden über andere Befehle angesprochen als die normalen CPU-Register.&lt;br /&gt;
&lt;br /&gt;
== WOM ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;W&#039;&#039;&#039;rite &#039;&#039;&#039;O&#039;&#039;&#039;nly &#039;&#039;&#039;M&#039;&#039;&#039;emory - Nur Schreib-Speicher.&lt;br /&gt;
&lt;br /&gt;
Derzeit ist nur ein Modell bekannt: Signetics 25120 9046xN ([http://www.national.com/rap/files/datasheet.pdf Datenblatt (PDF)]). Weitere Berichte zu diesem zukunftsträchtigen Bauteil siehe [http://www.national.com/rap/Story/WOMorigin.html The origin of the WOM - the &amp;quot;Write Only Memory&amp;quot;] von Bob Pease. ;-)&lt;br /&gt;
&lt;br /&gt;
WOMs lassen sich allerdings auch leicht selbst herstellen indem z.&amp;amp;nbsp;B. bei SRAMs der /OE-Pin entfernt wird.&lt;br /&gt;
&lt;br /&gt;
== Externe Speichermedien ==&lt;br /&gt;
&lt;br /&gt;
Siehe Artikel &lt;br /&gt;
* [[Festplatte]]&lt;br /&gt;
* [[MMC- und SD-Karten]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]]&lt;br /&gt;
[[Kategorie:Speicher und Dateisysteme| ]]&lt;/div&gt;</summary>
		<author><name>0:0:0:FFFF:194:39:218:10</name></author>
	</entry>
</feed>