<?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=Kruemeltee</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=Kruemeltee"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Kruemeltee"/>
	<updated>2026-04-10T21:20:44Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32F103C8T6_STM32_Billig_Board&amp;diff=96982</id>
		<title>STM32F103C8T6 STM32 Billig Board</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32F103C8T6_STM32_Billig_Board&amp;diff=96982"/>
		<updated>2017-08-11T20:24:39Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Übersicht =&lt;br /&gt;
Bei Aliexpress, Ebay &amp;amp; Co gibt es bereits ab 2 EUR (1.84€ [19.07.2017]) ein minimalistisches STM32-Board. &lt;br /&gt;
Auf Ebay im Suchfeld Suchfeld einfach &amp;quot;STM32F103C8T6&amp;quot; eingeben.&lt;br /&gt;
[[Datei:STM32F103C8T6 STM32 Board.jpg|mini]]&lt;br /&gt;
Eckdaten:&lt;br /&gt;
* STM32F103C8T6&lt;br /&gt;
* 64k Flash (viele C8 besitzen in wirklichkeit 128k Flash), 20k RAM&lt;br /&gt;
* Micro-USB, ISP Header (SWDIO)&lt;br /&gt;
* 8MHz System-Quarz, 32.768kHz RTC Quarz&lt;br /&gt;
* BOOT0/BOOT1 Jumper&lt;br /&gt;
* RESET Button&lt;br /&gt;
* Power LED, LED an GPIO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Board ist unter anderem auch unter dem Namen &#039;&#039;&#039;Blue Pill&#039;&#039;&#039; bekannt. Zwei ähnliche Boards nennen sich &amp;quot;Black Pill&amp;quot; und &amp;quot;Red Pill&amp;quot;.&lt;br /&gt;
= Schaltplan =&lt;br /&gt;
Es scheint verschiedene Versionen dieses Boards zu geben und das sorgt für Verwirrung. Bei der geringen Anzahl an Bauteilen sollte man genau mit Fotos und Schaltplan vergleichen. Am besten jeden Bauteilwert verifizieren.&lt;br /&gt;
&lt;br /&gt;
Der Hersteller scheint eine Website unter der Domain &#039;&#039;vcc-gnd.com&#039;&#039; gehabt zu haben, dort gab es einen Schaltplan, der noch im Netz umgeht ([[Datei:vcc-gnd.com-blue-pill-schematic-stm32f103c8t6.pdf|dieser]]).&lt;br /&gt;
&lt;br /&gt;
Der User &#039;&#039;Eddy Current (chrisi)&#039;&#039; hat dafür in diesem [https://www.mikrocontroller.net/topic/350400 Thread] einen Schaltplan gepostet ([[Datei:STM32 Min System Dev Board.pdf|Schaltplan]]).&lt;br /&gt;
&lt;br /&gt;
= Inbetriebnahme und Test =&lt;br /&gt;
Die onboard-LED an PC13 kann man für erste Lebenszeichen verwendet werden. &lt;br /&gt;
Hier gibt es ein kleines blinky-Programm https://github.com/spacerace/stm32f103c8t6-blinky im Quellcode und &lt;br /&gt;
[[hier als Binary|stm32f103c8t6_blinky.bin]] zum direkten schreiben.&lt;br /&gt;
&lt;br /&gt;
= 128k Flash =&lt;br /&gt;
&lt;br /&gt;
= In System Programming/Programmer =&lt;br /&gt;
Durch den SWDIO Header lässt sich das Board sehr einfach per ST-Link und kompatiblem Programmern schreiben/lesen.&lt;br /&gt;
Mit einer passenden Firmware lässt sich dieses Board auch ST-LinkV2 verwenden.&lt;br /&gt;
&lt;br /&gt;
= USB PullUp Problem =&lt;br /&gt;
R10 ist auf vielen Boards mit 10k bestückt worden und sollte aber ein 1k5 Widerstand sein. Dadurch muss nach jedem&lt;br /&gt;
Reset das Board ab- und wieder angesteckt werden.&lt;br /&gt;
Man hat nun zwei Möglichkeiten, man wechselt R10 aus oder schliesst einen 1k8 parallel zu R10 an.&lt;br /&gt;
Nun hat man wieder die Möglichkeit das an-/abstecken per Software vorzugeben.&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:STM32]]&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32F103C8T6_STM32_Billig_Board&amp;diff=96981</id>
		<title>STM32F103C8T6 STM32 Billig Board</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32F103C8T6_STM32_Billig_Board&amp;diff=96981"/>
		<updated>2017-08-11T20:23:49Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bei Aliexpress, Ebay &amp;amp; Co gibt es bereits ab 2 EUR (1.84€ [19.07.2017]) ein minimalistisches STM32-Board. &lt;br /&gt;
Auf Ebay im Suchfeld Suchfeld einfach &amp;quot;STM32F103C8T6&amp;quot; eingeben.&lt;br /&gt;
[[Datei:STM32F103C8T6 STM32 Board.jpg|mini]]&lt;br /&gt;
Eckdaten:&lt;br /&gt;
* STM32F103C8T6&lt;br /&gt;
* 64k Flash (viele C8 besitzen in wirklichkeit 128k Flash), 20k RAM&lt;br /&gt;
* Micro-USB, ISP Header (SWDIO)&lt;br /&gt;
* 8MHz System-Quarz, 32.768kHz RTC Quarz&lt;br /&gt;
* BOOT0/BOOT1 Jumper&lt;br /&gt;
* RESET Button&lt;br /&gt;
* Power LED, LED an GPIO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Board ist unter anderem auch unter dem Namen &#039;&#039;&#039;Blue Pill&#039;&#039;&#039; bekannt. Zwei ähnliche Boards nennen sich &amp;quot;Black Pill&amp;quot; und &amp;quot;Red Pill&amp;quot;.&lt;br /&gt;
= Schaltplan =&lt;br /&gt;
Es scheint verschiedene Versionen dieses Boards zu geben und das sorgt für Verwirrung. Bei der geringen Anzahl an Bauteilen sollte man genau mit Fotos und Schaltplan vergleichen. Am besten jeden Bauteilwert verifizieren.&lt;br /&gt;
&lt;br /&gt;
Der Hersteller scheint eine Website unter der Domain &#039;&#039;vcc-gnd.com&#039;&#039; gehabt zu haben, dort gab es einen Schaltplan, der noch im Netz umgeht ([[Datei:vcc-gnd.com-blue-pill-schematic-stm32f103c8t6.pdf|dieser]]).&lt;br /&gt;
&lt;br /&gt;
Der User &#039;&#039;Eddy Current (chrisi)&#039;&#039; hat dafür in diesem [https://www.mikrocontroller.net/topic/350400 Thread] einen Schaltplan gepostet ([[Datei:STM32 Min System Dev Board.pdf|Schaltplan]]).&lt;br /&gt;
&lt;br /&gt;
= Inbetriebnahme und Test =&lt;br /&gt;
Die onboard-LED an PC13 kann man für erste Lebenszeichen verwendet werden. &lt;br /&gt;
Hier gibt es ein kleines blinky-Programm https://github.com/spacerace/stm32f103c8t6-blinky im Quellcode und &lt;br /&gt;
[[hier als Binary|stm32f103c8t6_blinky.bin]] zum direkten schreiben.&lt;br /&gt;
&lt;br /&gt;
= 128k Flash =&lt;br /&gt;
&lt;br /&gt;
= In System Programming/Programmer =&lt;br /&gt;
Durch den SWDIO Header lässt sich das Board sehr einfach per ST-Link und kompatiblem Programmern schreiben/lesen.&lt;br /&gt;
Mit einer passenden Firmware lässt sich dieses Board auch ST-LinkV2 verwenden.&lt;br /&gt;
&lt;br /&gt;
= USB PullUp Problem =&lt;br /&gt;
R10 ist auf vielen Boards mit 10k bestückt worden und sollte aber ein 1k5 Widerstand sein. Dadurch muss nach jedem&lt;br /&gt;
Reset das Board ab- und wieder angesteckt werden.&lt;br /&gt;
Man hat nun zwei Möglichkeiten, man wechselt R10 aus oder schliesst einen 1k8 parallel zu R10 an.&lt;br /&gt;
Nun hat man wieder die Möglichkeit das an-/abstecken per Software vorzugeben.&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:STM32]]&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32F103C8T6_STM32_Billig_Board&amp;diff=96980</id>
		<title>STM32F103C8T6 STM32 Billig Board</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32F103C8T6_STM32_Billig_Board&amp;diff=96980"/>
		<updated>2017-08-11T20:17:52Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: Überarbeiten und Erweitern&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bei Aliexpress, Ebay &amp;amp; Co gibt es bereits ab 2 EUR (1.84€ [19.07.2017]) ein minimalistisches STM32-Board. &lt;br /&gt;
Auf Ebay im Suchfeld Suchfeld einfach &amp;quot;STM32F103C8T6&amp;quot; eingeben.&lt;br /&gt;
[[Datei:STM32F103C8T6 STM32 Board.jpg|mini]]&lt;br /&gt;
Eckdaten:&lt;br /&gt;
* STM32F103C8T6&lt;br /&gt;
* 64k Flash (viele C8 besitzen in wirklichkeit 128k Flash), 20k RAM&lt;br /&gt;
* Micro-USB, ISP Header (SWDIO)&lt;br /&gt;
* 8MHz System-Quarz, 32.768kHz RTC Quarz&lt;br /&gt;
* BOOT0/BOOT1 Jumper&lt;br /&gt;
* RESET Button&lt;br /&gt;
* Power LED, LED an GPIO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Board ist unter anderem auch unter dem Namen &#039;&#039;&#039;Blue Pill&#039;&#039;&#039; bekannt. Zwei ähnliche Boards nennen sich &amp;quot;Black Pill&amp;quot; und &amp;quot;Red Pill&amp;quot;.&lt;br /&gt;
= Schaltplan =&lt;br /&gt;
Es scheint verschiedene Versionen dieses Boards zu geben und das sorgt für Verwirrung. Bei der geringen Anzahl an Bauteilen sollte man genau mit Fotos und Schaltplan vergleichen. Am besten jeden Bauteilwert verifizieren.&lt;br /&gt;
&lt;br /&gt;
Der Hersteller scheint eine Website unter der Domain &#039;&#039;vcc-gnd.com&#039;&#039; gehabt zu haben, dort gab es einen Schaltplan, der noch im Netz umgeht ([[Datei:vcc-gnd.com-blue-pill-schematic-stm32f103c8t6.pdf|dieser]]).&lt;br /&gt;
&lt;br /&gt;
Der User &#039;&#039;Eddy Current (chrisi)&#039;&#039; hat dafür in diesem [https://www.mikrocontroller.net/topic/350400 Thread] einen Schaltplan gepostet ([[Datei:STM32 Min System Dev Board.pdf|Schaltplan]]).&lt;br /&gt;
&lt;br /&gt;
= Inbetriebnahme und Test =&lt;br /&gt;
Die onboard-LED an PC13 kann man für erste Lebenszeichen verwendet werden. &lt;br /&gt;
Hier gibt es ein kleines blinky-Programm https://github.com/spacerace/stm32f103c8t6-blinky im Quellcode und &lt;br /&gt;
[[hier als Binary|stm32f103c8t6_blinky.bin]] zum direkten schreiben.&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:STM32]]&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Vcc-gnd.com-blue-pill-schematic-stm32f103c8t6.pdf&amp;diff=96979</id>
		<title>Datei:Vcc-gnd.com-blue-pill-schematic-stm32f103c8t6.pdf</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Vcc-gnd.com-blue-pill-schematic-stm32f103c8t6.pdf&amp;diff=96979"/>
		<updated>2017-08-11T20:15:11Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: Schaltplan des blauen STM32F103C8T6 dev Boards von aliexpress, ebay und co.
Nennt sich auch &amp;quot;Blue Pill&amp;quot;.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Schaltplan des blauen STM32F103C8T6 dev Boards von aliexpress, ebay und co.&lt;br /&gt;
Nennt sich auch &amp;quot;Blue Pill&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32F103C8T6_STM32_Billig_Board&amp;diff=95148</id>
		<title>STM32F103C8T6 STM32 Billig Board</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32F103C8T6_STM32_Billig_Board&amp;diff=95148"/>
		<updated>2017-02-05T20:05:45Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bei Aliexpress, Ebay &amp;amp; Co gibt es bereits ab 3 EUR ein minimalistisches STM32-Board. Auf Ebay im Suchfeld Suchfeld einfach &amp;quot;STM32F103C8T6&amp;quot; eingeben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:STM32F103C8T6 STM32 Board.jpg|mini]]&lt;br /&gt;
&lt;br /&gt;
Eddy Current (chrisi) hat dafür in dem [https://www.mikrocontroller.net/topic/350400 Thread] einen Schaltplan gepostet: [[Datei:STM32 Min System Dev Board.pdf|gerahmt]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die onboard-LED an PC13 kann man für erste Lebenszeichen verwendet werden. Hier gibt es ein kleines blinky-Programm: https://github.com/spacerace/stm32f103c8t6-blinky .&lt;br /&gt;
&lt;br /&gt;
Hier ausserdem nochmal compiliert:&lt;br /&gt;
[[Datei:stm32f103c8t6_blinky.bin|stm32f103c8t6_blinky.bin]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:STM32]]&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Stm32f103c8t6_blinky.bin&amp;diff=95147</id>
		<title>Datei:Stm32f103c8t6 blinky.bin</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Stm32f103c8t6_blinky.bin&amp;diff=95147"/>
		<updated>2017-02-05T20:03:19Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: blinky on PC13&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;blinky on PC13&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32F103C8T6_STM32_Billig_Board&amp;diff=95146</id>
		<title>STM32F103C8T6 STM32 Billig Board</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32F103C8T6_STM32_Billig_Board&amp;diff=95146"/>
		<updated>2017-02-05T20:02:29Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: Blinky&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bei Aliexpress, Ebay &amp;amp; Co gibt es gibt ab 3 EUR aufwärts ein STM32 Board, einfach nach &amp;quot;STM32F103C8T6&amp;quot; suchen.&lt;br /&gt;
&lt;br /&gt;
Eddy Current (chrisi) hat dafür in dem [https://www.mikrocontroller.net/topic/350400 Thread] einen Schaltplan gepostet:&lt;br /&gt;
&lt;br /&gt;
[[Datei:STM32 Min System Dev Board.pdf|gerahmt]]&lt;br /&gt;
&lt;br /&gt;
Und ein Bild davon:&lt;br /&gt;
&lt;br /&gt;
[[Datei:STM32F103C8T6 STM32 Board.jpg|mini]]&lt;br /&gt;
&lt;br /&gt;
Die onboard-LED an PC13 kann für erste Lebenszeichen verwendet werden. Hier gibt es ein kleines blinky-Programm: https://github.com/spacerace/stm32f103c8t6-blinky .&lt;br /&gt;
&lt;br /&gt;
Hier ausserdem nochmal compiliert:&lt;br /&gt;
[[Datei:stm32f103c8t6_blinky.bin|stm32f103c8t6_blinky.bin]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:STM32]]&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32_jump_to_bootloader&amp;diff=93334</id>
		<title>STM32 jump to bootloader</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32_jump_to_bootloader&amp;diff=93334"/>
		<updated>2016-06-30T20:09:38Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;STM32 - Jump To Bootloader&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In manchen Anwendungen möchte man keinen Hardwarebutton für ein Firmware-Update haben. Muss man trotzdem ab und zu ein Update einspielen, kann man den Bootloader über eine versteckte UI-Funktion aufrufen oder einen Befehl über die serielle Schnittstelle senden um den Bootloader anzuspringen. &lt;br /&gt;
Die Möglichkeiten sind sehr vielfältig.&lt;br /&gt;
&lt;br /&gt;
Die hier beschriebene Möglichkeit schreibt eine Magic-Konstante in&#039;s RAM. Dieses überlebt einen System-Reset und der veränderte Startup-Code prüft auf diese Konstante. Ist diese vorhanden, wird zum Bootloader gesprungen.&lt;br /&gt;
&lt;br /&gt;
Der Code zum Prüfen und Verzweigen wird kurz vor dem Aufruf der main()-Funktion eingefügt. Kurz dahinter kommt die Subroutine &#039;Reboot_Loader&#039;. Diese setzt einen Pointer auf den Bootloader und hüpft dann dort hin.&lt;br /&gt;
&lt;br /&gt;
===== startup.S =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
        /* Call the clock system intitialization function.*/&lt;br /&gt;
        bl  SystemInit&lt;br /&gt;
  &lt;br /&gt;
        /* check for a magic constant in RAM, if present&lt;br /&gt;
         * brach to bootloader */&lt;br /&gt;
        LDR        R0, =0x2000FFF0&lt;br /&gt;
        LDR        R1, =0xDEADBEEF&lt;br /&gt;
        LDR        R2, [R0, #0]&lt;br /&gt;
        STR        R0, [R0, #0] /* Invalidate*/&lt;br /&gt;
        CMP        R2, R1&lt;br /&gt;
        BEQ        Reboot_Loader&lt;br /&gt;
  &lt;br /&gt;
        /* Call the applications entry point.*/&lt;br /&gt;
	bl	main&lt;br /&gt;
	bx	lr&lt;br /&gt;
.size	Reset_Handler, .-Reset_Handler&lt;br /&gt;
&lt;br /&gt;
Reboot_Loader:&lt;br /&gt;
        LDR        R0, =0x1FFFF000&lt;br /&gt;
        LDR        SP,[R0, #0]&lt;br /&gt;
        LDR        R0,[R0, #4]&lt;br /&gt;
        BX         R0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== app.c =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
*((unsigned long *)0x2000FFF0) = 0xDEADBEEF; // 64KB STM32F103, also works with 512k STM32F103VCT6&lt;br /&gt;
NVIC_GernerateSystemReset();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== app.c ohne fwlib/HAL =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define 	AIRCR_VECTKEY_MASK   ((uint32_t)0x05FA0000)&lt;br /&gt;
&lt;br /&gt;
*((unsigned long *)0x2000FFF0) = 0xDEADBEEF; // 64KB STM32F103, also works with 512k STM32F103VCT6&lt;br /&gt;
SCB-&amp;gt;AIRCR = AIRCR_VECTKEY_MASK | (u32)0x04;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
&lt;br /&gt;
Der folgende Code-Ausschnitt zeigt die ISR des USART1 eines STM32F103. Der Code sammelt alle empfangenen Bytes und zählt mit. Sobald 32bytes oder ein &#039;\r&#039; empfangen wurden, wird der String verglichen. Ist dieser &amp;quot;GBL\r&amp;quot;, springt er in den Bootloader.&lt;br /&gt;
&lt;br /&gt;
Auf dem Programmier-Computer läuft ein kurzes Python-Script, welches &amp;quot;GBL\r&amp;quot; sendet und danach wird direkt das Flash-Update-Tool wie stm32flash aufgerufen. So entfällt jegliches Bedienen am Gerät.&lt;br /&gt;
&lt;br /&gt;
Das Python-Script heisst gbl.py, danach der Aufruf zum flashen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;$ ./gbl.py &amp;amp;&amp;amp; stm32flash -b 921600 -w output/main.bin -g 0x0 /dev/ttyUSB0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das Python-Script benötigt das Paket python-serial.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
import serial&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial(&#039;/dev/ttyUSB0&#039;, 115200)&lt;br /&gt;
print ser.name&lt;br /&gt;
ser.write(&#039;GBL\r&#039;)&lt;br /&gt;
ser.close&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun der Controller-Teil. Zuerst die ISR, danach die Initialisierung sowie einfache putc/puts Funktionen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void USART1_IRQHandler(void) {&lt;br /&gt;
	char c;&lt;br /&gt;
	&lt;br /&gt;
	static int count = 0;&lt;br /&gt;
	static char rcv[33];&lt;br /&gt;
	&lt;br /&gt;
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {&lt;br /&gt;
		c = (char)USART_ReceiveData(USART1);&lt;br /&gt;
		&lt;br /&gt;
		rcv[count] = c;&lt;br /&gt;
		count++;&lt;br /&gt;
		&lt;br /&gt;
		if((count == 32) || (c == &#039;\r&#039;)) {&lt;br /&gt;
			rcv[count] = &#039;\0&#039;;&lt;br /&gt;
			//usart1_puts(rcv);&lt;br /&gt;
			&lt;br /&gt;
 			if(!(strcmp(rcv, &amp;quot;GBL\r&amp;quot;))) {		// go to bootloader&lt;br /&gt;
				/* write constant to ram */&lt;br /&gt;
 				*((unsigned long *)0x2000FFF0) = 0xDEADBEEF;&lt;br /&gt;
				&lt;br /&gt;
				/* do a system reset */&lt;br /&gt;
 				SCB-&amp;gt;AIRCR = ((uint32_t)0x05FA0000) | (u32)0x04;				&lt;br /&gt;
 			//} else if(!(strcmp(rcv, &amp;quot;HELP\r&amp;quot;))) {&lt;br /&gt;
  			//	print_help();&lt;br /&gt;
 			} else {&lt;br /&gt;
 				usart1_puts(&amp;quot;?! &amp;lt; no cmd &amp;gt;\n&amp;quot;);&lt;br /&gt;
 			}&lt;br /&gt;
			&lt;br /&gt;
			count = 0;&lt;br /&gt;
			memset(rcv, 0, 33);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//USART_SendData(USART1, c);&lt;br /&gt;
		USART_ClearITPendingBit(USART1, USART_IT_RXNE);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void usart1_init(void) {&lt;br /&gt;
	USART_InitTypeDef       usart_i;&lt;br /&gt;
	GPIO_InitTypeDef        gpio_i;&lt;br /&gt;
&lt;br /&gt;
	GPIO_PinRemapConfig(GPIO_Remap_USART1,DISABLE);&lt;br /&gt;
&lt;br /&gt;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA,   ENABLE);&lt;br /&gt;
&lt;br /&gt;
	/* TX */&lt;br /&gt;
	gpio_i.GPIO_Pin   = GPIO_Pin_9;&lt;br /&gt;
	gpio_i.GPIO_Speed = GPIO_Speed_50MHz;&lt;br /&gt;
	gpio_i.GPIO_Mode  = GPIO_Mode_AF_PP;&lt;br /&gt;
	GPIO_Init(GPIOA, &amp;amp;gpio_i);&lt;br /&gt;
&lt;br /&gt;
	/* RX */&lt;br /&gt;
	gpio_i.GPIO_Pin   = GPIO_Pin_10;&lt;br /&gt;
	gpio_i.GPIO_Speed = GPIO_Speed_50MHz;&lt;br /&gt;
	gpio_i.GPIO_Mode  = GPIO_Mode_IN_FLOATING;&lt;br /&gt;
	GPIO_Init(GPIOA, &amp;amp;gpio_i);&lt;br /&gt;
&lt;br /&gt;
	/* 115200 8n1 */&lt;br /&gt;
	usart_i.USART_BaudRate              = 115200;&lt;br /&gt;
    	usart_i.USART_HardwareFlowControl   = USART_HardwareFlowControl_None;&lt;br /&gt;
    	usart_i.USART_Mode       	    = USART_Mode_Rx | USART_Mode_Tx;&lt;br /&gt;
    	usart_i.USART_Parity		    = USART_Parity_No;&lt;br /&gt;
    	usart_i.USART_StopBits		    = USART_StopBits_1;&lt;br /&gt;
    	usart_i.USART_WordLength            = USART_WordLength_8b;&lt;br /&gt;
&lt;br /&gt;
	USART_Init(USART1, &amp;amp;usart_i);&lt;br /&gt;
&lt;br /&gt;
	/* enable RXNE interrupt */&lt;br /&gt;
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);&lt;br /&gt;
	NVIC_EnableIRQ(USART1_IRQn);&lt;br /&gt;
&lt;br /&gt;
	USART_Cmd(USART1,ENABLE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void usart1_putc(char c){&lt;br /&gt;
	while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);&lt;br /&gt;
	USART_SendData(USART1, c);&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void usart1_puts(char *str){&lt;br /&gt;
	while(*str != 0) {&lt;br /&gt;
		usart1_putc(*(str++));&lt;br /&gt;
	}&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nachteile / Beachten ===&lt;br /&gt;
&lt;br /&gt;
Der Bootloader erwartet einen gewissen Status der Peripherie, was nicht von ST dokumentiert wurde. In meiner jetzigen Applikation habe ich mit dieser Methoder bisher keine Probleme. Andere User im ST-Forum berichten von Problemen beim Anspringen des Bootloaders. Eventuell muss dann noch von Hand Peripherie deinitialisiert werden um die korrekte Funktion zu gewährleisten.&lt;br /&gt;
Siehe ST-Forum-Lunk unter &amp;quot;Quellen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Quellen ===&lt;br /&gt;
* https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2FJump%20to%20internal%20bootloader&amp;amp;FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&amp;amp;currentviews=8841&lt;br /&gt;
&lt;br /&gt;
=== Autor ===&lt;br /&gt;
clive1 - ST-Forum (code)&lt;br /&gt;
&lt;br /&gt;
Nils S. - µC.net (Artikel)&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32_jump_to_bootloader&amp;diff=93333</id>
		<title>STM32 jump to bootloader</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32_jump_to_bootloader&amp;diff=93333"/>
		<updated>2016-06-30T20:08:43Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;STM32 - Jump To Bootloader&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In manchen Anwendungen möchte man keinen Hardwarebutton für ein Firmware-Update haben. Muss man trotzdem ab und zu ein Update einspielen, kann man den Bootloader über eine versteckte UI-Funktion aufrufen oder einen Befehl über die serielle Schnittstelle senden um den Bootloader anzuspringen. &lt;br /&gt;
Die Möglichkeiten sind sehr vielfältig.&lt;br /&gt;
&lt;br /&gt;
Die hier beschriebene Möglichkeit schreibt eine Magic-Konstante in&#039;s RAM. Dieses überlebt einen System-Reset und der veränderte Startup-Code prüft auf diese Konstante. Ist diese vorhanden, wird zum Bootloader gesprungen.&lt;br /&gt;
&lt;br /&gt;
Der Code zum Prüfen und Verzweigen wird kurz vor dem Aufruf der main()-Funktion eingefügt. Kurz dahinter kommt die Subroutine &#039;Reboot_Loader&#039;. Diese setzt einen Pointer auf den Bootloader und hüpft dann dort hin.&lt;br /&gt;
&lt;br /&gt;
===== startup.S =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
        /* Call the clock system intitialization function.*/&lt;br /&gt;
        bl  SystemInit&lt;br /&gt;
  &lt;br /&gt;
        /* check for a magic constant in RAM, if present&lt;br /&gt;
         * brach to bootloader */&lt;br /&gt;
        LDR        R0, =0x2000FFF0&lt;br /&gt;
        LDR        R1, =0xDEADBEEF&lt;br /&gt;
        LDR        R2, [R0, #0]&lt;br /&gt;
        STR        R0, [R0, #0] /* Invalidate*/&lt;br /&gt;
        CMP        R2, R1&lt;br /&gt;
        BEQ        Reboot_Loader&lt;br /&gt;
  &lt;br /&gt;
        /* Call the applications entry point.*/&lt;br /&gt;
	bl	main&lt;br /&gt;
	bx	lr&lt;br /&gt;
.size	Reset_Handler, .-Reset_Handler&lt;br /&gt;
&lt;br /&gt;
Reboot_Loader:&lt;br /&gt;
        LDR        R0, =0x1FFFF000&lt;br /&gt;
        LDR        SP,[R0, #0]&lt;br /&gt;
        LDR        R0,[R0, #4]&lt;br /&gt;
        BX         R0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== app.c =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
*((unsigned long *)0x2000FFF0) = 0xDEADBEEF; // 64KB STM32F103, also works with 512k STM32F103VCT6&lt;br /&gt;
NVIC_GernerateSystemReset();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== app.c ohne fwlib/HAL =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define 	AIRCR_VECTKEY_MASK   ((uint32_t)0x05FA0000)&lt;br /&gt;
&lt;br /&gt;
*((unsigned long *)0x2000FFF0) = 0xDEADBEEF; // 64KB STM32F103, also works with 512k STM32F103VCT6&lt;br /&gt;
SCB-&amp;gt;AIRCR = AIRCR_VECTKEY_MASK | (u32)0x04;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
&lt;br /&gt;
Der folgende Code-Ausschnitt zeigt die ISR des USART1 eines STM32F103. Der Code sammelt alle empfangenen Bytes und zählt mit. Sobald 32bytes oder ein &#039;\r&#039; empfangen wurden, wird der String verglichen. Ist dieser &amp;quot;GBL\r&amp;quot;, springt er in den Bootloader.&lt;br /&gt;
&lt;br /&gt;
Auf dem Programmier-Computer läuft ein kurzes Python-Script, welches &amp;quot;GBL\r&amp;quot; sendet und danach wird direkt das Flash-Update-Tool wie stm32flash aufgerufen. So entfällt jegliches Bedienen am Gerät.&lt;br /&gt;
&lt;br /&gt;
Das Python-Script heisst gbl.py, danach der Aufruf zum flashen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;$ ./gbl.py &amp;amp;&amp;amp; stm32flash -b 921600 -w output/main.bin -g 0x0 /dev/ttyUSB0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das Python-Script benötigt das Paket python-serial.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
import serial&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial(&#039;/dev/ttyUSB0&#039;, 115200)&lt;br /&gt;
print ser.name&lt;br /&gt;
ser.write(&#039;GBL\r&#039;)&lt;br /&gt;
ser.close&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun der Controller-Teil. Zuerst die ISR, danach die Initialisierung sowie einfache putc/puts Funktionen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void USART1_IRQHandler(void) {&lt;br /&gt;
	char c;&lt;br /&gt;
	&lt;br /&gt;
	static int count = 0;&lt;br /&gt;
	static char rcv[33];&lt;br /&gt;
	&lt;br /&gt;
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {&lt;br /&gt;
		c = (char)USART_ReceiveData(USART1);&lt;br /&gt;
		&lt;br /&gt;
		rcv[count] = c;&lt;br /&gt;
		count++;&lt;br /&gt;
		&lt;br /&gt;
		if((count == 32) || (c == &#039;\r&#039;)) {&lt;br /&gt;
			rcv[count] = &#039;\0&#039;;&lt;br /&gt;
			lcd_con_puts(rcv);&lt;br /&gt;
			&lt;br /&gt;
 			if(!(strcmp(rcv, &amp;quot;GBL\r&amp;quot;))) {		// go to bootloader&lt;br /&gt;
				/* write constant to ram */&lt;br /&gt;
 				*((unsigned long *)0x2000FFF0) = 0xDEADBEEF;&lt;br /&gt;
				&lt;br /&gt;
				/* do a system reset */&lt;br /&gt;
 				SCB-&amp;gt;AIRCR = ((uint32_t)0x05FA0000) | (u32)0x04;				&lt;br /&gt;
 			//} else if(!(strcmp(rcv, &amp;quot;HELP\r&amp;quot;))) {&lt;br /&gt;
  			//	print_help();&lt;br /&gt;
 			} else {&lt;br /&gt;
 				usart1_puts(&amp;quot;?! &amp;lt; no cmd &amp;gt;\n&amp;quot;);&lt;br /&gt;
 			}&lt;br /&gt;
			&lt;br /&gt;
			count = 0;&lt;br /&gt;
			memset(rcv, 0, 33);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//USART_SendData(USART1, c);&lt;br /&gt;
		USART_ClearITPendingBit(USART1, USART_IT_RXNE);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void usart1_init(void) {&lt;br /&gt;
	USART_InitTypeDef       usart_i;&lt;br /&gt;
	GPIO_InitTypeDef        gpio_i;&lt;br /&gt;
&lt;br /&gt;
	GPIO_PinRemapConfig(GPIO_Remap_USART1,DISABLE);&lt;br /&gt;
&lt;br /&gt;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA,   ENABLE);&lt;br /&gt;
&lt;br /&gt;
	/* TX */&lt;br /&gt;
	gpio_i.GPIO_Pin   = GPIO_Pin_9;&lt;br /&gt;
	gpio_i.GPIO_Speed = GPIO_Speed_50MHz;&lt;br /&gt;
	gpio_i.GPIO_Mode  = GPIO_Mode_AF_PP;&lt;br /&gt;
	GPIO_Init(GPIOA, &amp;amp;gpio_i);&lt;br /&gt;
&lt;br /&gt;
	/* RX */&lt;br /&gt;
	gpio_i.GPIO_Pin   = GPIO_Pin_10;&lt;br /&gt;
	gpio_i.GPIO_Speed = GPIO_Speed_50MHz;&lt;br /&gt;
	gpio_i.GPIO_Mode  = GPIO_Mode_IN_FLOATING;&lt;br /&gt;
	GPIO_Init(GPIOA, &amp;amp;gpio_i);&lt;br /&gt;
&lt;br /&gt;
	/* 115200 8n1 */&lt;br /&gt;
	usart_i.USART_BaudRate              = 115200;&lt;br /&gt;
    	usart_i.USART_HardwareFlowControl   = USART_HardwareFlowControl_None;&lt;br /&gt;
    	usart_i.USART_Mode       	    = USART_Mode_Rx | USART_Mode_Tx;&lt;br /&gt;
    	usart_i.USART_Parity		    = USART_Parity_No;&lt;br /&gt;
    	usart_i.USART_StopBits		    = USART_StopBits_1;&lt;br /&gt;
    	usart_i.USART_WordLength            = USART_WordLength_8b;&lt;br /&gt;
&lt;br /&gt;
	USART_Init(USART1, &amp;amp;usart_i);&lt;br /&gt;
&lt;br /&gt;
	/* enable RXNE interrupt */&lt;br /&gt;
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);&lt;br /&gt;
	NVIC_EnableIRQ(USART1_IRQn);&lt;br /&gt;
&lt;br /&gt;
	USART_Cmd(USART1,ENABLE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void usart1_putc(char c){&lt;br /&gt;
	while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);&lt;br /&gt;
	USART_SendData(USART1, c);&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void usart1_puts(char *str){&lt;br /&gt;
	while(*str != 0) {&lt;br /&gt;
		usart1_putc(*(str++));&lt;br /&gt;
	}&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nachteile / Beachten ===&lt;br /&gt;
&lt;br /&gt;
Der Bootloader erwartet einen gewissen Status der Peripherie, was nicht von ST dokumentiert wurde. In meiner jetzigen Applikation habe ich mit dieser Methoder bisher keine Probleme. Andere User im ST-Forum berichten von Problemen beim Anspringen des Bootloaders. Eventuell muss dann noch von Hand Peripherie deinitialisiert werden um die korrekte Funktion zu gewährleisten.&lt;br /&gt;
Siehe ST-Forum-Lunk unter &amp;quot;Quellen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Quellen ===&lt;br /&gt;
* https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2FJump%20to%20internal%20bootloader&amp;amp;FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&amp;amp;currentviews=8841&lt;br /&gt;
&lt;br /&gt;
=== Autor ===&lt;br /&gt;
clive1 - ST-Forum (code)&lt;br /&gt;
&lt;br /&gt;
Nils S. - µC.net (Artikel)&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32_jump_to_bootloader&amp;diff=93332</id>
		<title>STM32 jump to bootloader</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32_jump_to_bootloader&amp;diff=93332"/>
		<updated>2016-06-30T20:07:54Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: Beispiel hinzugefügt (python, stm32loader, usart1_irq)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;STM32 - Jump To Bootloader&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In manchen Anwendungen möchte man keinen Hardwarebutton für ein Firmware-Update haben. Muss man trotzdem ab und zu ein Update einspielen, kann man den Bootloader über eine versteckte UI-Funktion aufrufen oder einen Befehl über die serielle Schnittstelle senden um den Bootloader anzuspringen. &lt;br /&gt;
Die Möglichkeiten sind sehr vielfältig.&lt;br /&gt;
&lt;br /&gt;
Die hier beschriebene Möglichkeit schreibt eine Magic-Konstante in&#039;s RAM. Dieses überlebt einen System-Reset und der veränderte Startup-Code prüft auf diese Konstante. Ist diese vorhanden, wird zum Bootloader gesprungen.&lt;br /&gt;
&lt;br /&gt;
Der Code zum Prüfen und Verzweigen wird kurz vor dem Aufruf der main()-Funktion eingefügt. Kurz dahinter kommt die Subroutine &#039;Reboot_Loader&#039;. Diese setzt einen Pointer auf den Bootloader und hüpft dann dort hin.&lt;br /&gt;
&lt;br /&gt;
===== startup.S =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
        /* Call the clock system intitialization function.*/&lt;br /&gt;
        bl  SystemInit&lt;br /&gt;
  &lt;br /&gt;
        /* check for a magic constant in RAM, if present&lt;br /&gt;
         * brach to bootloader */&lt;br /&gt;
        LDR        R0, =0x2000FFF0&lt;br /&gt;
        LDR        R1, =0xDEADBEEF&lt;br /&gt;
        LDR        R2, [R0, #0]&lt;br /&gt;
        STR        R0, [R0, #0] /* Invalidate*/&lt;br /&gt;
        CMP        R2, R1&lt;br /&gt;
        BEQ        Reboot_Loader&lt;br /&gt;
  &lt;br /&gt;
        /* Call the applications entry point.*/&lt;br /&gt;
	bl	main&lt;br /&gt;
	bx	lr&lt;br /&gt;
.size	Reset_Handler, .-Reset_Handler&lt;br /&gt;
&lt;br /&gt;
Reboot_Loader:&lt;br /&gt;
        LDR        R0, =0x1FFFF000&lt;br /&gt;
        LDR        SP,[R0, #0]&lt;br /&gt;
        LDR        R0,[R0, #4]&lt;br /&gt;
        BX         R0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== app.c =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
*((unsigned long *)0x2000FFF0) = 0xDEADBEEF; // 64KB STM32F103, also works with 512k STM32F103VCT6&lt;br /&gt;
NVIC_GernerateSystemReset();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== app.c ohne fwlib/HAL =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define 	AIRCR_VECTKEY_MASK   ((uint32_t)0x05FA0000)&lt;br /&gt;
&lt;br /&gt;
*((unsigned long *)0x2000FFF0) = 0xDEADBEEF; // 64KB STM32F103, also works with 512k STM32F103VCT6&lt;br /&gt;
SCB-&amp;gt;AIRCR = AIRCR_VECTKEY_MASK | (u32)0x04;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
&lt;br /&gt;
Der folgende Code-Ausschnitt zeigt die ISR des USART1 eines STM32F103. Der Code sammelt alle empfangenen Bytes und zählt mit. Sobald 32bytes oder ein &#039;\r&#039; empfangen wurden, wird der String verglichen. Ist dieser &amp;quot;GBL\r&amp;quot;, springt er in den Bootloader.&lt;br /&gt;
&lt;br /&gt;
Auf dem Programmier-Computer läuft ein kurzes Python-Script, welches &amp;quot;GBL\r&amp;quot; sendet und danach wird direkt das Flash-Update-Tool wie stm32flash aufgerufen. So entfällt jegliches Bedienen am Gerät.&lt;br /&gt;
&lt;br /&gt;
Das Python-Script heisst gbl.py, danach der Aufruf zum flashen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;$ ./gbl.py &amp;amp;&amp;amp; stm32flash -b 921600 -w output/main.bin -g 0x0 /dev/ttyUSB0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das Python-Script benötigt das Paket python-serial.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
import serial&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial(&#039;/dev/ttyUSB0&#039;, 115200)&lt;br /&gt;
print ser.name&lt;br /&gt;
ser.write(&#039;GBL\r&#039;)&lt;br /&gt;
ser.close&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun der Controller-Teil. Zuerst die ISR, danach die Initialisierung sowie einfache putc/puts Funktionen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void USART1_IRQHandler(void) {&lt;br /&gt;
	char c;&lt;br /&gt;
	&lt;br /&gt;
	static int count = 0;&lt;br /&gt;
	static char rcv[33];&lt;br /&gt;
	&lt;br /&gt;
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {&lt;br /&gt;
		c = (char)USART_ReceiveData(USART1);&lt;br /&gt;
		&lt;br /&gt;
		rcv[count] = c;&lt;br /&gt;
		count++;&lt;br /&gt;
		&lt;br /&gt;
		if((count == 32) || (c == &#039;\r&#039;)) {&lt;br /&gt;
			rcv[count] = &#039;\0&#039;;&lt;br /&gt;
			lcd_con_puts(rcv);&lt;br /&gt;
			&lt;br /&gt;
 			if(!(strcmp(rcv, &amp;quot;GBL\r&amp;quot;))) {		// go to bootloader&lt;br /&gt;
				/* write constant to ram */&lt;br /&gt;
 				*((unsigned long *)0x2000FFF0) = 0xDEADBEEF;&lt;br /&gt;
				&lt;br /&gt;
				/* do a system reset */&lt;br /&gt;
 				SCB-&amp;gt;AIRCR = ((uint32_t)0x05FA0000) | (u32)0x04;				&lt;br /&gt;
 			//} else if(!(strcmp(rcv, &amp;quot;HELP\r&amp;quot;))) {&lt;br /&gt;
  			//	print_help();&lt;br /&gt;
 			} else {&lt;br /&gt;
 				lcd_con_puts(&amp;quot;?! &amp;lt; no cmd &amp;gt;\n&amp;quot;);&lt;br /&gt;
 			}&lt;br /&gt;
			&lt;br /&gt;
			count = 0;&lt;br /&gt;
			memset(rcv, 0, 33);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//USART_SendData(USART1, c);&lt;br /&gt;
		USART_ClearITPendingBit(USART1, USART_IT_RXNE);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void usart1_init(void) {&lt;br /&gt;
	USART_InitTypeDef       usart_i;&lt;br /&gt;
	GPIO_InitTypeDef        gpio_i;&lt;br /&gt;
&lt;br /&gt;
	GPIO_PinRemapConfig(GPIO_Remap_USART1,DISABLE);&lt;br /&gt;
&lt;br /&gt;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA,   ENABLE);&lt;br /&gt;
&lt;br /&gt;
	/* TX */&lt;br /&gt;
	gpio_i.GPIO_Pin   = GPIO_Pin_9;&lt;br /&gt;
	gpio_i.GPIO_Speed = GPIO_Speed_50MHz;&lt;br /&gt;
	gpio_i.GPIO_Mode  = GPIO_Mode_AF_PP;&lt;br /&gt;
	GPIO_Init(GPIOA, &amp;amp;gpio_i);&lt;br /&gt;
&lt;br /&gt;
	/* RX */&lt;br /&gt;
	gpio_i.GPIO_Pin   = GPIO_Pin_10;&lt;br /&gt;
	gpio_i.GPIO_Speed = GPIO_Speed_50MHz;&lt;br /&gt;
	gpio_i.GPIO_Mode  = GPIO_Mode_IN_FLOATING;&lt;br /&gt;
	GPIO_Init(GPIOA, &amp;amp;gpio_i);&lt;br /&gt;
&lt;br /&gt;
	/* 115200 8n1 */&lt;br /&gt;
	usart_i.USART_BaudRate              = 115200;&lt;br /&gt;
    	usart_i.USART_HardwareFlowControl   = USART_HardwareFlowControl_None;&lt;br /&gt;
    	usart_i.USART_Mode       	    = USART_Mode_Rx | USART_Mode_Tx;&lt;br /&gt;
    	usart_i.USART_Parity		    = USART_Parity_No;&lt;br /&gt;
    	usart_i.USART_StopBits		    = USART_StopBits_1;&lt;br /&gt;
    	usart_i.USART_WordLength            = USART_WordLength_8b;&lt;br /&gt;
&lt;br /&gt;
	USART_Init(USART1, &amp;amp;usart_i);&lt;br /&gt;
&lt;br /&gt;
	/* enable RXNE interrupt */&lt;br /&gt;
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);&lt;br /&gt;
	NVIC_EnableIRQ(USART1_IRQn);&lt;br /&gt;
&lt;br /&gt;
	USART_Cmd(USART1,ENABLE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void usart1_putc(char c){&lt;br /&gt;
	while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);&lt;br /&gt;
	USART_SendData(USART1, c);&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void usart1_puts(char *str){&lt;br /&gt;
	while(*str != 0) {&lt;br /&gt;
		usart1_putc(*(str++));&lt;br /&gt;
	}&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Nachteile / Beachten ===&lt;br /&gt;
&lt;br /&gt;
Der Bootloader erwartet einen gewissen Status der Peripherie, was nicht von ST dokumentiert wurde. In meiner jetzigen Applikation habe ich mit dieser Methoder bisher keine Probleme. Andere User im ST-Forum berichten von Problemen beim Anspringen des Bootloaders. Eventuell muss dann noch von Hand Peripherie deinitialisiert werden um die korrekte Funktion zu gewährleisten.&lt;br /&gt;
Siehe ST-Forum-Lunk unter &amp;quot;Quellen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Quellen ===&lt;br /&gt;
* https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2FJump%20to%20internal%20bootloader&amp;amp;FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&amp;amp;currentviews=8841&lt;br /&gt;
&lt;br /&gt;
=== Autor ===&lt;br /&gt;
clive1 - ST-Forum (code)&lt;br /&gt;
&lt;br /&gt;
Nils S. - µC.net (Artikel)&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32_jump_to_bootloader&amp;diff=93311</id>
		<title>STM32 jump to bootloader</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32_jump_to_bootloader&amp;diff=93311"/>
		<updated>2016-06-30T08:53:07Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: Die Seite wurde neu angelegt: „&amp;#039;&amp;#039;&amp;#039;STM32 - Jump To Bootloader&amp;#039;&amp;#039;&amp;#039;  In manchen Anwendungen möchte man keinen Hardwarebutton für ein Firmware-Update haben. Muss man trotzdem ab und zu ein Upda…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;STM32 - Jump To Bootloader&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In manchen Anwendungen möchte man keinen Hardwarebutton für ein Firmware-Update haben. Muss man trotzdem ab und zu ein Update einspielen, kann man den Bootloader über eine versteckte UI-Funktion aufrufen oder einen Befehl über die serielle Schnittstelle senden um den Bootloader anzuspringen. &lt;br /&gt;
Die Möglichkeiten sind sehr vielfältig.&lt;br /&gt;
&lt;br /&gt;
Die hier beschriebene Möglichkeit schreibt eine Magic-Konstante in&#039;s RAM. Dieses überlebt einen System-Reset und der veränderte Startup-Code prüft auf diese Konstante. Ist diese vorhanden, wird zum Bootloader gesprungen.&lt;br /&gt;
&lt;br /&gt;
Der Code zum Prüfen und Verzweigen wird kurz vor dem Aufruf der main()-Funktion eingefügt. Kurz dahinter kommt die Subroutine &#039;Reboot_Loader&#039;. Diese setzt einen Pointer auf den Bootloader und hüpft dann dort hin.&lt;br /&gt;
&lt;br /&gt;
===== startup.S =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
        /* Call the clock system intitialization function.*/&lt;br /&gt;
        bl  SystemInit&lt;br /&gt;
  &lt;br /&gt;
        /* check for a magic constant in RAM, if present&lt;br /&gt;
         * brach to bootloader */&lt;br /&gt;
        LDR        R0, =0x2000FFF0&lt;br /&gt;
        LDR        R1, =0xDEADBEEF&lt;br /&gt;
        LDR        R2, [R0, #0]&lt;br /&gt;
        STR        R0, [R0, #0] /* Invalidate*/&lt;br /&gt;
        CMP        R2, R1&lt;br /&gt;
        BEQ        Reboot_Loader&lt;br /&gt;
  &lt;br /&gt;
        /* Call the applications entry point.*/&lt;br /&gt;
	bl	main&lt;br /&gt;
	bx	lr&lt;br /&gt;
.size	Reset_Handler, .-Reset_Handler&lt;br /&gt;
&lt;br /&gt;
Reboot_Loader:&lt;br /&gt;
        LDR        R0, =0x1FFFF000&lt;br /&gt;
        LDR        SP,[R0, #0]&lt;br /&gt;
        LDR        R0,[R0, #4]&lt;br /&gt;
        BX         R0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== app.c =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
*((unsigned long *)0x2000FFF0) = 0xDEADBEEF; // 64KB STM32F103, also works with 512k STM32F103VCT6&lt;br /&gt;
NVIC_GernerateSystemReset();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== app.c ohne fwlib/HAL =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define 	AIRCR_VECTKEY_MASK   ((uint32_t)0x05FA0000)&lt;br /&gt;
&lt;br /&gt;
*((unsigned long *)0x2000FFF0) = 0xDEADBEEF; // 64KB STM32F103, also works with 512k STM32F103VCT6&lt;br /&gt;
SCB-&amp;gt;AIRCR = AIRCR_VECTKEY_MASK | (u32)0x04;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Nachteile / Beachten ===&lt;br /&gt;
&lt;br /&gt;
Der Bootloader erwartet einen gewissen Status der Peripherie, was nicht von ST dokumentiert wurde. In meiner jetzigen Applikation habe ich mit dieser Methoder bisher keine Probleme. Andere User im ST-Forum berichten von Problemen beim Anspringen des Bootloaders. Eventuell muss dann noch von Hand Peripherie deinitialisiert werden um die korrekte Funktion zu gewährleisten.&lt;br /&gt;
Siehe ST-Forum-Lunk unter &amp;quot;Quellen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Quellen ===&lt;br /&gt;
* https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2FJump%20to%20internal%20bootloader&amp;amp;FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&amp;amp;currentviews=8841&lt;br /&gt;
&lt;br /&gt;
=== Autor ===&lt;br /&gt;
clive1 - ST-Forum (code)&lt;br /&gt;
&lt;br /&gt;
Nils S. - µC.net (Artikel)&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer_Diskussion:Bohnsorg&amp;diff=92158</id>
		<title>Benutzer Diskussion:Bohnsorg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer_Diskussion:Bohnsorg&amp;diff=92158"/>
		<updated>2016-03-01T13:06:56Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: Die Seite wurde neu angelegt: „Anarchie stinkt, bzw die Leute, die sich das auf die Jacke heften. Ich kann da mitreden, habe lange in Besetzungen gelebt. Genau diese Leute waren der Grund da…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Anarchie stinkt, bzw die Leute, die sich das auf die Jacke heften. Ich kann da mitreden, habe lange in Besetzungen gelebt. Genau diese Leute waren der Grund das zu beenden.&lt;br /&gt;
&lt;br /&gt;
Was ich dir aber eigentlich sagen will, ich finde das mit dem Wissen verdient haben sehr gut und versuche gleich mir das mal einzuprägen :)&lt;br /&gt;
--- Nils&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=TV-out&amp;diff=89957</id>
		<title>TV-out</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=TV-out&amp;diff=89957"/>
		<updated>2015-10-14T12:07:05Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: /* Cinchbuchse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bei &#039;&#039;&#039;TV-Out&#039;&#039;&#039; soll es darum gehen, wie man mit einem [[Mikrocontroller]] ein Bild auf einem Fernseher erzeugen kann.&lt;br /&gt;
&lt;br /&gt;
== Anschluss ==&lt;br /&gt;
Ein Fernseher hat oft mehrere Eingänge, die wichtigsten sind der Scartanschluss, die Cinchbuchse (&amp;quot;FBAS&amp;quot;), die Hosidenbuchse (&amp;quot;S-Video&amp;quot;) und der Antenneneingang.  &lt;br /&gt;
&lt;br /&gt;
=== Scart ===&lt;br /&gt;
Am [http://www.darc.de/distrikte/y/00/html/tools/scart.htm Scartanschluss] sind ggf. der FBAS-Eingang, ein S-Video-Eingang, oder auch der RGB-Eingang zu finden; bei Videorecordern ist der RGB-Eingang allerdings nur sehr selten belegt.&lt;br /&gt;
&lt;br /&gt;
=== Cinchbuchse ===&lt;br /&gt;
Eine meist gelbe Buchse, an der ebenfalls das [http://www.erft.de/schulen/gymlech/indrevo/indu31/fbas.htm FBAS]-Signal angeschlossen werden kann. Die beiden anderen Buchsen sind für Ton zuständig: Rot für den rechten, Weiss/Schwarz für den linken Kanal.&lt;br /&gt;
&lt;br /&gt;
=== Hosidenbuchse ===&lt;br /&gt;
An der vierpoligen Hosidenbuchse werden Helligkeit und Farbe getrennt übertragen.&lt;br /&gt;
&lt;br /&gt;
=== Antenneneingang ===&lt;br /&gt;
Damit man viele Sender über ein einziges Kabel übertragen kann, werden diese auf verschiedene Frequenzen moduliert. Das will man aber nicht selbst machen. Wer diesen Eingang benutzen will oder muss, der sollte einen fertigen HF-Modulator benutzen. Im Prinzip ist das ein &amp;quot;Mini-Fernsehsender&amp;quot;, der in der Regel in einem bestimmten Bereich auf einen Kanal eigener Wahl eingestellt werden kann (z.&amp;amp;nbsp;B. 39..42). Man findet solche Modulatoren in Katalogen in der Nähe von Kameramodulen (z.&amp;amp;nbsp;B. als &amp;quot;UHF-Modulator&amp;quot;) ab etwa 10 EUR.&lt;br /&gt;
&lt;br /&gt;
Wer sich diese 10 EUR sparen will, kann auch versuchen, den Modulator in einem alten Videorekorder zu lokalisieren und auszubauen. Das ist meist gar nicht so schwer, denn da es sich um ein HF-erzeugendes Teil handelt, ist es zur Abschirmung oft in einem &amp;quot;silbernen Kästchen&amp;quot; mit etwa der Größe von ein bis zwei Streichholzschachteln irgendwo in der Nähe der Buchse verbaut, an der der Videorekorder normalerweise mit dem TV-Gerät verbunden wird. Bitte nicht verwechseln mit der Buchse, über die der Videorekorder sein Signal von der (Haus-) Antenne erhält, möglicherweise sitzt dort auch ein abgeschirmtes Kästchen, das wäre dann aber der für TV-Empfang zuständige Tuner. Natürlich muss man dann noch herausfinden, woher der Modulator sein TV-Signal bekommt, welche Versorgungsspannung(en) er braucht, und wenn die Abstimmung auf einen bestimmten Kanal nicht via Poti oder einem anderen, &amp;quot;offensichtlichen&amp;quot; Einsteller erfolgt, muss man auch noch herausfinden, wie dies zu bewerkstelligen ist ... (also vielleicht doch lieber im Katalog nachsehen?)&lt;br /&gt;
&lt;br /&gt;
== Fernsehnormen ==&lt;br /&gt;
Die wichtigsten Fernsehnormen sind PAL, NTSC und SECAM. In Europa wird hauptsächlich PAL verwendet, mit Ausnahme von Frankreich und Osteuropa, wo SECAM zum Einsatz kommt. In den USA wird NTSC verwendet. Wenn man auf einem PAL-Fernseher ein NTSC-Bild darstellt, dann ist das Bild etwas kleiner und schwarz-weiß.&lt;br /&gt;
&lt;br /&gt;
== Bilderzeugung ==&lt;br /&gt;
Das Bildsignal wird (F)BAS (Farb-Bild-Austast- und Synchronsignal) genannt (englisch: CVBS) und enthält nicht nur das eigentliche Bild, sondern auch Steuerinformationen.&lt;br /&gt;
&lt;br /&gt;
Beim klassischen Röhrenfernseher wird das Bild durch einen Elektronenstrahl erzeugt. Das Bild wird zeilenweise von oben nach unten aufgebaut, die einzelnen Zeilen werden von links nach rechts dargestellt. Wenn der Strahl am Ende einer Zeile angekommen ist, dann muss er für die nächste Zeile wieder an den linken Rand. Diesen Vorgang nennt man den horizontalen Strahlrücklauf; in dieser Zeit ist kein Bild zu sehen. Nach der letzten Zeile muss der Strahl wieder nach oben; dies nennt man den vertikalen Strahlrücklauf.&lt;br /&gt;
&lt;br /&gt;
Das PAL-Fernsehbild hat 625 Zeilen, wovon etwa 570 sichtbar sind. Es werden 50 Halbbilder pro Sekunde dargestellt, also insgesamt 25*625=15625 Zeilen pro Sekunde. Eine Zeile dauert demnach 1s/15625Zeilen = 64 µs/Zeile. Davon sind aber nur 52 µs sichtbar, die andere 12 µs werden für den horizontalen Strahlrücklauf benötigt. Der vertikale Strahlrücklauf dauert 1,5 ms (entspricht 25 Zeilen).&lt;br /&gt;
&lt;br /&gt;
Einen guten Überblick geben Datenblätter zu TV-Impulsgeneratoren, wie sie früher von mehreren Herstellern angeboten wurden. Leider sind sie im Web kaum zu finden:&lt;br /&gt;
&lt;br /&gt;
*[http://www.mikrocontroller.net/wikifiles/3/35/S178A.pdf Siemens S178A]&lt;br /&gt;
*[http://www.mikrocontroller.net/wikifiles/b/be/ZNA134.pdf Plessey/Ferranti ZNA134]&lt;br /&gt;
*[http://www.mikrocontroller.net/wikifiles/9/9e/ZNA234E.pdf Plessey/Ferranti ZNA234E]&lt;br /&gt;
*[http://www.mikrocontroller.net/wikifiles/8/82/SAA1101.pdf Philips SAA1101] oder auch SAA1043/1044&lt;br /&gt;
** [http://vss.pl/cq_tv/cq-tv174.pdf Bauvorschlag für einen genlockfähigen PAL-Impulsgenerator mit SAA1101 (ab Seite 31)]&lt;br /&gt;
&lt;br /&gt;
Eine ausführliche Darstellung der Thematik findet sich z.&amp;amp;nbsp;B. bei der [http://web.archive.org/web/*/http://www.avmz.uni-siegen.de/medinfo/download/index.htm Vorlesung Medientechnik II] der Uni Siegen. (Zugriff ist über www.archive.org möglich. Die PDF-Dateien des Vorlesungsskripts (19 MB in 8 Teilen) sind auf dem gleichen Weg erhältlich. Stand 2/2008). &lt;br /&gt;
&lt;br /&gt;
Die Bilderzeugung ist ziemlich rechen- und zeitintensiv, deswegen sollte der Mikrocontroller seine anderen Aufgaben im unsichtbaren Bildbereich erledigen.&lt;br /&gt;
&lt;br /&gt;
=== Schwarzweiß ===&lt;br /&gt;
Bei Schwarzweiß- bzw. Graustufenbildern gibt es keine feste Horizontalauflösung. Wenn man z.&amp;amp;nbsp;B. 4 Million Pixel pro Sekunde erzeugen kann, dann ergibt das eben eine Horizontalauflösung von 4000000/15625 * (52 µs / 64 µs) = 208 Pixel. &lt;br /&gt;
&lt;br /&gt;
Weblinks:&lt;br /&gt;
 &lt;br /&gt;
* [http://www.whizkidzit.com/ozemail/video_s_w.htm Serielles Terminal] von Ingmar Meins (AT90S8535, PAL)&lt;br /&gt;
* [http://jkdesign.de/avrproject/Die%20MAHPONG%20Seite.htm MAHPONG-Spiel] von Marcus Hasenstab (AT90S8515, PAL)&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/37603 TV Bild mit AVR] und [http://www.mikrocontroller.net/topic/53141#413260 AVR) Videogenerator, 40x25 Zeichen, nur 60% CPU Auslastung] von Benedikt K. (Atmega8, PAL)&lt;br /&gt;
* [http://www.serasidis.gr/circuits/AVR_VGA/avr_vga.htm Simple VGA/Video Adapter] von Ibragimov Maxim Rafikovich (Atmega8, Atmega16..., PAL oder VGA)&lt;br /&gt;
* [http://www.rickard.gunee.com/projects/video/pic/howto.php PIC B&amp;amp;W Video] von Richart Gunee. Inkl. PONG und TETRIS Spiel (PIC16C84, PAL)&lt;br /&gt;
* [http://www.dtweed.com/circuitcellar/caj00161.htm#2833 TV Oscilloscope], [http://www.dtweed.com/circuitcellar/caj00150.htm#2670 AVR Video Generator] und [http://instruct1.cit.cornell.edu/courses/ee476/video/index.html Video Generation with Atmel AVR microcontrollers] von Bruce Land.&lt;br /&gt;
* [http://www.ulrichradig.de/home/index.php/avr/videotext AVR Videotext] und [http://www.ulrichradig.de/home/index.php/arm/pal_video ARM PAL Video] von Ulrich Radig.&lt;br /&gt;
* [http://www.cesr.ncsu.edu/agdean/stiglitz/ STIGLitz]: Efficiently Generating Video with an 8 bit MCU using Software Thread Integration (ATmega128, NTSC)&lt;br /&gt;
* [http://benryves.com/projects/tvtext tvText] is a library, that allows you to generate text display on a PAL TV using an ATmega168 running at 20MHz and two resistors to form a 2-bit DAC.&lt;br /&gt;
* [http://code.google.com/p/arduino-tvout/ arduino-tvout] - A composite video output library for AVR/Arduino. Output is NTSC or PAL at a resolution of 128x96 by default.&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/53139 TV VIDEO BILD BAS Frequenzzähler DVM Atmega8 Assembler&lt;br /&gt;
] von Bernhard S.&lt;br /&gt;
&lt;br /&gt;
=== Farbe ===&lt;br /&gt;
&lt;br /&gt;
Es gibt mindestens drei Arten, wie man Farbbilder (RGB-Signale) auf einem TV-Monitor darstellen kann:&lt;br /&gt;
&lt;br /&gt;
==== per RGB-Eingang ====&lt;br /&gt;
&lt;br /&gt;
Der RGB-Eingang am Scart-Eingang ist die einfachste Art. Aber nicht bei jedem Scarteingang ist RGB auch belegt und man kann das Bild nicht mit dem Videorekorder aufzeichnen.&lt;br /&gt;
&lt;br /&gt;
Weblinks:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/54562#421942 Einfache Grafikkarte mit 256x252 und 256 Farben für AVR] von Benedikt K. (Atmega8515 @ 16 MHz, PAL). Es werden die drei RGB-Signale und das Composite Sync Signal erzeugt, d.h. ggf. ist noch ein NTSC/PAL-Encoder notwendig.&lt;br /&gt;
* [http://www.electronicspit.com/video/ PAL/RGB 32x24 Zeichen mit 2x4bit Farben] von Eddy-B (ATMega32 @ 16 MHz, PAL). Auch hier werden 3 RGB-Signale und ein Composite Sync Signal erzeugt.&lt;br /&gt;
* [http://avga.prometheus4.com/ The AVGA project] - open source AVR based color video game development platform for single chip game console.&lt;br /&gt;
&lt;br /&gt;
==== per Hardware-IC ====&lt;br /&gt;
&lt;br /&gt;
Man kann fertige ICs benutzen, die RGB nach FBAS wandeln können, z.&amp;amp;nbsp;B. den AD724, allerdings sind diese ICs meist relativ teuer (20 Euro). &lt;br /&gt;
&lt;br /&gt;
Weblinks:&lt;br /&gt;
&lt;br /&gt;
* [http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects/s2002/carlo/index.html Psychedelic Snake Spiel] von Carlo Soracco und Keith Sinclair. Zur RGB nach NTSC Umwandlung wird der IC [http://www.analog.com/en/prod/0,2877,AD724,00.html AD724 RGB to NTSC/PAL Encoder] von Analog Devices benutzt. (Atmega163, NTSC)&lt;br /&gt;
* The [http://belogic.com/uzebox/ Uzebox] is a retro-minimalist homebrew game console. Functions such as video sync generation, tile rendering and music mixing is done realtime by a background task so games can easily be developed in C. The final design contains only two chips: an ATmega644 and an [http://www.analog.com/en/digital-to-analog-converters/video-encoders/ad725/products/product.html AD725] RGB-to-NTSC(/PAL) converter.&lt;br /&gt;
&lt;br /&gt;
==== per Software ====&lt;br /&gt;
&lt;br /&gt;
Die Erzeugung des gesamten Videosignals per Software ist &#039;&#039;sehr&#039;&#039; zeitkritisch. Will man das vernünftig machen, dann sollte die CPU genügend Leistung haben.&lt;br /&gt;
&lt;br /&gt;
Weblinks:&lt;br /&gt;
&lt;br /&gt;
* [http://www.serasidis.gr/circuits/colour_bar_gen/colour_bar_gen.htm AVR PAL colour bar generator] von Serasidis Vasilis (AT90s2313 , PAL)&lt;br /&gt;
* [http://www.rickard.gunee.com/projects/video/sx/gamesys.php SX Games] von Richart Gunee ([http://www.parallax.com/sx/index.asp SX28], PAL). Hier gibt es auch viele weiterführende Links!&lt;br /&gt;
* [http://www.linusakesson.net/scene/phasor/index.php Phasor], like [http://www.linusakesson.net/scene/craft/index.php Craft], is a demo running on a custom minimalistic ATmega88-based demo platform. But it generates a composite video signal (PAL) instead of a VGA signal.&lt;br /&gt;
* [[PAL Testbildgenerator]] Ein ATMega32 mit 16MHz erzeugt ein statisches Testbild&lt;br /&gt;
* [http://homepages.ihug.com.au/~daz2002/tech/TP/index.html PM5544-Generator] mit ATmega88&lt;br /&gt;
&lt;br /&gt;
==== per CPLD ====&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit besteht darin, das FBAS-Signal mittels eines preiswerten programmierbaren Logikchips (CPLD) zu erzeugen. Da der Farbträger mittels DDS aus dem Systemtakt gewonnen wird, ist zur Vermeidung von Interferenzstörungen eine Tiefpassfilterung der erzeugten Signale notwendig.&lt;br /&gt;
&lt;br /&gt;
Weblinks:&lt;br /&gt;
&lt;br /&gt;
* [http://www.jcwolfram.de/projekte/vhdl/fbas_enc/main.php FBAS-Encoder]&lt;br /&gt;
&lt;br /&gt;
==== per OnScreenDisplay IC ====&lt;br /&gt;
&lt;br /&gt;
Alternativ kann man einen OSD IC benutzen. Diese verfügen meist über einen integrierten Zeichensatz, den man teilweise auch ändern kann. Meist sind diese S/W, einige Exoten sind mit Farbe, dafür dann meistens ohne eigenen Zeichensatz. Diese findet man meist in alten TVs oder Videorecordern.&lt;br /&gt;
&lt;br /&gt;
* [http://www.maxim-ic.com/quick_view2.cfm/qv_pk/5516 Single-Channel Monochrome On-Screen Display with Integrated EEPROM MAX7456]&lt;br /&gt;
* [http://www.grautier.com/grautier/index.php?/archives/48-Eagle-LIBs.html Eagle lib MAX7456]&lt;br /&gt;
* [http://www.grautier.com/grautier/index.php?/archives/60-C2OSD-V1.0.html MAX7456 Schaltung + PIC16F ASM Beispiel]&lt;br /&gt;
* [http://www.mcselec.com/index2.php?option=com_forum&amp;amp;Itemid=59&amp;amp;page=viewtopic&amp;amp;t=5624&amp;amp;highlight=max7456 AVR Bascom beispiel]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Video]]&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer_Diskussion:Ingo_w&amp;diff=83588</id>
		<title>Benutzer Diskussion:Ingo w</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer_Diskussion:Ingo_w&amp;diff=83588"/>
		<updated>2014-07-12T18:20:01Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: Die Seite wurde neu angelegt: „r?“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;r?&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_Net-IO_Bausatz_von_Pollin&amp;diff=62337</id>
		<title>AVR Net-IO Bausatz von Pollin</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_Net-IO_Bausatz_von_Pollin&amp;diff=62337"/>
		<updated>2011-12-12T00:29:37Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: /* Simon Ks Webserver (uip-Stack) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier steht eine Beschreibung des Pollin Bausatzes [http://www.pollin.de/shop/shop.php?cf=detail.php&amp;amp;pg=NQ==&amp;amp;a=MTQ5OTgxOTk= AVR-NET-IO. Best.Nr. 810 058], oder als aufgebautes Fertigmodul, Best.Nr. 810 073. &lt;br /&gt;
&lt;br /&gt;
Einige Features: Ethernet-Platine mit ATmega32 und Netzwerkcontroller ENC28J60. Die Platine verfügt über 8 digitale Ausgänge, 4 digitale und 4 ADC-Eingänge, welche alle über einen Netzwerkanschluss (TCP/IP) abgerufen bzw. geschaltet werden können.&lt;br /&gt;
&lt;br /&gt;
[[Datei:AVR-NET-IO ADD-ON.JPG|thumb|right|400px|AVR-NET-IO (links) mit zusätzlicher SUB-D Anschlussplatine (rechts, nicht im Lieferumfang)und Add-On-Board (oben, mit aufgelötetem RFM12-433-Modul, beides nicht im Lieferumfang). Ebenso ist zusätzlich ein nicht im Lieferumfang enthaltener kleiner Kühlkörper auf einem der Spannungsregler montiert und die Schraubklemmen zur Stromversorgung wurden durch Buchsen ersetzt.]]&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
&lt;br /&gt;
* Betriebsspannung 9 V AC/DC&lt;br /&gt;
* Stromaufnahme ca. 190 mA&lt;br /&gt;
* 8 digitale Ausgänge (0/5 V) [PC0-PC7 an J3]&lt;br /&gt;
* 4 digitale Eingänge (0/5 V) [PA0-PA3 an J3]&lt;br /&gt;
* 4 ADC-Eingänge (10 Bit) [PA4-PA7 an Schraubklemmen]&lt;br /&gt;
* LCD-Anschluss (HD44780 komp. Controller nötig) [PD2-7,PB0,PB3 an EXT]&lt;br /&gt;
* [[ENC28J60]]&lt;br /&gt;
* [http://www.atmel.com/dyn/Products/Product_card.asp?part_id=2014 ATmega32] Mikrocontroller&lt;br /&gt;
&lt;br /&gt;
Maße (L×B×H): 108×76×22 mm.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Die Schaltung des AVR-NET-IO ist recht einfach:&lt;br /&gt;
* Ein ATmega32 Mikrocontroller enthält die gesamte Software&lt;br /&gt;
* Ein ENC28J60 Ethernet-Controller für das Senden und Empfangen von Ethernet Frames (MAC und PHY Ethernet Layer) ist über [[SPI]] mit dem ATmega32 verbunden&lt;br /&gt;
* Ein Ethernet RJ-45 MagJack TRJ 0011 BA NL von [http://www.trxcom.com/ Trxcom] mit eingebautem Übertrager und Anzeige-LEDs am ENC28J60.&lt;br /&gt;
* Ein MAX232 für die serielle Schnittstelle&lt;br /&gt;
* Zwei Spannungsregler, 5 V und 3,3 V&lt;br /&gt;
* &amp;quot;Hühnerfutter&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Fast alle I/O Pins des ATmega32 sind irgendwo auf Anschlüssen herausgeführt. Entweder auf dem SUB-D Stecker, dem EXT oder ISP Wannensteckern oder den blauen Anschlussklemmen. Eine Schutzbeschaltung gibt es nicht.&lt;br /&gt;
&lt;br /&gt;
Die blauen Anschlussklemmen haben eine Nut und eine Feder mit denen man&lt;br /&gt;
sie zusammenstecken kann, dadurch ist das Anlöten wesentlich leichter&lt;br /&gt;
und sie stehen auch sauber in der Reihe.&lt;br /&gt;
&lt;br /&gt;
=== Erweiterungsplatine ===&lt;br /&gt;
&lt;br /&gt;
Seit Januar 2010 gibt es auch eine Erweiterungsplatine &lt;br /&gt;
&lt;br /&gt;
[http://www.pollin.de/shop/dt/Nzg4OTgxOTk-/Bausaetze/Diverse/Bausatz_Add_on_fuer_AVR_NET_IO.html Add-on für AVR-NET-IO-Board Best.Nr. 810 112]&lt;br /&gt;
&lt;br /&gt;
Diese Platine erweitert das NET-IO um:&lt;br /&gt;
&lt;br /&gt;
* SD-Karten-Slot über SPI&lt;br /&gt;
* Display über PCF 8574&lt;br /&gt;
* Infrarot&lt;br /&gt;
* [[RFM12]] Funkmodul (nicht im Lieferumfang enthalten)&lt;br /&gt;
&lt;br /&gt;
Ausserdem soll es die 3.3V Versorgung der Hauptplatine verbessern. Dazu sollte man einen 4,7 kOhm Widerstand parallel zu R2 schalten. Sonst beträgt die Ausgangsspannung nur ca. 2,8V. (Tipp aus dem u.g. Thread im Forum)&lt;br /&gt;
&lt;br /&gt;
Um bei einem Neuaufbau parallele Widerstände zu vermeiden, sollten folgende Änderungen auf dem Addon-Board gemacht werden:&lt;br /&gt;
*R2 1,5kΩ ersetzen mit 2kΩ&lt;br /&gt;
*R3 1,8K ersetzen mit 3,3kΩ&lt;br /&gt;
*R19 470kΩ ersetzen zu 470Ω&lt;br /&gt;
*Q1 BC548 ersetzen durch BC327 oder BC328 (Hauptsache PNP! und mehr als 100mA)&lt;br /&gt;
&lt;br /&gt;
Stand Feb. 2011: R2 wird mit 2,2kΩ und R3 wird mit 3,6kΩ ausgeliefert. Somit werden die 3,3 V richtig erzeugt. R19 hat 470Ω.&lt;br /&gt;
Der ISP-Anschluß ist nicht vollständig durchgeschleift, es besteht keine Verbindung der RESET-Leitung zwischen ISP und ISP1 (Abhilfe: Drahtbrücke einlöten, [http://www.mikrocontroller.net/topic/161354#1600385 Quelle]). &lt;br /&gt;
&lt;br /&gt;
Stand Nov. 2011: bei mir ist die RESET-Leitung korrekt zw. ISP und ISP1 verbunden. Es gibt jetzt auch einen R24 (470Ohm) und R11 (1KOhm), der in der bei mir mitgelieferten Bauanleitung fehlt, in der zum Download (V1.1) angebotenen  aber drin steht.&lt;br /&gt;
Es wird immer noch der falsche Q1 BC548C (NPN) mitgeliefert. Das Schaltsymbol für einen PNP ist richtig im Schaltplan gezeichnet.&lt;br /&gt;
&lt;br /&gt;
Erste Erfahrungsberichte im Forum http://www.mikrocontroller.net/topic/161354&lt;br /&gt;
&lt;br /&gt;
=== Hardware-Umbauten &amp;amp; -Verbesserungen ===&lt;br /&gt;
&lt;br /&gt;
* Kühlkörper auf dem 7805&lt;br /&gt;
* MAX232 nach anfänglicher Konfiguration nicht bestücken um Strom zu sparen oder um zwei weitere I/O-Pins zu gewinnen&lt;br /&gt;
* 10µF-Elkos für MAX232N (C14-C17) durch 1µF ersetzen. Eine 10µF-Version für den MAX232 gibt es nicht. Die 10µF-Elkos können auch Ursache einer nicht funktionierenden RS232 sein.&lt;br /&gt;
** Laut Spezifikation sind auch mehr als 1µF erlaubt. Selbst Atmel verwendet beim STK500 10µF. Dies führt keinesfalls dazu, dass die RS232 nicht mehr funktioniert.&lt;br /&gt;
* Die IC-Fassungen aus &amp;quot;Pollins Resterampe&amp;quot; durch Fassungen mit gedrehten Kontakten ersetzen. &lt;br /&gt;
* &#039;&#039;Netz&#039;&#039; LED nicht bestücken oder größere Widerstände einlöten um Strom zu sparen (R3)&lt;br /&gt;
* Vorwiderstände der Ethernet-LEDs größer machen (z.&amp;amp;nbsp;B. verdoppeln) um Strom zu sparen (R6,R7)&lt;br /&gt;
* Linear-Spannungsregler ersetzen&lt;br /&gt;
* Kondensator an AREF-Pin des ATmega32 (ATmega32 Datenblatt) (100nF gegen Masse)&lt;br /&gt;
* Kondensator an den RESET-Pin des ATmega32 ([http://www.atmel.com/dyn/resources/prod_documents/doc2521.pdf Atmel Application Note AVR042: AVR Hardware Design Considerations]) Wenn man diese Quelle genauer liest, ist das aber eher unnötig. - Kondensator bei selbstbau-ISP empfehlenswert.&lt;br /&gt;
* Umbau auf 3,3 V:&lt;br /&gt;
** Ersatz der Spannungsregler durch einen einzigen 3,3 V Regler&lt;br /&gt;
** Anpassen (verkleinern) des LED-Vorwiderstands R3 für 3,3 Volt Betrieb&lt;br /&gt;
** Reduktion der Taktfrequenz (Austausch von Q2) auf den bei 3,3V erlaubten Bereich des ATmega32 ( ATmega32(L)  3.3V /8.0 Mhz Takt )&lt;br /&gt;
** Ersatz des MAX232 durch einen MAX3232&lt;br /&gt;
[[Bild:POWER.JPG|thumb|400px|5V Stromversorgung über USB Kabel, ohne 5 V Spannungsregler und Gleichrichterdioden, Vorsicht: kein Verpolungsschutz!  ]]&lt;br /&gt;
* ATmega32 vom ENC28J60 takten (OSC2)&lt;br /&gt;
* Betrieb mit Gleichspannung:&lt;br /&gt;
** Dioden D2 und D5 durch Drahtbrücken ersetzen, D1 und D4 nicht bestücken (komplette Entfernung des Brückengleichrichters, beinhaltet Verlust des Verpolungsschutzes)&lt;br /&gt;
** Diode D2 bestücken, D5 durch Drahtbrücke ersetzen, D1 und D4 nicht bestücken (Brückengleichrichter durch Verpolungsschutze ersetzen)&lt;br /&gt;
*** ??? Ist dies nicht kontraproduktiv? Bei mir wurde durch D2-Bestückung die Eingangsspannung von ca. 5,2 V am LM317T auf ca. 4,6 V gedrückt, so dass am ENC28J60 nur ca. 2,6 V ankamen (außerhalb der lt. Datenblatt &amp;quot;Operating voltage range of 3.14V to 3.45V&amp;quot;). Man müsste also ein geregeltes Netzteil mit ca. 5,5 V anschließen um 5 und 3,3 V zu erzielen. Dann lieber den Verpolungsschutz durch andere Maßnahmen sicherstellen.&lt;br /&gt;
** Beim Betrieb von USB beachten, dass USB-Spezifikation keinesfalls 5V garantiert, sondern Spannung bis runter 4.4V erlaubt und dann u.U. durch den LM317 nicht mehr genügend Spannung am ENC anliegt. Das äußert sich so, dass zwar der Atmega einwandfrei funktioniert, die Ethernet-Kommunikation aber nicht oder nur sehr sporadisch.&lt;br /&gt;
* Ersatz des ATmega32 durch einen ATmega644 mit mehr FLASH-Speicher.&lt;br /&gt;
* 100nF über alle drei IC Störunterdrückung zusätzlich bestücken&lt;br /&gt;
&lt;br /&gt;
== Inbetriebnahme der Originalsoftware ==&lt;br /&gt;
=== Einleitung ===&lt;br /&gt;
&lt;br /&gt;
Die bei Auslieferung (Stand September 2008) in den ATmega32 gebrannte Firmware stellt sich manchmal recht zickig an. Es scheint dann die Netzwerk-Schnittstelle, ggf. auch  die seriell Schnittstelle, nicht zu funktionieren. Falls es Probleme geben sollte, sollte man erst einmal einen Firmwareupdate versuchen. Dies geschieht über die serielle Schnittstelle mittels des Programmes NetServer (aktuelle Version 1.03, Februar 2010), die dem Bausatz beiliegt. &lt;br /&gt;
&lt;br /&gt;
Falls die serielle Schnittstelle ebenfalls nicht zugänglich ist, kann mit den im folgenden beschriebenen Schritten die Inbetriebnahme der Software möglich sein. Dazu benötigt man:&lt;br /&gt;
&lt;br /&gt;
* Einen Windows-PC mit Ethernet-Schnittstelle und RS232-Schnittstelle (ein Prolific RS232-USB Konverter funktioniert)&lt;br /&gt;
* Entweder&lt;br /&gt;
**zwei normale (&#039;&#039;straight through&#039;&#039;) Ethernet-Kabel und einen Ethernet Switch/Hub, oder&lt;br /&gt;
**ein gekreuztes(&#039;&#039;cross over&#039;&#039;) Ethernet-Kabel&lt;br /&gt;
* Einen AVR Programmer (Hardware und Software). Zum Beispiel einen [[AVR Dragon]] oder [[STK500]] mit [[AVR Studio]] oder das [[Pollin ATMEL Evaluations-Board]] und [[avrdude]].&lt;br /&gt;
* Die [http://www.pollin.de/shop/ds/MTQ5OTgxOTk-.html Pollin NetServer Software], Version 1.03 (oder neuer)&lt;br /&gt;
&lt;br /&gt;
=== Gelieferten ATmega32 richtig einstellen ===&lt;br /&gt;
[[image:fuse_bits_avr_studio.jpg|thumb|right|250px|Einstellungen der Fuse-Bits mittels AVR Studio 4]]&lt;br /&gt;
Die Fuses der gelieferten ATmega32s scheinen nicht immer mit den im Handbuch auf Seite 12 als erforderlich angegebenen Fuse-Einstellungen übereinzustimmen.&lt;br /&gt;
&lt;br /&gt;
Dies kann man mittels eines Programmers ändern. LFuse = 0xBF, HFuse = 0xD2. Das genaue Vorgehen hängt dabei vom verwendeten Programmer ab. Bei der Gelegenheit kann man ebenfalls eine Sicherheitskopie des ursprünglichen Flash-Inhalts und des EEPROMs anfertigen. Das EEPROM scheint die MAC-Adresse des Ethernet-Ports zu enthalten.&lt;br /&gt;
&lt;br /&gt;
Entgegen der Spezifikation im Handbuch von Pollin sollten die &#039;&#039;&#039;HFuses auf 0xC2&#039;&#039;&#039; gesetzt werden, d. h. CKOPT-Fuse programmiert (dies ist in der Software Version 1.03 bereits vollzogen). Das sorgt für einen stabilen Betrieb des AVR-Oszillators im &amp;quot;full rail-to-rail swing&amp;quot;-Mode bei 16 MHz. Atmel garantiert ansonsten nur stabilen Betrieb bis 8 MHz. Siehe ATmega32-Datenblatt, Kapitel 8.4, Crystal Oscillator.&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
==== Funktionsfähige Konfiguration - AVR-Prog ====&lt;br /&gt;
&lt;br /&gt;
[[Bild:Avrprog.png|thumb|right|250px]]&lt;br /&gt;
Benutzer von AVR-Prog können die nachfolgenden Einstellungen für die Lock- und Fuse-Bits verwenden. Hierbei handelt es sich um die ausgelesenen Einstellungen eines funktionsfähigen Controllers. Allerdings sollte, laut Handbuch des AVR-NET-IO-Boards, das Fuse-Bit EESAVE eigentlich gesetzt sein. &lt;br /&gt;
&lt;br /&gt;
Alternativ kann auch per avrdude die Einstellung getroffen werden:&lt;br /&gt;
 avrdude -c stk500v2 -pm32 -U lfuse:w:0xBF:m&lt;br /&gt;
und &lt;br /&gt;
 avrdude -c stk500v2 -pm32 -U hfuse:w:0xC2:m&lt;br /&gt;
&lt;br /&gt;
Anschließend muß noch der Bootloader und die Firmware aktualisiert werden (siehe Handbuch AVR-NET-IO-Board Seite 12 Punkt 3).&lt;br /&gt;
&lt;br /&gt;
=== PC Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
==== PC normalerweise nicht im 192.168.0.0/24 Subnetz ====&lt;br /&gt;
&lt;br /&gt;
Betreibt man den PC nicht im 192.168.0.0/24 Subnetz, muss er wie folgt umkonfiguriert werden, oder die IP Adresse des Boards wird entsprechend angepasst. ( Siehe Handbuch Seite 14ff. Das ist meist sinnvoller und auch einfacher. ) &lt;br /&gt;
&lt;br /&gt;
Den PC vom normalen Netzwerk abstecken[1]. Zur Umkonfiguration dazu bei Windows XP in der Systemsteuerung &#039;&#039;Netzwerkverbindungen&#039;&#039; aufrufen und die lokale &#039;&#039;LAN-Verbindung&#039;&#039; markieren. Dann in der rechten Leiste &#039;&#039;Einstellungen dieser Verbindung ändern&#039;&#039; aufrufen. &lt;br /&gt;
&lt;br /&gt;
Es erscheint der Dialog &#039;&#039;Eigenschaften von &amp;lt;Verbindungsname&amp;gt;&#039;&#039;. In der Liste im Dialog zu &#039;&#039;Internetprotokoll (TCP/IP)&#039;&#039; gehen. Ein Doppelklick auf den Eintrag öffnet den &#039;&#039;Eigenschaften von Internetprotokoll (TCP/IP)&#039;&#039; Dialog.&lt;br /&gt;
&lt;br /&gt;
In diesem Dialog &#039;&#039;Folgende IP-Adresse verwenden:&#039;&#039; auswählen und zum Beispiel&lt;br /&gt;
&lt;br /&gt;
IP-Adresse: &#039;&#039;&#039;192.168.0.100&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Subnetzmaske: &#039;&#039;&#039;255.255.255.0&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Standardgateway: &#039;&#039;&#039;192.168.0.1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
eingeben. &lt;br /&gt;
&lt;br /&gt;
Anmerkung von bitman:&lt;br /&gt;
[1] Dies ist spätestens ab Windows XP nicht mehr notwendig, wenn das Netz 192.168.0.0/24 noch frei ist. Dann kann man einfach den Client &#039;&#039;zusätzlich&#039;&#039; in diesem Netzwerk zusätzlich einbinden über Einstellungen/Netzwerkverbindungen/Lanverbindung/Eigenschaften/TCP-IP/Eigenschaften/Erweitert/IP-Adresse hinzufügen. Es werden dann eben mehrere IP-Adressen an den NIC gebunden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alle geöffneten Dialoge nacheinander mit OK schließen.&lt;br /&gt;
&lt;br /&gt;
Alternativ bietet sich das Umprogrammieren des Boards über die serielle Schnittstelle an. Die Werte für IP-Adresse, Netzmaske und Standard-Gateway werden mit den dokumentierten SETxx-Befehlen geändert, das Board neu gestartet und ans vorhandene Netzwerk gesteckt.&lt;br /&gt;
&lt;br /&gt;
Im EEPROM sind folgende Werte vorprogrammiert:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
3EE - 3F3 MAC-ADRESSE&amp;lt;br&amp;gt;&lt;br /&gt;
3F4 - 3F7 GATEWAY&amp;lt;br&amp;gt;&lt;br /&gt;
3F8 - 3FC NETMASK&amp;lt;br&amp;gt;&lt;br /&gt;
3FD - 3FF IP-ADRESSE&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== PC bereits im 192.168.0.0/24 Subnetz ====&lt;br /&gt;
&lt;br /&gt;
In diesem Fall muss man prüfen, ob die IP-Adresse 192.168.0.90 bereits im Subnetz verwendet wird. Ist dies der Fall, muss das verwendete Gerät mit dieser IP vorübergehend aus dem Subnetz entfernt werden. Es sei denn, dabei handelt es sich um den PC. In diesem Fall muss er wie zuvor umkonfiguriert werden. Ansonsten kann der unverändert im Netz verbleiben.&lt;br /&gt;
&lt;br /&gt;
Dem AVR-NET-IO gibt man eine neue, zuvor unbenutzte Adresse (siehe unten). Dann kann das abgekoppelte Gerät wieder angeschlossen werden, beziehungsweise der PC zurückkonfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
=== AVR-NET-IO anschließen ===&lt;br /&gt;
&lt;br /&gt;
Musste man den PC umkonfigurieren, so werden jetzt nur der PC und der AVR-NET-IO über Ethernet miteinander verbunden. Je nach Ethernet-Kabel benötigt man dazu einen Switch/Hub oder nicht.&lt;br /&gt;
&lt;br /&gt;
Musste man den PC nicht umkonfigurieren, so kann man den AVR-NET-IO wie einen normalen Rechner an das vorhandenen Netz anschließen.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich schließt man die serielle Schnittstelle des AVR-NET-IO an den PC an.&lt;br /&gt;
&lt;br /&gt;
=== Firmware 1.03 einspielen ===&lt;br /&gt;
&lt;br /&gt;
Laut Handbuch sollte der AVR-NET-IO jetzt über Ethernet funktionieren. Ebenso sollte er über die serielle Schnittstelle und ein Terminalprogramm konfigurierbar sein. Beides ist offensichtlich im Auslieferungszustand selten der Fall.&lt;br /&gt;
&lt;br /&gt;
Auch wenn sich Pollins NetServer Software nicht mit dem AVR-NET-IO verbinden lässt, so ist sie jedoch in der Lage eine neue Firmware 1.03 einzuspielen. Das Vorgehen ist im Handbuch auf Seite 12 beschrieben. NetServer präsentiert dabei ein paar einfache Anweisungen denen man folgen sollte.&lt;br /&gt;
&lt;br /&gt;
Wenn sich nach dem scheinbar erfolgreichem Einspielen der Firmware, später nichts tut, so sollte die Firmware mit gesetztem &amp;quot;FailSafe&amp;quot; in der mitgelieferten NetServer-Software nochmals Eingespielt werden.&lt;br /&gt;
&lt;br /&gt;
=== Abschluss ===&lt;br /&gt;
&lt;br /&gt;
Jetzt sollte sich die NetServer Software mit dem AVR-NET-IO über Ethernet verbinden lassen. Dies macht es wiederum möglich, den AVR-NET-IO mit einer anderen IP-Adresse zu versehen. Will man den AVR-NET-IO in einem anderen Subnetz betreiben kann man dies jetzt einstellen.&lt;br /&gt;
&lt;br /&gt;
Nachdem man die IP-Adresse neu eingestellt hat, muss man den PC zurückkonfigurieren und kann dann sowohl den AVR-NET-IO und den PC zusammen betreiben.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Fehler ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch [[#Hardware-Umbauten_.26_-Verbesserungen|Hardware-Umbauten und Verbesserungen]]&amp;lt;br&amp;gt;&lt;br /&gt;
Käufer berichten von fehlenden Bauteilen im Bausatz (Wannenstecker, Widerstände, Kondensatoren, Induktivitäten). Für Reklamationen: [https://www.pollin.de/shop/kontakt_service/reklamation.html]&lt;br /&gt;
&lt;br /&gt;
* Die Stückliste auf Seite 4 in den Anleitung mit den Versionsangaben&lt;br /&gt;
** &#039;&#039;Stand 20.08.2008, kloiber, #1100, wpe&#039;&#039; (gedruckt im Bausatz)&lt;br /&gt;
** &#039;&#039;Stand 20.08.2008, cd, #all, wpe&#039;&#039; (auf der CD)&lt;br /&gt;
:ist falsch. Pollin legt dem Bausatz irgendwann ab September 2008 einen gedruckten Korrekturzettel bei. Die Online-Version der Anleitung ist korrigiert.&lt;br /&gt;
* Im Schaltplan auf Seite 7 in den Anleitungen mit den Versionen&lt;br /&gt;
** &#039;&#039;Stand 20.08.2008, kloiber, #1100, wpe&#039;&#039; (gedruckt im Bausatz)&lt;br /&gt;
** &#039;&#039;Stand 20.08.2008, cd, #all, wpe&#039;&#039; (auf der CD)&lt;br /&gt;
** &#039;&#039;Stand 03.09.2008, online, #all, wpe&#039;&#039; (Online)&lt;br /&gt;
:ist eine 25-polige SUB-D Buchse gezeichnet. Geliefert wird und in der Stückliste verzeichnet ist ein Stecker.&lt;br /&gt;
&lt;br /&gt;
* Die September 2008 ausgelieferte Firmware im ATmega32  funktioniert bei vielen nicht und muss erst upgedatet werden (siehe [[#Inbetriebnahme der Originalsoftware|Inbetriebnahme der Originalsoftware]])&lt;br /&gt;
&lt;br /&gt;
* Im Flash der gelieferten AVR ist anders als beschrieben nur der Bootloader enthalten, die eigentliche Firmware muss erst mit Hilfe der Updatefunktion geladen werden. Wenn zusätzlich auch die Fuses falsch gebrannt sind, dann funktioniert das Update nicht, auch wenn das PC Programm was anderes behauptet.&lt;br /&gt;
&lt;br /&gt;
* Die Fuse-Einstellungen des ausgelieferten ATmega32 entspricht nicht der Anleitung (siehe [[#Inbetriebnahme der Originalsoftware|Inbetriebnahme der Originalsoftware]])&lt;br /&gt;
&lt;br /&gt;
* Bausatz, gekauft am 27.10.08, Anleitungsversion 19.09.08, ohne Probleme oder erkennbare Fehler zusammengebaut und in Betrieb genommen.&lt;br /&gt;
&lt;br /&gt;
* Bausatz gekauft 29.09.2008, Pinbelegung des 25 poligen D-Sub &amp;quot;Anschlusses&amp;quot; stimmt nicht mit der Anleitung überein. Der Aufdruck auf der Platine ist falsch. Pin1 &amp;lt;-&amp;gt; Pin13, Pin2 &amp;lt;-&amp;gt; Pin12 usw. Setzt man den D-Sub Stecker ein, so sind dessen Pinnummern korrekt. Bei einem Bausatz gekauft 10/2010 ist dies ebenfalls noch der Fall.&lt;br /&gt;
&lt;br /&gt;
* 3 Bausätze Anf. Oktober 2008 gekauft, bei einem waren 2 LM317 dabei, dafür fehlte der 7805 - aus der Bastelkiste ersetzt. Alle haben jedoch auf Anhieb funktioniert&lt;br /&gt;
&lt;br /&gt;
* Bausatz gekauft Ende Januar 2009. Die Lock-Bits (u.a. für PonyProg2000) werden falsch beschrieben. Die in Klammern aufgeführten Werte stimmen bei einem Bit nicht. Die Texte &amp;quot;Programmiert/Unprogrammiert&amp;quot; hingegen schon. Bei den Bauteilen gab es 4 Kondensatoren mit der Aufschrift &amp;quot;220&amp;quot;, ich habe diese durch welche mit 22p ersetzt, da ich nicht sicher war ob wirklich 22p geliefert wurden. Dafür wurden statt einem zwei 7805 und statt einem mindestens vier LM317 mitgeliefert.&lt;br /&gt;
&lt;br /&gt;
* Bausatz geliefert 22.4.2009. Alles vollständig, zusammengebaut, läuft. Software-Version 1.03. Für den oben schon genannten Steckverbinder wurde eine Buchse geliefert. Allerdings stimmen die PIN-Nummern im Schaltplan nicht mit den PIN-Nummern auf der Buchse überein (sie sind gespiegelt), daher liefen die Test-LEDs zunächst nicht.&lt;br /&gt;
&lt;br /&gt;
* Bausatz geliefert 11.7.2009. Spannungsregler LM317T fehlt, grüne statt roter LED. Ein Kondensator 22pF zu viel. LM317T wurde auf Anfrage kostenlos nachgeliefert (27.7.). Inbetriebnahme problemlos.&lt;br /&gt;
&lt;br /&gt;
* Bausatz geliefert 24.7.2009. Ein Quarz 16MHz zu viel, ebenfalls grüne statt rote LED.&lt;br /&gt;
&lt;br /&gt;
* Bausatz geliefert 20.08.2009. Ein Kondensator 22pF zuviel und grüne statt rote LED.&lt;br /&gt;
&lt;br /&gt;
* Bausatz Juli &#039;09 gekauft, grüne statt rote LED&lt;br /&gt;
&lt;br /&gt;
* Bausatz 25.09.09 geliefert, grüne Betriebs-LED, ein ELKO zuviel, Fehler 1µF am MAX232 statt 100nF behoben, richtiger C wird mitgeliefert, Aufbau komplett nach Pollin Anleitung durchgeführt, auf Anhieb fehlerfrei!&lt;br /&gt;
&lt;br /&gt;
* Bausatz 17.10.09 geliefert, grüne Betriebs-LED, zwei 100nF Kondensatoren zu wenig. Aufbau und Inbetriebnahme problemlos.&lt;br /&gt;
&lt;br /&gt;
* Bausatz 21.10.09 gekauft, grüne Betriebs-LED. Aufbau problemlos, RS232 läuft nicht. LAN läuft&lt;br /&gt;
&lt;br /&gt;
* Bausatz Nov. 09 gekauft, grüne LED, alles o.k.&lt;br /&gt;
&lt;br /&gt;
* Bausatz Nov. 09 gekauft, grüne LED, ENC28J60, MAX232 und ATmega32 fehlen, Nachlieferung nach einer Woche&lt;br /&gt;
&lt;br /&gt;
*Bausatz Nov. 09 gekauft,Bauteile komplett.Verbindungsaufbau Seriell klappt erst nach mehreren Versuchen.Problem gelöst:Spannung an MAX und Mega zu niedrig&lt;br /&gt;
&lt;br /&gt;
* Bausatz Dez. 09 gekauft, grüne LED, 100µF Kondensator fehlt, alles o.k.&lt;br /&gt;
&lt;br /&gt;
* Bausatz August 09 gekauft, alle teile da nach Einstellen der fusebits lief alles perfekt&lt;br /&gt;
&lt;br /&gt;
* Bausatz Okt. 09 gekauft, ein 100nF Kondensator und 25MHz Quarz fehlten ... hab beim lokalen Elektronikhändler keinen 25Mhz Grundton Quarz sondern nur im 3. Oberton bekommen aber mit R2.2k parallel zum Quarz schwingt er in der Schaltung schön bei 25Mhz. Mit 1µF am MAX232 funktioniert jetzt auch die RS232.&lt;br /&gt;
&lt;br /&gt;
* 2x Bausatz Feb. 10 gekauft, bei beiden fehlten 7805, L1+L2 je 100µH sowie 4x falscher Wert Kondensator an Max232 vorhanden. Fehlende Bauteile nachgelötet und Funktion getestet. Hat alles einwandfrei funktioniert!!!&lt;br /&gt;
&lt;br /&gt;
* Bausatz März. 10 gekauft, RS232 Printbuchse fehlt, dafür 1x 10pol Wannenstecker zuviel. Grüne LED statt Rot. Funktioniert ansonsten einwandfrei.&lt;br /&gt;
&lt;br /&gt;
* Bausatz Jan. 10 gekauft, gelbe LED statt rot, C14...C17: 10µF, weder seriell noch via Ethernet Konnektivität. Nach Austausch von C14-C17 gegen 1µF, wenigstens serielle Kontaktaufnahme möglich, kein Ethernet auch nach Flash von 1.03 mit NetServer.&lt;br /&gt;
&lt;br /&gt;
* Bausatz Feb. 10 gekauft, Spannungsregler LM317T fehlte&lt;br /&gt;
&lt;br /&gt;
* Bausatz März 10 gekauft, gelbe statt rote LED geliefert, aber Aufbau und inbetriebnahme lt. Handbuch ohne Probleme&lt;br /&gt;
&lt;br /&gt;
* Bausatz März 10 gekauft und gelbe statt rote LED geliefert, funzt wunderbar gemäß Anleitung&lt;br /&gt;
&lt;br /&gt;
* Fertig gelötete Platine gekauft. µC war falsch im Sockel.&lt;br /&gt;
&lt;br /&gt;
* Bausatz April 10 gekauft und gelbe statt rote LED geliefert, ADM232LJN statt MAX232 - Funktion erst nach Ersetzung des ADM durch nen MAX&lt;br /&gt;
&lt;br /&gt;
* Bausatz April 10 gekauft und gelbe statt rote LED geliefert, ADM232LJN statt MAX232 - funktionierte sofort auch mit dem ADM232LJN.&lt;br /&gt;
&lt;br /&gt;
* Bausatz April 10 gekauft wurde mit grüner statt roter LED Ausgeliefert&lt;br /&gt;
&lt;br /&gt;
* Bausatz Juni 10 gekauft: wurde mit grüner statt roter Netz-LED ausgeliefert, 2x 22pF Kerko zuviel&lt;br /&gt;
&lt;br /&gt;
* Bausatz August 10 gekauft: komplett und sofort funktioniert&lt;br /&gt;
* Bausatz Juli 10 gekauft: 2 Quarze mit 16 MHz geliefert, statt 1x 16MHz und   1x25MHz.&lt;br /&gt;
* Bausatz September 10 gekauft: hat sofort funktioniert. 1x 3,3k und 1x 10k Widerstand zuviel. Statt 100nF Kondensatoren wurden 1µF geliefert -&amp;gt; Platzprobleme auf der Platine durch grössere Bauform. LED grün.&lt;br /&gt;
* Bausatz Oktober  6 gekauft: alles funktioniert. LED grün statt rot.&lt;br /&gt;
&lt;br /&gt;
* Fertigmodul Oktober 10 gekauft: Auf Anhieb alles funktioniert!&lt;br /&gt;
* Bausatz Oktober 10 gekauft: komplett und sofort funktioniert&lt;br /&gt;
&lt;br /&gt;
* Bausatz November 10 gekauft: komplett und sofort funktioniert (sogar mit der neusten Pollin Firmware 1.03 schon drauf) LED grün statt rot.&lt;br /&gt;
&lt;br /&gt;
* Bausatz November 10 gekauft. Nach Bezug neuer Feinst-Lötspitzen konnte ich ihn dann auch zusammenlöten. Es hat sofort alles funktioniert, obwohl ich nur 12V bzw. 9V Gleichspannung zur Verfügung hatte, und nicht sicher war, wieviel die Komponenten wirklich benötigen. Der Regler wird auch bei 9V Gleichspannungsversorgung noch sehr warm. Da muss auf jeden Fall ein Kühlkörper dran! Ich habe auch eine grüne LED bekommen, ist mir aber wurscht :-)&lt;br /&gt;
&lt;br /&gt;
* Bausatz Dezember 10 gekauft: komplett und funktionierte sofort. Firmware 1.03, grüne LED (Ein Quarz und ein IC-Sockel zu viel)&lt;br /&gt;
&lt;br /&gt;
*Bausatz Januar 2011 gekauft: nur genau die richtige Anzahl Teile dabei, Firmware 1.03, grüne LED, ging auf Anhieb&lt;br /&gt;
&lt;br /&gt;
* 2x Bausatz Januar 2011 gekauft: beide grüne LED, und 1x doppelter Satz Jumper/Stiftleiste, 22PF und Anschlussklemmen. Rest vollständig und beide haben sofort nach zusammenbau funktioniert.&lt;br /&gt;
&lt;br /&gt;
* Februar 2011: AVR-NET-IO: die Diode D5 fehlt, 10 µF gegen 1 µF für MAX232 getauscht, Flash im ATmega32 war programmiert, passende IP-Adr über serielle Schnittstelle eingestellt; ADD-ON: für R1 war 22Ω statt 0,2Ω beigelegt, durch richtigen ersetzt, Beschreibung der LED Bestückung mangelhaft / oe1smc&lt;br /&gt;
&lt;br /&gt;
* Februar 2011: AVR-NET-IO: 1 Diode zuviel, 2 Spulen fehlen, LED grün. Die fehlenden Spulen wurden durch welche aus der Bastelkiste ersetzt - funktioniert. Der 7805 bekam einen kleinen Kühlkörper spendiert.&lt;br /&gt;
&lt;br /&gt;
* Februar 2011: AVR-NET-IO: 2x 10k Widerstände fehlen. Dafür eine Diode zu viel.&lt;br /&gt;
&lt;br /&gt;
* Ende Februar 2011: Zwei Bausaetze an jeweils zwei Adressen, alles in Ordnung.&lt;br /&gt;
&lt;br /&gt;
* Ende März 2011: 2x 25 Mhz Quarz statt 1x16 u. 1x25 Mhz. LED fehlt. Bausatz funktioniert nach Tausch des Quarz den mir mein Freund oe9rsv aus seinem Fundus spendiert hat. Danke auch für die Hilfe beim Fehler suchen.&lt;br /&gt;
&lt;br /&gt;
* Mitte 2010 gekauft: 1x 100nF fehlt&lt;br /&gt;
&lt;br /&gt;
* Mitte Juni 2011: Beide Quarze fehlen und beide Spannungsregler fehlen, Pollin wollte, dass ich das ganze Paket zurückschicke für einen Austausch. Ein 51Ω zu viel. 16Mhz im Handel und 25Mhz vom alten Mobo ausgelötet. Läuft wunderbar.&lt;br /&gt;
&lt;br /&gt;
* Anfang Juni 2011: Beide Quarze fehlen und beide Spannungsregler fehlen, nach kurzer Mail an Pollin (leider ohne Antwort) wurden diese nach ca. 1 Woche in einem Brief nachgeliefert.&lt;br /&gt;
&lt;br /&gt;
* August 2011: alles 1a...&lt;br /&gt;
* August 2011: Platine fehlte -&amp;gt; in Nachlieferung&lt;br /&gt;
* 30 August 2011: alles 1a...&lt;br /&gt;
* 06 Sep. 2011: alles 1a...&lt;br /&gt;
* August 2011: 6 Stück bestellt, bei einem haben die 100nF Kondensatoren gefehlt, bei einem zwei LM317 statt 7805 und LM317. Angerufen, 3 Tage später Nachlieferung erhalten.&lt;br /&gt;
* Nov. 2011: &#039;&#039;&#039;Net_IO&#039;&#039;&#039; vollständig. Einspielen der Firmware 1.03 war erforderlich. Bei &#039;&#039;&#039;Add-On&#039;&#039;&#039; immer noch falscher Q1 BC548 (NPN) in Stückliste und Lieferung. BC327-40 oder BC328-40 (PNP) nachgefordert. R11 und R24 mitgeliefert entsprechend Beschreibung V1.1 von Pollin&#039;s Download. Beiliegende Beschreibung war älter, ohne diese Widerstände.&lt;br /&gt;
&lt;br /&gt;
* Ende Nov.2011, alle Teile dabei, Firmware war drauf, sofort funktioniert.&lt;br /&gt;
&lt;br /&gt;
== Andere Software für den Client-PC ==&lt;br /&gt;
=== NetIOLib ===&lt;br /&gt;
&lt;br /&gt;
In C# geschriebene Bibliothek zur Ansteuerung der Platine im Orginalzustand. Inkl. Beispielsoftware und Quellcode (GNU GPL) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DLL: [http://www.tware.org/downloads/NetIOLib_dll.zip Download-Link]&lt;br /&gt;
Source: [http://www.tware.org/downloads/NetIOLib_src.zip Download-Link]&lt;br /&gt;
&lt;br /&gt;
=== ControlIO ===&lt;br /&gt;
Einfache Bibliothek zur Ansteuerung mit Originalfirmware.&lt;br /&gt;
http://www.mikrocontroller.net/topic/149695&lt;br /&gt;
&lt;br /&gt;
=== JAVA Lib ===&lt;br /&gt;
Einfache Java-Bibliothek zur Ansteuerung mit Originalfirmware.&lt;br /&gt;
http://son.ffdf-clan.de/?path=forumsthread&amp;amp;threadid=611&lt;br /&gt;
&lt;br /&gt;
=== App NetIO  ===&lt;br /&gt;
Frei verfügbare App für Windows Mobile zur Ansteuerung mit der Orginalsoftware. Das HTC HD2 wird damit zur Fernsteuerung für das AVR Net-IO Board.&lt;br /&gt;
http://www.heesch.net/netio.aspx&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
PHP Klasse zur Ansteuerung mit der Originalfirmware. (Opensource Lizenz)&lt;br /&gt;
http://blog.coldtobi.de/1_coldtobis_blog/archive/298_pollin_net-io_php_library.html&lt;br /&gt;
&lt;br /&gt;
PHP Funktionen zum Ansteuern der Originalfirmware. (Free for All Lizenz)&lt;br /&gt;
http://defcon-cc.dyndns.org/projects/mikrocontroller/netio.php&lt;br /&gt;
&lt;br /&gt;
=== NET-IO Control ===&lt;br /&gt;
Eine Application für das Android Betriebssystem zur Steuerung des AVR Net-IO Boards &lt;br /&gt;
&lt;br /&gt;
[[Datei:NET-IO-Control.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Team: [http://elektronik2000.de/ E2000-Team]&lt;br /&gt;
&lt;br /&gt;
=== iPhone ===&lt;br /&gt;
==== NetIO ====&lt;br /&gt;
Schöne iPhone Fernbedienung für das Board. Konfigurierbar über eine JSON Datei. (Senden, Auslesen, Makros) &amp;lt;br&amp;gt;&lt;br /&gt;
http://itunes.apple.com/app/netio/id464924297?mt=8&lt;br /&gt;
&lt;br /&gt;
Hinweis: &amp;lt;br&amp;gt; Man findet es unter &amp;quot;NetIO&amp;quot; im AppStore, im Icon selbst und in iTunes wird es als &amp;quot;Controller&amp;quot; angezeigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Den JSON (JavaScriptObjectNotation) Code kann man im [http://jsonlint.com/ JSONLint Validator] prüfen. &amp;lt;br&amp;gt;&lt;br /&gt;
Die Grafikausgabe der &amp;quot;Buttons&amp;quot; kann man mit [http://netio.davideickhoff.de/renderjson NetIO JSON Renderer] vorher am PC überprüfen.&lt;br /&gt;
==== AVR NetIO ====&lt;br /&gt;
Mit der [http://itunes.apple.com/de/app/avr-net-io/id460991760?mt=8 iPhone App AVR-Net-IO] kann das Board ferngesteuert werden. Die Fernsteuerung umfasst in der Version 1.1 folgende Funktionen:&amp;lt;br&amp;gt;&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ADC-Werte zyklisch auslesen und darstellen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Digital-Inputs zyklisch darstellen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Digital-Outputs können über Buttons geschaltet werden. Die Werte der Digital-Outputs werden zuerst ausgelesen und zeigen den zuletzt gesetzten Wert an.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Terminal-Modus: Hier können beliebige AVR-Net-IO-Befehle eingegeben werden. Das Ergebnis wird 1:1 angezeigt, wie es vom Board kommt. Hilfreich für Tests bei Eigenentwicklungen und Konfigurationen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Mehr Infos gibt&#039;s dazu von den Entwicklern auf [http://www.facebook.com/pages/AVR-Net-IO/187799687958255?ref=nf AVR-net-IO Facebook-Page] oder direkt auf deren Homepage [http://www.ondics.de/apps/1001/ Homepage].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Hinweis: MIt der aktuellen Version 1.1 gibt es noch bei manchen Boards Probleme beim auslesen und anzeigen der ADC- und Digital-Werte. Das Terminal funzt problemlos. Die Entwickler kümmern sich gerade drum und haben einen baldigen Update versprochen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== E2000 - Logik ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:E2000-Logik-Bedienoberflaeche.jpg|500px|rechts]]&lt;br /&gt;
&lt;br /&gt;
Anwenderfreundliche Logik-Software vom Elektronik2000.de zur Steuerung des AVR-NET-IO über den Computer oder durch ein Firmware-Update auch autark.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Version 2.0a6&#039;&#039;&#039; beinhaltet eine Firmware, durch die das NET-IO mit einem Firmwareupdate in einen autarken Betrieb versetzt werden kann. Dazu ist ein ATMega644 notwendig. Durch diese Erweiterung ist es möglich, eine Logikschaltung in das Board zu schreiben, welche das Board dann simuliert. Es unterstützt außerdem ein Webinterface, eine TelNet-Schnittstelle und eine Live-View-Ansicht mit der es möglich ist, live zu sehen, wie der Status des Boards zu einem bestimmten Zeitpunkt ist. Die aktuelle Systemzeit wird aus dem Internet ermittelt.&lt;br /&gt;
&lt;br /&gt;
Durch ein Erweiterungsboard von Elektronik2000.de ist es in &#039;&#039;&#039;Zukunft&#039;&#039;&#039; möglich, das Board ohne Internet laufen zu lassen durch eine RTC (RealTimeClock). Auf dieser Erweiterung wird auch ein EEPROM integriert sein, um Firmware-Updates über Netzwerk einzuspielen, damit kein direkter Eingriff in die Hardware notwendig ist. Diese Erweiterung bietet außerdem die Anbindung an das E2000-Bus-System.&lt;br /&gt;
&lt;br /&gt;
Das Designen von Schaltaufgaben wird in diesem Programm grafisch dargestellt. Außerdem besitzt die Software (in der Version für die Pollin Firmware) einen Kennlinienschreiber und ein Webinterface.&lt;br /&gt;
&lt;br /&gt;
Team: [http://www.elektronik2000.de E2000-Team]&lt;br /&gt;
&lt;br /&gt;
== Andere Software statt der Originalsoftware von Pollin ==&lt;br /&gt;
&lt;br /&gt;
Die Umrüstung auf einen Webserver durch Austausch der Software (und ev. des ATmega32) bietet sich an. Kleiner Hinweis dabei: wenn zum Flashen ein ISP-Adapter verwendet wird, diesen unbedingt vor dem Start der neuen Software abziehen! Der ISP arbeitet nämlich über dieselbe SPI-Schnittstelle über die auch der ENC28J60 angesteuert wird. Ein eventuell noch angeschlossener, wenn auch passiver ISP-Adapter stört diese Kommunikation, d.h. das Programm an sich scheint zu laufen, aber die Ethernet-Schnittstelle funktioniert nicht.&lt;br /&gt;
&lt;br /&gt;
=== Bascom Version von Hütti ===&lt;br /&gt;
&lt;br /&gt;
(Quelle: http://bascom-forum.de/index.php/topic,1781.45.html )&lt;br /&gt;
dort am Ende der Seite.&lt;br /&gt;
&lt;br /&gt;
=== Ben&#039;s Bascom Quellcode ===&lt;br /&gt;
&lt;br /&gt;
(Quelle: http://members.home.nl/bzijlstra/software/examples/enc28j60.htm )&lt;br /&gt;
&lt;br /&gt;
Muss aber für Bascom 1.11.9.3 angepasst werden, siehe Code von Hütti !&lt;br /&gt;
&lt;br /&gt;
=== U. Radigs Webserver ===&lt;br /&gt;
&lt;br /&gt;
Angepasster Sourcecode von U.Radig: http://www.mikrocontroller.net/attachment/40027/Webserver_MEGA32.hex&lt;br /&gt;
oder selbst anpassen: &lt;br /&gt;
Ändere im File ENC28J60.H&lt;br /&gt;
 #define ENC28J60_PIN_SS    3&lt;br /&gt;
 #define ENC28J60_PIN_CS    4&lt;br /&gt;
(Quelle: http://www.mikrocontroller.net/topic/109988#988386)&lt;br /&gt;
&lt;br /&gt;
Temporären Dateien (*.d, *,lst,*.o) vorher im Verzeichnis löschen &#039;&#039;make clean&#039;&#039;, damit neu compiliert wird.&lt;br /&gt;
&lt;br /&gt;
IP: 192.168.0.99&amp;lt;br&amp;gt;&lt;br /&gt;
User: admin&amp;lt;br&amp;gt;&lt;br /&gt;
Pass: uli1&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den orginal SourceCode gibt&#039;s übrigens hier:http://www.ulrichradig.de/home/index.php/avr/eth_m32_ex&lt;br /&gt;
&lt;br /&gt;
Bei den Fuses BOOTRST ausschalten, da die Software keinen Bootloader enthält.&lt;br /&gt;
&lt;br /&gt;
Wer gerne als Link-LED die grüne nutzen möchte&lt;br /&gt;
(U.Radig-Source)&lt;br /&gt;
&lt;br /&gt;
enc28j60.c Zeile 150&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;enc28j60_write_phy(ENC28J60_PHY_PHLCON, 0x347A)&lt;br /&gt;
&lt;br /&gt;
Wert 0x347A in 0x374A ändern&lt;br /&gt;
&lt;br /&gt;
(Quelle: http://www.mikrocontroller.net/topic/109988#994943)&lt;br /&gt;
&lt;br /&gt;
IP: 192.168.1.90&amp;lt;br&amp;gt;&lt;br /&gt;
User: admin&amp;lt;br&amp;gt;&lt;br /&gt;
Pass: tim&amp;lt;br&amp;gt;&lt;br /&gt;
Test: http://beitz-online.dyndns.org&amp;lt;br&amp;gt;&lt;br /&gt;
Test: http://pieper-online.dyndns.org&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiterentwicklung des Radig-Codes von RoBue: &amp;lt;br&amp;gt;&lt;br /&gt;
- 1-Wire-Unterstützung (Anschlus an PORTA7) &amp;lt;br&amp;gt;&lt;br /&gt;
- PORTA0-3 digitaler Eingang (ein/aus) &amp;lt;br&amp;gt;&lt;br /&gt;
- PORTA4-6 analoger Eingang (0 - 1023) &amp;lt;br&amp;gt;&lt;br /&gt;
- LCD an PORTC &amp;lt;br&amp;gt;&lt;br /&gt;
- Schalten in Abhängigkeit von Temperatur und analogem Wert &amp;lt;br&amp;gt;&lt;br /&gt;
- (Teilweise) Administration über Weboberfläche &amp;lt;br&amp;gt;&lt;br /&gt;
- Erweiterung des cmd-Befehlsatzes für telnet/rs232 &amp;lt;br&amp;gt;&lt;br /&gt;
Gedacht ist der Einsatz des AVR-NET-IO-Bausatzes für Heizungs- oder Haussteuerung) &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test: http://avrboard.eluhost.de/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Quelle:&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.mikrocontroller.net/attachment/43307/AVR-NET-IO_RoBue_V1.3.zip&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.mikrocontroller.net/attachment/44569/AVR-NET-IO_RoBue_V1.4.zip&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.mikrocontroller.net/attachment/46720/AVR-NET-IO_RoBue_1.5-final_hoffentlich_.zip)&lt;br /&gt;
&lt;br /&gt;
Bei der Ver 1.5 sind die Ports PD2+3 fürs 4bit LCD (Ext.) vertauscht ! Gruß B.P&lt;br /&gt;
&lt;br /&gt;
=== Simon Ks Webserver (uip-Stack) ===&lt;br /&gt;
Angepasster Sourcecode von Simon K: http://www.mikrocontroller.net/attachment/39939/uWebSrv.zip&lt;br /&gt;
IP: 192.168.0.93:8080&amp;lt;br&amp;gt;&lt;br /&gt;
Um diesen Code mit einem Atmega1284P verwenden zu können, muss in der main.c in Zeile 38, &amp;quot;TIMSK&amp;quot; durch &amp;quot;TIMSK1&amp;quot; ersetzt werden.&lt;br /&gt;
Die Fusebits für den Atmega1284p ohne Bootloader sind:&lt;br /&gt;
lfuse=0xFF, hfuse=0xD9, efuse=0xFF&lt;br /&gt;
&lt;br /&gt;
=== Ethersex Server ===&lt;br /&gt;
&lt;br /&gt;
http://www.ethersex.de - Einfach für atmega32 compilieren und funktioniert.&lt;br /&gt;
&lt;br /&gt;
Oder &lt;br /&gt;
[http://www.ethersex.de/firmware-builder/list.cgi hier] ein Firmware Image passend für das Pollin Net-IO mit eingebautem Webserver und Beispieldateien im Flash bauen lassen und flashen (firmware-builder). Einfacher geht´s nimmer. :-)&lt;br /&gt;
&lt;br /&gt;
=== Etherrape Server ===&lt;br /&gt;
&lt;br /&gt;
http://www.lochraster.org/etherrape/ &lt;br /&gt;
&lt;br /&gt;
ist in jedem Fall hier auch zu erwähnen zumal es sich beim etherrape um das Ursprungsprojekt von ethersex handelt.&lt;br /&gt;
Es scheint aber bei der Weiterentwicklung wenig zu passieren.&lt;br /&gt;
Ausführliche Dokumentation findet sich unter http://wiki.lochraster.org/wiki/Etherrape&lt;br /&gt;
&lt;br /&gt;
=== Mini SRCP Server (kommerziell, Closed-Source)===&lt;br /&gt;
&lt;br /&gt;
Damit wird die Platine zu einer Modellbahnsteuerung, die&lt;br /&gt;
über das Netzwerkprotokoll SRCP mit verschiedenen Programmen&lt;br /&gt;
gesteuert werden kann.&lt;br /&gt;
&lt;br /&gt;
[http://www.7soft.de/de/mini_srcp_server/index.html Infoseite] zur Hardware&lt;br /&gt;
und das zugrundeliegende [http://www.der-moba.de/index.php/Digitalprojekt Digitalprojekt].&lt;br /&gt;
&lt;br /&gt;
=== AvrArtNode ===&lt;br /&gt;
&lt;br /&gt;
Hiermit kann die Platine zu einem Art-Net Node werden, mit dem sich ein DMX-Universe über Ethernet übertragen lässt. Basiert auf den Quellen von Ulrich Radig.&lt;br /&gt;
&lt;br /&gt;
Dokumentation: [http://www.dmxcontrol.de/wiki/Art-Net-Node_f%C3%BCr_25_Euro Art-Net-Node für 25 Euro]&lt;br /&gt;
&lt;br /&gt;
=== Webserver von G. Menke ===&lt;br /&gt;
&lt;br /&gt;
Ein Webserver (basierend auf den Sourcen von U. Radig), der so angepasst ist, dass alle Ein- und Ausgänge wie bei der originalen Pollin-Software genutzt werden können (8xDIGOUT, 4xDIGIN, 4xADIN). Der Webserver kann daher direkt auf das Net-IO geladen werden. Im ZIP-File sind ein ReadMe und alle C-Sourcen enthalten. Download:&lt;br /&gt;
[http://gm.stream-center.de/webserver/ Webserver mit passender IO]&lt;br /&gt;
&lt;br /&gt;
=== OpenMCP ===&lt;br /&gt;
&lt;br /&gt;
Tolles Projekt, welches viele Features bietet und stabil läuft. Hervorzuheben ist die Übersichtlichkeit der Programmteile/Module und die vielleicht nicht ganz komplette Dokumentation. Man merkt das viel Arbeit und Liebe in diesen Projekt steckt. Herausgekommen ist dabei eine einfach zu handhabende Entwicklungsumgebung. Anfänger können, dank des gut durchdachten CGI-System welches sich um alle wichtigen Sachen kümmert, leicht eigene CGI implementieren. Alle Ausgaben erfolgen nur mit printf über die Standardausgabe und werden automatisch richtig per Netzwerk übertragen, dadurch ist es auch für den Anfänger recht gut geeignet, da man sich nicht mit der Netzwerkprogrammierung auseinander setzen muss.&lt;br /&gt;
&lt;br /&gt;
Die Software belegt im Moment (Stand Juli 2010) ca. 55 Kb im Flash, so dass man das Board mit einem grösseren µC (z.B. ATMega644) aufrüsten muss.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.neo-guerillaz.de Projekt und Doku]&lt;br /&gt;
&lt;br /&gt;
Der Autor stellt zwei über das Internet erreichbare Testboards bereit unter http://www.neo-guerillaz.de:81 und http://www.neo-guerillaz.de:82 die beide unter OpenMCP laufen, je auf einen AVR-NETIO mit einem ATmega644 und dem eigentlichen Board mit einem ATmega2561. Zusätzlich ist gerade eine Version für das myAVR in Arbeit die schon ordentlich Fortschritte macht.&lt;br /&gt;
&lt;br /&gt;
=== ENC28J60 I/O-Webserver von Thomas Heldt ===&lt;br /&gt;
&lt;br /&gt;
Ein Modul-Webserver (Softwarekompatibel zum Pollin Webserver), der durch div. Module erweitert werden kann, Software in Bascom basierend auf dem Code von Ben Zijlsta wurde erweitert und angepasst:&lt;br /&gt;
&lt;br /&gt;
[http://mikrocontroller.heldt.eu/index.php?page=enc28j60-io-webserver Projekt und Software]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* Diskussion zu diesem Projekt: http://www.mikrocontroller.net/topic/109988&lt;br /&gt;
* [http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en022889 ENC28J60 Produktseite]&lt;br /&gt;
* [http://ww1.microchip.com/downloads/en/DeviceDoc/39662c.pdf ENC28J60 Datenblatt(pdf)]&lt;br /&gt;
* [http://son.ffdf-clan.de Forum für AVR-Net-IO]&lt;br /&gt;
* [http://bascom-forum.de/index.php/topic,1781.0.html Bascom Forum ]&lt;br /&gt;
* [http://hobbyelektronik.org/w/index.php/AVR-NET-IO-Shield Shield für den NET-IO]&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR-Boards]]&lt;br /&gt;
[[Category:Ethernet|P]]&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer_Diskussion:Haku&amp;diff=61343</id>
		<title>Benutzer Diskussion:Haku</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer_Diskussion:Haku&amp;diff=61343"/>
		<updated>2011-10-28T14:49:54Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: Die Seite wurde neu angelegt: „Hehe, deine Orden gefallen mir ;)“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hehe, deine Orden gefallen mir ;)&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Kruemeltee&amp;diff=60980</id>
		<title>Benutzer:Kruemeltee</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Kruemeltee&amp;diff=60980"/>
		<updated>2011-10-07T07:41:19Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: /* Schaut doch mal hier vorbei Mini2440 und bei meiner Seite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== &#039;&#039;&#039;Schaut doch mal hier vorbei [[Mini2440]] und bei [http://krumeltee.wordpress.com/ meiner Seite]&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eigene &#039;&#039;&#039;Eagle-Libraries&#039;&#039;&#039;:&lt;br /&gt;
* [[Datei:mos6581_sid.lbr]] DIP&lt;br /&gt;
* [[Datei:at89c51ac3.lbr]] PLCC52 gesockelt, smd&lt;br /&gt;
* [[Datei:at89c51ed2.lbr]] PLCC68 gesockelt&lt;br /&gt;
* [[Datei:ds89c450.lbr]] DIP40&lt;br /&gt;
* [[Datei:max127.lbr]] DIP&lt;br /&gt;
* [[Datei:max520.lbr]] DIP&lt;br /&gt;
* [[Datei:PCA9517.lbr]] SMD&lt;br /&gt;
* [[Datei:tlc540.lbr]] DIP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:I2ctools_avr32_grasshopper_ngw100_stk1000.tar.bz2 i2ctools (i2cdetect, i2cdump, i2cget, i2cset) compiliert für AVR32-Linux (Grasshopper, NGW100, STK1000).]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:Max127_avr32.tar.bz2 C-Code zum Auslesen eines MAX127 12Bit I²C ADCs an einem AVR32 unter Linux.]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:LM75_avr32.tar.bz2 C-Code zum Auslesen eines LM75 I²C Temperatursensors an einem AVR32 unter Linux.]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:PCF8574_avr32.tar.bz2 C-Code zum Setzen/Auslesen eines PCF8574 8Bit Portexpanders an einem AVR32 unter Linux.]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/wikifiles/c/ca/Saa1064_avr32.tar.bz2 C-Code für einen SAA1064 4 Digit 7 Segment Treiber via I²C am AVR32]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/wikifiles/8/88/Saa1064_schem.jpg Schaltplan SAA1064]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/attachment/highlight/54535 SDCC Header File für den Controller &#039;&#039;&#039;T89C51AC3&#039;&#039;&#039; von Atmel.]&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Mos6581_sid.lbr&amp;diff=60979</id>
		<title>Datei:Mos6581 sid.lbr</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Mos6581_sid.lbr&amp;diff=60979"/>
		<updated>2011-10-07T07:40:56Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Tlc540.lbr&amp;diff=60978</id>
		<title>Datei:Tlc540.lbr</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Tlc540.lbr&amp;diff=60978"/>
		<updated>2011-10-07T07:40:00Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:PCA9517.lbr&amp;diff=60977</id>
		<title>Datei:PCA9517.lbr</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:PCA9517.lbr&amp;diff=60977"/>
		<updated>2011-10-07T07:39:51Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Max520.lbr&amp;diff=60976</id>
		<title>Datei:Max520.lbr</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Max520.lbr&amp;diff=60976"/>
		<updated>2011-10-07T07:39:42Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Max127.lbr&amp;diff=60975</id>
		<title>Datei:Max127.lbr</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Max127.lbr&amp;diff=60975"/>
		<updated>2011-10-07T07:39:34Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Ds89c450.lbr&amp;diff=60974</id>
		<title>Datei:Ds89c450.lbr</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Ds89c450.lbr&amp;diff=60974"/>
		<updated>2011-10-07T07:39:22Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:At89c51ed2.lbr&amp;diff=60973</id>
		<title>Datei:At89c51ed2.lbr</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:At89c51ed2.lbr&amp;diff=60973"/>
		<updated>2011-10-07T07:38:52Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:At89c51ac3.lbr&amp;diff=60972</id>
		<title>Datei:At89c51ac3.lbr</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:At89c51ac3.lbr&amp;diff=60972"/>
		<updated>2011-10-07T07:38:38Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_Net-IO_Bausatz_von_Pollin&amp;diff=60628</id>
		<title>AVR Net-IO Bausatz von Pollin</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_Net-IO_Bausatz_von_Pollin&amp;diff=60628"/>
		<updated>2011-09-21T10:52:34Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: /* Bekannte Fehler */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier steht eine Beschreibung des Pollin Bausatzes [http://www.pollin.de/shop/shop.php?cf=detail.php&amp;amp;pg=NQ==&amp;amp;a=MTQ5OTgxOTk= AVR-NET-IO. Best.Nr. 810 058], oder als aufgebautes Fertigmodul, Best.Nr. 810 073. &lt;br /&gt;
&lt;br /&gt;
Einige Features: Ethernet-Platine mit ATmega32 und Netzwerkcontroller ENC28J60. Die Platine verfügt über 8 digitale Ausgänge, 4 digitale und 4 ADC-Eingänge, welche alle über einen Netzwerkanschluss (TCP/IP) abgerufen bzw. geschaltet werden können.&lt;br /&gt;
&lt;br /&gt;
[[Datei:AVR-NET-IO ADD-ON.JPG|thumb|right|400px|AVR-NET-IO (links) mit zusätzlicher SUB-D Anschlussplatine (rechts, nicht im Lieferumfang)und Add-On-Board (oben, mit aufgelötetem RFM12-433-Modul, beides nicht im Lieferumfang). Ebenso ist zusätzlich ein nicht im Lieferumfang enthaltener kleiner Kühlkörper auf einem der Spannungsregler montiert und die Schraubklemmen zur Stromversorgung wurden durch Buchsen ersetzt.]]&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
&lt;br /&gt;
* Betriebsspannung 9 V AC/DC&lt;br /&gt;
* Stromaufnahme ca. 190 mA&lt;br /&gt;
* 8 digitale Ausgänge (0/5 V) [PC0-PC7 an J3]&lt;br /&gt;
* 4 digitale Eingänge (0/5 V) [PA0-PA3 an J3]&lt;br /&gt;
* 4 ADC-Eingänge (10 Bit) [PA4-PA7 an Schraubklemmen]&lt;br /&gt;
* LCD-Anschluss (HD44780 komp. Controller nötig) [PD2-7,PB0,PB3 an EXT]&lt;br /&gt;
* [[ENC28J60]]&lt;br /&gt;
* [http://www.atmel.com/dyn/Products/Product_card.asp?part_id=2014 ATmega32] Mikrocontroller&lt;br /&gt;
&lt;br /&gt;
Maße (L×B×H): 108×76×22 mm.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Die Schaltung des AVR-NET-IO ist recht einfach:&lt;br /&gt;
* Ein ATmega32 Mikrocontroller enthält die gesamte Software&lt;br /&gt;
* Ein ENC28J60 Ethernet-Controller für das Senden und Empfangen von Ethernet Frames (MAC und PHY Ethernet Layer) ist über [[SPI]] mit dem ATmega32 verbunden&lt;br /&gt;
* Ein Ethernet RJ-45 MagJack TRJ 0011 BA NL von [http://www.trxcom.com/ Trxcom] mit eingebautem Übertrager und Anzeige-LEDs am ENC28J60.&lt;br /&gt;
* Ein MAX232 für die serielle Schnittstelle&lt;br /&gt;
* Zwei Spannungsregler, 5 V und 3,3 V&lt;br /&gt;
* &amp;quot;Hühnerfutter&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Fast alle I/O Pins des ATmega32 sind irgendwo auf Anschlüssen herausgeführt. Entweder auf dem SUB-D Stecker, dem EXT oder ISP Wannensteckern oder den blauen Anschlussklemmen. Eine Schutzbeschaltung gibt es nicht.&lt;br /&gt;
&lt;br /&gt;
Die blauen Anschlussklemmen haben eine Nut und eine Feder mit denen man&lt;br /&gt;
sie zusammenstecken kann, dadurch ist das Anlöten wesentlich leichter&lt;br /&gt;
und sie stehen auch sauber in der Reihe.&lt;br /&gt;
&lt;br /&gt;
=== Erweiterungsplatine ===&lt;br /&gt;
&lt;br /&gt;
Seit Januar 2010 gibt es auch eine Erweiterungsplatine &lt;br /&gt;
&lt;br /&gt;
[http://www.pollin.de/shop/dt/Nzg4OTgxOTk-/Bausaetze/Diverse/Bausatz_Add_on_fuer_AVR_NET_IO.html Add-on für AVR-NET-IO-Board Best.Nr. 810 112]&lt;br /&gt;
&lt;br /&gt;
Diese Platine erweitert das NET-IO um:&lt;br /&gt;
&lt;br /&gt;
* SD-Karten-Slot über SPI&lt;br /&gt;
* Display über PCF 8574&lt;br /&gt;
* Infrarot&lt;br /&gt;
* [[RFM12]] Funkmodul (nicht im Lieferumfang enthalten)&lt;br /&gt;
&lt;br /&gt;
Ausserdem soll es die 3.3V Versorgung der Hauptplatine verbessern. Dazu sollte man einen 4,7 kOhm Widerstand parallel zu R2 schalten. Sonst beträgt die Ausgangsspannung nur ca. 2,8V. (Tipp aus dem u.g. Thread im Forum)&lt;br /&gt;
&lt;br /&gt;
Um bei einem Neuaufbau parallele Widerstände zu vermeiden, sollten folgende Änderungen auf dem Addon-Board gemacht werden:&lt;br /&gt;
*R2 1,5kΩ ersetzen mit 2kΩ&lt;br /&gt;
*R3 1,8K ersetzen mit 3,3kΩ&lt;br /&gt;
*R19 470kΩ ersetzen zu 470Ω&lt;br /&gt;
*Q1 BC548 ersetzen durch BC327 oder BC328 (Hauptsache PNP! und mehr als 100mA)&lt;br /&gt;
&lt;br /&gt;
Stand Feb. 2011: R2 wird mit 2,2kΩ und R3 wird mit 3,6kΩ ausgeliefert. Somit werden die 3,3 V richtig erzeugt. R19 hat 470Ω.&lt;br /&gt;
&lt;br /&gt;
Der ISP-Anschluß ist nicht vollständig durchgeschleift, es besteht keine Verbindung der RESET-Leitung zwischen ISP und ISP1 (Abhilfe: Drahtbrücke einlöten, [http://www.mikrocontroller.net/topic/161354#1600385 Quelle]).&lt;br /&gt;
&lt;br /&gt;
Erste Erfahrungsberichte im Forum http://www.mikrocontroller.net/topic/161354&lt;br /&gt;
&lt;br /&gt;
=== Hardware-Umbauten &amp;amp; -Verbesserungen ===&lt;br /&gt;
&lt;br /&gt;
* Kühlkörper auf dem 7805&lt;br /&gt;
* MAX232 nach anfänglicher Konfiguration nicht bestücken um Strom zu sparen oder um zwei weitere I/O-Pins zu gewinnen&lt;br /&gt;
* 10µF-Elkos für MAX232N (C14-C17) durch 1µF ersetzen. Eine 10µF-Version für den MAX232 gibt es nicht. Die 10µF-Elkos können auch Ursache einer nicht funktionierenden RS232 sein.&lt;br /&gt;
** Laut Spezifikation sind auch mehr als 1uF erlaubt. Selbst Atmel verwendet beim STK500 10uF. Dies führt keinesfalls dazu, dass die RS232 nicht mehr funktioniert.&lt;br /&gt;
* Die IC-Fassungen aus &amp;quot;Pollins Resterampe&amp;quot; durch Fassungen mit gedrehten Kontakten ersetzen. &lt;br /&gt;
* &#039;&#039;Netz&#039;&#039; LED nicht bestücken oder größere Widerstände einlöten um Strom zu sparen &lt;br /&gt;
* Vorwiderstände der Ethernet-LEDs größer machen (z.&amp;amp;nbsp;B. verdoppeln) um Strom zu sparen&lt;br /&gt;
* Linear-Spannungsregler ersetzen&lt;br /&gt;
* Kondensator an AREF-Pin des ATmega32 (ATmega32 Datenblatt) (100nF gegen Masse)&lt;br /&gt;
* Kondensator an den RESET-Pin des ATmega32 ([http://www.atmel.com/dyn/resources/prod_documents/doc2521.pdf Atmel Application Note AVR042: AVR Hardware Design Considerations]) Wenn man diese Quelle genauer liest, ist das aber eher unnötig. - Kondensator bei selbstbau-ISP empfehlenswert.&lt;br /&gt;
* Umbau auf 3,3 V:&lt;br /&gt;
** Ersatz der Spannungsregler durch einen einzigen 3,3 V Regler&lt;br /&gt;
** Anpassen (verkleinern) des LED-Vorwiderstands R3 für 3,3 Volt Betrieb&lt;br /&gt;
** Reduktion der Taktfrequenz (Austausch von Q2) auf den bei 3,3V erlaubten Bereich des ATmega32 ( ATmega32(L)  3.3V /8.0 Mhz Takt )&lt;br /&gt;
** Ersatz des MAX232 durch einen MAX3232&lt;br /&gt;
[[Bild:POWER.JPG|thumb|400px|5V Stromversorgung über USB Kabel, ohne 5 V Spannungsregler und Gleichrichterdioden, Vorsicht: kein Verpolungsschutz!  ]]&lt;br /&gt;
* ATmega32 vom ENC28J60 takten (OSC2)&lt;br /&gt;
* Betrieb mit Gleichspannung:&lt;br /&gt;
** Dioden D2 und D5 durch Drahtbrücken ersetzen, D1 und D4 nicht bestücken (komplette Entfernung des Brückengleichrichters, beinhaltet Verlust des Verpolungsschutzes)&lt;br /&gt;
** Diode D2 bestücken, D5 durch Drahtbrücke ersetzen, D1 und D4 nicht bestücken (Brückengleichrichter durch Verpolungsschutze ersetzen)&lt;br /&gt;
*** ??? Ist dies nicht kontraproduktiv? Bei mir wurde durch D2-Bestückung die Eingangsspannung von ca. 5,2 V am LM317T auf ca. 4,6 V gedrückt, so dass am ENC28J60 nur ca. 2,6 V ankamen (außerhalb der lt. Datenblatt &amp;quot;Operating voltage range of 3.14V to 3.45V&amp;quot;). Man müsste also ein geregeltes Netzteil mit ca. 5,5 V anschließen um 5 und 3,3 V zu erzielen. Dann lieber den Verpolungsschutz durch andere Maßnahmen sicherstellen.&lt;br /&gt;
** Beim Betrieb von USB beachten, dass USB-Spezifikation keinesfalls 5V garantiert, sondern Spannung bis runter 4.4V erlaubt und dann u.U. durch den LM317 nicht mehr genügend Spannung am ENC anliegt. Das äußert sich so, dass zwar der Atmega einwandfrei funktioniert, die Ethernet-Kommunikation aber nicht oder nur sehr sporadisch.&lt;br /&gt;
* Ersatz des ATmega32 durch einen ATmega644 mit mehr FLASH-Speicher.&lt;br /&gt;
&lt;br /&gt;
== Inbetriebnahme der Originalsoftware ==&lt;br /&gt;
=== Einleitung ===&lt;br /&gt;
&lt;br /&gt;
Die bei Auslieferung (Stand September 2008) in den ATmega32 gebrannte Firmware stellt sich manchmal recht zickig an. Es scheint dann die Netzwerk-Schnittstelle, ggf. auch  die seriell Schnittstelle, nicht zu funktionieren. Falls es Probleme geben sollte, sollte man erst einmal einen Firmwareupdate versuchen. Dies geschieht über die serielle Schnittstelle mittels des Programmes NetServer (aktuelle Version 1.03, Februar 2010), die dem Bausatz beiliegt. &lt;br /&gt;
&lt;br /&gt;
Falls die serielle Schnittstelle ebenfalls nicht zugänglich ist, kann mit den im folgenden beschriebenen Schritten die Inbetriebnahme der Software möglich sein. Dazu benötigt man:&lt;br /&gt;
&lt;br /&gt;
* Einen Windows-PC mit Ethernet-Schnittstelle und RS232-Schnittstelle (ein Prolific RS232-USB Konverter funktioniert)&lt;br /&gt;
* Entweder&lt;br /&gt;
**zwei normale (&#039;&#039;straight through&#039;&#039;) Ethernet-Kabel und einen Ethernet Switch/Hub, oder&lt;br /&gt;
**ein gekreuztes(&#039;&#039;cross over&#039;&#039;) Ethernet-Kabel&lt;br /&gt;
* Einen AVR Programmer (Hardware und Software). Zum Beispiel einen [[AVR Dragon]] oder [[STK500]] mit [[AVR Studio]] oder das [[Pollin ATMEL Evaluations-Board]] und [[avrdude]].&lt;br /&gt;
* Die [http://www.pollin.de/shop/ds/MTQ5OTgxOTk-.html Pollin NetServer Software], Version 1.03 (oder neuer)&lt;br /&gt;
&lt;br /&gt;
=== Gelieferten ATmega32 richtig einstellen ===&lt;br /&gt;
[[image:fuse_bits_avr_studio.jpg|thumb|right|250px|Einstellungen der Fuse-Bits mittels AVR Studio 4]]&lt;br /&gt;
Die Fuses der gelieferten ATmega32s scheinen nicht immer mit den im Handbuch auf Seite 12 als erforderlich angegebenen Fuse-Einstellungen übereinzustimmen.&lt;br /&gt;
&lt;br /&gt;
Dies kann man mittels eines Programmers ändern. LFuse = 0xBF, HFuse = 0xD2. Das genaue Vorgehen hängt dabei vom verwendeten Programmer ab. Bei der Gelegenheit kann man ebenfalls eine Sicherheitskopie des ursprünglichen Flash-Inhalts und des EEPROMs anfertigen. Das EEPROM scheint die MAC-Adresse des Ethernet-Ports zu enthalten.&lt;br /&gt;
&lt;br /&gt;
Entgegen der Spezifikation im Handbuch von Pollin sollten die &#039;&#039;&#039;HFuses auf 0xC2&#039;&#039;&#039; gesetzt werden, d. h. CKOPT-Fuse programmiert (dies ist in der Software Version 1.03 bereits vollzogen). Das sorgt für einen stabilen Betrieb des AVR-Oszillators im &amp;quot;full rail-to-rail swing&amp;quot;-Mode bei 16 MHz. Atmel garantiert ansonsten nur stabilen Betrieb bis 8 MHz. Siehe ATmega32-Datenblatt, Kapitel 8.4, Crystal Oscillator.&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
==== Funktionsfähige Konfiguration - AVR-Prog ====&lt;br /&gt;
&lt;br /&gt;
[[Bild:Avrprog.png|thumb|right|250px]]&lt;br /&gt;
Benutzer von AVR-Prog können die nachfolgenden Einstellungen für die Lock- und Fuse-Bits verwenden. Hierbei handelt es sich um die ausgelesenen Einstellungen eines funktionsfähigen Controllers. Allerdings sollte, laut Handbuch des AVR-NET-IO-Boards, das Fuse-Bit EESAVE eigentlich gesetzt sein. &lt;br /&gt;
&lt;br /&gt;
Alternativ kann auch per avrdude die Einstellung getroffen werden:&lt;br /&gt;
 avrdude -c stk500v2 -pm32 -U lfuse:w:0xBF:m&lt;br /&gt;
und &lt;br /&gt;
 avrdude -c stk500v2 -pm32 -U hfuse:w:0xC2:m&lt;br /&gt;
&lt;br /&gt;
Anschließend muß noch der Bootloader und die Firmware aktualisiert werden (siehe Handbuch AVR-NET-IO-Board Seite 12 Punkt 3).&lt;br /&gt;
&lt;br /&gt;
=== PC Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
==== PC normalerweise nicht im 192.168.0.0/24 Subnetz ====&lt;br /&gt;
&lt;br /&gt;
Betreibt man den PC nicht im 192.168.0.0/24 Subnetz, muss er wie folgt umkonfiguriert werden, oder die IP Adresse des Boards wird entsprechend angepasst. ( Siehe Handbuch Seite 14ff. Das ist meist sinnvoller und auch einfacher. ) &lt;br /&gt;
&lt;br /&gt;
Den PC vom normalen Netzwerk abstecken[1]. Zur Umkonfiguration dazu bei Windows XP in der Systemsteuerung &#039;&#039;Netzwerkverbindungen&#039;&#039; aufrufen und die lokale &#039;&#039;LAN-Verbindung&#039;&#039; markieren. Dann in der rechten Leiste &#039;&#039;Einstellungen dieser Verbindung ändern&#039;&#039; aufrufen. &lt;br /&gt;
&lt;br /&gt;
Es erscheint der Dialog &#039;&#039;Eigenschaften von &amp;lt;Verbindungsname&amp;gt;&#039;&#039;. In der Liste im Dialog zu &#039;&#039;Internetprotokoll (TCP/IP)&#039;&#039; gehen. Ein Doppelklick auf den Eintrag öffnet den &#039;&#039;Eigenschaften von Internetprotokoll (TCP/IP)&#039;&#039; Dialog.&lt;br /&gt;
&lt;br /&gt;
In diesem Dialog &#039;&#039;Folgende IP-Adresse verwenden:&#039;&#039; auswählen und zum Beispiel&lt;br /&gt;
&lt;br /&gt;
IP-Adresse: &#039;&#039;&#039;192.168.0.100&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Subnetzmaske: &#039;&#039;&#039;255.255.255.0&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Standardgateway: &#039;&#039;&#039;192.168.0.1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
eingeben. &lt;br /&gt;
&lt;br /&gt;
Anmerkung von bitman:&lt;br /&gt;
[1] Dies ist spätestens ab Windows XP nicht mehr notwendig, wenn das Netz 192.168.0.0/24 noch frei ist. Dann kann man einfach den Client &#039;&#039;zusätzlich&#039;&#039; in diesem Netzwerk zusätzlich einbinden über Einstellungen/Netzwerkverbindungen/Lanverbindung/Eigenschaften/TCP-IP/Eigenschaften/Erweitert/IP-Adresse hinzufügen. Es werden dann eben mehrere IP-Adressen an den NIC gebunden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alle geöffneten Dialoge nacheinander mit OK schließen.&lt;br /&gt;
&lt;br /&gt;
Alternativ bietet sich das Umprogrammieren des Boards über die serielle Schnittstelle an. Die Werte für IP-Adresse, Netzmaske und Standard-Gateway werden mit den dokumentierten SETxx-Befehlen geändert, das Board neu gestartet und ans vorhandene Netzwerk gesteckt.&lt;br /&gt;
&lt;br /&gt;
Im EEPROM sind folgende Werte vorprogrammiert:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
3EE - 3F3 MAC-ADRESSE&amp;lt;br&amp;gt;&lt;br /&gt;
3F4 - 3F7 GATEWAY&amp;lt;br&amp;gt;&lt;br /&gt;
3F8 - 3FC NETMASK&amp;lt;br&amp;gt;&lt;br /&gt;
3FD - 3FF IP-ADRESSE&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== PC bereits im 192.168.0.0/24 Subnetz ====&lt;br /&gt;
&lt;br /&gt;
In diesem Fall muss man prüfen, ob die IP-Adresse 192.168.0.90 bereits im Subnetz verwendet wird. Ist dies der Fall, muss das verwendete Gerät mit dieser IP vorübergehend aus dem Subnetz entfernt werden. Es sei denn, dabei handelt es sich um den PC. In diesem Fall muss er wie zuvor umkonfiguriert werden. Ansonsten kann der unverändert im Netz verbleiben.&lt;br /&gt;
&lt;br /&gt;
Dem AVR-NET-IO gibt man eine neue, zuvor unbenutzte Adresse (siehe unten). Dann kann das abgekoppelte Gerät wieder angeschlossen werden, beziehungsweise der PC zurückkonfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
=== AVR-NET-IO anschließen ===&lt;br /&gt;
&lt;br /&gt;
Musste man den PC umkonfigurieren, so werden jetzt nur der PC und der AVR-NET-IO über Ethernet miteinander verbunden. Je nach Ethernet-Kabel benötigt man dazu einen Switch/Hub oder nicht.&lt;br /&gt;
&lt;br /&gt;
Musste man den PC nicht umkonfigurieren, so kann man den AVR-NET-IO wie einen normalen Rechner an das vorhandenen Netz anschließen.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich schließt man die serielle Schnittstelle des AVR-NET-IO an den PC an.&lt;br /&gt;
&lt;br /&gt;
=== Firmware 1.03 einspielen ===&lt;br /&gt;
&lt;br /&gt;
Laut Handbuch sollte der AVR-NET-IO jetzt über Ethernet funktionieren. Ebenso sollte er über die serielle Schnittstelle und ein Terminalprogramm konfigurierbar sein. Beides ist offensichtlich im Auslieferungszustand selten der Fall.&lt;br /&gt;
&lt;br /&gt;
Auch wenn sich Pollins NetServer Software nicht mit dem AVR-NET-IO verbinden lässt, so ist sie jedoch in der Lage eine neue Firmware 1.03 einzuspielen. Das Vorgehen ist im Handbuch auf Seite 12 beschrieben. NetServer präsentiert dabei ein paar einfache Anweisungen denen man folgen sollte.&lt;br /&gt;
&lt;br /&gt;
=== Abschluss ===&lt;br /&gt;
&lt;br /&gt;
Jetzt sollte sich die NetServer Software mit dem AVR-NET-IO über Ethernet verbinden lassen. Dies macht es wiederum möglich, den AVR-NET-IO mit einer anderen IP-Adresse zu versehen. Will man den AVR-NET-IO in einem anderen Subnetz betreiben kann man dies jetzt einstellen.&lt;br /&gt;
&lt;br /&gt;
Nachdem man die IP-Adresse neu eingestellt hat, muss man den PC zurückkonfigurieren und kann dann sowohl den AVR-NET-IO und den PC zusammen betreiben.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Fehler ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch [[#Hardware-Umbauten_.26_-Verbesserungen|Hardware-Umbauten und Verbesserungen]]&amp;lt;br&amp;gt;&lt;br /&gt;
Käufer berichten von fehlenden Bauteilen im Bausatz (Wannenstecker, Widerstände, Kondensatoren, Induktivitäten). Für Reklamationen: [https://www.pollin.de/shop/kontakt_service/reklamation.html]&lt;br /&gt;
&lt;br /&gt;
* Die Stückliste auf Seite 4 in den Anleitung mit den Versionsangaben&lt;br /&gt;
** &#039;&#039;Stand 20.08.2008, kloiber, #1100, wpe&#039;&#039; (gedruckt im Bausatz)&lt;br /&gt;
** &#039;&#039;Stand 20.08.2008, cd, #all, wpe&#039;&#039; (auf der CD)&lt;br /&gt;
:ist falsch. Pollin legt dem Bausatz irgendwann ab September 2008 einen gedruckten Korrekturzettel bei. Die Online-Version der Anleitung ist korrigiert.&lt;br /&gt;
* Im Schaltplan auf Seite 7 in den Anleitungen mit den Versionen&lt;br /&gt;
** &#039;&#039;Stand 20.08.2008, kloiber, #1100, wpe&#039;&#039; (gedruckt im Bausatz)&lt;br /&gt;
** &#039;&#039;Stand 20.08.2008, cd, #all, wpe&#039;&#039; (auf der CD)&lt;br /&gt;
** &#039;&#039;Stand 03.09.2008, online, #all, wpe&#039;&#039; (Online)&lt;br /&gt;
:ist eine 25-polige SUB-D Buchse gezeichnet. Geliefert wird und in der Stückliste verzeichnet ist ein Stecker.&lt;br /&gt;
&lt;br /&gt;
* Die September 2008 ausgelieferte Firmware im ATmega32  funktioniert bei vielen nicht und muss erst upgedatet werden (siehe [[#Inbetriebnahme der Originalsoftware|Inbetriebnahme der Originalsoftware]])&lt;br /&gt;
&lt;br /&gt;
* Im Flash der gelieferten AVR ist anders als beschrieben nur der Bootloader enthalten, die eigentliche Firmware muss erst mit Hilfe der Updatefunktion geladen werden. Wenn zusätzlich auch die Fuses falsch gebrannt sind, dann funktioniert das Update nicht, auch wenn das PC Programm was anderes behauptet.&lt;br /&gt;
&lt;br /&gt;
* Die Fuse-Einstellungen des ausgelieferten ATmega32 entspricht nicht der Anleitung (siehe [[#Inbetriebnahme der Originalsoftware|Inbetriebnahme der Originalsoftware]])&lt;br /&gt;
&lt;br /&gt;
* Bausatz, gekauft am 27.10.08, Anleitungsversion 19.09.08, ohne Probleme oder erkennbare Fehler zusammengebaut und in Betrieb genommen.&lt;br /&gt;
&lt;br /&gt;
* Bausatz gekauft 29.09.2008, Pinbelegung des 25 poligen D-Sub &amp;quot;Anschlusses&amp;quot; stimmt nicht mit der Anleitung überein. Der Aufdruck auf der Platine ist falsch. Pin1 &amp;lt;-&amp;gt; Pin13, Pin2 &amp;lt;-&amp;gt; Pin12 usw. Setzt man den D-Sub Stecker ein, so sind dessen Pinnummern korrekt. Bei einem Bausatz gekauft 10/2010 ist dies ebenfalls noch der Fall.&lt;br /&gt;
&lt;br /&gt;
* 3 Bausätze Anf. Oktober 2008 gekauft, bei einem waren 2 LM317 dabei, dafür fehlte der 7805 - aus der Bastelkiste ersetzt. Alle haben jedoch auf Anhieb funktioniert&lt;br /&gt;
&lt;br /&gt;
* Bausatz gekauft Ende Januar 2009. Die Lock-Bits (u.a. für PonyProg2000) werden falsch beschrieben. Die in Klammern aufgeführten Werte stimmen bei einem Bit nicht. Die Texte &amp;quot;Programmiert/Unprogrammiert&amp;quot; hingegen schon. Bei den Bauteilen gab es 4 Kondensatoren mit der Aufschrift &amp;quot;220&amp;quot;, ich habe diese durch welche mit 22p ersetzt, da ich nicht sicher war ob wirklich 22p geliefert wurden. Dafür wurden statt einem zwei 7805 und statt einem mindestens vier LM317 mitgeliefert.&lt;br /&gt;
&lt;br /&gt;
* Bausatz geliefert 22.4.2009. Alles vollständig, zusammengebaut, läuft. Software-Version 1.03. Für den oben schon genannten Steckverbinder wurde eine Buchse geliefert. Allerdings stimmen die PIN-Nummern im Schaltplan nicht mit den PIN-Nummern auf der Buchse überein (sie sind gespiegelt), daher liefen die Test-LEDs zunächst nicht.&lt;br /&gt;
&lt;br /&gt;
* Bausatz geliefert 11.7.2009. Spannungsregler LM317T fehlt, grüne statt roter LED. Ein Kondensator 22pF zu viel. LM317T wurde auf Anfrage kostenlos nachgeliefert (27.7.). Inbetriebnahme problemlos.&lt;br /&gt;
&lt;br /&gt;
* Bausatz geliefert 24.7.2009. Ein Quarz 16MHz zu viel, ebenfalls grüne statt rote LED.&lt;br /&gt;
&lt;br /&gt;
* Bausatz geliefert 20.08.2009. Ein Kondensator 22pF zuviel und grüne statt rote LED.&lt;br /&gt;
&lt;br /&gt;
* Bausatz Juli &#039;09 gekauft, grüne statt rote LED&lt;br /&gt;
&lt;br /&gt;
* Bausatz 25.09.09 geliefert, grüne Betriebs-LED, ein ELKO zuviel, Fehler 1µF am MAX232 statt 100nF behoben, richtiger C wird mitgeliefert, Aufbau komplett nach Pollin Anleitung durchgeführt, auf Anhieb fehlerfrei!&lt;br /&gt;
&lt;br /&gt;
* Bausatz 17.10.09 geliefert, grüne Betriebs-LED, zwei 100nF Kondensatoren zu wenig. Aufbau und Inbetriebnahme problemlos.&lt;br /&gt;
&lt;br /&gt;
* Bausatz 21.10.09 gekauft, grüne Betriebs-LED. Aufbau problemlos, RS232 läuft nicht. LAN läuft&lt;br /&gt;
&lt;br /&gt;
* Bausatz Nov. 09 gekauft, grüne LED, alles o.k.&lt;br /&gt;
&lt;br /&gt;
* Bausatz Nov. 09 gekauft, grüne LED, ENC28J60, MAX232 und ATmega32 fehlen, Nachlieferung nach einer Woche&lt;br /&gt;
&lt;br /&gt;
*Bausatz Nov. 09 gekauft,Bauteile komplett.Verbindungsaufbau Seriell klappt erst nach mehreren Versuchen.Problem gelöst:Spannung an MAX und Mega zu niedrig&lt;br /&gt;
&lt;br /&gt;
* Bausatz Dez. 09 gekauft, grüne LED, 100µF Kondensator fehlt, alles o.k.&lt;br /&gt;
&lt;br /&gt;
* Bausatz August 09 gekauft, alle teile da nach Einstellen der fusebits lief alles perfekt&lt;br /&gt;
&lt;br /&gt;
* Bausatz Okt. 09 gekauft, ein 100nF Kondensator und 25MHz Quarz fehlten ... hab beim lokalen Elektronikhändler keinen 25Mhz Grundton Quarz sondern nur im 3. Oberton bekommen aber mit R2.2k parallel zum Quarz schwingt er in der Schaltung schön bei 25Mhz. Mit 1µF am MAX232 funktioniert jetzt auch die RS232.&lt;br /&gt;
&lt;br /&gt;
* 2x Bausatz Feb. 10 gekauft, bei beiden fehlten 7805, L1+L2 je 100µH sowie 4x falscher Wert Kondensator an Max232 vorhanden. Fehlende Bauteile nachgelötet und Funktion getestet. Hat alles einwandfrei funktioniert!!!&lt;br /&gt;
&lt;br /&gt;
* Bausatz März. 10 gekauft, RS232 Printbuchse fehlt, dafür 1x 10pol Wannenstecker zuviel. Grüne LED statt Rot. Funktioniert ansonsten einwandfrei.&lt;br /&gt;
&lt;br /&gt;
* Bausatz Jan. 10 gekauft, gelbe LED statt rot, C14...C17: 10uF, weder seriell noch via Ethernet Konnektivität. Nach Austausch von C14-C17 gegen 1uF, wenigstens serielle Kontaktaufnahme möglich, kein Ethernet auch nach Flash von 1.03 mit NetServer.&lt;br /&gt;
&lt;br /&gt;
* Bausatz Feb. 10 gekauft, Spannungsregler LM317T fehlte&lt;br /&gt;
&lt;br /&gt;
* Bausatz März 10 gekauft, gelbe statt rote LED geliefert, aber Aufbau und inbetriebnahme lt. Handbuch ohne Probleme&lt;br /&gt;
&lt;br /&gt;
* Bausatz März 10 gekauft und gelbe statt rote LED geliefert, funzt wunderbar gemäß Anleitung&lt;br /&gt;
&lt;br /&gt;
* Fertig gelötete Platine gekauft. µC war falsch im Sockel.&lt;br /&gt;
&lt;br /&gt;
* Bausatz April 10 gekauft und gelbe statt rote LED geliefert, ADM232LJN statt MAX232 - Funktion erst nach Ersetzung des ADM durch nen MAX&lt;br /&gt;
&lt;br /&gt;
* Bausatz April 10 gekauft und gelbe statt rote LED geliefert, ADM232LJN statt MAX232 - funktionierte sofort auch mit dem ADM232LJN.&lt;br /&gt;
&lt;br /&gt;
* Bausatz April 10 gekauft wurde mit grüner statt roter LED Ausgeliefert&lt;br /&gt;
&lt;br /&gt;
* Bausatz Juni 10 gekauft: wurde mit grüner statt roter Netz-LED ausgeliefert, 2x 22pF Kerko zuviel&lt;br /&gt;
&lt;br /&gt;
* Bausatz August 10 gekauft: komplett und sofort funktioniert&lt;br /&gt;
* Bausatz Juli 10 gekauft: 2 Quarze mit 16 MHz geliefert, statt 1x 16MHz und   1x25MHz.&lt;br /&gt;
* Bausatz September 10 gekauft: hat sofort funktioniert. 1x 3,3k und 1x 10k Widerstand zuviel. Statt 100nF Kondensatoren wurden 1µF geliefert -&amp;gt; Platzprobleme auf der Platine durch grössere Bauform. LED grün.&lt;br /&gt;
* Bausatz Oktober  6 gekauft: alles funktioniert. LED grün statt rot.&lt;br /&gt;
&lt;br /&gt;
* Fertigmodul Oktober 10 gekauft: Auf Anhieb alles funktioniert!&lt;br /&gt;
* Bausatz Oktober 10 gekauft: komplett und sofort funktioniert&lt;br /&gt;
&lt;br /&gt;
* Bausatz November 10 gekauft: komplett und sofort funktioniert (sogar mit der neusten Pollin Firmware 1.03 schon drauf) LED grün statt rot.&lt;br /&gt;
&lt;br /&gt;
* Bausatz November 10 gekauft. Nach Bezug neuer Feinst-Lötspitzen konnte ich ihn dann auch zusammenlöten. Es hat sofort alles funktioniert, obwohl ich nur 12V bzw. 9V Gleichspannung zur Verfügung hatte, und nicht sicher war, wieviel die Komponenten wirklich benötigen. Der Regler wird auch bei 9V Gleichspannungsversorgung noch sehr warm. Da muss auf jeden Fall ein Kühlkörper dran! Ich habe auch eine grüne LED bekommen, ist mir aber wurscht :-)&lt;br /&gt;
&lt;br /&gt;
* Bausatz Dezember 10 gekauft: komplett und funktionierte sofort. Firmware 1.03, grüne LED (Ein Quarz und ein IC-Sockel zu viel)&lt;br /&gt;
&lt;br /&gt;
*Bausatz Januar 2011 gekauft: nur genau die richtige Anzahl Teile dabei, Firmware 1.03, grüne LED, ging auf Anhieb&lt;br /&gt;
&lt;br /&gt;
* 2x Bausatz Januar 2011 gekauft: beide grüne LED, und 1x doppelter Satz Jumper/Stiftleiste, 22PF und Anschlussklemmen. Rest vollständig und beide haben sofort nach zusammenbau funktioniert.&lt;br /&gt;
&lt;br /&gt;
* Februar 2011: AVR-NET-IO: die Diode D5 fehlt, 10 µF gegen 1 µF für MAX232 getauscht, Flash im ATmega32 war programmiert, passende IP-Adr über serielle Schnittstelle eingestellt; ADD-ON: für R1 war 22 Ohm statt 0,2 Ohm beigelegt, durch richtigen ersetzt, Beschreibung der LED Bestückung mangelhaft / oe1smc&lt;br /&gt;
&lt;br /&gt;
* Februar 2011: AVR-NET-IO: 1 Diode zuviel, 2 Spulen fehlen, LED grün. Die fehlenden Spulen wurden durch welche aus der Bastelkiste ersetzt - funktioniert. Der 7805 bekam einen kleinen Kühlkörper spendiert.&lt;br /&gt;
&lt;br /&gt;
* Februar 2011: AVR-NET-IO: 2x 10k Widerstände fehlen. Dafür eine Diode zu viel.&lt;br /&gt;
&lt;br /&gt;
* Ende Februar 2011: Zwei Bausaetze an jeweils zwei Adressen, alles in Ordnung.&lt;br /&gt;
&lt;br /&gt;
* Ende März 2011: 2x 25 Mhz Quarz statt 1x16 u. 1x25 Mhz. LED fehlt. Bausatz funktioniert nach Tausch des Quarz den mir mein Freund oe9rsv aus seinem Fundus spendiert hat. Danke auch für die Hilfe beim Fehler suchen.&lt;br /&gt;
&lt;br /&gt;
* Mitte 2010 gekauft: 1x 100nF fehlt&lt;br /&gt;
&lt;br /&gt;
* Mitte Juni 2011: Beide Quarze fehlen und beide Spannungsregler fehlen, Pollin wollte, dass ich das ganze Paket zurückschicke für einen Austausch. Ein 51 Ohm zu viel. 16Mhz im Handel und 25Mhz vom alten Mobo ausgelötet. Läuft wunderbar.&lt;br /&gt;
&lt;br /&gt;
* Anfang Juni 2011: Beide Quarze fehlen und beide Spannungsregler fehlen, nach kurzer Mail an Pollin (leider ohne Antwort) wurden diese nach ca. 1 Woche in einem Brief nachgeliefert.&lt;br /&gt;
&lt;br /&gt;
* August 2011: alles 1a...&lt;br /&gt;
* August 2011: Platine fehlte -&amp;gt; in Nachlieferung&lt;br /&gt;
* 30 August 2011: alles 1a...&lt;br /&gt;
* 06 Sep. 2011: alles 1a...&lt;br /&gt;
* August 2011: 6 Stück bestellt, bei einem haben die 100nF Kondensatoren gefehlt, bei einem zwei LM317 statt 7805 und LM317. Angerufen, 3 Tage später Nachlieferung erhalten.&lt;br /&gt;
&lt;br /&gt;
== Andere Software für den Client-PC ==&lt;br /&gt;
=== NetIOLib ===&lt;br /&gt;
&lt;br /&gt;
In C# geschriebene Bibliothek zur Ansteuerung der Platine im Orginalzustand. Inkl. Beispielsoftware und Quellcode (GNU GPL) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DLL: [http://www.tware.org/downloads/NetIOLib_dll.zip Download-Link]&lt;br /&gt;
Source: [http://www.tware.org/downloads/NetIOLib_src.zip Download-Link]&lt;br /&gt;
&lt;br /&gt;
=== ControlIO ===&lt;br /&gt;
Einfache Bibliothek zur Ansteuerung mit Originalfirmware.&lt;br /&gt;
http://www.mikrocontroller.net/topic/149695&lt;br /&gt;
&lt;br /&gt;
=== JAVA Lib ===&lt;br /&gt;
Einfache Java-Bibliothek zur Ansteuerung mit Originalfirmware.&lt;br /&gt;
http://son.ffdf-clan.de/?path=forumsthread&amp;amp;threadid=611&lt;br /&gt;
&lt;br /&gt;
=== App NetIO  ===&lt;br /&gt;
Frei verfügbare App für Windows Mobile zur Ansteuerung mit der Orginalsoftware. Das HTC HD2 wird damit zur Fernsteuerung für das AVR Net-IO Board.&lt;br /&gt;
http://www.heesch.net/netio.aspx&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
PHP Klasse zur Ansteuerung mit der Originalfirmware. (Opensource Lizenz)&lt;br /&gt;
http://blog.coldtobi.de/1_coldtobis_blog/archive/298_pollin_net-io_php_library.html&lt;br /&gt;
&lt;br /&gt;
PHP Funktionen zum Ansteuern der Originalfirmware. (Free for All Lizenz)&lt;br /&gt;
http://defcon-cc.dyndns.org/projects/mikrocontroller/netio.php&lt;br /&gt;
&lt;br /&gt;
=== NET-IO Control ===&lt;br /&gt;
Eine Application für das Android Betriebssystem zur Steuerung des AVR Net-IO Boards http://elektronik2000.de/&lt;br /&gt;
&lt;br /&gt;
=== E2000 - Logik (V 1.2@1.3.1c) ===&lt;br /&gt;
[[Datei:E2000-Logik-Bedienoberflaeche.jpg|600px|rechts]]&lt;br /&gt;
&lt;br /&gt;
Anwenderfreundliche Logik-Software vom Elektronik2000.de zur Steuerung des AVR-NET-IO über den Computer (in zukunft auch Autark laufend auf dem Atmel).&lt;br /&gt;
&lt;br /&gt;
Das designen von Schaltaufgaben wird in diesem Programm grafisch dargestellt. Außerdem besitzt die Software einen Kennlinienschreiber und ein Webinterface.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HINWEIS:&#039;&#039;&#039; Mit der aktuellen Alphaversion ist es nun möglich das NET-IO upzudaten und somit autark laufen z lassen.&lt;br /&gt;
&lt;br /&gt;
Team:[http://www.elektronik2000.de E2000-Logik]&lt;br /&gt;
&lt;br /&gt;
== Andere Software statt der Originalsoftware von Pollin ==&lt;br /&gt;
&lt;br /&gt;
Die Umrüstung auf einen Webserver durch Austausch der Software (und ev. des ATmega32) bietet sich an. Kleiner Hinweis dabei: wenn zum Flashen ein ISP-Adapter verwendet wird, diesen unbedingt vor dem Start der neuen Software abziehen! Der ISP arbeitet nämlich über dieselbe SPI-Schnittstelle über die auch der ENC28J60 angesteuert wird. Ein eventuell noch angeschlossener, wenn auch passiver ISP-Adapter stört diese Kommunikation, d.h. das Programm an sich scheint zu laufen, aber die Ethernet-Schnittstelle funktioniert nicht.&lt;br /&gt;
&lt;br /&gt;
=== Bascom Version von Hütti ===&lt;br /&gt;
&lt;br /&gt;
(Quelle: http://bascom-forum.de/index.php/topic,1781.45.html )&lt;br /&gt;
dort am Ende der Seite.&lt;br /&gt;
&lt;br /&gt;
=== Ben&#039;s Bascom Quellcode ===&lt;br /&gt;
&lt;br /&gt;
(Quelle: http://members.home.nl/bzijlstra/software/examples/enc28j60.htm )&lt;br /&gt;
&lt;br /&gt;
Muss aber für Bascom 1.11.9.3 angepasst werden, siehe Code von Hütti !&lt;br /&gt;
&lt;br /&gt;
=== U. Radigs Webserver ===&lt;br /&gt;
&lt;br /&gt;
Angepasster Sourcecode von U.Radig: http://www.mikrocontroller.net/attachment/40027/Webserver_MEGA32.hex&lt;br /&gt;
oder selbst anpassen: &lt;br /&gt;
Ändere im File ENC28J60.H&lt;br /&gt;
 #define ENC28J60_PIN_SS    3&lt;br /&gt;
 #define ENC28J60_PIN_CS    4&lt;br /&gt;
(Quelle: http://www.mikrocontroller.net/topic/109988#988386)&lt;br /&gt;
&lt;br /&gt;
Temporären Dateien (*.d, *,lst,*.o) vorher im Verzeichnis löschen &#039;&#039;make clean&#039;&#039;, damit neu compiliert wird.&lt;br /&gt;
&lt;br /&gt;
IP: 192.168.0.99&amp;lt;br&amp;gt;&lt;br /&gt;
User: admin&amp;lt;br&amp;gt;&lt;br /&gt;
Pass: uli1&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den orginal SourceCode gibt&#039;s übrigens hier:http://www.ulrichradig.de/home/index.php/avr/eth_m32_ex&lt;br /&gt;
&lt;br /&gt;
Bei den Fuses BOOTRST ausschalten, da die Software keinen Bootloader enthält.&lt;br /&gt;
&lt;br /&gt;
Wer gerne als Link-LED die grüne nutzen möchte&lt;br /&gt;
(U.Radig-Source)&lt;br /&gt;
&lt;br /&gt;
enc28j60.c Zeile 150&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;enc28j60_write_phy(ENC28J60_PHY_PHLCON, 0x347A)&lt;br /&gt;
&lt;br /&gt;
Wert 0x347A in 0x374A ändern&lt;br /&gt;
&lt;br /&gt;
(Quelle: http://www.mikrocontroller.net/topic/109988#994943)&lt;br /&gt;
&lt;br /&gt;
IP: 192.168.1.90&amp;lt;br&amp;gt;&lt;br /&gt;
User: admin&amp;lt;br&amp;gt;&lt;br /&gt;
Pass: tim&amp;lt;br&amp;gt;&lt;br /&gt;
Test: http://beitz-online.dyndns.org&amp;lt;br&amp;gt;&lt;br /&gt;
Test: http://pieper-online.dyndns.org&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiterentwicklung des Radig-Codes von RoBue: &amp;lt;br&amp;gt;&lt;br /&gt;
- 1-Wire-Unterstützung (Anschlus an PORTA7) &amp;lt;br&amp;gt;&lt;br /&gt;
- PORTA0-3 digitaler Eingang (ein/aus) &amp;lt;br&amp;gt;&lt;br /&gt;
- PORTA4-6 analoger Eingang (0 - 1023) &amp;lt;br&amp;gt;&lt;br /&gt;
- LCD an PORTC &amp;lt;br&amp;gt;&lt;br /&gt;
- Schalten in Abhängigkeit von Temperatur und analogem Wert &amp;lt;br&amp;gt;&lt;br /&gt;
- (Teilweise) Administration über Weboberfläche &amp;lt;br&amp;gt;&lt;br /&gt;
- Erweiterung des cmd-Befehlsatzes für telnet/rs232 &amp;lt;br&amp;gt;&lt;br /&gt;
Gedacht ist der Einsatz des AVR-NET-IO-Bausatzes für Heizungs- oder Haussteuerung) &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test: http://avrboard.eluhost.de/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Quelle:&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.mikrocontroller.net/attachment/43307/AVR-NET-IO_RoBue_V1.3.zip&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.mikrocontroller.net/attachment/44569/AVR-NET-IO_RoBue_V1.4.zip&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.mikrocontroller.net/attachment/46720/AVR-NET-IO_RoBue_1.5-final_hoffentlich_.zip)&lt;br /&gt;
&lt;br /&gt;
Bei der Ver 1.5 sind die Ports PD2+3 fürs 4bit LCD (Ext.) vertauscht ! Gruß B.P&lt;br /&gt;
&lt;br /&gt;
=== Simon Ks Webserver (uip-Stack) ===&lt;br /&gt;
Angepasster Sourcecode von Simon K: http://www.mikrocontroller.net/attachment/39939/uWebSrv.zip&lt;br /&gt;
IP: 192.168.0.93:8080&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ethersex Server ===&lt;br /&gt;
&lt;br /&gt;
http://www.ethersex.de - Einfach für atmega32 compilieren und funktioniert.&lt;br /&gt;
&lt;br /&gt;
Oder &lt;br /&gt;
[http://www.ethersex.de/firmware-builder/list.cgi hier] ein Firmware Image passend für das Pollin Net-IO mit eingebautem Webserver und Beispieldateien im Flash bauen lassen und flashen (firmware-builder). Einfacher geht´s nimmer. :-)&lt;br /&gt;
&lt;br /&gt;
=== Etherrape Server ===&lt;br /&gt;
&lt;br /&gt;
http://www.lochraster.org/etherrape/ &lt;br /&gt;
&lt;br /&gt;
ist in jedem Fall hier auch zu erwähnen zumal es sich beim etherrape um das Ursprungsprojekt von ethersex handelt.&lt;br /&gt;
Es scheint aber bei der Weiterentwicklung wenig zu passieren.&lt;br /&gt;
Ausführliche Dokumentation findet sich unter http://wiki.lochraster.org/wiki/Etherrape&lt;br /&gt;
&lt;br /&gt;
=== Mini SRCP Server (kommerziell, Closed-Source)===&lt;br /&gt;
&lt;br /&gt;
Damit wird die Platine zu einer Modellbahnsteuerung, die&lt;br /&gt;
über das Netzwerkprotokoll SRCP mit verschiedenen Programmen&lt;br /&gt;
gesteuert werden kann.&lt;br /&gt;
&lt;br /&gt;
[http://www.7soft.de/de/mini_srcp_server/index.html Infoseite] zur Hardware&lt;br /&gt;
und das zugrundeliegende [http://www.der-moba.de/index.php/Digitalprojekt Digitalprojekt].&lt;br /&gt;
&lt;br /&gt;
=== AvrArtNode ===&lt;br /&gt;
&lt;br /&gt;
Hiermit kann die Platine zu einem Art-Net Node werden, mit dem sich ein DMX-Universe über Ethernet übertragen lässt. Basiert auf den Quellen von Ulrich Radig.&lt;br /&gt;
&lt;br /&gt;
Dokumentation: [http://www.dmxcontrol.de/wiki/Art-Net-Node_f%C3%BCr_25_Euro Art-Net-Node für 25 Euro]&lt;br /&gt;
&lt;br /&gt;
=== Webserver von G. Menke ===&lt;br /&gt;
&lt;br /&gt;
Ein Webserver (basierend auf den Sourcen von U. Radig), der so angepasst ist, dass alle Ein- und Ausgänge wie bei der originalen Pollin-Software genutzt werden können (8xDIGOUT, 4xDIGIN, 4xADIN). Der Webserver kann daher direkt auf das Net-IO geladen werden. Im ZIP-File sind ein ReadMe und alle C-Sourcen enthalten. Download:&lt;br /&gt;
[http://gm.stream-center.de/webserver/ Webserver mit passender IO]&lt;br /&gt;
&lt;br /&gt;
=== OpenMCP ===&lt;br /&gt;
&lt;br /&gt;
Tolles Projekt, welches viele Features bietet und stabil läuft. Hervorzuheben ist die Übersichtlichkeit der Programmteile/Module und die vielleicht nicht ganz komplette Dokumentation. Man merkt das viel Arbeit und Liebe in diesen Projekt steckt. Herausgekommen ist dabei eine einfach zu handhabende Entwicklungsumgebung. Anfänger können, dank des gut durchdachten CGI-System welches sich um alle wichtigen Sachen kümmert, leicht eigene CGI implementieren. Alle Ausgaben erfolgen nur mit printf über die Standardausgabe und werden automatisch richtig per Netzwerk übertragen, dadurch ist es auch für den Anfänger recht gut geeignet, da man sich nicht mit der Netzwerkprogrammierung auseinander setzen muss.&lt;br /&gt;
&lt;br /&gt;
Die Software belegt im Moment (Stand Juli 2010) ca. 55 Kb im Flash, so dass man das Board mit einem grösseren µC (z.B. ATMega644) aufrüsten muss.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.neo-guerillaz.de Projekt und Doku]&lt;br /&gt;
&lt;br /&gt;
Der Autor stellt zwei über das Internet erreichbare Testboards bereit unter http://www.neo-guerillaz.de:81 und http://www.neo-guerillaz.de:82 die beide unter OpenMCP laufen, je auf einen AVR-NETIO mit einem ATmega644 und dem eigentlichen Board mit einem ATmega2561. Zusätzlich ist gerade eine Version für das myAVR in Arbeit die schon ordentlich Fortschritte macht.&lt;br /&gt;
&lt;br /&gt;
=== ENC28J60 I/O-Webserver von Thomas Heldt ===&lt;br /&gt;
&lt;br /&gt;
Ein Modul-Webserver (Softwarekompatibel zum Pollin Webserver), der durch div. Module erweitert werden kann, Software in Bascom basierend auf dem Code von Ben Zijlsta wurde erweitert und angepasst:&lt;br /&gt;
&lt;br /&gt;
[http://mikrocontroller.heldt.eu/index.php?page=enc28j60-io-webserver Projekt und Software]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* Diskussion zu diesem Projekt: http://www.mikrocontroller.net/topic/109988&lt;br /&gt;
* [http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en022889 ENC28J60 Produktseite]&lt;br /&gt;
* [http://ww1.microchip.com/downloads/en/DeviceDoc/39662c.pdf ENC28J60 Datenblatt(pdf)]&lt;br /&gt;
* [http://son.ffdf-clan.de Forum für AVR-Net-IO]&lt;br /&gt;
* [http://bascom-forum.de/index.php/topic,1781.0.html Bascom Forum ]&lt;br /&gt;
* [http://hobbyelektronik.org/w/index.php/AVR-NET-IO-Shield Shield für den NET-IO]&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR-Boards]]&lt;br /&gt;
[[Category:Ethernet|P]]&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Kruemeltee&amp;diff=59744</id>
		<title>Benutzer:Kruemeltee</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Kruemeltee&amp;diff=59744"/>
		<updated>2011-08-22T16:36:06Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: /* Schaut doch mal hier vorbei Mini2440 und bei meiner Seite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== &#039;&#039;&#039;Schaut doch mal hier vorbei [[Mini2440]] und bei [http://krumeltee.wordpress.com/ meiner Seite]&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:I2ctools_avr32_grasshopper_ngw100_stk1000.tar.bz2 i2ctools (i2cdetect, i2cdump, i2cget, i2cset) compiliert für AVR32-Linux (Grasshopper, NGW100, STK1000).]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:Max127_avr32.tar.bz2 C-Code zum Auslesen eines MAX127 12Bit I²C ADCs an einem AVR32 unter Linux.]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:LM75_avr32.tar.bz2 C-Code zum Auslesen eines LM75 I²C Temperatursensors an einem AVR32 unter Linux.]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:PCF8574_avr32.tar.bz2 C-Code zum Setzen/Auslesen eines PCF8574 8Bit Portexpanders an einem AVR32 unter Linux.]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/wikifiles/c/ca/Saa1064_avr32.tar.bz2 C-Code für einen SAA1064 4 Digit 7 Segment Treiber via I²C am AVR32]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/wikifiles/8/88/Saa1064_schem.jpg Schaltplan SAA1064]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/attachment/highlight/54535 SDCC Header File für den Controller &#039;&#039;&#039;T89C51AC3&#039;&#039;&#039; von Atmel.]&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Kruemeltee&amp;diff=59743</id>
		<title>Benutzer:Kruemeltee</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Kruemeltee&amp;diff=59743"/>
		<updated>2011-08-22T16:35:43Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: /* Schaut doch mal hier vorbei Mini2440 und bei meiner Seite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== &#039;&#039;&#039;Schaut doch mal hier vorbei [[Mini2440]] und bei [http://krumeltee.wordpress.com/ meiner Seite]&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:I2ctools_avr32_grasshopper_ngw100_stk1000.tar.bz2 i2ctools (i2cdetect, i2cdump, i2cget, i2cset) compiliert für AVR32-Linux (Grasshopper, NGW100, STK1000).]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:Max127_avr32.tar.bz2 C-Code zum Auslesen eines MAX127 12Bit I²C ADCs an einem AVR32 unter Linux.]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:LM75_avr32.tar.bz2 C-Code zum Auslesen eines LM75 I²C Temperatursensors an einem AVR32 unter Linux.]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:PCF8574_avr32.tar.bz2 C-Code zum Setzen/Auslesen eines PCF8574 8Bit Portexpanders an einem AVR32 unter Linux.]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/wikifiles/c/ca/Saa1064_avr32.tar.bz2 C-Code für einen SAA1064 4 Digit 7 Segment Treiber via I²C am AVR32 (grasshopper/ngw100/...)]&lt;br /&gt;
[http://www.mikrocontroller.net/wikifiles/8/88/Saa1064_schem.jpg Schaltplan]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/attachment/highlight/54535 SDCC Header File für den Controller &#039;&#039;&#039;T89C51AC3&#039;&#039;&#039; von Atmel.]&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Saa1064_schem.jpg&amp;diff=59742</id>
		<title>Datei:Saa1064 schem.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Saa1064_schem.jpg&amp;diff=59742"/>
		<updated>2011-08-22T16:34:54Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Saa1064_avr32.tar.bz2&amp;diff=59741</id>
		<title>Datei:Saa1064 avr32.tar.bz2</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Saa1064_avr32.tar.bz2&amp;diff=59741"/>
		<updated>2011-08-22T16:24:36Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Kruemeltee&amp;diff=59740</id>
		<title>Benutzer:Kruemeltee</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Kruemeltee&amp;diff=59740"/>
		<updated>2011-08-22T16:23:22Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: /* Schaut doch mal hier vorbei Mini2440 und bei meiner Seite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== &#039;&#039;&#039;Schaut doch mal hier vorbei [[Mini2440]] und bei [http://krumeltee.wordpress.com/ meiner Seite]&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:I2ctools_avr32_grasshopper_ngw100_stk1000.tar.bz2 i2ctools (i2cdetect, i2cdump, i2cget, i2cset) compiliert für AVR32-Linux (Grasshopper, NGW100, STK1000).]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:Max127_avr32.tar.bz2 C-Code zum Auslesen eines MAX127 12Bit I²C ADCs an einem AVR32 unter Linux.]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:LM75_avr32.tar.bz2 C-Code zum Auslesen eines LM75 I²C Temperatursensors an einem AVR32 unter Linux.]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:PCF8574_avr32.tar.bz2 C-Code zum Setzen/Auslesen eines PCF8574 8Bit Portexpanders an einem AVR32 unter Linux.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/attachment/highlight/54535 SDCC Header File für den Controller &#039;&#039;&#039;T89C51AC3&#039;&#039;&#039; von Atmel.]&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Kruemeltee&amp;diff=59542</id>
		<title>Benutzer:Kruemeltee</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Kruemeltee&amp;diff=59542"/>
		<updated>2011-08-15T12:50:47Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: /* Schaut doch mal hier vorbei Mini2440 und bei meiner Seite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== &#039;&#039;&#039;Schaut doch mal hier vorbei [[Mini2440]] und bei [http://krumeltee.wordpress.com/ meiner Seite]&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:I2ctools_avr32_grasshopper_ngw100_stk1000.tar.bz2 i2ctools (i2cdetect, i2cdump, i2cget, i2cset) compiliert für AVR32-Linux (Grasshopper, NGW100, STK1000).]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:Max127_avr32.tar.bz2 C-Code zum Auslesen eines MAX127 12Bit I²C ADCs an einem AVR32 unter Linux.]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:LM75_avr32.tar.bz2 C-Code zum Auslesen eines LM75 I²C Temperatursensors an einem AVR32 unter Linux.]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:PCF8574_avr32.tar.bz2 C-Code zum Setzen/Auslesen eines PCF8574 8Bit Portexpanders an einem AVR32 unter Linux.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/attachment/highlight/54535 SDCC Header File für den Controller &#039;&#039;&#039;T89C51AC3&#039;&#039;&#039; von Atmel.&lt;br /&gt;
]&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:PCF8574_avr32.tar.bz2&amp;diff=59541</id>
		<title>Datei:PCF8574 avr32.tar.bz2</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:PCF8574_avr32.tar.bz2&amp;diff=59541"/>
		<updated>2011-08-15T12:49:03Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:LM75_avr32.tar.bz2&amp;diff=59540</id>
		<title>Datei:LM75 avr32.tar.bz2</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:LM75_avr32.tar.bz2&amp;diff=59540"/>
		<updated>2011-08-15T12:48:47Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Max127_avr32.tar.bz2&amp;diff=59539</id>
		<title>Datei:Max127 avr32.tar.bz2</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Max127_avr32.tar.bz2&amp;diff=59539"/>
		<updated>2011-08-15T12:36:36Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Kruemeltee&amp;diff=59538</id>
		<title>Benutzer:Kruemeltee</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Kruemeltee&amp;diff=59538"/>
		<updated>2011-08-15T12:36:19Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: /* Schaut doch mal hier vorbei Mini2440 und bei meiner Seite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== &#039;&#039;&#039;Schaut doch mal hier vorbei [[Mini2440]] und bei [http://krumeltee.wordpress.com/ meiner Seite]&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/articles/Datei:I2ctools_avr32_grasshopper_ngw100_stk1000.tar.bz2 i2ctools (i2cdetect, i2cdump, i2cget, i2cset) compiliert für AVR32-Linux (Grasshopper, NGW100, STK1000).]&lt;br /&gt;
&lt;br /&gt;
[[Datei:max127_avr32.tar.bz2]] C-Code zum Auslesen eines MAX127 12Bit I²C ADCs an einem AVR32 unter Linux.&lt;br /&gt;
&lt;br /&gt;
[[Datei:LM75_avr32.tar.bz2]] C-Code zum Auslesen eines LM75 I²C Temperatursensors an einem AVR32 unter Linux.&lt;br /&gt;
&lt;br /&gt;
[[Datei:PCF8574_avr32.tar.bz2]] C-Code zum Setzen/Auslesen eines PCF8574 8Bit Portexpanders an einem AVR32 unter Linux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/attachment/highlight/54535] SDCC Header File für den Controller &#039;&#039;&#039;T89C51AC3&#039;&#039;&#039; von Atmel.&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=I%C2%B2C&amp;diff=59438</id>
		<title>I²C</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=I%C2%B2C&amp;diff=59438"/>
		<updated>2011-08-11T12:18:34Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: /* Bausteine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;I²C&#039;&#039;&#039; ist ein synchroner serieller Zweidraht-[[Bus]] (eine Daten- und eine Taktleitung), der für die Kommunikation zwischen [[IC]]s über kleine Distanzen geeignet ist. Entwickelt wurde er Anfang der 80er Jahre von Philips.&lt;br /&gt;
Gesprochen &amp;quot;I quadrat C&amp;quot; steht für IIC = Inter [[IC]] Bus. Aus Lizenzgründen heißt der I²C Bus bei manchen Herstellern auch &#039;&#039;&#039;TWI&#039;&#039;&#039;, two wire interface.&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
In einem I²C-Bus gibt es mindestens einen Master und bis zu 128 Slaves. Ein I²C-Bus mit mehreren Mastern wird als &amp;quot;Multi-Master-Bus&amp;quot; bezeichnet.&lt;br /&gt;
Der (oder die) Master sprechen die Slaves an; ein Slave kann NIE selbstständig Daten senden. Dazu übernimmt der Master, der Daten senden oder empfangen möchte, den Bus und gibt die (7-bit- bzw. 10-bit-)Adresse des Slaves aus, mit dem er kommunizieren möchte. Nach der Adresse teilt der Master dem entsprechenden Slave mit, ob er Daten senden oder empfangen möchte. Danach werden die eigentlichen Daten (entweder vom Master oder Slave) auf den Bus gelegt. Hat der Master den Lese- oder Schreibvorgang abgeschlossen, so gibt er den Bus wieder frei.&lt;br /&gt;
Sofern mehrere Master vorhanden sind, stellt ein Protokoll sicher, dass sich diese nicht gegenseitig stören.&lt;br /&gt;
&lt;br /&gt;
=== I2C - Übertragungsraten  ===&lt;br /&gt;
Die Übertragungsrate beträgt beim standard mode bis zu 100 kbit/s, beim fast mode bis zu 400 kbit/s und beim high-speed mode bis zu 3,4 MBit/s. Falls die Taktrate für einen Slave zu hoch ist, kann er die Clock-Leitung auf Null ziehen und die Übertragung damit verlangsamen. Dies ist auf Bit- wie auf Byte-Ebene möglich; ersteres allerdings nicht im high-speed mode.&lt;br /&gt;
Um längere Übertragungswege zu realisieren, kann man die Taktrate fast beliebig vermindern (einige Bausteine erzeugen aber irgendwann ein Time-Out). Mit einer Taktfrequenz von nur 5 kbit/s können dann durchaus mehrere Meter überbrückt werden.&lt;br /&gt;
&lt;br /&gt;
Im PC wird ein dem I²C-Bus sehr ähnliches System benutzt, um z.&amp;amp;nbsp;B. die Daten eines [[SDRAM]]-Modules auszulesen. Dieser nennt sich [[SMBus]] (System Management Bus).&lt;br /&gt;
&lt;br /&gt;
Erfahrungen mit den Atmegas (gemessene I2C-Taktfrequenzen):&lt;br /&gt;
* 16,000MHz - schafft sauber bis zu 700KHz&lt;br /&gt;
* 18,432MHz - schafft sauber bis zu 950KHz&lt;br /&gt;
&lt;br /&gt;
Selbst unter schlechten Bedingungen wie...&lt;br /&gt;
* 50cm 6-adriges Spiralkabel, frei schwingend verbaut in einem Rennwagen als Verbindung zwischen Lenkraddisplay und Amaturenbrett&lt;br /&gt;
* Nähe zu nicht geschirmten Leitungen mit 12V, GND und 5V PWM zum Dimmen von LEDs&lt;br /&gt;
* grausamen Umgebungsgedingungen, Fahrten im Regen, Schnee oder bei glühender Sonne und gefühlten 100° C ;-) auf der Rennstrecke.&lt;br /&gt;
hat der Bus ohne Probleme funktioniert.&lt;br /&gt;
&lt;br /&gt;
=== Bausteine ===&lt;br /&gt;
&lt;br /&gt;
Neben Mikrocontrollern gibt es eine Reihe von Peripheriebausteinen, die per I²C angeschlossen werden können. Eine gute Anlaufstelle bei der Suche ist die unten angegebene Seite des &amp;quot;Erfinders&amp;quot; Philips, heute als [http://www.nxp.com NXP] bekannt.&lt;br /&gt;
&lt;br /&gt;
*serielle [[Speicher#EEPROM | EEPROM]]s &lt;br /&gt;
** [http://www.datasheetcatalog.net/cgi-bin/helo.pl?text=24C01&amp;amp;action=Search 24Cxx]&lt;br /&gt;
** [http://ics.nxp.com/products/pcf/seeproms/ PCF85xx von NXP, 256-2048 Byte]&lt;br /&gt;
&lt;br /&gt;
*I/O-Portexpander&lt;br /&gt;
** [[I2C-Schaltmodul|PCF8574]]&lt;br /&gt;
** MCP23008 (8-bit) von Microchip&lt;br /&gt;
** MCP23017 (16-bit) von Microchip&lt;br /&gt;
&lt;br /&gt;
* I2C MUX, zum Anschluss von ICs mit gleicher, fester Adresse&lt;br /&gt;
** [http://www.datasheetcatalog.org/cgi-bin/helo.pl?field=Nume&amp;amp;type=C&amp;amp;text=PCA9545A&amp;amp;producedby=&amp;amp;action=Search PCA9545A]&lt;br /&gt;
&lt;br /&gt;
* [[AD-Wandler]]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/182614 12x12 Bit ADC MAX1238]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/182614 12x10 Bit ADC MAX1138]&lt;br /&gt;
** [http://www.maxim-ic.com/datasheet/index.mvp/id/1890 MAX127 und MAX128 von Maxim, 12bit x8, PDIP24+SSOP28]&lt;br /&gt;
** [http://www.jtronics.de/elektronik-boards/adc-8bit-max1038.html 12x8  Bit ADC MAX1038]&lt;br /&gt;
&lt;br /&gt;
* [[DA-Wandler]]&lt;br /&gt;
** [http://www.datasheetcatalog.net/cgi-bin/helo.pl?field=Nume&amp;amp;type=C&amp;amp;text=TDA8444&amp;amp;producedby=&amp;amp;action=Search TDA8444, 8x6Bit]&lt;br /&gt;
&lt;br /&gt;
* Uhrenbausteine&lt;br /&gt;
** [http://www.datasheetcatalog.net/cgi-bin/helo.pl?field=Nume&amp;amp;type=C&amp;amp;text=PCF8583&amp;amp;producedby=&amp;amp;action=Search PCF8583, mit 256 Bytes RAM]&lt;br /&gt;
** DS1307&lt;br /&gt;
&lt;br /&gt;
* [[LCD]]-Treiber&lt;br /&gt;
** [http://www.datasheetcatalog.net/cgi-bin/helo.pl?field=Nume&amp;amp;type=C&amp;amp;text=PCF8577&amp;amp;producedby=&amp;amp;action=Search PCF8577, 2x32 Segmente]&lt;br /&gt;
&lt;br /&gt;
* [[Temperatursensor|Temperatursensoren]]&lt;br /&gt;
** [http://www.datasheetcatalog.net/cgi-bin/helo.pl?text=DS1621&amp;amp;action=Search DS1621]&lt;br /&gt;
** [http://www.datasheetcatalog.net/cgi-bin/helo.pl?text=lm75&amp;amp;action=Search LM75]&lt;br /&gt;
** [http://www.sensirion.com/en/pdf/product_information/Datasheet-humidity-sensor-SHT21.pdf SHT21]&lt;br /&gt;
** TMP101 von TexasInstruments&lt;br /&gt;
** TMP175 von TI (mehr als 8 Bausteine im gleichen Bus möglich)&lt;br /&gt;
&lt;br /&gt;
=== Galvanische Trennung ===&lt;br /&gt;
* http://www.analog.com/static/imported-files/application_notes/AN_913.pdf&lt;br /&gt;
* http://www.analog.com/en/interface/digital-isolators/products/index.html#Isolated_I2C_Isolators&lt;br /&gt;
* http://www.mikrocontroller.net/attachment/5670/Galvanische_Trennung_fuer_I2C-Bus.pdf&lt;br /&gt;
* http://www.esacademy.com/en/library/technical-articles-and-documents/miscellaneous/i2c-bus/frequently-asked-questions/i2c-faq.html&lt;br /&gt;
* http://www.mikrocontroller.net/topic/17425#125464&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[AT91-TWI]]&lt;br /&gt;
* [[AVR TWI]]&lt;br /&gt;
* [[I2C als Hausbus]]&lt;br /&gt;
* Beitrag zu [http://www.mikrocontroller.net/topic/181115#1748880 I2C-Adressen] im Forum&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://ics.nxp.com/interface/ NXP (ehemals Philips) Produktseite]&lt;br /&gt;
* [http://www.nxp.com/acrobat/usermanuals/UM10204_3.pdf I2C Spezifikation 3.0]&lt;br /&gt;
* [http://www.i2c-bus.org I²C FAQ, Einführung, Hintergrundinformationen]&lt;br /&gt;
* [http://www.robotikhardware.de/download/rn_pc_i2c.pdf robotikhardware.de]&lt;br /&gt;
&lt;br /&gt;
=== Bibliotheken ===&lt;br /&gt;
* [http://www.jtronics.de/elektronik-avr/lib-i2ctwi-avr.html AVR TWI Slave]&lt;br /&gt;
&lt;br /&gt;
===I²C-Interface===&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/155136#1462320 Beitrag &amp;quot;i2c usb interface&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
===I²C-Monitor===&lt;br /&gt;
*http://realterm.sourceforge.net/#I2C%20Bus&lt;br /&gt;
*http://www.avrfreaks.net/index.php?module=FreaksTools&amp;amp;func=viewItem&amp;amp;item_id=411&lt;br /&gt;
* [http://www.telos.info/ConniiMM20 Connii MM 2.0 - I²C Monitor with USB Interface]&lt;br /&gt;
* [http://www.telos.info/traciixl20 Tracii XL - High-End I²C Monitor]&lt;br /&gt;
*http://i2cchip.com/&lt;br /&gt;
* [http://www.ullihome.de/index.php/Hauptseite#USB_AVR-Lab I2C Logger Firmware für USB AVR-ISP]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/41535 I2C Monitor mit Mega8 (Firmware)]&lt;br /&gt;
* [http://warmcat.com/milksop/cheapi2c.html Cheapi2c] by Numbnut (Andy Green) uses your PC CPU (Linux only!) and printer port to perform realtime snooping of a standard 100kHz I2C bus with 100% capture.&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/103600#905495 I2C (TWI) Sniffer]. Basierend auf einem ATtiny85 mit Ausgabe auf RS232 (C und ASM).&lt;br /&gt;
* [http://en.radzio.dxp.pl/i2c-sniffer/ I2C/TWI bus sniffer/analyzer] (ATTiny2313 @ 20 MHz und USB über FTDI FT245RL oder UM245R)&lt;br /&gt;
* [http://www.i2cchip.com/start_bit_detector1.jpg I2C Startbit-Detector] auf [http://www.i2cchip.com/ www.i2cchip.com]&lt;br /&gt;
* [http://www.harbaum.org/till/i2c_tiny_usb/index.shtml i2c-tiny-usb open source/open hardware zum Auslesen mit einem PC]&lt;br /&gt;
&lt;br /&gt;
[[Category:I2C| ]]&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AD-Wandler&amp;diff=59365</id>
		<title>AD-Wandler</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AD-Wandler&amp;diff=59365"/>
		<updated>2011-08-09T22:40:39Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: /* ADC I2C/TWI BUS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Abkürzung AD-Wandler steht für einen Analog-Digital-Wandler (teilweise auch ADU, Analog-Digital-Umsetzer; im Englischen ADC Analog-Digital-Converter). Dieser wandelt eine [[analog|analoge]] Größe, meist eine Spannung, in einen [[digital|digitalen]] Wert um. Das Gegenstück ist der [[DA-Wandler]].&lt;br /&gt;
&lt;br /&gt;
Die Auflösung mit der die analoge Größe gemessen wird bewegt sich zwischen 1 (Komparator) und 24 [[Digitaltechnik|Bit]]. Den durch die Wandlung entstehenden Fehler zwischen dem tatsächlichen Wert und dem ausgegebenen (gewandelten) Wert nennt man [[Quantisierung|Quantisierungsfehler]]. Er entsteht durch die unvermeidbare Rundung. Ferner entsteht durch die Nichtlinearität des Bauteils ebenfalls ein Fehler.&lt;br /&gt;
&lt;br /&gt;
Der Wandlungsvorgang benötigt immer eine gewisse Zeit, während der die Eingangsgröße konstant bleiben muss. Das gilt auch für den Flash-ADC, da nicht alle Komparatoren gleich schnell sind. Hierfür werden sogenannte &#039;Track and Hold&#039; bzw. &#039;Sample and Hold&#039; Schaltungen verwendet, welche das Eingangssignal &amp;quot;einfrieren&amp;quot; während die AD-Wandlung läuft.&lt;br /&gt;
&lt;br /&gt;
== Verfahren ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Flash&#039;&#039;&#039;- oder Parallel-Wandler verwenden für jeden Ausgangswert einen Komparator. Dadurch sind sie sehr schnell, aber auch teuer und stromhungrig. Flash-Wandler werden unter anderem in [[Oszilloskop#Digitale Oszilloskope|Digitalen Oszilloskopen]] eingesetzt.&lt;br /&gt;
* &#039;&#039;&#039;Sukzessive Approximation (SAR)&#039;&#039;&#039;: Stufenweise Annäherung, Wägeverfahren. Benötigt einen [[DA-Wandler]], mit dem man sich Bit für Bit an die zu messende Spannung herantastet.&lt;br /&gt;
** Der interne AD-Wandler eines [[AVR]] verwendet diese Methode&lt;br /&gt;
* &#039;&#039;&#039;Single Slope, Dual Slope&#039;&#039;&#039; Verfahren: Werden meist in Multimetern oder ähnlichen Messgeräten verwendet da sie billig sind, wenig Strom brauchen und gute Linearitäten besitzen. Im Prinzip wird hier die Spannungsmessung über eine Zeitmessung realisiert (Zeitmessung des Auf- und Entladen eines Kondensators).&lt;br /&gt;
* &#039;&#039;&#039;Delta Sigma&#039;&#039;&#039;: Vor allem für sehr genaue Messungen (24 Bit). Preisgünstig herstellbar, da nur ein Komparator und Logik-Elemente benötigt werden, dafür recht langsam. Werden vor allem im Audio-Bereich eingesetzt.&lt;br /&gt;
* &#039;&#039;&#039;Spannungs-Frequenz-Umsetzer&#039;&#039;&#039;: Hier steuert die Eingangsspannung einen Oszillator, dessen Ausgangsfrequenz möglichst linear von der Eingangsspannung abhängt (Frequenzmodulation).&lt;br /&gt;
* &#039;&#039;&#039;Nachlauf-Verfahren&#039;&#039;&#039;: Es wird auch hier ein DAC benötigt, der von einem Auf-Abwärtszähler gesteuert wird. Ein Komparator steuert ob auf- oder abwärts gezählt wird.&lt;br /&gt;
&lt;br /&gt;
== Kenngrößen ==&lt;br /&gt;
&lt;br /&gt;
Als Kenngrößen gibt es bei einem ADC bedeutend mehr als nur die [[Auflösung und Genauigkeit | Auflösung]]. Z.B. wäre es nicht schlecht, wenn er keine sogenannten &#039;Missing-Codes&#039; hätte. Hier fehlen einfach gewisse Ausgangswerte, die Kennline hat Sprünge. &lt;br /&gt;
&lt;br /&gt;
Weiters wichtig ist die Linearität. Es kann sein, dass die Kennlinie nichtlinear ist (Kennlinie Ausgangscode-Eingangsspannung gebogen) oder aber die einzelnen Stufen sind nicht gleich groß.&lt;br /&gt;
&lt;br /&gt;
Außerdem wichtig sind Eingangsrauschen, Samplingzeit und Stromverbrauch.&lt;br /&gt;
&lt;br /&gt;
==Praxis==&lt;br /&gt;
&lt;br /&gt;
=== Große Spannungen messen ===&lt;br /&gt;
&lt;br /&gt;
Will man einen AD-Wandler dazu nutzen große Spannungen zu messen, so behilft man sich mit einem [[Spannungsteiler]] nach Masse. So wird erreicht, dass die maximale Eingangsspannung bzw. Referenzspannung des AD-Wandlers nicht überschritten werden. Über das bekannte Widerstandsverhältnis kann dann per Software vom AD-Wert auf die gemessene Spannung zurückgeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
=== Negative Spannungen messen ===&lt;br /&gt;
&lt;br /&gt;
Will man nun negative Spannungen messen, steht man vor dem Problem, den AD-Wandler keinen negativen Spannungen aussetzen zu dürfen. Hier hilft auch ein [[Spannungsteiler]] nach Masse nicht weiter. Es ist jedoch genausogut möglich, einen Spannungsteiler auf eine positive Spannung, z.&amp;amp;nbsp;B. die Betriebsspannung des AD-Wandlers zu beziehen. Um verlässliche Messwerte zu erhalten, darf die Bezugsspannung nicht schwanken, sollte also z.&amp;amp;nbsp;B. von einem Spannungsregler oder besser noch von einer [[Spannungsreferenz]] wie z.&amp;amp;nbsp;B. LM336 erzeugt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        Vcc&lt;br /&gt;
        ---&lt;br /&gt;
         |&lt;br /&gt;
        +-+&lt;br /&gt;
        | | R1&lt;br /&gt;
        +-+&lt;br /&gt;
         |&lt;br /&gt;
         +---o Uadc&lt;br /&gt;
         |&lt;br /&gt;
        +-+&lt;br /&gt;
        | | R2&lt;br /&gt;
        +-+&lt;br /&gt;
         |&lt;br /&gt;
Uin- o---+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathrm{U_{adc}=(V_{CC}-U_{in-}) \cdot \frac{R_2}{R_1+R_2} + U_{in-}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathrm{U_{in-}=\frac{U_{adc}-V_{CC} \cdot \frac{R_2}{R_1+R_2}}{1-\frac{R_2}{R_1+R_2}}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei differentieller Messung sind Bezugsspannugsschwankungen theoretisch kein Problem, praktisch bildet man aber eine Art Wheatstone-Brücke nach, sodass durch die Toleranzen der Widerstände große Abweichungen auftreten können, wenn sich die Bezugsspannung ändert (z.&amp;amp;nbsp;B. Batteriebetrieb).&lt;br /&gt;
&lt;br /&gt;
Siehe auch im Forum:&lt;br /&gt;
*[http://www.mikrocontroller.net/forum/read-1-173727.html Mit AD-Wandler negative Spannungen messen]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/78480 Vcc gegen interne Referenz messen] (AVR)&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/214334?goto=2131995#2131984 Forumsbeitrag]: Berechung der Auflösung und des Messwerts, immer &amp;lt;math&amp;gt;\frac{1}{2^n}&amp;lt;/math&amp;gt; und nicht &amp;lt;math&amp;gt;\frac{1}{2^n-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wechselspannung mit AC-Kopplung messen ===&lt;br /&gt;
&lt;br /&gt;
In manchen Fällen, zum Beispiel bei Audio-Signalen, interessiert man sich nicht für den Gleichspannungsanteil (DC), sondern nur für den Wechselspannungsanteil (AC) eines Signals. In diesem Fall kann man durch einen Kondensator in Reihe eine sogenannte AC-Kopplung herstellen. Näheres dazu im Beitrag [http://www.mikrocontroller.net/topic/90989#new  AC Kopplung wie groß muss der Kondesator sein?].&lt;br /&gt;
&lt;br /&gt;
=== Genaues Messen und Fixed-Point Arithmetik ===&lt;br /&gt;
&lt;br /&gt;
Siehe Forumsbeitrag [http://www.mikrocontroller.net/topic/170454#1630106 ADC und Fixed-Point Arithmetik] von Bernd N. und den Artikel [[Festkommaarithmetik]].&lt;br /&gt;
&lt;br /&gt;
Zitierte Appnotes:&lt;br /&gt;
* [http://www.atmel.com/dyn/resources/prod_documents/doc2559.pdf AVR120: Characterization and Calibration of the ADC on an AVR] (PDF)&lt;br /&gt;
* [http://www.atmel.com/dyn/resources/prod_documents/doc8003.pdf AVR121: Enhancing ADC resolution by oversampling] (PDF)&lt;br /&gt;
&lt;br /&gt;
== Externe AD-Wandler Bausteine ==&lt;br /&gt;
=== ADC I2C/TWI BUS === &lt;br /&gt;
* [http://www.mikrocontroller.net/topic/182614 12x12 Bit ADC MAX1238]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/182614 12x10 Bit ADC MAX1138]&lt;br /&gt;
* [http://www.jtronics.de/elektronik-boards/adc-8bit-max1038.html 12x8  Bit ADC MAX1038]&lt;br /&gt;
* [http://www.maxim-ic.com/datasheet/index.mvp/id/1890 8 x 12bit ADC MAX127]&lt;br /&gt;
&lt;br /&gt;
=== ADC SPI BUS === &lt;br /&gt;
*  1x8 Bit TLC549&lt;br /&gt;
*  1x22 Bit MCP3351&lt;br /&gt;
&lt;br /&gt;
=== ADC UART BUS === &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=== ADC CAN BUS === &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.tu-ilmenau.de/fakia/Interfacetechnik.5279.0.html Vorlesung Interfacetechnik] von Dr.-Ing. Norbert Hirt an der TU Ilmenau&lt;br /&gt;
* [http://focus.ti.com/docs/toolsw/folders/print/adcpro.html Simulationssoftware für AD Wandler]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]]&lt;br /&gt;
* [http://www.embedded.com/design/212101523 The ABC&#039;s of A-D converter latency] by Bonnie Baker, Texas Instruments (via Embedded.com)&lt;br /&gt;
* [http://www.embedded.com/design/multicore/217700911?printable=true Writing software drivers for analog to digital converters], By Mark Thoren and Leo Chen, Linear Technology Corp., Embedded.com, ([[I2C]])&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:I2ctools_avr32_grasshopper_ngw100_stk1000.tar.bz2&amp;diff=59188</id>
		<title>Datei:I2ctools avr32 grasshopper ngw100 stk1000.tar.bz2</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:I2ctools_avr32_grasshopper_ngw100_stk1000.tar.bz2&amp;diff=59188"/>
		<updated>2011-08-03T20:17:44Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Kruemeltee&amp;diff=59187</id>
		<title>Benutzer:Kruemeltee</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Kruemeltee&amp;diff=59187"/>
		<updated>2011-08-03T20:17:25Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: /* Schaut doch mal hier vorbei Mini2440 und bei meiner Seite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== &#039;&#039;&#039;Schaut doch mal hier vorbei [[Mini2440]] und bei [http://krumeltee.wordpress.com/ meiner Seite]&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:i2ctools_avr32_grasshopper_ngw100_stk1000.tar.bz2]] i2ctools (i2cdetect, i2cdump, i2cget, i2cset) compiliert für AVR32-Linux (Grasshopper, NGW100, STK1000).&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/attachment/highlight/54535] SDCC Header File für den Controller &#039;&#039;&#039;T89C51AC3&#039;&#039;&#039; von Atmel.&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Kruemeltee&amp;diff=59166</id>
		<title>Benutzer:Kruemeltee</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Kruemeltee&amp;diff=59166"/>
		<updated>2011-08-02T18:45:58Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: /* Schaut doch mal hier vorbei Mini2440 und bei MPD Client Programming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== &#039;&#039;&#039;Schaut doch mal hier vorbei [[Mini2440]] und bei [http://krumeltee.wordpress.com/ meiner Seite]&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/attachment/highlight/54535] SDCC Header File für den Controller &#039;&#039;&#039;T89C51AC3&#039;&#039;&#039; von Atmel.&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sinus_Tabelle&amp;diff=58868</id>
		<title>Sinus Tabelle</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sinus_Tabelle&amp;diff=58868"/>
		<updated>2011-07-24T11:19:32Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: Die Seite wurde neu angelegt: „&amp;#039;&amp;#039;von kruemeltee&amp;#039;&amp;#039;  Da die Sinusberechnung auf einem Mikrocontroller sehr zeitintensiv ist, kann man in vielen Fällen auch mit einer fest…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [[Benutzer:kruemeltee|kruemeltee]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Da die Sinusberechnung auf einem Mikrocontroller sehr zeitintensiv ist, kann man in vielen Fällen auch mit einer festen Sinustabelle arbeiten, aus welcher die Werte geholt werden.&lt;br /&gt;
&lt;br /&gt;
Natürlich lässt sich dieses Prinzip analog auch für Cosinus, Tangens, usw. verwenden.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel in C, welches eine kleine Sinustabelle im Programspace hält, die Werte ausliest und auf einem Display ausgibt.&lt;br /&gt;
Dieses Beispiel gibt die Werte auf dem Display mit der Fleury-Display-Library aus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
float sine_table_16_entries[16] PROGMEM = {&lt;br /&gt;
     0.00000,&lt;br /&gt;
     0.38268,&lt;br /&gt;
     0.70711,&lt;br /&gt;
     0.92388,&lt;br /&gt;
     1.00000,&lt;br /&gt;
     0.92388,&lt;br /&gt;
     0.70711,&lt;br /&gt;
     0.38268,&lt;br /&gt;
     0.00000,&lt;br /&gt;
     -0.38268,&lt;br /&gt;
     -0.70711,&lt;br /&gt;
     -0.92388,&lt;br /&gt;
     -1.00000,&lt;br /&gt;
     -0.92388,&lt;br /&gt;
     -0.70711,&lt;br /&gt;
     -0.38268&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
	lcd_init(LCD_DISP_ON);&lt;br /&gt;
   	lcd_clrscr();&lt;br /&gt;
&lt;br /&gt;
	sprintf(buffer, &amp;quot;%f&amp;quot;, pgm_read_float(&amp;amp;sine_table_16_entries[3]));&lt;br /&gt;
	lcd_gotoxy(0,0);&lt;br /&gt;
	lcd_puts(buffer);&lt;br /&gt;
&lt;br /&gt;
	for(;;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Erstellen einer Sinustabelle wie im obigen Beispiel habe ich ein kleines Programm geschrieben, welches ein Headerfile mit einer Sinustabelle in beliebiger Grösse erzeugt.&lt;br /&gt;
&lt;br /&gt;
Das Programm lässt sich hier herunterladen: [[Datei:sintab.zip]]&lt;br /&gt;
&lt;br /&gt;
Hier ist der Quellcode dazu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    FILE *fp;&lt;br /&gt;
    char buffer[256];&lt;br /&gt;
    double sine, sine_base = 0.0;&lt;br /&gt;
    int x = 0;&lt;br /&gt;
    int steps;&lt;br /&gt;
&lt;br /&gt;
    printf(&amp;quot;Anzahl der gewuenschten Eintraege: &amp;quot;);&lt;br /&gt;
    scanf(&amp;quot;%d&amp;quot;, &amp;amp;steps);&lt;br /&gt;
&lt;br /&gt;
    fp = fopen(&amp;quot;sine_table.h&amp;quot;, &amp;quot;w&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    sprintf(buffer, &amp;quot;#ifndef __SINE_TABLE_H__\n#define __SINE_TABLE_H__\n\ndouble sine_table_%d_entries[%d] = {\n&amp;quot;, steps, steps);&lt;br /&gt;
    fputs(buffer, fp);&lt;br /&gt;
&lt;br /&gt;
    while(x &amp;lt; steps) {&lt;br /&gt;
          sine = sin(sine_base);&lt;br /&gt;
          if(x != steps-1) sprintf(buffer, &amp;quot;     %0.5f,\n&amp;quot;, sine);&lt;br /&gt;
          else sprintf(buffer, &amp;quot;     %0.5f\n&amp;quot;, sine);&lt;br /&gt;
          fputs(buffer, fp);&lt;br /&gt;
          sine_base += ((2.0*M_PI)/steps);&lt;br /&gt;
          x++;  &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    fputs(&amp;quot;};\n\n#endif\n&amp;quot;, fp);&lt;br /&gt;
    fclose(fp);&lt;br /&gt;
    printf(&amp;quot;Sinustabelle mit %d Eintraegen erzeugt (sine_table.h)!\n&amp;quot;, steps);&lt;br /&gt;
    system(&amp;quot;PAUSE&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Sintab.zip&amp;diff=58867</id>
		<title>Datei:Sintab.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Sintab.zip&amp;diff=58867"/>
		<updated>2011-07-24T11:18:53Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: Programm zum erstellen eines Headerfiles für AVR-GCC mit einer Sinustabelle in beliebiger Grösse.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Programm zum erstellen eines Headerfiles für AVR-GCC mit einer Sinustabelle in beliebiger Grösse.&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Mini2440&amp;diff=57686</id>
		<title>Mini2440</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Mini2440&amp;diff=57686"/>
		<updated>2011-06-09T11:19:29Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: /* Verbindung zum PC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.friendlyarm.net/products/mini2440 Mini2440 von friendlyarm ]&lt;br /&gt;
&lt;br /&gt;
Das [[Mini2440]] ist ein [[ARM]]-Board mit [http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=229&amp;amp;partnum=S3C2440&amp;amp;ppmi=PartnoSearch s3c2440] &#039;&#039;&#039;S&#039;&#039;&#039;ystem &#039;&#039;&#039;o&#039;&#039;&#039;n &#039;&#039;&#039;C&#039;&#039;&#039;hip von Samsung.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;&#039;Board&#039;&#039;&#039; bietet:&lt;br /&gt;
* 3,5&amp;quot;, 7&amp;quot; Touchscreen-[[TFT]] oder [[VGA]] &amp;quot;Karte&amp;quot;&lt;br /&gt;
* ARM920T, 400Mhz standard Taktfrequenz, bis zu 533Mhz&lt;br /&gt;
* 64MB-1GB NAND Flash (User App/OS), 2MB NOR Flash (BIOS)&lt;br /&gt;
* 64MB RAM&lt;br /&gt;
* Audio (Stereo Out, 2xMono In)&lt;br /&gt;
* SD-Slot&lt;br /&gt;
* [[USB]] Host, USB Device&lt;br /&gt;
* 10/100MBit LAN (DM9000)&lt;br /&gt;
* 3 Serial Ports&lt;br /&gt;
* [[SPI]], [[PWM]], [[I2C]], ...&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
[[Bild:mini2440.jpg|300px]][[Bild:mini2440_35.jpg|300px]][[Bild:mini2440_7.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Als das passende Entwicklungswerkzeug ist ein Linux-Rechner mit passendem Cross-Compiler sowie ein paar Tools vorgesehen.&lt;br /&gt;
Was wirklich benötigt wird:&lt;br /&gt;
* Serial Terminal (picocom, minicom, cutecom, gtkterm, komport, ...)&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Mini2440#Toolchain Toolchain]&lt;br /&gt;
* s3c_boot_usb oder [http://programmers-projects.de/node/16 mini2440_usb_upload] (aktueller; mit Status-Anzeige etc.) zum Hochladen von Bootloader, Kernel etc. über USB&lt;br /&gt;
&lt;br /&gt;
Empfehlenswert ausserdem noch:&lt;br /&gt;
* ncurses-dev-Dateien und dialog (Für Kernel-menuconfig)&lt;br /&gt;
* screen, midnight commander&lt;br /&gt;
* Editor mit root-Rechten (z.B. [http://home.in.tum.de/~lazarov/files/research/papers/vi_ausarbeitung.pdf vim])&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitungen am/mit dem Board ===&lt;br /&gt;
&lt;br /&gt;
Ganz wichtig ist es, eine gute Spannungsversorgung zu verwenden. Es kam anscheinend schon öfter vor, dass kleine Spannungseinbrüche das Board aus dem Gleichgewicht bringen.&lt;br /&gt;
Ich verwende normalerweise das mitgelieferte Netzteil oder ein &#039;&#039;&#039;5V&#039;&#039;&#039;/&#039;&#039;&#039;2A&#039;&#039;&#039; Schaltnetzteil, funktionieren beide einwandfrei.&lt;br /&gt;
Gerade das grosse, 7&amp;quot;, Display braucht ein starkes Netzteil.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;ungefährer Stromverbrauch&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Board konfig. || Stromverbrauch&lt;br /&gt;
|-&lt;br /&gt;
| mini2440  || 140mA&lt;br /&gt;
|-&lt;br /&gt;
| mini2440 + 3,5&amp;quot; TFT || 410mA (T35 Display)&lt;br /&gt;
|-&lt;br /&gt;
| mini2440 + 7&amp;quot; TFT || 1000mA&lt;br /&gt;
|-&lt;br /&gt;
| mini2440 + VGA Board || mA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zum PC ====&lt;br /&gt;
&lt;br /&gt;
Um vernünftig arbeiten zu können, braucht man auf jeden Fall diese Kabel:&lt;br /&gt;
* 1 USB A&amp;lt;-&amp;gt;USB B-Kabel&lt;br /&gt;
* 1 9 poliges SUB-D Kabel mit zwei Buchsen&lt;br /&gt;
* eventuell einen USB-RS232 Adapter, falls man keinen Anschluss am Rechner hat&lt;br /&gt;
&lt;br /&gt;
Einen Zugriff auf die Konsole hat man - nach Anpassung der IP - über Telnet sowie über die serielle Konsole.&lt;br /&gt;
&lt;br /&gt;
Die serielle Konsole ist in der Standardkonfiguration aktiviert und &#039;&#039;&#039;sollte&#039;&#039;&#039; auch während des Entwickelns &#039;&#039;&#039;immer aktiv&#039;&#039;&#039; sein - so verhindert man ein ungewolltes Ausperren.&lt;br /&gt;
&lt;br /&gt;
==== Netzwerk ====&lt;br /&gt;
Entweder klickt man sich quer durch die chinesische/japanische Software und stellt diese auf Englisch um, oder aber man klickt sich blind zu der Stelle, an der man IP Adresse, Gateway und Netzmaske angeben kann.&lt;br /&gt;
&lt;br /&gt;
Etwa genauso einfach sieht es über die Konsole aus.&amp;lt;br&amp;gt;&lt;br /&gt;
Die folgenden drei Zeilen, dürften das soweit bewekstelligen, dass das Netzwerk-Device die IP-Adresse &#039;&#039;&#039;192.168.0.55&#039;&#039;&#039;, die Netzmaske &#039;&#039;&#039;255.255.255.0&#039;&#039;&#039; zugeteilt bekommt. Die beiden anderen Anweisungen sagen dem System, welches Netzwerkgerät der Router ist. In diesem Fall &#039;&#039;&#039;192.168.0.1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Es ist darauf zu achten, was bisher vielleicht schon in der &#039;&#039;/etc/resolv.conf&#039;&#039; steht. Das lässt sich einfach mit &#039;&#039;cat /etc/resolv.conf&#039;&#039; ansehen. Wenn diese bereits den richtigen Inhalt hat, kann man die &#039;&#039;echo &amp;quot;nam...&#039;&#039;-Anweisung weglassen.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn die resolv.conf nicht existiert oder einen falschen Wert enthält, &#039;&#039;&#039;überschreibt&#039;&#039;&#039; man diese, in dem man nur &#039;&#039;&#039;ein&#039;&#039;&#039; &amp;quot;&#039;&#039;&amp;gt;&#039;&#039;&amp;quot; nach das echo setzt. Stehen dort zwei &amp;quot;&#039;&#039;&amp;gt;&#039;&#039;&amp;quot; wird die nameserver-Info nur an die Datei angehängt und es kann zu Problemen kommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; $ ifconfig eth0 192.168.0.55 netmask 255.255.255.0&lt;br /&gt;
 $ route add default gw 192.168.0.1&lt;br /&gt;
 $ echo &amp;quot;nameserver 192.168.0.1&amp;quot; &amp;gt; /etc/resolv.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Benutzeraccounts ====&lt;br /&gt;
&lt;br /&gt;
Linux legt wie alle Unix-artigen Betriebssysteme sehr grossen Wert auf eine ordentliche Benutzer- und Rechteverwaltung.&amp;lt;br&amp;gt;&lt;br /&gt;
Daher sollte man sich überlegen, ob es nicht vielleicht besser wäre, wenn man einen extra Benutzer zum Arbeiten/Basteln/Produktiv-Sein/Bier-Trinken/... anlegt.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn nicht unbedingt nötig, sollte man auf das Arbeiten als &#039;&#039;&#039;root&#039;&#039;&#039; (oder auch Superuser, Admin, ...) verzichten. Dadurch dass man uneingeschränkt &#039;&#039;&#039;alle&#039;&#039;&#039; Rechte auf dem System besitzt kann es durch Programmierfehler oder auch Schadsoftware zu ernsthaften Schäden kommen (Datenverlust, eventuell Hardwareschäden).&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Die Entscheidung ob man wirklich root sein muss, ist eigentlich relativ einfach. Sie wird normalerweise &#039;&#039;&#039;immer&#039;&#039;&#039; erstmal mit &#039;&#039;&#039;nein&#039;&#039;&#039; beantwortet.&amp;lt;br&amp;gt;Sollte sich im Lauf der Zeit doch herausstellen, dass man root sein muss, kann man diesen Weg immer noch einschlagen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Für einige Aufgaben sind jedoch auch root-Rechte erforderlich.&lt;br /&gt;
Zum Beispiel, wenn man direkt mit outporb()/inportb()/outb()/inb()/... arbeiten will.&amp;lt;br&amp;gt;&lt;br /&gt;
Für diese Fälle gibt es ein gutes Tool, es nennt sich [http://de.wikipedia.org/wiki/Sudo sudo].&lt;br /&gt;
Man kann sudo z.&amp;amp;nbsp;B. sagen, dass Benutzer &#039;&#039;xy&#039;&#039; das Programm /usr/bin/blubb mit root-Rechten immer ausführen darf. Benutzer &#039;&#039;ab&#039;&#039; darf das aber nur, wenn er &#039;&#039;&#039;sein&#039;&#039;&#039; Passwort eingibt. Dann gibt es vielleicht noch Benutzer &#039;&#039;zz&#039;&#039;, der alles ohne Passwort als root ausführen darf.&lt;br /&gt;
&lt;br /&gt;
===== Anlegen eines neuen Benutzeraccounts =====&lt;br /&gt;
Ich gehe davon aus, dass ein Image mit busybox auf dem Board installiert ist. Wenn das Image von FriendlyARM installiert ist, ist das der Fall.&lt;br /&gt;
&lt;br /&gt;
Ein Auszug aus der [http://linux.die.net/man/1/busybox Manpage] von busybox:&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
    adduser [ OPTIONS ] user_name&lt;br /&gt;
&lt;br /&gt;
    Adds a user to the system&lt;br /&gt;
&lt;br /&gt;
    Options:&lt;br /&gt;
&lt;br /&gt;
    -h DIR          Assign home directory DIR&lt;br /&gt;
    -g GECOS        Assign gecos field GECOS&lt;br /&gt;
    -s SHELL        Assign login shell SHELL&lt;br /&gt;
    -G              Add the user to existing group GROUP&lt;br /&gt;
    -S              create a system user (ignored)&lt;br /&gt;
    -D              Do not assign a password (logins still possible via ssh)&lt;br /&gt;
    -H              Do not create the home directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Heisst um einen Benutzer &#039;&#039;banana_joe&#039;&#039; mit dem Heimatverzeichnis &#039;&#039;/home/banana_joe&#039;&#039; anzulegen, muss man folgendes &#039;&#039;&#039;als root&#039;&#039;&#039; eingeben:&lt;br /&gt;
&amp;lt;pre&amp;gt; $ adduser -h /home/banana_joe -s /bin/sh banana_joe&lt;br /&gt;
 $ passwd banana_joe&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;adduser&#039;&#039; legt den Benutzer an, &#039;&#039;passwd&#039;&#039; vergibt ein Passwort.&lt;br /&gt;
&lt;br /&gt;
=== Übertragen von Daten/Programmen in den Flash-Speicher ===&lt;br /&gt;
&lt;br /&gt;
Das übertragen gestaltet sich auf ganz unterschiedliche Weise. Aus Gründen der Einfachheit werde ich hier nur die sinnvollsten/einfachsten/schnellsten Wege beschreiben. Andere Möglichkeiten wären noch &#039;&#039;lrzsz&#039;&#039;, USB und [[JTAG]].&lt;br /&gt;
Wer zuviel Zeit hat, kann sich ja auch ein eigenes Protokoll auf TCP/IP Ebene basteln oder den Kristallspeicher erfinden ;)&lt;br /&gt;
&lt;br /&gt;
Wenn man eine Datei übertragen hat, muss man sich vergewissern, dass diese auch Ausführrechte besitzt, wenn sie ein Programm oder ein Ordner ist. Die Lese- und Schreibrechte müssen ebenfalls richtig gesetzt sein.&lt;br /&gt;
Normalerweise stimmt dies alles so wie es ist, aber manchmal muss man ein wenig nachhelfen.&lt;br /&gt;
Wenn sich ein Programm nicht ausführen lässt, oder man nicht in einen Ordner wechseln kann, fehlen die Rechte zum Ausführen. Geändert wird das so:&lt;br /&gt;
&amp;lt;pre&amp;gt; $ chmod +x &amp;lt;datei/ordner&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Da hier aber nicht die Unix-Rechte erklärt werden sollen, verweise ich [http://linuxwiki.de/DateiRechte hierauf]&lt;br /&gt;
&lt;br /&gt;
==== http ====&lt;br /&gt;
Für diese Methode muss natürlich das [http://www.mikrocontroller.net/articles/Mini2440#Netzwerk Netzwerk] eingerichtet sein. Man braucht auf einem PC im Netz einen laufenden Werbserver, auf den man die zu übertragenden Dateien legt.&lt;br /&gt;
Nun kann man diese in ein Verzeichnis seiner Wahl &amp;quot;herunterladen&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt; $ cd /tmp&lt;br /&gt;
 $ wget http://10.2.5.29/datei&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ftp ====&lt;br /&gt;
Sobald auf dem Board ein FTP-Server läuft, kann man sich &amp;quot;ganz normal&amp;quot; mit einem FTP-Client (zum Beispiel &#039;&#039;&#039;gftp&#039;&#039;&#039; oder &#039;&#039;&#039;ncftp&#039;&#039;&#039;) verbinden und die Dateien hochladen.&lt;br /&gt;
Ebenso kann man sich auch vom Board auf einen FTP-Server verbinden.&lt;br /&gt;
Nennenswerte Programme sind z.B. &#039;&#039;&#039;ftp&#039;&#039;&#039; für die Linux-Konsole, welches im FriendlyARM Image bereits enthalten ist oder der ncurses-basierende Client &#039;&#039;&#039;ncftp&#039;&#039;&#039;. Allerdings sollte man sich für ncurses-Programme per Telnet oder SSH einloggen, da die serielle Konsole nur rudimentäre Terminal-Emulation unterstützt und die Bildschirmausgabe nicht gerade schön wirkt.&lt;br /&gt;
&lt;br /&gt;
==== scp/ssh ====&lt;br /&gt;
Dazu muss zuerst einmal ein SSH Server auf dem Board laufen.&lt;br /&gt;
[http://www.openssh.com openSSH] ist dafür die erste Wahl. Mit [http://matt.ucc.asn.au/dropbear/dropbear.html dropbear] gibt es einige Probleme, da man für SCP auch noch die SCP Binary von openSSH braucht.&lt;br /&gt;
&lt;br /&gt;
Sobald der ssh server läuft, ist alles ganz einfach:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ scp datei user@ziel:/pfad&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bei einem Board mit der IP 10.0.0.69 und dem User &#039;&#039;root&#039;&#039; wäre das die Befehlszeile:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ scp datei root@10.0.0.69:/root&amp;lt;/pre&amp;gt;&lt;br /&gt;
... und die Datei &#039;&#039;datei&#039;&#039; landet im Heimatverzeichnis von &#039;&#039;root&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Um nicht jedes mal das Passwort eingeben zu müssen, lohnt es sich SSH so zu konfigurieren, dass es mit [http://wiki.unixboard.de/index.php/SSH_ohne_Passwort Key-Files] läuft.&lt;br /&gt;
&lt;br /&gt;
=== Toolchain ===&lt;br /&gt;
Toolchains gibt es im Netz und auf der CD/DVD zum Board mehrere fertig übersetzte - natürlich lässt sich die Toolchain auch selbst compilieren.&lt;br /&gt;
Das Risiko beim selbst compilieren einer Toolchain liegt darin, dass man eventuell einen fehlerhaften Compiler produziert.&lt;br /&gt;
Gründe hierfür sind z.B.:&lt;br /&gt;
* fehlende, wichtige Patches&lt;br /&gt;
* Verwenden von Entwicklerversionen mit eventuellen Bugs&lt;br /&gt;
* ein schon fehlerhafter Host-Compiler&lt;br /&gt;
* falsche Einstellungen (Prozessor-Architektur, Optimierung, ...)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Das sogenannte Bootstrappen eines Compilers erkennt solche Probleme in den meisten Fällen. Bootstrappen heißt, dass zuerst mit dem Host-Compiler der Quellcode des neuen übersetzt wird und mit diesem zweiten Compiler wird ein dritter Compiler übersetzt. Wenn dies klappt, kann man im Normalfall davon ausgehen, dass der dritte Compiler in Ordnung ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Jedoch ist dies bei einem Crosscompiler so nicht möglich, da der zweite Compiler ja keinen Code für den Host-Computer, sondern nur für das Target produzieren kann. Somit würde man sich einen Compiler für das Board bauen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wer auf Nummer sicher gehen will, nimmt am besten eine der bekannten ARM-Toolchains oder natürlich die von FriendlyARM.&lt;br /&gt;
&lt;br /&gt;
==== old ABI / new EABI ? ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ABI&#039;&#039;&#039; steht für &#039;&#039;&#039;&#039;&#039;A&#039;&#039;&#039;pplication &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;I&#039;&#039;&#039;nterface&#039;&#039;, also eine Art &amp;quot;Standard&amp;quot; wie das compilierte Programm, die Binärdatei, auszusehen hat.&lt;br /&gt;
&lt;br /&gt;
Die ABI ist schon etwas älter und wurde von der EABI (&#039;&#039;&#039;&#039;&#039;E&#039;&#039;&#039;mbedded &#039;&#039;&#039;A&#039;&#039;&#039;pplication &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;I&#039;&#039;&#039;nterface&#039;&#039;) abgelöst.&lt;br /&gt;
&lt;br /&gt;
Da nahezu jede verfügbare Toolchain auf der EABI aufbaut, würde ich diese auch nutzen. Alte, für die ABI, compilierte Programme, lassen sich mit der Kernel-Unterstützung zum Ausführen von ABI Programmen trotzdem noch verwenden.&lt;br /&gt;
&lt;br /&gt;
Durch das verwenden der EABI entstehen normalerweise keine unüberwindbaren Hürden, beim compilieren von älteren Quellcodes. Jedenfalls nicht durch den Unterschied ABI/EABI.&lt;br /&gt;
&lt;br /&gt;
==== Kernel FPE / softfloat ? ====&lt;br /&gt;
&lt;br /&gt;
Irgendwann stolpert jeder, der mit ARM-CPUs und Linux arbeitet über mehrere Fragen.&lt;br /&gt;
* Was ist softfloat/FPE?&lt;br /&gt;
* Was ist schneller?&lt;br /&gt;
* Kann man beides nutzen?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Was ist softfloat/FPE&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Dadurch, dass eine ARM-CPU normalerweile keine [http://de.wikipedia.org/wiki/Gleitkommaeinheit Gleitkommaeinheit/FPU] besitzt, müssen alle Berechnungen, welche Kommazahlen enthalten in Software gelöst werden. Bei einem PC-System übernimmt diese Aufgabe eben die FPU und ist somit um einiges schneller.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;softfloat&#039;&#039; ist die Umsetzung durch den Compiler.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;FPE&#039;&#039; bedeutet &#039;&#039;&#039;&#039;&#039;F&#039;&#039;&#039;loating &#039;&#039;&#039;P&#039;&#039;&#039;oint &#039;&#039;&#039;E&#039;&#039;&#039;mulation&#039;&#039; und wird durch den Kernel bereit gestellt.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Was ist schneller&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Beim FPE-Verfahren wird der Code, welcher die Gleitkomma-Anweisungen enthält auch so übersetzt. Da die CPU aber keine [http://de.wikipedia.org/wiki/Gleitkommaeinheit FPU] besitzt und somit auch keine Maschinensprachen-Befehle dafür, wird eine &#039;&#039;Exception&#039;&#039; ausgelöst (&amp;quot;Fehler&amp;quot;), welche vom Kernel abgefangen wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Nun steht der Kernel vor der Aufgabe, die Gleitkomma-Operation zu lösen und dem Programm das Ergebnis mitzuteilen. Danach muss er den Code für die Exception noch zu Ende führen und zurückkehren.&amp;lt;br&amp;gt;&lt;br /&gt;
Alles in allem eine sehr aufwendige Methode.&lt;br /&gt;
&lt;br /&gt;
Da bei &#039;&#039;softfloat&#039;&#039; die Gleitkomma-Operationen vom Compiler soweit zerstückelt und wieder zusammengesetzt werden, dass gar keine Kommas mehr nötig sind, ist das in dem meisten Fällen flotter.&lt;br /&gt;
&lt;br /&gt;
Das schnellste, ist natürlich eine Hardware-[http://de.wikipedia.org/wiki/Gleitkommaeinheit FPU], die es aber auf dem [[mini2440]] nicht gibt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kann man beides nutzen?&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Jein, wenn man im Kernel eine der beiden FPE-Methoden aktiviert hat und man führt ein softfloat-Programm aus, dann wird natürlich softfloat verwendet.&lt;br /&gt;
Wenn man allerdings ein FPE-Programm ausführen will und hat die Unterstützung nicht im Kernel, sieht es schlecht aus.&lt;br /&gt;
&lt;br /&gt;
Also am besten eine FPE auswählen und mit einer softfloat-Toolchain compilieren. Das spart Zeit und Kopfzerbrechen über Invalid Opcode/Segfaults usw. ;)&lt;br /&gt;
&lt;br /&gt;
==== Toolchain aufsetzen ====&lt;br /&gt;
Jenachdem, welche Toolchain man einsetzt, kann es sein, dass man den Compileraufruf anpassen muss.&lt;br /&gt;
Wenn man eine Cross Toolchain installiert hat und nur &#039;&#039;gcc&#039;&#039; auf der Kommandozeile eintippt, wird man höchstwahrscheinlich beim &#039;&#039;lokalen&#039;&#039; gcc, keinem Cross-Compiler, landen. Überprüfen kann man das mit&lt;br /&gt;
&amp;lt;pre&amp;gt; $ which gcc&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die FriendlyARM Toolchain macht es uns da sehr leicht, sie verwendet aussagekräftige Namen für ihre Programme. Bei ihr wäre der gcc Aufruf der:&lt;br /&gt;
&amp;lt;pre&amp;gt; $ arm-linux-gcc&lt;br /&gt;
oder&lt;br /&gt;
 $ arm-none-linux-gnueabi-gcc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ich gehe im kompletten Artikel davon aus, dass man eine funktionierende Toolchain installiert hat, welche über &#039;&#039;arm-linux-...&#039;&#039; zu erreichen ist. Entweder passt man die gcc-Aufrufe von hier an, oder man kann sich auch [http://wiki.unixboard.de/index.php/ManPage:ln symbolische Links] anlegen.&lt;br /&gt;
Zum Schluss sollte das dann ungefähr so aussehen, vom bin-Pfad der Toolchain aus!&lt;br /&gt;
&amp;lt;pre&amp;gt; $ ls -al /usr/local/arm/4.3.2/bin/&lt;br /&gt;
 ...&lt;br /&gt;
 lrwxrwxrwx 1 root root      25 2010-02-25 07:15 arm-linux-ld -&amp;gt; arm-none-linux-gnueabi-ld&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ich selbst arbeite mit der FriendlyARM-Toolchain, werde mich hier also meistens auf diese beziehen, ausser anders vermerkt.&lt;br /&gt;
===== FriendlyARM =====&lt;br /&gt;
[http://www.friendlyarm.net/downloads Hier] als &#039;&#039;ARM-Linux-GCC&#039;&#039; zu finden.&lt;br /&gt;
&lt;br /&gt;
Entpackt verbraucht diese Toolchain ca. 295MB. Mit ihr liessen sich bei mir bereits der Kernel, uboot, sowie zahlreiche Programme kompilieren.&lt;br /&gt;
&lt;br /&gt;
Zuerst wird die Toolchain an die richtige Stelle entpackt, der Pfad mit angegeben und dann ist sie auch schon bereit.&lt;br /&gt;
Dieses Kommando sieht auf den ersten Blick etwas nach Dateisystem-Apokalypse aus, ist allerdings lage nicht so wild. Die Option &#039;&#039;-C /&#039;&#039; sagt, dass direkt ins Wurzelverzeichnis entpackt werden soll, daher benötigt man für diesen Schritt &#039;&#039;&#039;root-Rechte&#039;&#039;&#039;. Die FriendlyARM-Toolchain ist so aufgebaut, dass sie damit nach &#039;&#039;/usr/local/arm/4.3.2/&#039;&#039; entpackt wird, &#039;&#039;&#039;unser Ziel&#039;&#039;&#039; :)&lt;br /&gt;
&amp;lt;pre&amp;gt; $ tar xvfj arm-linux-gcc-4.3.2.tar.gz -C /&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wenn wir das nun so haben, müssen wir natürlich auch noch sagen, wo er den Compiler findet.&lt;br /&gt;
Dazu öffnet man am besten seine &amp;quot;autorun-Datei&amp;quot; der Shell. In der Konsole ganz einfach mit vim/nano/etc zu erreichen.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ vim /home/user/.bashrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dort tragen wir dann &#039;&#039;&#039;ganz ans Ende&#039;&#039;&#039; dies ein:&lt;br /&gt;
&amp;lt;pre&amp;gt;export PATH=$PATH:/usr/local/arm/4.3.2/bin&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kaum gespeichert, startet man eine neue shell (Konsole) und überprüft ob die Pfade stimmen.&lt;br /&gt;
Wenn &#039;&#039;/usr/local/arm/...&#039;&#039; im Pfad enthalten ist, müsste alles stimmen.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ echo $PATH&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tippt man nun &#039;&#039;&#039;nur&#039;&#039;&#039; &#039;&#039;arm-&#039;&#039; und drückt zweimal die Tabtaste, so müsste eine ellenlange Liste mit Programmen wie z.&amp;amp;nbsp;B. &#039;&#039;arm-linux-gcc&#039;&#039; oder &#039;&#039;arm-linux-ld&#039;&#039; erscheinen.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ arm-linux-gcc -v&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== codesourcery =====&lt;br /&gt;
[http://www.codesourcery.com/sgpp/lite/arm/portal/package3696/public/arm-none-linux-gnueabi/arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 codesourcery arm-none-linux-gnueabi]&lt;br /&gt;
&lt;br /&gt;
===== buildroot =====&lt;br /&gt;
&lt;br /&gt;
Von http://www.buildroot.net das letzte stable Release holen, mini-2440 wird unterstützt. Der Build dauert zwar einige Zeit, aber nacher kann man sich an X11 erfreuen.&lt;br /&gt;
&lt;br /&gt;
=== Cross Compiling ===&lt;br /&gt;
Sobald die Toolchain richtig aufgesetzt ist kann man anfangen, seine Programme zu übersetzten.&lt;br /&gt;
&lt;br /&gt;
Hier folgt nur eine kurze Beschreibung, wer sowas genauer wissen will, sollte sich auf Seiten wie diesen umsehen:&lt;br /&gt;
* http://www.ailis.de/~k/archives/19-ARM-cross-compiling-howto.html&lt;br /&gt;
* http://linux.bytesex.org/cross-compiler.html&lt;br /&gt;
Ausserdem findet man zu vielen embedded-nutzbaren Programmen direkt ein Cross-Compiling Howto mit ein wenig google.&lt;br /&gt;
Ob diese nun für ARM, AVR32, PPC, MIPS, ... sind, ist im Grunde egal, da man ja meistens nur die Architektur anpassen muss.&lt;br /&gt;
&lt;br /&gt;
Es gibt mehrere Möglichkeiten. Die erste ist der direkte Aufruf vom Compiler oder mittels eines &amp;quot;festen&amp;quot; Makefiles. Die zweite, wahrscheinlich Häufigste, ist das ausführen eines configure-Scriptes bevor der make-Vorgang gestartet wird.&lt;br /&gt;
&lt;br /&gt;
* Das einfache aufrufen des Compilers&lt;br /&gt;
Dazu ein einfaches Hello-World Programm:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
   printf(&amp;quot;hiho\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compiliert wird das Programm ganz einfach so:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ arm-linux-gcc &amp;lt;name.c&amp;gt; -o &amp;lt;name&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Danach wird die Datei &#039;&#039;&amp;lt;name&amp;gt;&#039;&#039; an das Board [http://www.mikrocontroller.net/wikisoftware/index.php?title=Mini2440&amp;amp;action=submit#.C3.9Cbertragen_von_Daten.2FProgrammen_ins_Flash übertragen]. &lt;br /&gt;
Sobald &#039;&#039;&amp;lt;name&amp;gt;&#039;&#039; auf dem Board ist, kann es ausgeführt werden:&lt;br /&gt;
&amp;lt;pre&amp;gt; $ ./&amp;lt;name&amp;gt;&amp;lt;/pre&amp;gt; &lt;br /&gt;
Eventuell fehlen die Rechte:&lt;br /&gt;
&amp;lt;pre&amp;gt; $ chmod +x &amp;lt;name&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ./configure-Scripte&lt;br /&gt;
Hier sieht es schon ein klein wenig schwieriger aus, ist es aber eigentlich nicht.&lt;br /&gt;
&#039;&#039;Normalerweise&#039;&#039;, aber &#039;&#039;&#039;nicht immer&#039;&#039;&#039;, sieht das compilieren eines Programms für das mini2440 so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt; $ HOST=arm-linux ARCH=arm ./configure --build=arm-linux --your-options&lt;br /&gt;
 $ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Man muss dem configure-Script lediglich angeben, für welche Architektur das Makefile konfiguriert werden soll und welchen Compiler er dafür nehmen soll.&lt;br /&gt;
&lt;br /&gt;
=== Linux-Kernel ===&lt;br /&gt;
&lt;br /&gt;
Den Kernel-Quellcode besorgt man sich am besten den Kernel-Fork von buserror.&amp;lt;br&amp;gt; Wenn man nicht auf dem ARM selber kompilieren möchte, benutzt man wie hier im Beispiel einen Cross-Compiler (Siehe oben). Weiterhin wird noch git benötigt, um den Kernel-Quellcode zu laden.&amp;lt;br&amp;gt;Folgende Einstellungen werden im Abschnitt verwendet:&lt;br /&gt;
&amp;lt;pre&amp;gt;  Verzeichnis: /mnt/mini2440&lt;br /&gt;
  CHOST/CROSS-COMPILE: arm-softfloat-linux-gnueabi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Starten wir damit, den Quellcode zu laden:&lt;br /&gt;
&amp;lt;pre&amp;gt;  $ cd /mnt/mini2440&lt;br /&gt;
  $ git clone git://repo.or.cz/linux-2.6/mini2440.git linux-2.6.32-rc8&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dann ab ins Kernel-Verzeichnis und den Kernel mit den Defaults konfigurieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;  $ cd linux-2.6.32-rc8&lt;br /&gt;
  $ CROSS_COMPILE=arm-softfloat-linux-gnueabi- ARCH=arm make mini2440_defconfig&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wenn man noch etwas manuell ändern möchte:&lt;br /&gt;
&amp;lt;pre&amp;gt;  $ CROSS_COMPILE=arm-softfloat-linux-gnueabi- ARCH=arm make menuconfig&amp;lt;/pre&amp;gt;&lt;br /&gt;
Den Kernel anschließend kompilieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;  $ CROSS_COMPILE=arm-softfloat-linux-gnueabi- ARCH=arm make&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Module bekommen wir wie folgt nach /mnt/mini2440/lib/modules installiert:&lt;br /&gt;
&amp;lt;pre&amp;gt;  $ CROSS_COMPILE=arm-softfloat-linux-gnueabi- ARCH=arm INSTALL_MOD_PATH=/mnt/mini2440 make modules_install&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wenn wir mit u-boot arbeiten, dann benötigen wir das zImage in /mnt/mini2440/kernel-2.6.32-rc8/arch/arm/boot, um daraus mittels mkimage (Siehe uboot) ein uImage zu erstellen.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Kernel-Parameter&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
dem Kernel kann man zum Start noch Parameter für das Board mitgeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;mini2440=[0..9][t][b]&amp;lt;/pre&amp;gt;&lt;br /&gt;
[0..9] bestimmen die Display-Timings (varieren je nach verwendetem Kernel)&lt;br /&gt;
* 0 3,5&amp;quot; Display N35 + TS (alt);&lt;br /&gt;
* 1 7&amp;quot; Display + TS;&lt;br /&gt;
* 2 VGA-Board;&lt;br /&gt;
* 3 3,5&amp;quot; Display T35 + TS;&lt;br /&gt;
* 4 5,6&amp;quot; Display Innolux + TS;&lt;br /&gt;
[t] Touchscreen ist vorhanden;&amp;lt;br&amp;gt;&lt;br /&gt;
[b] Backlight ist vorhanden;&lt;br /&gt;
&lt;br /&gt;
=== root-fs ===&lt;br /&gt;
Um ein eigenes Root-Filesystem zu compilieren, gibt es mehrere Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
Die einfachsten sind Cross-Umgebungen wie [http://buildroot.uclibc.org/ buildroot] und [http://wiki.openembedded.net/index.php/Main_Page openembedded].&lt;br /&gt;
&lt;br /&gt;
==== Debian ====&lt;br /&gt;
Auch relativ einfach ist es, sich ein fertig compiliertes debian-arm zu installieren. Wenn man das Debian einmal auf seiner SD-Karte laufen hat, ist es kein Problem mehr, alles wie gewohnt mit apt zu installieren usw. usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Allerdings sind gerade die Scripte bei Debian noch nie dafür bekannt gewesen sonderlich schnell zu laufen und es ist sehr sehr träge beim booten.&lt;br /&gt;
&lt;br /&gt;
Ich habe auf meinem mini2440 seit einiger Zeit Debian am Laufen, habe aber sämtliche Init-Scripte durch eigene ersetzt, welche um einiges flotter laufen. Ebenso verzichte ich auf sysvinit und damit aber auch auf sehr nützliche Tools/Funktionen, wie die runlevels und shutdown oder reboot.&lt;br /&gt;
Diese Funktionen müssen auch von meinen eigenen Scripten übernommen werden. Dafür läuft es um einiges schneller.&lt;br /&gt;
&lt;br /&gt;
[http://emqbit.com/deboostrap-debian Hier] eine Anleitung für ein AT91-Linux Board mit Debian. Diese kann fast 1:1 übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Mit X11, Lighttpd, PHP, Python, mc, vim, mpd, alsa, gcc, ... (und auch apache als leidige Abhängigkeit von PHP) braucht mein Debian etwa 550MB auf der SD-Karte.&lt;br /&gt;
Schon ein ordentlicher Brummer, aber egal, es bootet mit eigenen Scripten innerhalb von 15 Sekunden.&lt;br /&gt;
&lt;br /&gt;
==== Gentoo ====&lt;br /&gt;
Ooooh wer daran denkt, hat einfach nur zuviel Zeit. Gentoo in allen Ehren, aber allein PHP zu compilieren dauert gut 4 Stunden... danach habe ich es aufgegeben.&lt;br /&gt;
&lt;br /&gt;
Wer Gentoo installieren kann, wird sich auf dem Mini2440 auch nicht schwerer tun, als auf einem PC. Der Unterschied besteht nur darin, dass man die Stage auf SD Karte packen muss, am normalen Rechner natürlich, und dort dann schon die wichtigsten Einstellungen vornehmen muss.&lt;br /&gt;
&lt;br /&gt;
Mit Portage und den ganzen Dev-Files ist Gentoo ein riesen Gebilde für so ein schwachbrüstiges Board. Eine 4GB SD-Karte ist das Minimum. Außer man bootet zuerst in den Flash und dann chrootet man auf ein Gentoo auf einer USB-Festplatte. uboot kann das, soweit ich weiß, nicht.&lt;br /&gt;
&lt;br /&gt;
=== sys-fs ===&lt;br /&gt;
Sysfs ist ein virtuelles Dateisystem, welches seit dem Linux Kernel 2.6. zur Verfügung gestellt wurde. Der Kernel stellt dabei Konfigurationen, Informationen über Vorrichtungen und Treiber im sogenannten userspace zur Verfügung. Dies Bedeutet einfach, dass Informationen/Geräte an einer festgelegten Stelle im Dateisystem stehen und ausgelesen oder beschrieben werden können.&lt;br /&gt;
&lt;br /&gt;
Über einige Dateien in diesem Dateisystem können GPIOs und z.B. auch LEDs angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer ===&lt;br /&gt;
Der Framebuffer ist von Haus aus im FriendlyARM Kernel aktiviert und ohne ihn lässt sich im Linux keine Ausgabe auf dem Display realisieren. Er ist unter &#039;&#039;/dev/fb0&#039;&#039; zu erreichen.&amp;lt;br&amp;gt;&lt;br /&gt;
In der Kernelkonfiguration muss die Framebuffer-Konsole und der Framebuffer-Treiber für das jeweilige Display gewählt werden.&lt;br /&gt;
&lt;br /&gt;
Eine Textausgabe geht ganz einfach über das Terminal, welche auf ihn gemappt ist:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ echo &amp;quot;hello world&amp;quot; &amp;gt; /dev/tty1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man kann dem Framebuffer diverse Argumente mitgeben, die die Ausgabe auf dem Display beeinflussen. Diese werden über &#039;&#039;fbcon=...&#039;&#039; angeben. Man kann auch mehre Argumente angeben, das sähe zum Beispiel so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root=/dev/mmcblk0p1 console=ttySAC0 fbcon=rotate:1 fbcon=scrollback:0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternativ können mehrere fbcon-Parameter auch durch Komma getrennt werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
... fbcon=rotate:1,scrollback:0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Scrollback-Buffer ist auf diesem Display eigentlich nicht nötig, da man hier auf dem Mini2440 auf keiner Konsole mit Tastatur usw. arbeitet. Daher schaltet man ihn mit &#039;&#039;fbcon=scrollback:0&#039;&#039; ab, das spart gegenüber dem Standardwert 32kB RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
Wer ihn doch benötigt, kann ihn natürlich trotzdem verwenden. Die Zahl nach dem Doppelpunkt steht für die Größe in Bytes. Ein &#039;&#039;k&#039;&#039; als Suffix steht für Kilobyte, &#039;&#039;fbcon=scrollback:1024k&#039;&#039; entspräche einem Scrollback-Buffer von 1MB.&lt;br /&gt;
&lt;br /&gt;
Für die FB-Konsole gibt es einige weitere Möglichkeiten und viele Optionen lassen sich zur Laufzeit ändern. Hier habe ich nur das Wichtigste beschrieben. Wer darüber mehr erfahren will, sollte sich im Kernel-Quellcode die Datei &#039;&#039;Documentation/fb/fbcon.txt&#039;&#039; ansehen.&lt;br /&gt;
&lt;br /&gt;
==== Font wählen ====&lt;br /&gt;
Die voreingestellte VGA8x16 Font ist etwas groß und es passt nicht allzuviel Text auf das Display. Die am besten lesbare, kleine Schrift ist die Mac6x11 Font.&lt;br /&gt;
In menuconfig folgendes einstellen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-&amp;gt; Device Drivers&lt;br /&gt;
   -&amp;gt; Graphics support&lt;br /&gt;
      -&amp;gt; Console display driver support&lt;br /&gt;
         -&amp;gt; Select compiled-in fonts&lt;br /&gt;
            &amp;lt;*&amp;gt; Framebuffer Console support&lt;br /&gt;
            [*]   Map the console to the primary display device&lt;br /&gt;
            [*]   Framebuffer Console Rotation&lt;br /&gt;
            [*] Select compiled-in fonts&lt;br /&gt;
            [ ]   VGA 8x8 font&lt;br /&gt;
            [ ]   VGA 8x16 font&lt;br /&gt;
            [*]   Mac console 6x11 font (not supported by all drivers)&lt;br /&gt;
            [ ]   console 7x14 font (not supported by all drivers)&lt;br /&gt;
            [ ]   Pearl (old m68k) console 8x8 font&lt;br /&gt;
            [ ]   Acorn console 8x8 font&lt;br /&gt;
            [ ]   Mini 4x6 font&lt;br /&gt;
            [ ] Sparc console 8x16 font&lt;br /&gt;
            [ ] Sparc console 12x22 font (not supported by all drivers)&lt;br /&gt;
            [ ] console 10x18 font (not supported by all drivers)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Werden mehrere Fonts eincompiliert, können sie so ausgewählt werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(Kernel-Commandline)&lt;br /&gt;
... fbcon=font:xxxx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;xxxx&#039;&#039; sind:&lt;br /&gt;
* VGA8x8&lt;br /&gt;
* VGA8x16&lt;br /&gt;
* Mac6x11&lt;br /&gt;
* 7x14&lt;br /&gt;
* 10x18&lt;br /&gt;
* MINI4x6&lt;br /&gt;
* RomanLarge&lt;br /&gt;
* SUN8x16&lt;br /&gt;
* SUN12x22&lt;br /&gt;
* ProFont6x11&lt;br /&gt;
* Acorn8x8&lt;br /&gt;
* PEARL8x8&lt;br /&gt;
&lt;br /&gt;
Bei machen Fonts steht in der Kernel-Menuconfig &#039;&#039;not supported by all drivers&#039;&#039;. Dies erklärt sich so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Note, not all drivers can handle font with widths not divisible by 8,&lt;br /&gt;
such as vga16fb.&lt;br /&gt;
kernel-src/Documentation/fb/fbcon.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Manche Treiber können nicht mit Fontbreiten/-höhen umgehen, welche nicht durch 8 teilbar sind. Da aber z.B. die MAC6x11 Font auch nicht durch 8 teilbar ist und das Mini2440 das anzeigen kann, gehe ich davon aus, dass alle funktionieren.&lt;br /&gt;
&lt;br /&gt;
==== Rotation ====&lt;br /&gt;
Um das Display zu &amp;quot;drehen&amp;quot; folgendes einstellen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-&amp;gt; Device Drivers&lt;br /&gt;
   -&amp;gt; Graphics support&lt;br /&gt;
      -&amp;gt; Console display driver support&lt;br /&gt;
         -&amp;gt; Framebuffer Console support&lt;br /&gt;
            [*] Framebuffer Console Rotation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Also Kernel-Parameter im Bootloader dann einstellen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fbcon=rotate:x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Für &#039;&#039;x&#039;&#039; sind Werte von 0 bis 3 gültig. Jeweils wird um 90° im Uhrzeigersinn weitergedreht.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Hinweis:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Die Rotation bezieht sich &#039;&#039;&#039;nur&#039;&#039;&#039; auf den Framebuffer. Ein anschließend gestartetes Qtopia (z.B.) bleibt von der gewählten Einstellung unberührt.&lt;br /&gt;
In eigenen Anwendungen, welche eine grafische Oberfläche bereitstellen, lässt sich die Rotation allerdings verwenden, indem man einfach die Datei &#039;&#039;&#039;/proc/cmdline&#039;&#039;&#039; ausliest und den dort gegebenen Wert verwendet, um seine Bildschirmausrichtung anzupassen.&lt;br /&gt;
&lt;br /&gt;
=== Bootloader ===&lt;br /&gt;
Die beiden verfügbaren Bootloader sind vivi (ein &amp;quot;standard-s3c24xx-Linux-Bootloader&amp;quot;) und u-boot, &#039;&#039;&#039;der&#039;&#039;&#039; Bootloader für embedded-Systeme schlechthin ;)&lt;br /&gt;
&lt;br /&gt;
Gemeinsam haben sie eigentlich nur, dass sie &#039;&#039;&#039;a)&#039;&#039;&#039; funktionieren und &#039;&#039;&#039;b)&#039;&#039;&#039; einen Linux-Kernel laden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Der große Nachteil von vivi ist, dass es nur mit [http://en.wikipedia.org/wiki/YAFFS YAFFS2]-Dateisystemen umgehen kann, die auf dem onboard-Flash liegen müssen.&lt;br /&gt;
Sobald der Kernel geladen ist, ist das kein Problem mehr, doch der Kernel muss eben im Flash liegen.&amp;lt;br&amp;gt;&lt;br /&gt;
Um nun z.&amp;amp;nbsp;B. von USB-Festplatten/Sticks und SD-/MMC-Karten booten zu können, muss also u-boot installiert werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WARNUNG: An einem Bootloader herumzuspielen, kann sehr böse ausgehen, etwa mit dem unbootbar-mach-Vorgang, der durch zu wenig Nachdenken ausgelöst wird.&lt;br /&gt;
Das mini2440 lässt sich zwar jederzeit per JTAG mit LPT-Adapter zurückholen, ist doch aber eigentlich unnötig ;)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== uboot ====&lt;br /&gt;
&lt;br /&gt;
Der Bootloader uboot wurde von &amp;quot;buserror&amp;quot; soweit an das mini2440 angepasst, dass er mehr oder weniger läuft.&lt;br /&gt;
Für die verschiedenen Boards gelten also auch leicht verschiedene Anweisungen um uboot ins Wasser zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Das git und die Seite von &amp;quot;buserror&amp;quot; ist [http://code.google.com/p/mini2440/ hier] zu finden.&lt;br /&gt;
&lt;br /&gt;
Boards:&lt;br /&gt;
* 64MB &lt;br /&gt;
* 128MB&lt;br /&gt;
* 256MB&lt;br /&gt;
** [[Datei:mini2440.h]]&lt;br /&gt;
** [[Datei:uboot.bin]]&lt;br /&gt;
* 1GB&lt;br /&gt;
&lt;br /&gt;
Den u-boot-Fork von buserror laden wir am besten mit git. Weiterhin benötigen wir einen Cross-Compiler (Siehe oben). Die letzte mir bekannte Version des GCC mit dem sich das &amp;quot;U-Boot&amp;quot; kompilieren lässt ist 4.3.4.&amp;lt;br&amp;gt;Folgende Einstellungen werden im Abschnitt verwendet:&lt;br /&gt;
&amp;lt;pre&amp;gt;  Verzeichnis: /mnt/mini2440&lt;br /&gt;
  CHOST/CROSS-COMPILE: arm-softfloat-linux-gnueabi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Starten wir damit, den Quellcode zu laden:&lt;br /&gt;
&amp;lt;pre&amp;gt;  $ cd /mnt/mini2440&lt;br /&gt;
  $ git clone git://repo.or.cz/u-boot-openmoko/mini2440.git u-boot&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dann ab ins Source-Verzeichnis und mit den Defaults für das Mini2440 konfigurieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;  $ cd u-boot&lt;br /&gt;
  $ CROSS_COMPILE=arm-softfloat-linux-gnueabi- make mini2440_config&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wenn man noch etwas manuell ändern möchte, dann die Datei include/configs/mini2440.h bearbeiten, z.&amp;amp;nbsp;B. für das Mini2440-256MB:&lt;br /&gt;
&amp;lt;pre&amp;gt;  #define USE_920T_MMU		1&lt;br /&gt;
  //#define CONFIG_USE_IRQ		1	/* Needed for USB device! */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(CONFIG_USE_IRQ auskommentieren, damit das Mini2440 u-boot aus dem RAM ausgeführt werden kann. Leider kann man dann im &amp;quot;U-Boot&amp;quot; kein USB-Gerät mehr ansprechen, um ggfl. mal wieder aufzutauchen).&amp;lt;br&amp;gt;&lt;br /&gt;
Zusätzlich kann man noch defaults für das Environment (bootargs, ip, ...) festlegen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Anschließend das &amp;quot;U-Boot&amp;quot; kompilieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;  $ CROSS_COMPILE=arm-softfloat-linux-gnueabi- make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Im Verzeichnis tools findet man mkimage. Damit kann man aus einem zImage (Linux-Kernel) ein uImage machen. Dieses uImage lässt sich von u-boot aus laden (Nand, NFS, TFtp, MMC) und ausführen. &lt;br /&gt;
&amp;lt;pre&amp;gt;  mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d path-to/zImage path-to/uImage&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jetzt haben wir ein von u-boot ausführbaren Linux-Kernel.&lt;br /&gt;
&lt;br /&gt;
== Multimedia ==&lt;br /&gt;
&lt;br /&gt;
=== Abspielen von Audio-Daten ===&lt;br /&gt;
Mit dem FriendlyARM-Image gibt es zwei Möglichkeiten Audio-Dateien abzuspielen.&amp;lt;br&amp;gt;Die Eine ist, Qtopia zu starten und dort einfach die Datei von SD-Karte, USB, ... auszuwählen und er spielt sie ab.&lt;br /&gt;
&lt;br /&gt;
Die andere ist, die Datei auf der Konsole mit &#039;&#039;madplay dateiname.mp3&#039;&#039; abzuspielen.&amp;lt;br&amp;gt;[http://www.digipedia.pl/man/doc/view/madplay.1/ Hier] die Manpage zu madplay.&lt;br /&gt;
&lt;br /&gt;
==== MPD - der Music Player Daemon ====&lt;br /&gt;
Mit einem eigenen Image oder wenn man sich alles von Hand compilieren will ist der [http://www.musicpd.org/ Music Player Daemon] ein genialer Musik-Player. Er lässt sich durch sehr sehr viele verschiedene Clients steuern und braucht dabei nahezu kaum Rechenleistung.&amp;lt;br&amp;gt;&lt;br /&gt;
Der eigentliche Player läuft vollkommen &amp;quot;versteckt&amp;quot; im Hintergrund. Um ihn zu steuern wird vom Client eine Verbindung aufgebaut und die entsprechenden Befehle gesendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Clients müssen noch nicht einmal auf dem Board laufen, können auch auf jedem anderen Rechner im Netzwerk oder Internet sein. Man muss einfach nur die IP und den Port angeben.&lt;br /&gt;
&lt;br /&gt;
Mit gerade mal etwa 100 Zeilen Code lässt sich eine einfach zu nutzende Client-Lib in C programmieren um dann seine eigenen Clients zu schreiben. Damit lässt sich der MPD durch so ziemlich jedes Ereignis an einem Rechner steuern.&lt;br /&gt;
[[MPD Client Programming|hier]] habe ich einen Artikel erstellt, der das wichtige dafür beschreibt.&lt;br /&gt;
&lt;br /&gt;
=== Aufnehmen von Audio-Daten ===&lt;br /&gt;
=== Abspielen von Video-Daten ===&lt;br /&gt;
&lt;br /&gt;
Ich selbst habe noch keinen Player, bis auf den vom originalen Image mit Qtopia gesehen/compiliert, welcher Filme einigermaßen flüssig abspielt.&lt;br /&gt;
&lt;br /&gt;
Mein Ansatz momentan ist, den MPlayer mit fbdev, directfb und sdl mit Framebuffer Ausgabe direkt auf den Framebuffer schreiben zu lassen.&lt;br /&gt;
Allerdings habe ich damit bisher nur sehr sehr magere Ergebnisse gehabt.&lt;br /&gt;
&lt;br /&gt;
=== Kamera-Interface ===&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Nahezu alles ist über die verschiedenen Header auf dem Board zu erreichen&lt;br /&gt;
=== Pinouts ===&lt;br /&gt;
[[Bild:mini2440_pinout.jpg|450px]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Audio / UART&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Pin || Audio IN || CON1, CON2, CON3 || CON8 || J1 (ext. NAND/NOR-sw)&lt;br /&gt;
|-&lt;br /&gt;
| 1   || IN       || TX               || VIN  || NORBOOT   &lt;br /&gt;
|-&lt;br /&gt;
| 2   || GND      || RX               || GND  || OM0      &lt;br /&gt;
|-&lt;br /&gt;
| 3   || IN       || 5V               || GND  || NANDBOOT &lt;br /&gt;
|-&lt;br /&gt;
| 4   ||          || GND              || VDD5V||          &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;CON4 GPIO, CON5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Pin || CON5 || CON4 GPIO || CAMERA || CON12 || JTAG&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 5V  || 5V || SDA || EINT8/GPG0  || 3.3V &lt;br /&gt;
|-&lt;br /&gt;
| 2 || GND || 3.3V || SCL|| EINT11/GPG3 ||  3.3V&lt;br /&gt;
|-&lt;br /&gt;
| 3 || EINT17|| GND || EINT20|| EINT13/GPG5  || /TRST&lt;br /&gt;
|-&lt;br /&gt;
| 4 || EINT18|| /RESET || CAMRST|| EINT14/GPG6  || /RESET&lt;br /&gt;
|-&lt;br /&gt;
| 5 || EINT3|| AIN0 || CAM_CLOCK|| EINT15/GPG7  || TDI&lt;br /&gt;
|-&lt;br /&gt;
| 6 || EINT9|| AIN1 || CAM_HREF|| EINT19/GPG11 || TDO&lt;br /&gt;
|-&lt;br /&gt;
| 7 || /GCS1|| AIN2 || CAM_VSYNC|| 3.3V || TMS&lt;br /&gt;
|-&lt;br /&gt;
| 8 || /GCS2 || AIN3 || CAM_PCLK|| GND || GND&lt;br /&gt;
|-&lt;br /&gt;
| 9  || /GCS3 || EINT0 || CAMDATA7|| ||TCK&lt;br /&gt;
|-&lt;br /&gt;
|  10 || /GCS5|| EINT1 || CAMDATA6|| ||GND&lt;br /&gt;
|-&lt;br /&gt;
| 11  || L/OE|| EINT2 || CAMDATA5  &lt;br /&gt;
|-&lt;br /&gt;
|  12 || L/WE|| EINT3 || CAMDATA4  &lt;br /&gt;
|-&lt;br /&gt;
|  13 || /WAIT|| EINT4 || CAMDATA3  &lt;br /&gt;
|-&lt;br /&gt;
|   14|| /RESET|| EINT5 || CAMDATA2  &lt;br /&gt;
|-&lt;br /&gt;
|  15 || /XDACK0|| EINT6 || CAMDATA1  &lt;br /&gt;
|-&lt;br /&gt;
|  16 || /XDREQ0|| EINT8 || CAMDATA0 &lt;br /&gt;
|-&lt;br /&gt;
|  17 || LADDR0|| EINT9 || 3.3V &lt;br /&gt;
|-&lt;br /&gt;
| 18  ||LADDR1|| EINT11 || VDDCAM &lt;br /&gt;
|-&lt;br /&gt;
|  19 ||LADDR2|| EINT13 || 1.8V &lt;br /&gt;
|-&lt;br /&gt;
|  20 ||LADDR3|| EINT14 || GND &lt;br /&gt;
|-&lt;br /&gt;
|   21||LADDR4|| EINT15 ||  &lt;br /&gt;
|-&lt;br /&gt;
|   22||LADDR5|| EINT17 ||  || &lt;br /&gt;
|-&lt;br /&gt;
|   23||LADDR6|| EINT18&lt;br /&gt;
|-&lt;br /&gt;
|   24||LADDR24|| EINT19&lt;br /&gt;
|-&lt;br /&gt;
|   25||LDATA0||MISO&lt;br /&gt;
|-&lt;br /&gt;
|   26||LDATA1||MOSI&lt;br /&gt;
|-&lt;br /&gt;
|   27||LDATA2||CLOCK&lt;br /&gt;
|-&lt;br /&gt;
|   28||LDATA3||SS&lt;br /&gt;
|-&lt;br /&gt;
|   29||LDATA4|| SCL&lt;br /&gt;
|-&lt;br /&gt;
|   30||LDATA5|| SDA&lt;br /&gt;
|-&lt;br /&gt;
|   31||LDATA6||GPB0&lt;br /&gt;
|-&lt;br /&gt;
|   32||LDATA7||GPB1&lt;br /&gt;
|-&lt;br /&gt;
|33   ||LDATA8||CLKOUT0&lt;br /&gt;
|-&lt;br /&gt;
|  34 ||LDATA9||CLKOUT1&lt;br /&gt;
|-&lt;br /&gt;
|   35||LDATA10&lt;br /&gt;
|-&lt;br /&gt;
|36   ||LDATA11&lt;br /&gt;
|-&lt;br /&gt;
|  37 ||LDATA12&lt;br /&gt;
|-&lt;br /&gt;
| 38  ||LDATA13&lt;br /&gt;
|-&lt;br /&gt;
|  39 ||LDATA14&lt;br /&gt;
|-&lt;br /&gt;
|  40 ||LDATA15&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Steckverbinder ===&lt;br /&gt;
Digi-Key:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Connector      || Hersteller || Artikelnummer || Teilenummer&lt;br /&gt;
|-&lt;br /&gt;
| CON1,2,3,8     || JST Sales America Inc || PHR-4               ||  [http://search.digikey.com/scripts/DkSearch/dksus.dll?keywords=455-1164-ND 	455-1164-ND]  &lt;br /&gt;
|-&lt;br /&gt;
| Audio IN, J1   || JST Sales America Inc || PHR-3               || [http://search.digikey.com/scripts/DkSearch/dksus.dll?keywords=455-1126-ND 455-1126-ND]      &lt;br /&gt;
|-&lt;br /&gt;
|                || JST Sales America Inc || SPH-002T-P0.5L      || [http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&amp;amp;name=455-2148-1-ND 455-2148-1-ND]&lt;br /&gt;
|-&lt;br /&gt;
| CON4           || Sullins Connector Solutions || SFH213-PPPN-D17-ID-BK-M181 || [http://search.digikey.com/scripts/DkSearch/dksus.dll?keywords=S9061-ND S9061-ND]&lt;br /&gt;
|-&lt;br /&gt;
|                || Sullins Connector Solutions || SBH21-NBPN-D17-ST-BK || [http://search.digikey.com/scripts/DkSearch/dksus.dll?keywords=S9023-ND	S9023-ND]&lt;br /&gt;
          &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== onboard Hardware ====&lt;br /&gt;
Sobald man mal anfangen möchte, sich mit der Hardware auseinanderzusetzen, sollte man natürlich auch wissen wie, was und wo dran.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;... an welchem EINT war ...  Low oder High aktiv? ...&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Bild:mini2440_eeprom.jpg||300px]][[Bild:mini2440_buttons.jpg||300px]][[Bild:mini2440_leds.jpg||300px]][[Bild:mini2440_poti.jpg||300px]]&lt;br /&gt;
[[Bild:mini2440_buzzer.jpg||300px]]&lt;br /&gt;
&lt;br /&gt;
=== [[UART]] ===&lt;br /&gt;
Die S3C2440 besitzt insgesamt drei unabhängige UARTs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Die Spannungspegel der Rx und Tx Pins sind etwas verwirrend. Auf dem Stecker liegen 5V an, doch das Datenblatt sagt nicht, ob die Rx und Tx Pins auch 5V-Tolerant sind. Daher sollte man das ausschliessen. Ein Spannungsteiler aus 3k3 und 2k2 an der Rx-Leitung vom Prozessor sollte das Problem beheben, solange der Empfänger an der Tx-Leitung 3.3V noch als H-Signal versteht.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;UARTs&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! UART || 64 byte FIFO || IrDA 1.0 || RTS/CTS Leitungen|| Spannungspegel (L - H)&lt;br /&gt;
|-&lt;br /&gt;
| uart0 || * || * || * || 0V - 3,3V / RS232&lt;br /&gt;
|-&lt;br /&gt;
| uart1 || * || * || * || 0V - 3,3V&lt;br /&gt;
|-&lt;br /&gt;
| uart2 || * || * || x || 0V - 3,3V&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Über die Ansteuerung auf Hardwareebene braucht man sich, solange man ein Betriebssystem verwendet, &#039;&#039;&#039;keine&#039;&#039;&#039; Gedanken zu machen.&lt;br /&gt;
Unter Linux sind die drei UARTs über ttySAC0, ttySAC1 und ttySAC2 zu erreichen.&lt;br /&gt;
&lt;br /&gt;
=== [[LED|LEDs]] ===&lt;br /&gt;
Wenn der Kerneltreiber für die LEDs mit eincompiliert wurde, ist es ein leichtes, die LEDs mit einer kleinen Hand voll C-Zeilen anzusprechen.&lt;br /&gt;
&lt;br /&gt;
Man öffnet die Gerätedatei und mittels &#039;&#039;ioctl()&#039;&#039; schreibt man die Werte in die Gerätedatei.&lt;br /&gt;
&lt;br /&gt;
Der Aufruf von ioctl sieht so aus:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
ioctl(descriptor, AN/AUS, LED_NUMMER);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Also muss man um zum Beispiel LED0 anzuschalten für AN/AUS &#039;&#039;&#039;1&#039;&#039;&#039; angeben und für LED_NUMMER die &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
Dafür habe ich im Abschnitt C-Code zwei Beispiel-Funktionen geschrieben. Die erste erwartet AN/AUS und LED_NUMMER als Argument, die Zweite erwartet eine Bitmaske, was mir persönlich doch besser gefällt ;)&lt;br /&gt;
&lt;br /&gt;
==== C-Code ====&lt;br /&gt;
&amp;lt;c&amp;gt;int setleds(int on, int led_no) {&lt;br /&gt;
	int led_fd = open(&amp;quot;/dev/leds0&amp;quot;, 0);&lt;br /&gt;
	if (led_fd &amp;lt; 0) { led_fd = open(&amp;quot;/dev/leds&amp;quot;, 0); }&lt;br /&gt;
	if (led_fd &amp;lt; 0) { perror(&amp;quot;open device leds&amp;quot;); return(-1); }&lt;br /&gt;
	&lt;br /&gt;
	ioctl(led_fd, on, led_no);&lt;br /&gt;
	&lt;br /&gt;
	close(led_fd);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int setledmask(int mask) {&lt;br /&gt;
	int led_fd = open(&amp;quot;/dev/leds0&amp;quot;, 0);&lt;br /&gt;
	if (led_fd &amp;lt; 0) { led_fd = open(&amp;quot;/dev/leds&amp;quot;, 0); }&lt;br /&gt;
	if (led_fd &amp;lt; 0) { perror(&amp;quot;open device leds&amp;quot;); return(-1); }&lt;br /&gt;
	&lt;br /&gt;
	if(mask &amp;amp; 0x01) ioctl(led_fd, 1, 0); else ioctl(led_fd, 0, 0);&lt;br /&gt;
	if(mask &amp;amp; 0x02) ioctl(led_fd, 1, 1); else ioctl(led_fd, 0, 1);&lt;br /&gt;
	if(mask &amp;amp; 0x04) ioctl(led_fd, 1, 2); else ioctl(led_fd, 0, 2);&lt;br /&gt;
	if(mask &amp;amp; 0x08) ioctl(led_fd, 1, 3); else ioctl(led_fd, 0, 3);&lt;br /&gt;
	&lt;br /&gt;
	close(led_fd);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== LED-sysfs ====&lt;br /&gt;
Bei aktiviertem  sys-fs Kerneltreiber für LEDs, kann man diese im Verzeichnis &#039;/sys/class/leds/&#039; finden und ansteuern. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /sys/class/leds/           # wechselt in den Ordner&lt;br /&gt;
ls -lsa                       # listet alle Vorhandenen LEDs auf&lt;br /&gt;
echo 1 &amp;gt; led4/brightness      # LED AN&lt;br /&gt;
echo 0 &amp;gt; led4/brightness      # LED AUS&lt;br /&gt;
# oder&lt;br /&gt;
echo 1 &amp;gt; /sys/class/leds/led4/brightness      # LED AN&lt;br /&gt;
echo 0 &amp;gt; /sys/class/leds/led4/brightness      # LED AUS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[I2C]] ===&lt;br /&gt;
==== i2ctools ====&lt;br /&gt;
Die [http://www.lm-sensors.org/wiki/I2CTools i2ctools] sind Linux-Userspace Programme, welche dafür gedacht sind, auf einfache Weise auf der Konsole mit I2C Geräten zu kommunizieren.&lt;br /&gt;
==== 24xx [[EEPROM]]s ====&lt;br /&gt;
==== [[Port-Expander]] ====&lt;br /&gt;
===== PCF8574 / PCF8574a =====&lt;br /&gt;
Einen [[PCF8574]] anzusteuern ist sehr einfach. Mit den i2ctools kann man damit erste Tests machen um zu sehen, ob er funktioniert.&lt;br /&gt;
&lt;br /&gt;
Der Port-Expander wird mit den 3.3V versorgt, welche das Board liefert, SDA und SCL natürlich ebenfalls anschliessen.&lt;br /&gt;
Ich habe alle drei Adress-Pins auf &#039;&#039;&#039;L&#039;&#039;&#039; gelegt und erhalte von &#039;&#039;i2cdetect&#039;&#039; so die Adresse &#039;&#039;&#039;0x38&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== [[SPI]] ===&lt;br /&gt;
=== [[PWM]] ===&lt;br /&gt;
==== onboard buzzer ====&lt;br /&gt;
=== [[ADC]] ===&lt;br /&gt;
==== Touchscreen ====&lt;br /&gt;
Wenn der Kernel-Treiber installiert ist, kann der Touchscreen wie z. B. jede Maus über das event-Interface angesprochen werden.&lt;br /&gt;
Normalerweise liegt der Touchscreen auf &#039;&#039;/dev/input/event0&#039;&#039;.&lt;br /&gt;
Diese Gerätedatei muss man auch der tslib angeben.&lt;br /&gt;
&lt;br /&gt;
==== LCD Backlight ====&lt;br /&gt;
Wenn der Kernel-Treiber installiert ist, kann die Hintergrundbeleuchtung des Displays einfach über die entsprechende Geräte-Datei ein- bzw. ausgeschaltet werden.&amp;lt;br&amp;gt;&lt;br /&gt;
einschalten: &amp;lt;pre&amp;gt;# echo 1 &amp;gt; /dev/backlight&amp;lt;/pre&amp;gt;&lt;br /&gt;
ausschalten: &amp;lt;pre&amp;gt;# echo 0 &amp;gt; /dev/backlight&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== onboard Poti ====&lt;br /&gt;
Hierzu muss wieder der Kerneltreiber mit eincompiliert sein, damit man das Gerät &#039;&#039;/dev/adc&#039;&#039; hat. Im FriendlyARM-Kernel ist der Treiber fest mit drin.&lt;br /&gt;
&lt;br /&gt;
Die Funktion getpoti() liest in einer Schleife mehrmals den Potiwert ein und bildet einen Mittelwert, der zurückgegeben wird.&lt;br /&gt;
Die Anzahl der Werte, aus denen der Mittelwert gebildet wird, wird mit dem #define &#039;&#039;LOOPs&#039;&#039; angegeben.&lt;br /&gt;
===== C-Code =====&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#define LOOPS 12 // 12 Werte fuer Mittelwert&lt;br /&gt;
&lt;br /&gt;
unsigned int getpoti() {&lt;br /&gt;
	int value, i, fd = open(&amp;quot;/dev/adc&amp;quot;, 0);&lt;br /&gt;
	unsigned int add = 0, ret;&lt;br /&gt;
	if (fd &amp;lt; 0) { printf(&amp;quot;cant open adc device!\n&amp;quot;); return -1; }&lt;br /&gt;
	&lt;br /&gt;
	for(i = 0; i &amp;lt; LOOPS; i++) {&lt;br /&gt;
		char buffer[30];&lt;br /&gt;
		int len = read(fd, buffer, sizeof buffer -1);&lt;br /&gt;
		if (len &amp;gt; 0) {&lt;br /&gt;
			buffer[len] = &#039;\0&#039;;&lt;br /&gt;
			value = -1;&lt;br /&gt;
			sscanf(buffer, &amp;quot;%d&amp;quot;, &amp;amp;value);&lt;br /&gt;
			add += value;&lt;br /&gt;
		} else {&lt;br /&gt;
			printf(&amp;quot;cant read from adc device!\n&amp;quot;);&lt;br /&gt;
                        close(fd);&lt;br /&gt;
			return -1;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	close(fd);&lt;br /&gt;
	ret = add / LOOPS;&lt;br /&gt;
	return ret;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GPIO ===&lt;br /&gt;
Da der S3C2440 über sage und schreibe &#039;&#039;&#039;130&#039;&#039;&#039; GPIOs verfügt, mit diversen Funktionen, wie I2C, PWM, ..., das setzen der &amp;quot;Drive Strength&amp;quot; (maximaler Strom an machen Pins), ... ist das Ganze nicht mehr so einfach wie bei einem AVR.&lt;br /&gt;
Der Bastler sollte hier schon genau wissen was er will vorallem das [[Media:S3C2440_datasheet_samsung.pdf|Datenblatt]] zu Rate ziehen.&lt;br /&gt;
Die Funktionen und Register des Chips sind ab Seite &#039;&#039;&#039;274&#039;&#039;&#039; (Kapitel &#039;&#039;IO-Ports&#039;&#039;) zu finden.&lt;br /&gt;
Die elektrischen Daten sind ab Seite &#039;&#039;&#039;554&#039;&#039;&#039; zu finden.&lt;br /&gt;
&lt;br /&gt;
==== C-Code für die onboard-Buttons ====&lt;br /&gt;
Hierfür wird wird der Kerneltreiber benötigt. Im FriendlyARM-Kernel ist dieser fest mit drin.&lt;br /&gt;
&lt;br /&gt;
Wenn die Buttons eingelesen werden, erhält man für jeden nicht gerdrücken Buttons &#039;&#039;0x30&#039;&#039; und für jeden gedrückten Button &#039;&#039;0x31&#039;&#039;.&lt;br /&gt;
Die Funktion liest die Buttons ein und vergleicht den Wert, sobald 0x31 kommt, ist sie beendet. Die Buttons sind von 0 bis 5 nummeriert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
int wait4button(int button) {&lt;br /&gt;
	char btn[6] = {&#039;0&#039;, &#039;0&#039;, &#039;0&#039;, &#039;0&#039;, &#039;0&#039;, &#039;0&#039;};&lt;br /&gt;
	int fd = open(&amp;quot;/dev/buttons&amp;quot;, 0);&lt;br /&gt;
	if (fd &amp;lt; 0) { printf(&amp;quot;cant open buttons device&amp;quot;); return(-1); }&lt;br /&gt;
&lt;br /&gt;
	while(btn[button] == 0x30) {	// if a button is released, we read 0x30, if pressed 0x31&lt;br /&gt;
		if (read(fd, btn, sizeof btn) != sizeof btn) {&lt;br /&gt;
			printf(&amp;quot;cant read buttons!&amp;quot;);&lt;br /&gt;
			close(fd);&lt;br /&gt;
			return(-1);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	close(fd);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GPIO-sysfs ====&lt;br /&gt;
Bei aktiviertem  sys-fs Kerneltreiber für GPIOs, kann man diese im Verzeichnis &#039;/sys/class/gpio/&#039; finden und ansteuern. Eine gute Erklärung ist dazu [http://www.avrfreaks.net/wiki/index.php/Documentation:Linux/GPIO#gpio-sysfs hier] zu finden.&lt;br /&gt;
&lt;br /&gt;
=== Real Time Clock ===&lt;br /&gt;
Für die Real Time Clock, welche fest im Prozessor integriert ist, gibt es einen Kerneltreiber.&lt;br /&gt;
&lt;br /&gt;
Lesen/Setzen lässt sich sich sehr einfach mit dem Tool [http://linux.die.net/man/8/hwclock hwclock].&lt;br /&gt;
=== Beispielprogramme ===&lt;br /&gt;
&lt;br /&gt;
Hier habe ich ein paar kleine Beispielprogramme im Quellcode hochgeladen.&lt;br /&gt;
&lt;br /&gt;
* [[Media:led_adc.c]] Herzschlag auf den LEDs, Geschwindigkeit mit Poti einstellen. Compilieren mit &#039;&#039;arm-linux-gcc led_adc.c -o led_adc&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Andere Betriebssysteme ==&lt;br /&gt;
&lt;br /&gt;
=== uCos2 ===&lt;br /&gt;
=== Windows CE ===&lt;br /&gt;
=== FreeRTOS ===&lt;br /&gt;
=== emdedian ===&lt;br /&gt;
&lt;br /&gt;
== Software mit Betriebssystem ==&lt;br /&gt;
* Grafische Oberfläche mit der SDL-Bibliothek erstellen:&amp;lt;br&amp;gt;[[Mini2440 SDL GUI Programmierung]]&lt;br /&gt;
&lt;br /&gt;
== Software ohne Betriebssystem ==&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungsumgebung ===&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
&lt;br /&gt;
== Wo kaufen? ==&lt;br /&gt;
&lt;br /&gt;
Zu beziehen ist das Board entweder über Ebay, meist aus China, oder bei [http://www.watterott.com/de/FriendlyARM Watterott].&lt;br /&gt;
&lt;br /&gt;
== Eigene Displays an das Mini anschließen ==&lt;br /&gt;
&lt;br /&gt;
* Displays mit LVDS Anschluss können z.B. mit diesem selbst gebauten Adapter an das Mini angeschlossen werden. http://www.mikrocontroller.net/topic/217774#new&lt;br /&gt;
&lt;br /&gt;
== Links und Quellen ==&lt;br /&gt;
* [http://www.friendlyarm.net/products/mini2440 Übersicht auf der Friendlyarm Seite]&lt;br /&gt;
=== Howtos ===&lt;br /&gt;
* [http://wiki.linuxmce.org/index.php/Mini2440 Kernel, u-boot und qemu-mini2440 compilieren]&lt;br /&gt;
* [[Mini2440 SDL GUI Programmierung]]&lt;br /&gt;
&lt;br /&gt;
=== Repositories ===&lt;br /&gt;
&lt;br /&gt;
* [http://code.google.com/p/mini2440/downloads/list Emdebian+Angstrom Images, s3c_boot_usb]&lt;br /&gt;
&lt;br /&gt;
* [http://programmers-projects.de/node/10 Programmer&#039;s-Projects Mini2440 Projekt (überarbeitetes USB-Upload-Tool für Linux und mehr)]&lt;br /&gt;
&lt;br /&gt;
=== Youtube und ähnliche ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM-Boards]]&lt;br /&gt;
[[Category:Linux-Boards]]&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:AVR_Bootloader_FastBoot_von_Peter_Dannegger&amp;diff=53720</id>
		<title>Diskussion:AVR Bootloader FastBoot von Peter Dannegger</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:AVR_Bootloader_FastBoot_von_Peter_Dannegger&amp;diff=53720"/>
		<updated>2010-12-21T12:24:38Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: Die Seite wurde neu angelegt: „Hi,  ich hab mir ein kleines Script + Hand voll Zeilen C Code in die UART-RX-ISR gebastelt, welches mir per Makefile automatisch den Controller resettet um in den…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi,&lt;br /&gt;
&lt;br /&gt;
ich hab mir ein kleines Script + Hand voll Zeilen C Code in die UART-RX-ISR gebastelt, welches mir per Makefile automatisch den Controller resettet um in den Bootloader zu gelangen. Kann ich das hier in den Artikel mit reinpacken ?&lt;br /&gt;
--[[Benutzer:Kruemeltee|Kruemeltee]] 12:24, 21. Dez. 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Micro2440&amp;diff=50071</id>
		<title>Micro2440</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Micro2440&amp;diff=50071"/>
		<updated>2010-08-21T06:19:24Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: /* uBoot ENVs Beschreibung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Micro2440 =&lt;br /&gt;
--[[Benutzer:Theborg0815|Theborg0815]] 19:46, 3. Jul. 2010 (UTC)&lt;br /&gt;
[http://www.friendlyarm.net/products/micro2440 Micro2440 von FriendlyARM]&lt;br /&gt;
&lt;br /&gt;
Das Micro2440 ist im Prinzip wie das [http://www.mikrocontroller.net/articles/Mini2440 Mini2440] nur dass es keine 64/128MB Flash Variante gibt.&lt;br /&gt;
Aufgebaut ist es als Stamp-Modul, welches meistens mit einem SDK-Board, der Peripherie und wahlweise einem 3,5&amp;quot; / 7&amp;quot; TFT oder einen LCD2VGA Adapter kombiniert wird.&lt;br /&gt;
&lt;br /&gt;
=== Technische Daten (Stamp Modul) ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Micro2440.jpg|350px|right]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Dimension:&#039;&#039;&#039; 63 x 52 mm&lt;br /&gt;
 &#039;&#039;&#039;CPU:&#039;&#039;&#039; 400 MHz Samsung S3C2440A ARM920T (Max freq. 533 MHz)&lt;br /&gt;
 &#039;&#039;&#039;RAM:&#039;&#039;&#039; 64 MB SDRAM, 32 bit 100 MHz Bus&lt;br /&gt;
 &#039;&#039;&#039;Flash:&#039;&#039;&#039; 64 MB / 128 MB / 256 MB / 1GB NAND Flash and 2 MB NOR Flash with BIOS&lt;br /&gt;
 &#039;&#039;&#039;User Outputs:&#039;&#039;&#039; 4x LEDs Expansion headers (2.0mm)&lt;br /&gt;
 &#039;&#039;&#039;Debug:&#039;&#039;&#039; 10 pin JTAG (2.0mm)&lt;br /&gt;
 &#039;&#039;&#039;OS Support:&#039;&#039;&#039; Android, Linux 2.6, Windows CE 5 and 6&lt;br /&gt;
&lt;br /&gt;
=== Technische Daten (SDK-Board) ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Micro2440-SDK.jpg|350px|right]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Dimension:&#039;&#039;&#039; 180 x 130 mm&lt;br /&gt;
 &#039;&#039;&#039;EEPROM:&#039;&#039;&#039; 1024 Byte 24C08 (I2C)&lt;br /&gt;
 &#039;&#039;&#039;Ext. Memory:&#039;&#039;&#039; SD-Card socket&lt;br /&gt;
 &#039;&#039;&#039;Serial Ports:&#039;&#039;&#039; 3x DB9 connector (RS232)&lt;br /&gt;
 &#039;&#039;&#039;USB:&#039;&#039;&#039; 4x USB-A Host, 1x USB-B Device&lt;br /&gt;
 &#039;&#039;&#039;Audio Output:&#039;&#039;&#039; 3.5 mm stereo jack&lt;br /&gt;
 &#039;&#039;&#039;Audio Input:&#039;&#039;&#039; 3.5mm jack (mono)&lt;br /&gt;
 &#039;&#039;&#039;Ethernet:&#039;&#039;&#039; RJ-45 10/100M (DM9000)&lt;br /&gt;
 &#039;&#039;&#039;RTC:&#039;&#039;&#039; Real Time Clock with battery&lt;br /&gt;
 &#039;&#039;&#039;Beeper:&#039;&#039;&#039; PWM buzzer&lt;br /&gt;
 &#039;&#039;&#039;Camera:&#039;&#039;&#039; 20 pin Camera interface&lt;br /&gt;
 &#039;&#039;&#039;LCD:&#039;&#039;&#039; Connector for FriendlyARM Displays (3,5&amp;quot; and 7&amp;quot;) and VGA Board&lt;br /&gt;
 &#039;&#039;&#039;Touch Panel:&#039;&#039;&#039; 4 pin&lt;br /&gt;
 &#039;&#039;&#039;User Inputs:&#039;&#039;&#039; 6x push buttons and 1x A/D pot&lt;br /&gt;
 &#039;&#039;&#039;Expansion header&#039;&#039;&#039; (2.0mm)&lt;br /&gt;
 &#039;&#039;&#039;Power:&#039;&#039;&#039; 5V connector, power switch and LED&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
== U-Boot ==&lt;br /&gt;
==== U-Boot aus den Quellen bauen ====&lt;br /&gt;
&lt;br /&gt;
Leider kann der vivi-Bootlader nicht viel. Vivi  unterstützt nur yaffs2 Kernel Images, daher ist es sinnvoll diesen durch den U-Boot-Bootloader auszutauschen. Ich benutze U-Boot aus dem OPENMOKO Projekt für das Micro2440 mit 256MB.&lt;br /&gt;
&lt;br /&gt;
Der compilierte U-Boot-Bootloader ist zu finden unter:[[Datei:uBoot-256MB.bin]]. &lt;br /&gt;
&lt;br /&gt;
Für den Anfang sollte abgewogen werden, ob der vivi-Bootloader reicht. Im Fehlerfall kann dieser per JTAG wieder eingespielt werden.&lt;br /&gt;
&lt;br /&gt;
Voraussetzungen dafür ist ein Cross-Compiler z.B. der von [http://www.codesourcery.com/sgpp/lite/arm/portal/package3696/public/arm-none-linux-gnueabi/arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 Codesourcery]. &lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt muss das Build-Verzeichnis angelegt werden und das git-Repository heruntergeladen werden.. Das geschieht mit den Befehlen:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
mkdir uboot ; cd uboot&lt;br /&gt;
git clone git://repo.or.cz/u-boot-openmoko/mini2440.git&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Danach müssen die Source-Dateien für das micro2440 eingestellt und compiliert werden:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
cd mini2440&lt;br /&gt;
export CROSS_COMPILE=arm-none-linux-gnueabi-&lt;br /&gt;
make mini2440_config&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== U-Boot Flash’en ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Den Bootswitch S2 auf NOR stellen, sobald vivi erscheint &amp;quot;q&amp;quot; (in der vivi Konsole) drücken.&lt;br /&gt;
&lt;br /&gt;
Damit U-Boot ab der Adresse 0x32000000 programmiert wird, muss der folgende Befehl eingeben werden:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
load ram 0x32000000 &amp;lt;uboot bin file grösse in bytes&amp;gt; u-boot&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Nun wartet Vivi auf die Datei. In der Shell wird das hochladen mit dem folgenden Befehl initiiert.  Die Dateiübertragung erfolgt über USB. &lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
sudo s3c2410_boot_usb u-boot.bin&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Als nächstes soll das U-Boot gestartet werden. Dazu  muss an die Speicherstelle gesprungen werden,  an der das U-Boot programmiert wurde. Dies wird mit dem folgendem Befehl erreicht:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
go 0x32000000&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Waren alle vorherigen Schritte erfolgreich, sollte nun die U-Boot Konsole angezeigt werden.(MINI2440#).  Anschließend wird nun der NAND-Flash vorbereitet &lt;br /&gt;
&lt;br /&gt;
Zuerst muss das NAND-Flash gelöscht werden, dies wird mit dem folgendem Befehl erreicht:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
nand scrub&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Danach wird die Bad-Block Tabelle erstellt, dies kann etwas Zeit in Anspruch nehmen:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
nand createbbt&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Damit U-Boot in das Flash geschrieben wird, muss folgender Befehl ausgeführt werden.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
nand write.e 0x32000000 0x0 &amp;lt;uBoot bin grösse in hex&amp;gt;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Für das Partitionieren des Flashs dient der Befehl:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
dynpart&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Environment Speicher einrichten:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
dynenv set u-boot_env&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Enviroment Parameter sichern:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
saveenv&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Nachdem alle Schritte durchgeführt wurden, muss nur noch das Bord ausgeschaltet werden und S2 wieder auf NAND gestellt werden. Nach dem Einschalten sollte euch nun das U-Boot begrüßen.&lt;br /&gt;
&lt;br /&gt;
== Kernel/Filesystem ==&lt;br /&gt;
=== Kernel aus den Quellen compilieren ===&lt;br /&gt;
Jetzt steht man vor der Wahl welchen Kernel man nimmt. Egal ob EMDebian, Gentoo oder Android, man braucht ihn so oder so. Die fertigen Kernel von [http://www.friendlyarm.net/downloads FriendlyARM] können nur VFAT und JFFS2 daher eignen sich diese nur bedingt für ein System z.b. auf SD/USBStick oder Ext. Platte. Daher ist es sinnvoll sich selbst einen Kernel zu bauen, was nicht schwer ist.&lt;br /&gt;
&lt;br /&gt;
Als erstes besorgen wir uns die Kernel-Quellen und entpacken sie:&lt;br /&gt;
&lt;br /&gt;
==== Gentoo/emDebian ====&lt;br /&gt;
&amp;lt;c&amp;gt; &lt;br /&gt;
 mkdir micro2440&lt;br /&gt;
 cd micro2440&lt;br /&gt;
 git clone git://repo.or.cz/linux-2.6/mini2440.git linux-2.6.32-rc8&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Android ====&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 mkdir android&lt;br /&gt;
 cd android&lt;br /&gt;
 git clone git://gitorious.org/android-mini2440/kernel-opencsbc.git&lt;br /&gt;
&amp;lt;/c&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Als nächstes laden wir die Default Config und erstellen die .Config für das Micro2440:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 cd linux-2.6.32-rc8&lt;br /&gt;
 CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm make mini2440_defconfig&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man noch etwas ändern möchte (z.b. ext3-Treiber) startet man &amp;quot;menuconfig&amp;quot;:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm make menuconfig&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Den Kernel anschließend compilieren:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm make&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Später kann man noch die Module auf die SD-Karte kopieren:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 CROSS_COMPILE=arm-softfloat-linux-gnueabi- ARCH=arm INSTALL_MOD_PATH=/mnt make modules_install&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Als letztes muss das Kernel Image für U-Boot vorbereitet werden. Aus dem zImage (gzip komprimiertes Kernel-Image) wird ein uImage für U-Boot so erstellt:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 cd .../arch/arm/boot&lt;br /&gt;
 mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d zImage uImage&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Filesystem erstellen ===&lt;br /&gt;
Als erstes brauchen wir ein RootFS dieses brauchen wir um später die Partition damit zu füllen.&lt;br /&gt;
&lt;br /&gt;
==== emDebian ====&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
mkdir armel-rootfs&lt;br /&gt;
debootstrap --verbose --arch armel --foreign lenny armel-rootfs http://ftp.de.debian.org/debian&lt;br /&gt;
cd armel-rootfs&lt;br /&gt;
tar cfjv ../armel-rootfs.tar.bz2 *&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Gentoo ====&lt;br /&gt;
http://distfiles.gentoo.org/releases/arm/autobuilds/current-stage3/armv4tl-softfloat-linux-gnueabi/&lt;br /&gt;
&lt;br /&gt;
==== Android ====&lt;br /&gt;
&amp;lt;c&amp;gt; &lt;br /&gt;
 mkdir android&lt;br /&gt;
 cd android&lt;br /&gt;
 git clone git://gitorious.org/android-mini2440/android-mini2440.git&lt;br /&gt;
 cd android-mini2440&lt;br /&gt;
 tar cfjv ../android-rootfs.tar.bz2 *&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Speichermedien vorbereiten ==&lt;br /&gt;
=== SD-Karte und USB Medien ===&lt;br /&gt;
Als nächstes bereiten wir ein Speichermedium vor, wir brauchen 3 Partitionen, 2x EXT2 und einmal Swap das Beispiel gilt für eine 2GB SD-Karte.&lt;br /&gt;
&lt;br /&gt;
Das machen wir am besten mit fdisk in der Konsole, man kann auch gparted(Grafisch) nutzen aber komischerweise mountet dann bei mir das RootFS nicht ebenso wenn das RootFS ext3 ist, so wie ich raus gefunden habe geht das nur mit SDHC Karten also SD-Karten mit Speicher der &amp;gt;2GB ist.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
fdisk /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Der Rest ist recht einfach, einfach folgendes eingeben: dp1 np1 &amp;lt;enter&amp;gt; +20MB &amp;lt;enter&amp;gt; np2 +1800MB &amp;lt;enter&amp;gt; np3 &amp;lt;enter&amp;gt; &amp;lt;enter&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Danach mit p schauen ob alle 3 Partitionen erstellt wurden und mit w Speichern und fdisk beenden.&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen wir noch die Partitionen Formatieren(für ext3 muss noch -j in der zweiten Zeile angegeben werden):&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
mke2fs /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;1&lt;br /&gt;
mke2fs /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;2&lt;br /&gt;
mkswap /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;3&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BootFS/RootFS einrichten ===&lt;br /&gt;
&lt;br /&gt;
Dieses ist bei allen Distributionen gleich als erstes kopieren wir den Kernel auf das Speichermedium.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
mount /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;1 /mnt&lt;br /&gt;
cp ../linux-2.6.32-rc8/arch/arm/boot/uImage /mnt&lt;br /&gt;
sync&lt;br /&gt;
umount /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;1&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Jetzt muss noch das RootFS erstellt werden:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
mount /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;2 /mnt&lt;br /&gt;
tar xvzfop /path/to/downloaded/&amp;lt;RootFSfile&amp;gt; -C /mnt&lt;br /&gt;
sync&lt;br /&gt;
umount /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;2&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== uBoot ENVs einrichten ==&lt;br /&gt;
So jetzt sind wir fast fertig nur das Wichtigste fehlt noch, wir müssen dem Bootlader noch sagen wo er den Kernel findet und dem Kernel wo er das RootFS findet.&lt;br /&gt;
&lt;br /&gt;
Dazu drücken wir eine Taste um denn Autoboot zu unterbrechen und stellen folgendes ein:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
setenv bootcmd mmcinit ; ext2load mmc 0:1 0x31000000 uImage ; bootm 0x31000000&lt;br /&gt;
setenv bootargs noinitrd mini2440=1tb rootfstype=ext2 root=/dev/mmcblk0p2 rw rootwait&lt;br /&gt;
saveenv&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Android muss noch ein &amp;quot;init=linuxrc&amp;quot; in die zweite Zeile eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
So das war es wen ihr alles durchgearbeitet habt könnt ihr die SD-Karte in den Slot stecken und denn Reset drücken danach sollte das Bord booten.&lt;br /&gt;
&lt;br /&gt;
== uBoot ENVs Beschreibung ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ENV        || BOOT Parameter         || Beschreibung       &lt;br /&gt;
|-&lt;br /&gt;
| bootargs   || noinitrd               || &lt;br /&gt;
|-&lt;br /&gt;
| bootargs   || mini2440=&amp;lt;0..9&amp;gt;&amp;lt;t&amp;gt;&amp;lt;b&amp;gt;  || Type des Displays &lt;br /&gt;
|-&lt;br /&gt;
|            ||                        || 0 = 3,5&amp;quot; Display N35&lt;br /&gt;
|-&lt;br /&gt;
|            ||                        || 1 = 7&amp;quot; Display&lt;br /&gt;
|-&lt;br /&gt;
|            ||                        || 2 = VGA-Board&lt;br /&gt;
|-&lt;br /&gt;
|            ||                        || 3 = 3,5&amp;quot; Display T35&lt;br /&gt;
|-&lt;br /&gt;
|            ||                        || 4 = 5,6&amp;quot; Display Innolux&lt;br /&gt;
|-&lt;br /&gt;
|            ||                        || t = Touchscreen&lt;br /&gt;
|-&lt;br /&gt;
|            ||                        || b = Backlight&lt;br /&gt;
|-&lt;br /&gt;
| bootargs   || rootfstype=&amp;lt;var&amp;gt;       || Dateisystem mit RootFS&lt;br /&gt;
|-&lt;br /&gt;
| bootargs   || root=&amp;lt;var&amp;gt;             || Bezeichnung/Drive des RootFS (z.b. /dev/sda1)&lt;br /&gt;
|-&lt;br /&gt;
| bootargs   || rw                     || Mount Parameter rw = Read/Write, ro = Readonly&lt;br /&gt;
|-&lt;br /&gt;
| bootargs   || rootwait               || Warte aufs Dateisystem bevor der Startvorgang fortgesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
| bootargs   || init=&amp;lt;var&amp;gt;             || Startet das angegebene Programm nach dem der Kernelstart abgeschlossen ist.  &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tips/Tricks/Files ==&lt;br /&gt;
=== emDebian/Gentoo ===&lt;br /&gt;
&lt;br /&gt;
==== Firstboot (Root Password)====&lt;br /&gt;
&lt;br /&gt;
Beim ersten Start ist kein RootPW gesetzt b.z.w. es ist nicht bekannt, daher beim starten einfach init=/bin/bash in die Bootzeile von UBoot einfügen, danach kann mit passwd das Passwort gesetzt werden danach einfach das wieder entfernen und man kann sich normal einloggen.&lt;br /&gt;
&lt;br /&gt;
==== /etc/fstab ====&lt;br /&gt;
Beispiel der /etc/fstab: [[Datei:fstab.txt]]&lt;br /&gt;
&lt;br /&gt;
==== /etc/X11/xorg.conf ====&lt;br /&gt;
Beispiel xorg.conf fürs 7&amp;quot; Display: [[Datei:xorg.conf.txt]]&lt;br /&gt;
&lt;br /&gt;
==== Touchscreen kalibrieren ====&lt;br /&gt;
&lt;br /&gt;
Folgende Zeile zur /etc/X11/xorg.conf bei [Section &amp;quot;InputDevice&amp;quot;]&lt;br /&gt;
 hinzufügen.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 Option &amp;quot;Calibrate&amp;quot; &amp;quot;1&amp;quot;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Und dann noch folgendes machen:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 apt-get install xserver-xorg-input-evtouch&lt;br /&gt;
 cp /usr/share/xf86-input-evtouch/empty_cursor.xbm /&lt;br /&gt;
 cd /usr/lib/xf86-input-evtouch&lt;br /&gt;
 sh calibrate.sh&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit folgenden Einträgen in die /etc/X11/xorg.conf bei [Section &amp;quot;InputDevice&amp;quot;] kann man jetzt erst mal die kreuze ausrichten (Siehe Bild.)&lt;br /&gt;
&lt;br /&gt;
[[Datei:touch.jpg|300px|right]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
        Option        &amp;quot;x0&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y0&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x1&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y1&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x2&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y2&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x3&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y3&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x4&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y4&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x5&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y5&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x6&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y6&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x7&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y7&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x8&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y8&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Als nächstes muss man noch die Min/Max werte ermitteln dazu Links unten und oben rechts die Min/Max werte in die xorg.conf übertragen.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
        Option        &amp;quot;MinX&amp;quot;        &amp;quot;153&amp;quot;&lt;br /&gt;
        Option        &amp;quot;MinY&amp;quot;        &amp;quot;78&amp;quot;&lt;br /&gt;
        Option        &amp;quot;MaxX&amp;quot;        &amp;quot;873&amp;quot;&lt;br /&gt;
        Option        &amp;quot;MaxY&amp;quot;        &amp;quot;937&amp;quot;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Beim 7&amp;quot; Display muss man jetzt nur noch der SW sagen das der Touchscreen Falschrum verbaut ist dieses geht mit folgenden Eintrag in die xorg.conf.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
        Option &amp;quot;SwapY&amp;quot; &amp;quot;2&amp;quot;&lt;br /&gt;
        Option &amp;quot;SwapX&amp;quot; &amp;quot;2&amp;quot;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Jetzt noch den Eintrag [Option &amp;quot;Calibrate&amp;quot; &amp;quot;1&amp;quot;] wieder aus der xorg.conf raus schmeißen dann sollte alles funktionieren.&lt;br /&gt;
&lt;br /&gt;
==== Konsole auf dem TFT und Seriell ausgeben ====&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
echo ttySAC0 &amp;gt;&amp;gt; /etc/securetty &lt;br /&gt;
printf &amp;quot;T0:123:respawn:/sbin/getty 115200 ttySAC0\n&amp;quot; &amp;gt;&amp;gt; /etc/inittab&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Virtuelle Maus ====&lt;br /&gt;
&lt;br /&gt;
Wer lieber mit einer Maus arbeitet und ein iPOD/iPhone besitzt kann RemotePad benutzen einfach aus dem Appstore Laden (Kostenlos), den Quellcode für die Anwendung gibt es unter http://www.tenjin.org/RemotePad/ dieser lässt sich recht einfach auf dem Board oder in einem Buildroot compilieren.&lt;br /&gt;
&lt;br /&gt;
==== Bildschirmtastatur ====&lt;br /&gt;
&lt;br /&gt;
Als Bildschirmtastatur kann man xvkbd verwenden, bei Xfce z.b. einfach einen Link dazu in dem Autostart Ordner erstellen damit es beim Start von xfce geladen wird.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 apt-get install xvkbd&lt;br /&gt;
 ln /usr/bin/xvkbd - s ~/.config/autostart&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Android ===&lt;br /&gt;
=== Sonstiges ===&lt;br /&gt;
==== SD-Karte/USB-LW Backupen/Restore ====&lt;br /&gt;
===== Backup =====&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
dd if=/dev/&amp;lt;Geräte Bezeichung&amp;gt; of=sd2gb.img&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Restore =====&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
dd if=sd2gb.img of=/dev/&amp;lt;Geräte Bezeichung&amp;gt;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Restore 2GB Backup -&amp;gt; 4/8/16...GB SD-Karte =====&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
dd if=sd2gb.img of=/dev/&amp;lt;Geräte Bezeichung&amp;gt;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Und danach mit gparted die swap Partition Löschen danach die RootFS Partition vergrößern und eine neue swap erstellen.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
[[Datei:microsdkbesch.png|450px|right]]&lt;br /&gt;
== Connector / GPIO Belegung == &lt;br /&gt;
=== SDK-Board ===&lt;br /&gt;
==== RS232/TTL(CON1-3) ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || CON1  || CON2  || CON3  || RS232(1) || RS232(2) || RS232(3)&lt;br /&gt;
|-&lt;br /&gt;
| 1   || TXD0  || TXD1  || TXD2  ||          ||          || &lt;br /&gt;
|-&lt;br /&gt;
| 2   || RXD0  || RXD1  || RXD2  || RSTXD0   || RSTXD1   || RSTXD2&lt;br /&gt;
|-&lt;br /&gt;
| 3   || VDD5V || VDD5V || VDD5V || RSRXD0   || RSRXD1   || RSRXD2&lt;br /&gt;
|-&lt;br /&gt;
| 4   || GND   || GND   || GND   ||          ||          || &lt;br /&gt;
|-&lt;br /&gt;
| 5   ||       ||       ||       || GND      || GND      || GND&lt;br /&gt;
|-&lt;br /&gt;
| 7   ||       ||       ||       || RSCTS0   ||          ||&lt;br /&gt;
|-&lt;br /&gt;
| 8   ||       ||       ||       || RSRTS0   ||          ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Achtung !!! CON1-3 sind wohl nur zum Messen gedacht will man diese direkt benutzen muss der jeweilige MAX2323CPE ausgelötet werden.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== CON8/Taster ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || CON8  || Taster || GPIO  &lt;br /&gt;
|-&lt;br /&gt;
| 1  || EINT8  || K1     || GPG0/?  &lt;br /&gt;
|-&lt;br /&gt;
| 2  || EINT11 || K2     || GPG3/nSS1&lt;br /&gt;
|-&lt;br /&gt;
| 3  || EINT13 || K3     || GPG5/SPIMISO1&lt;br /&gt;
|-&lt;br /&gt;
| 4  || EINT14 || K4     || GPG6/SPIMOSI1&lt;br /&gt;
|-&lt;br /&gt;
| 5  || EINT15 || K5     || GPG7/SPICLK1&lt;br /&gt;
|-&lt;br /&gt;
| 6  || EINT19 || K6     || GPG11/TCLK1  &lt;br /&gt;
|-&lt;br /&gt;
| 7  || VDD33V ||        || 3,3V&lt;br /&gt;
|-&lt;br /&gt;
| 8  || GND    ||        || GND&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CON6 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || CON6   || GPIO         ||PIN || CON6 || GPIO &lt;br /&gt;
|-&lt;br /&gt;
|  1  || VDD5V  || 5V           ||  2 || VDD33V || 3,3V&lt;br /&gt;
|-&lt;br /&gt;
|  3  || GND    || GND          ||  4 || nRESET || Reset&lt;br /&gt;
|-&lt;br /&gt;
|  5  || AIN0   || AD0          ||  6 || AIN1   || AD1&lt;br /&gt;
|-&lt;br /&gt;
|  7  || AIN2   || AD2          ||  8 || ?      || ?&lt;br /&gt;
|-&lt;br /&gt;
|  9  || EINT0  || GPF0         || 10 || EINT1  || GPF1&lt;br /&gt;
|-&lt;br /&gt;
| 11  || EINT2  || GPF2         || 12 || EINT3  || GPF3&lt;br /&gt;
|-&lt;br /&gt;
| 13  || EINT4  || GPF4         || 14 || EINT5  || GPF5&lt;br /&gt;
|-&lt;br /&gt;
| 15  || EINT6  || GPF6         || 16 || EINT8  || GPG0&lt;br /&gt;
|-&lt;br /&gt;
| 17  || EINT17 || GPG7/nRST1   || 18 || EINT18 || GPE10/nCTS1&lt;br /&gt;
|-&lt;br /&gt;
| 19  || I2CSCL || I2CSCL/GPE14 || 20 || I2CSDA || I2CSDA/GPE15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CON4/CMOS Camera ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || CON4      || GPIO  || PIN || CON4     || GPIO &lt;br /&gt;
|-&lt;br /&gt;
|   1 || I2CSDA    || GPE15 ||   2 || I2CSCL   || GPE14&lt;br /&gt;
|-&lt;br /&gt;
|   3 || EINT20    || GPG12 ||   4 || CAMRST   || GPJ12&lt;br /&gt;
|-&lt;br /&gt;
|   5 || CAMCLK    || GPJ11 ||   6 || CAM_HRES || GPJ10&lt;br /&gt;
|-&lt;br /&gt;
|   7 || CAM_VSYNC || GPJ9  ||   8 || CAM_PCLK || GPJ8&lt;br /&gt;
|-&lt;br /&gt;
|   9 || CAMDATA7  || GPJ7  ||  10 || CAMDATA6 || GPJ6&lt;br /&gt;
|-&lt;br /&gt;
|  11 || CAMDATA5  || GPJ5  ||  12 || CAMDATA4 || GPJ4&lt;br /&gt;
|-&lt;br /&gt;
|  13 || CAMDATA3  || GPJ3  ||  14 || CAMDATA2 || GPJ2&lt;br /&gt;
|-&lt;br /&gt;
|  15 || CAMDATA1  || GPJ1  ||  16 || CAMDATA0 || GPJ0&lt;br /&gt;
|-&lt;br /&gt;
|  17 || VDD33V    || 3,3V  ||  18 || VDD_CAM  || VDD_CAM&lt;br /&gt;
|-&lt;br /&gt;
|  19 || VDD18V    || 1,8V  ||  20 || GND      || GND&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CON9/10 Touchscreen ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || CON9  || CON10 || GPIO  &lt;br /&gt;
|-&lt;br /&gt;
|   1 || TSXM  || TSXM  || ?&lt;br /&gt;
|-&lt;br /&gt;
|   2 || TSYM  || TSYM  || ?&lt;br /&gt;
|-&lt;br /&gt;
|   3 || TSXP  || TSXP  || ?&lt;br /&gt;
|-&lt;br /&gt;
|   4 || TSYP  || TSYP  || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CON5 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || CON5    || GPIO       || PIN || CON5    || GPIO &lt;br /&gt;
|-&lt;br /&gt;
|   1 || EINT17  || GPG9/nRST1 ||   2 || EINT18  || nCTS1&lt;br /&gt;
|-&lt;br /&gt;
|   3 || nGCS1   ||            ||   4 || EINT8   || GPG0 &lt;br /&gt;
|-&lt;br /&gt;
|   5 || nGSC2   ||            ||   6 || LnWBE1  ||&lt;br /&gt;
|-&lt;br /&gt;
|   7 || nGSC3   ||            ||   8 || LnWE    ||&lt;br /&gt;
|-&lt;br /&gt;
|   9 || LnOE    ||            ||  10 || nRESET  ||&lt;br /&gt;
|-&lt;br /&gt;
|  11 || nWAIT   ||            ||  12 || nXDACK0 ||&lt;br /&gt;
|-&lt;br /&gt;
|  13 || LADDR0  ||            ||  14 || nXDRWQ0 ||&lt;br /&gt;
|-&lt;br /&gt;
|  15 || LADDR1  ||            ||  16 || LADDR2  ||&lt;br /&gt;
|-&lt;br /&gt;
|  17 || LADDR3  ||            ||  18 || LADDR4  ||&lt;br /&gt;
|-&lt;br /&gt;
|  19 || LADDR5  ||            ||  20 || LADDR6  ||&lt;br /&gt;
|-&lt;br /&gt;
|  21 || LADDR7  ||            ||  22 || LADDR8  ||&lt;br /&gt;
|-&lt;br /&gt;
|  23 || LADDR9  ||            ||  24 || LADDR10 ||&lt;br /&gt;
|-&lt;br /&gt;
|  25 || LADDR11 ||            ||  26 || LADDR12 ||&lt;br /&gt;
|-&lt;br /&gt;
|  27 || LADDR13 ||            ||  28 || LADDR14 ||&lt;br /&gt;
|-&lt;br /&gt;
|  29 || LADDR15 ||            ||  30 || LADDR16 ||&lt;br /&gt;
|-&lt;br /&gt;
|  31 || LADDR17 ||            ||  32 || LADDR18 ||&lt;br /&gt;
|-&lt;br /&gt;
|  33 || LADDR19 ||            ||  34 || LADDR20 ||&lt;br /&gt;
|-&lt;br /&gt;
|  35 || LADDR21 ||            ||  36 || LADDR22 ||&lt;br /&gt;
|-&lt;br /&gt;
|  37 || LADDR23 ||            ||  38 || LADDR24 ||&lt;br /&gt;
|-&lt;br /&gt;
|  39 || LDATA0  ||            ||  40 || DATA1   ||&lt;br /&gt;
|-&lt;br /&gt;
|  41 || LDATA2  ||            ||  42 || DATA3   ||&lt;br /&gt;
|-&lt;br /&gt;
|  43 || LDATA4  ||            ||  44 || DATA5   ||&lt;br /&gt;
|-&lt;br /&gt;
|  45 || LDATA6  ||            ||  46 || DATA7   ||&lt;br /&gt;
|-&lt;br /&gt;
|  47 || LDATA8  ||            ||  48 || DATA9   ||&lt;br /&gt;
|-&lt;br /&gt;
|  49 || LDATA10 ||            ||  50 || DATA11  ||&lt;br /&gt;
|-&lt;br /&gt;
|  51 || LDATA12 ||            ||  52 || DATA13  ||&lt;br /&gt;
|-&lt;br /&gt;
|  53 || LDATA14 ||            ||  54 || DATA15  ||&lt;br /&gt;
|-&lt;br /&gt;
|  55 || VDD5V   || 5V         ||  56 || GND     || GND&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== LCD0/LCD1 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || LCD1  || LCD0     || PIN || LCD1   || LCD0&lt;br /&gt;
|-&lt;br /&gt;
|   1 || VDD5V || VDDLED5V ||   2 || VDD5V  || VDDLED5V&lt;br /&gt;
|-&lt;br /&gt;
|   3 || VD0   || ADJ      ||   4 || VD1    || GND&lt;br /&gt;
|-&lt;br /&gt;
|   5 || VD2   || GND      ||   6 || VD3    || VDD33V&lt;br /&gt;
|-&lt;br /&gt;
|   7 || VD4   || VDD33V   ||   8 || VD5    || MODE(DE/HV)&lt;br /&gt;
|-&lt;br /&gt;
|   9 || VD6   || VM/DE    ||  10 || VD7    || VFRAME&lt;br /&gt;
|-&lt;br /&gt;
|  11 || GND   || VLINE    ||  12 || VD8    || GND&lt;br /&gt;
|-&lt;br /&gt;
|  13 || VD9   || VD7/B5   ||  14 || VD10   || VD6/BD &lt;br /&gt;
|-&lt;br /&gt;
|  15 || VD11  || VD5/B3   ||  16 || VD12   || GND&lt;br /&gt;
|-&lt;br /&gt;
|  17 || VD13  || VD4/B2   ||  18 || VD14   || VD3/B1&lt;br /&gt;
|-&lt;br /&gt;
|  19 || VD15  || VD2/B0   ||  20 || GND    || GND&lt;br /&gt;
|-&lt;br /&gt;
|  21 || VD16  || VD15/G5  ||  22 || VD17   || VD14/G4&lt;br /&gt;
|-&lt;br /&gt;
|  23 || VD18  || VD13/G3  ||  24 || VD19   || GND&lt;br /&gt;
|-&lt;br /&gt;
|  25 || VD20  || VD12/G2  ||  26 || VD21   || VD11/G1&lt;br /&gt;
|-&lt;br /&gt;
|  27 || VD22  || VD10/G0  ||  28 || VD23   || GND&lt;br /&gt;
|-&lt;br /&gt;
|  29 || GND   || VD23/R5  || 30  || LCD_PWR|| VD22/R4&lt;br /&gt;
|-&lt;br /&gt;
|  31 || GPB1  || VD21/R3  || 32  || nRESET || GND&lt;br /&gt;
|-&lt;br /&gt;
|  33 || VM    || VD20/R2  || 34  || VFRAME || VD19/R1&lt;br /&gt;
|-&lt;br /&gt;
|  35 || VLINE || VD18/R0  || 36  || VCLK   || GND&lt;br /&gt;
|-&lt;br /&gt;
|  37 || TSXM  || VCLK     || 38  || TSXP   || GND&lt;br /&gt;
|-&lt;br /&gt;
|  39 || TSYM  || L/R      || 40  || TSYP   || U/D&lt;br /&gt;
|-&lt;br /&gt;
|  41 || ?     ||          ||     ||        || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Stamp-Modul ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:microstampbesch.png|450px|right]]&lt;br /&gt;
&lt;br /&gt;
==== JTAG ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || GPIO   || PIN || GPIO  &lt;br /&gt;
|-&lt;br /&gt;
|   1 || VDD33V ||   2 || VDD33V&lt;br /&gt;
|-&lt;br /&gt;
|   3 || nTRST  ||   4 || nRESET&lt;br /&gt;
|-&lt;br /&gt;
|   5 || TDI    ||   6 || TDO&lt;br /&gt;
|-&lt;br /&gt;
|   7 || TMS    ||   8 || GND&lt;br /&gt;
|-&lt;br /&gt;
|   9 || TCK    ||  10 || GND&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PA.1 / PB.1 / PC.1 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!     || PA.1    ||              || PB.1      ||       || PC.1     ||&lt;br /&gt;
|-&lt;br /&gt;
! PIN || CON     || GPIO         || CON       || GPIO  || CON      || GPIO&lt;br /&gt;
|-&lt;br /&gt;
|   1 || VDD5V   || 5,0V         || TSYM      || ?     || EINT7    || GPF7&lt;br /&gt;
|-&lt;br /&gt;
|   2 || GND     || GND          || TSYP      || ?     || EINT9    || GPG1&lt;br /&gt;
|-&lt;br /&gt;
|   3 || EINT19  || GPG11        || TSXM      || ?     || LnGCS1   || &lt;br /&gt;
|-&lt;br /&gt;
|   4 || EINT18  || GPG10/nCTS1  || TSYM      || ?     || LnGCS3   ||&lt;br /&gt;
|-&lt;br /&gt;
|   5 || EINT17  || GPG9/nRST1   || VD22      || GPD14 || LnGCS2   ||&lt;br /&gt;
|-&lt;br /&gt;
|   6 || EINT16  || GPG8         || VD23      || GPD15 || LnWBE1   ||&lt;br /&gt;
|-&lt;br /&gt;
|   7 || EINT15  || GPG7/SPICLK1 || VD20      || GPD12 || LnGCS4   ||&lt;br /&gt;
|-&lt;br /&gt;
|   8 || EINT14  || GPG6/SPIMOSI1|| VD21      || GPD13 || LnWE     ||&lt;br /&gt;
|-&lt;br /&gt;
|   9 || EINT13  || GPG5/SPIMISO1|| VD18      || GPD10 || LnOE     ||&lt;br /&gt;
|-&lt;br /&gt;
|  10 || EINT11  || GPG3/nSS1    || VD19      || GPD11 || nRESET   ||&lt;br /&gt;
|-&lt;br /&gt;
|  11 || EINT8   || GPG0         || VD16      || GPD8  || nWAIT    ||&lt;br /&gt;
|-&lt;br /&gt;
|  12 || EINT6   || GPF6         || VD17      || GPD9  || nXDACK0  ||&lt;br /&gt;
|-&lt;br /&gt;
|  13 || EINT5   || GPF5         || VD14      || GPD6  || LADDR0   ||&lt;br /&gt;
|-&lt;br /&gt;
|  14 || EINT4   || GPF4         || VD15      || GPD7  || nXDREQ0  ||&lt;br /&gt;
|-&lt;br /&gt;
|  15 || EINT3   || GPF3         || VD12      || GPD4  || LADDR1   ||&lt;br /&gt;
|-&lt;br /&gt;
|  16 || EINT2   || GPF2         || VD13      || GPD5  || LADDR2   ||&lt;br /&gt;
|-&lt;br /&gt;
|  17 || EINT1   || GPF1         || VD10      || GPD2  || LADDR3   ||&lt;br /&gt;
|-&lt;br /&gt;
|  18 || EINT0   || GPF0         || VD11      || GPD3  || LADDR4   ||&lt;br /&gt;
|-&lt;br /&gt;
|  19 || WP_SD   || GPH8         || VD8       || GPD0  || LADDR5   ||&lt;br /&gt;
|-&lt;br /&gt;
|  20 || SDCLK   || GPE5         || VD9       || GPD1  || LADDR6   ||&lt;br /&gt;
|-&lt;br /&gt;
|  21 || SDCMD   || GPE6         || VD6       || GPC14 || LADDR7   ||&lt;br /&gt;
|-&lt;br /&gt;
|  22 || SDDATA2 || GPE9         || VD7       || GPC15 || LADDR8   ||&lt;br /&gt;
|-&lt;br /&gt;
|  23 || SDDATA3 || GPE10        || VD4       || GPC12 || LADDR9   ||&lt;br /&gt;
|-&lt;br /&gt;
|  24 || SDDATA0 || GPE7         || VD5       || GPC13 || LADDR10  ||&lt;br /&gt;
|-&lt;br /&gt;
|  25 || SDDATA1 || GPE8         || VD2       || GPC10 || LADDR11  ||&lt;br /&gt;
|-&lt;br /&gt;
|  26 || LCDVF2  || OM0          || VD3       || GPC11 || LADDR12  ||&lt;br /&gt;
|-&lt;br /&gt;
|  27 || LCDVF0  || GPC5         || VD0       || GPC8  || LADDR13  ||&lt;br /&gt;
|-&lt;br /&gt;
|  28 || M_nRESET|| ?            || VD1       || GPC9  || LADDR14  ||&lt;br /&gt;
|-&lt;br /&gt;
|  29 || DN1     || DN1/PDN0     || LCD_PWR   || GPG4  || LADDR15  ||&lt;br /&gt;
|-&lt;br /&gt;
|  30 || DP1     || DP1/PDP0     || VM        || GPC4  || LADDR16  ||&lt;br /&gt;
|-&lt;br /&gt;
|  31 || DN0     || DN0          || VFRAME    || GPC3  || LADDR17  ||&lt;br /&gt;
|-&lt;br /&gt;
|  32 || DP0     || DP0          || VLINE     || GPC2  || LADDR18  ||&lt;br /&gt;
|-&lt;br /&gt;
|  33 || AIN2    || AIN2         || VCLK      || GPC1  || LADDR19  ||&lt;br /&gt;
|-&lt;br /&gt;
|  34 || VDDRTC  || 1,8V         || LEND      || GPC0  || LADDR20  ||&lt;br /&gt;
|-&lt;br /&gt;
|  35 || AIN0    || AIN0         || CAMDATA7  || GPJ7  || LADDR21  ||&lt;br /&gt;
|-&lt;br /&gt;
|  36 || AIN1    || AIN1         || CAMDATA6  || GPJ6  || LADDR22  ||&lt;br /&gt;
|-&lt;br /&gt;
|  37 || L3MODE  || GPB2         || CAMDATA5  || GPJ5  || LADDR23  ||&lt;br /&gt;
|-&lt;br /&gt;
|  38 || L3DATA  || GPB3         || CAMDATA4  || GPJ4  || LADDR24  ||&lt;br /&gt;
|-&lt;br /&gt;
|  39 || L3CLOCK || GPB4         || CAMDATA3  || GPJ3  || LDATA0   ||&lt;br /&gt;
|-&lt;br /&gt;
|  40 || I2SLRCK || GPE0         || CAMDATA2  || GPJ2  || LDATA1   ||&lt;br /&gt;
|-&lt;br /&gt;
|  41 || I2SSCLK || GPE1         || CAMDATA1  || GPJ1  || LDATA2   ||&lt;br /&gt;
|-&lt;br /&gt;
|  42 || CDCLK   || GPE2         || CAMDATA0  || GPJ0  || LDATA3   ||&lt;br /&gt;
|-&lt;br /&gt;
|  43 || I2SSDI  || GPE3         || CAMCLK    || GPJ11 || LDATA4   ||&lt;br /&gt;
|-&lt;br /&gt;
|  44 || I2SSDO  || GPE4         || CAM_PCLK  || GPJ8  || LDATA5   ||&lt;br /&gt;
|-&lt;br /&gt;
|  45 || GPB0    || GPB0         || CAM_VSYNC || GPJ9  || LDATA6   ||&lt;br /&gt;
|-&lt;br /&gt;
|  46 || GPB1    || GPB1         || CAM_HREF  || GPJ10 || LDATA7   ||&lt;br /&gt;
|-&lt;br /&gt;
|  47 || TXD2    || GPH6         || EINT20    || GPG12 || LDATA8   ||&lt;br /&gt;
|-&lt;br /&gt;
|  48 || RXD2    || GPH7         || CAMRST    || GPJ12 || LDATA9   ||&lt;br /&gt;
|-&lt;br /&gt;
|  49 || TXD1    || GPH4         || VDD5V     || 5,0V  || LDATA10  ||&lt;br /&gt;
|-&lt;br /&gt;
|  50 || RXD1    || GPH5         || GND       || GND   || LDATA11  ||&lt;br /&gt;
|-&lt;br /&gt;
|  51 || TXD0    || GPH2         ||           ||       || LDATA12  ||&lt;br /&gt;
|-&lt;br /&gt;
|  52 || RXD0    || GPH3         ||           ||       || LDATA13  ||&lt;br /&gt;
|-&lt;br /&gt;
|  53 || nCTS0   || GPH0         ||           ||       || LDATA14  ||&lt;br /&gt;
|-&lt;br /&gt;
|  54 || nRTS0   || GPH1         ||           ||       || LDATA15  ||&lt;br /&gt;
|-&lt;br /&gt;
|  55 || I2CSDA  || GPE15        ||           ||       || VDD5V    ||&lt;br /&gt;
|-&lt;br /&gt;
|  56 || I2CSCL  || GPE14        ||           ||       || GND      ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Peripherie Beschaltung ==&lt;br /&gt;
&lt;br /&gt;
=== SDK-Bord ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;Gallery&amp;quot; widths=&amp;quot;150px&amp;quot; heights=&amp;quot;150px&amp;quot; perrow=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
Datei:micro2440_ub.png| User Buttons&lt;br /&gt;
Datei:micro2440_ad.png|AD&lt;br /&gt;
Datei:micro2440_spk.png|Speaker&lt;br /&gt;
Datei:micro2440_ttl.png|TTL (con1-3)&lt;br /&gt;
Datei:micro2440_eeprom.png|EEPROM&lt;br /&gt;
Datei:micro2440_con6.png|GPIOs CON6&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stamp-Modul ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;Gallery&amp;quot; widths=&amp;quot;150px&amp;quot; heights=&amp;quot;150px&amp;quot; perrow=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
Datei:micro2440_jtag.png|JTAG&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Links/Downloads =&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
 [http://code.google.com/p/mini2440/downloads/detail?name=s3c2410_boot_usb-20060807.tar.bz2&amp;amp;can=2&amp;amp;q= s3c2410 USB DL Tool für Linux]&lt;br /&gt;
 [http://www.codesourcery.com/sgpp/lite/arm/portal/package3696/public/arm-none-linux-gnueabi/arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 Crosscompiler von CodeSourcery]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
 [http://www.electronics.diycinema.co.uk/ Einige Basteleien (Tempsensor, RGB Treiber, MEMS ...]&lt;br /&gt;
 [http://www.sereno-online.com/site/ Programm Beispiele für WinCE und QT]&lt;br /&gt;
&lt;br /&gt;
== Datenblätter ==&lt;br /&gt;
 [http://www.friendlyarm.net/dl.php?file=micro2440_manual_20100204.pdf Anleitung(Chinesisch)]&lt;br /&gt;
 [http://www.friendlyarm.net/dl.php?file=micro2440_dimension.pdf Dimension Stamp-Modul]&lt;br /&gt;
 [http://www.friendlyarm.net/dl.php?file=micro2440_schematic.zip Micro2440 + SDK-Schaltplan]&lt;br /&gt;
 [http://www.friendlyarm.net/dl.php?file=lcd70_schematic.zip 7&amp;quot; LCD Schaltplan]&lt;br /&gt;
 [http://www.friendlyarm.net/dl.php?file=lcd35_schematic.zip 3,5&amp;quot; LCD Schaltplan]&lt;br /&gt;
&lt;br /&gt;
== Händler ==&lt;br /&gt;
 [http://www.watterott.com/de/FriendlyARM Bezugsquelle Watterott]&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM-Boards]][[Category:ARM]][[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Mini2440_SDL_GUI_Programmierung&amp;diff=49790</id>
		<title>Mini2440 SDL GUI Programmierung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Mini2440_SDL_GUI_Programmierung&amp;diff=49790"/>
		<updated>2010-08-08T08:31:47Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wer ein kleines Linuxboard mit Display hat, möchte sicher nicht nur die Kernelausgaben auf der Framebuffer-Konsole ansehen oder sich für die popligsten Anwendungen einen X-Server+Window Manager installieren, sich eine Anwendung schreiben und dann erst loslegen können.&lt;br /&gt;
&lt;br /&gt;
Viel einfacher geht es in einigen Fällen mit [http://www.libsdl.org SDL]. Dieser Artikel beschreibt die Einrichtung einer Cross-Toolchain mit SDL-Support für das [[Mini2440]]. &lt;br /&gt;
Die unterschiede von Board zu Board sind meist sehr gering, was die Display-Ausgabe angeht. Daher lässt sich dieser Artikel auch für einige andere Boards verwenden.&lt;br /&gt;
&lt;br /&gt;
Hier ein Screenshot von einem meiner SDL-Programme:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Bild:mini2440_sdl_menu_screenshot.png|100px]]&lt;br /&gt;
&lt;br /&gt;
Die Vorraussetzungen hierfür sind:&lt;br /&gt;
* Die [http://www.mikrocontroller.net/articles/Mini2440#Toolchain FriendlyARM Toolchain]&lt;br /&gt;
* Funktionierender Framebuffer mit Framebuffer Konsole&lt;br /&gt;
* Ein wenig Zeit&lt;br /&gt;
&lt;br /&gt;
= Einrichten der Cross-Toolchain =&lt;br /&gt;
Ich gehe davon aus, dass man alle kommenden Schritte als &amp;quot;normaler&amp;quot; User erledigt. Sämtliche Schritte, die als &amp;quot;root&amp;quot; erledigt werden müssen, wird ein &amp;quot;sudo&amp;quot; vorangestellt. Wenn das bei dir anders gehen sollte (z.B. su -c &#039;...&#039;), dann ändere es für dich!&lt;br /&gt;
&lt;br /&gt;
== libsdl ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
wget http://www.libsdl.org/release/SDL-1.2.14.tar.gz&lt;br /&gt;
tar xvfz SDL-1.2.14.tar.gz&lt;br /&gt;
cd SDL-1.2.14&lt;br /&gt;
RANLIB=/usr/local/arm/4.3.2/bin/arm-linux-ranlib CROSS_COMPILE=arm-linux- ./configure --host=arm-linux --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/ \ &lt;br /&gt;
--enable-input-tslib --enable-video-fbcon --disable-audio --disable-video-x11 --disable-video-directfb&lt;br /&gt;
time make&lt;br /&gt;
sudo time make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Diese Schritte dauerten bei mir ca 5 Minuten.&lt;br /&gt;
&lt;br /&gt;
Nun lassen sich schon die ersten Programme mittels SDL compilieren. Allerdings fehlen noch zusätzliche libs, wie z.B. [http://www.ferzkopp.net/joomla/content/view/19/14/ sdl_gfx] und [http://www.libsdl.org/projects/SDL_image/ sdl_image] um Grafiken, Texte und Bilder anzeigen zu können. SDL alleine steht da ein wenig auf dem Schlauch.&lt;br /&gt;
&lt;br /&gt;
Einen Haken hat die Sache noch. Dadurch, dass SDL in seinem Audio-Code auch Assembler verwendet habe ich es noch nicht hinbekommen, SDL mit ALSA oder OSS Support zu compilieren.&lt;br /&gt;
Wer dazu einen Tip hat, immer her damit :)&lt;br /&gt;
&lt;br /&gt;
== libsdl_image ==&lt;br /&gt;
Mit dieser lib lassen sich recht einfach Bilder laden und anzeigen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
wget http://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.10.tar.gz&lt;br /&gt;
tar xvfz SDL_image-1.2.10.tar.gz&lt;br /&gt;
cd SDL_image-1.2.10&lt;br /&gt;
RANLIB=/usr/local/arm/4.3.2/bin/arm-linux-ranlib CROSS_COMPILE=arm-linux- ./configure --host=arm-linux --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/ \ &lt;br /&gt;
--enable-gif --enable-jpg --enable-bmp&lt;br /&gt;
***HACK*** (siehe Text unter diesem Kasten)&lt;br /&gt;
sudo ln -s /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/libts.la /usr/local/lib/libts.la&lt;br /&gt;
sudo ln -s /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/libts.so /usr/local/lib/libts.so&lt;br /&gt;
***/HACK***&lt;br /&gt;
time make&lt;br /&gt;
sudo time make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anmerkungen zum &amp;quot;Hack&amp;quot;. Beim compilieren spuckt mir SDL_image einen Fehler aus. Es sagt mir, dass er in /usr/local/lib/ die tslib nicht finden kann. Dort hat er aber nichts zu suchen, da dies kein Pfad zum Cross-Compiling ist. Wie ich das abstelle, habe ich noch nicht herausgefunden, also habe ich einfach einen symbolischen Link angelegt.&lt;br /&gt;
&lt;br /&gt;
== libsdl_gfx ==&lt;br /&gt;
Diese lib stellt einen Haufen Grafikfuntkionen bereit, wie Polygone, Rechtecke, Kreise, Linien, ...&lt;br /&gt;
Ausserdem beinhaltet sie eine Textausgabe und Funktionen um Surfaces zu rotieren und zu zoomen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
wget http://www.ferzkopp.net/Software/SDL_gfx-2.0/SDL_gfx-2.0.21.tar.gz&lt;br /&gt;
tar xvfz SDL_gfx-2.0.21.tar.gz&lt;br /&gt;
cd SDL_gfx-2.0.21&lt;br /&gt;
RANLIB=/usr/local/arm/4.3.2/bin/arm-linux-ranlib CROSS_COMPILE=arm-linux- ./configure --host=arm-linux --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/ --disable-mmx&lt;br /&gt;
time make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Micro2440&amp;diff=49469</id>
		<title>Micro2440</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Micro2440&amp;diff=49469"/>
		<updated>2010-07-24T14:37:02Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: /* Kernel aus den Quellen compilieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Micro2440 =&lt;br /&gt;
--[[Benutzer:Theborg0815|Theborg0815]] 19:46, 3. Jul. 2010 (UTC)&lt;br /&gt;
[http://www.friendlyarm.net/products/micro2440 Micro2440 von FriendlyARM]&lt;br /&gt;
&lt;br /&gt;
Das Micro2440 ist im Prinzip wie das [http://www.mikrocontroller.net/articles/Mini2440 Mini2440] nur das es keine 64/128MB Flash Variante gibt.&lt;br /&gt;
Aufgebaut ist es als Stamp-Modul, welches meistens mit einem SDK-Board, der Peripherie und wahlweise einem 3,5&amp;quot; / 7&amp;quot; TFT oder einen LCD2VGA Adapter kombiniert wird.&lt;br /&gt;
&lt;br /&gt;
=== Technische Daten (Stamp Modul) ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Micro2440.jpg|350px|right]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Dimension:&#039;&#039;&#039; 63 x 52 mm&lt;br /&gt;
 &#039;&#039;&#039;CPU:&#039;&#039;&#039; 400 MHz Samsung S3C2440A ARM920T (Max freq. 533 MHz)&lt;br /&gt;
 &#039;&#039;&#039;RAM:&#039;&#039;&#039; 64 MB SDRAM, 32 bit 100 MHz Bus&lt;br /&gt;
 &#039;&#039;&#039;Flash:&#039;&#039;&#039; 64 MB / 128 MB / 256 MB / 1GB NAND Flash and 2 MB NOR Flash with BIOS&lt;br /&gt;
 &#039;&#039;&#039;User Outputs:&#039;&#039;&#039; 4x LEDs Expansion headers (2.0mm)&lt;br /&gt;
 &#039;&#039;&#039;Debug:&#039;&#039;&#039; 10 pin JTAG (2.0mm)&lt;br /&gt;
 &#039;&#039;&#039;OS Support:&#039;&#039;&#039; Android, Linux 2.6, Windows CE 5 and 6&lt;br /&gt;
&lt;br /&gt;
=== Technische Daten (SDK-Board) ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Micro2440-SDK.jpg|350px|right]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Dimension:&#039;&#039;&#039; 180 x 130 mm&lt;br /&gt;
 &#039;&#039;&#039;EEPROM:&#039;&#039;&#039; 1024 Byte 24C08 (I2C)&lt;br /&gt;
 &#039;&#039;&#039;Ext. Memory:&#039;&#039;&#039; SD-Card socket&lt;br /&gt;
 &#039;&#039;&#039;Serial Ports:&#039;&#039;&#039; 3x DB9 connector (RS232)&lt;br /&gt;
 &#039;&#039;&#039;USB:&#039;&#039;&#039; 4x USB-A Host, 1x USB-B Device&lt;br /&gt;
 &#039;&#039;&#039;Audio Output:&#039;&#039;&#039; 3.5 mm stereo jack&lt;br /&gt;
 &#039;&#039;&#039;Audio Input:&#039;&#039;&#039; 3.5mm jack (mono)&lt;br /&gt;
 &#039;&#039;&#039;Ethernet:&#039;&#039;&#039; RJ-45 10/100M (DM9000)&lt;br /&gt;
 &#039;&#039;&#039;RTC:&#039;&#039;&#039; Real Time Clock with battery&lt;br /&gt;
 &#039;&#039;&#039;Beeper:&#039;&#039;&#039; PWM buzzer&lt;br /&gt;
 &#039;&#039;&#039;Camera:&#039;&#039;&#039; 20 pin Camera interface&lt;br /&gt;
 &#039;&#039;&#039;LCD:&#039;&#039;&#039; Connector for FriendlyARM Displays (3,5&amp;quot; and 7&amp;quot;) and VGA Board&lt;br /&gt;
 &#039;&#039;&#039;Touch Panel:&#039;&#039;&#039; 4 pin&lt;br /&gt;
 &#039;&#039;&#039;User Inputs:&#039;&#039;&#039; 6x push buttons and 1x A/D pot&lt;br /&gt;
 &#039;&#039;&#039;Expansion header&#039;&#039;&#039; (2.0mm)&lt;br /&gt;
 &#039;&#039;&#039;Power:&#039;&#039;&#039; 5V connector, power switch and LED&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
== U-Boot ==&lt;br /&gt;
==== U-Boot aus den Quellen bauen ====&lt;br /&gt;
&lt;br /&gt;
Leider kann der vivi-Bootlader nicht viel. Vivi  unterstützt nur yaffs2 Kernel Images, daher ist es sinnvoll diesen durch den U-Boot-Bootloader auszutauschen. Ich benutze U-Boot aus dem OPENMOKO Projekt für das Micro2440 mit 256MB.&lt;br /&gt;
&lt;br /&gt;
Der compilierte U-Boot-Bootloader ist zu finden unter:[[Datei:uBoot-256MB.bin]]. &lt;br /&gt;
&lt;br /&gt;
Für den Anfang sollte abgewogen werden, ob der vivi-Bootloader reicht. Im Fehlerfall kann dieser per JTAG wieder eingespielt werden.&lt;br /&gt;
&lt;br /&gt;
Voraussetzungen dafür ist ein Cross-Compiler z.B. der von [http://www.codesourcery.com/sgpp/lite/arm/portal/package3696/public/arm-none-linux-gnueabi/arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 Codesourcery]. &lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt muss das Build-Verzeichnis angelegt werden und das git-Repository heruntergeladen werden.. Das geschieht mit den Befehlen:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
mkdir uboot ; cd uboot&lt;br /&gt;
git clone git://repo.or.cz/u-boot-openmoko/mini2440.git&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Danach müssen die Source-Dateien für das micro2440 eingestellt und compiliert werden:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
cd mini2440&lt;br /&gt;
export CROSS_COMPILE=arm-none-linux-gnueabi-&lt;br /&gt;
make mini2440_config&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== U-Boot Flash’en ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Den Bootswitch S2 auf NOR stellen, sobald vivi erscheint &amp;quot;q&amp;quot; (in der vivi Konsole) drücken.&lt;br /&gt;
&lt;br /&gt;
Damit U-Boot ab der Adresse 0x32000000 programmiert wird, muss der folgende Befehl eingeben werden:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
load ram 0x32000000 &amp;lt;uboot bin file grösse in bytes&amp;gt; u-boot&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Nun wartet Vivi auf die Datei. In der Shell wird das hochladen mit dem folgenden Befehl initiiert.  Die Dateiübertragung erfolgt über USB. &lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
sudo s3c2410_boot_usb u-boot.bin&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Als nächstes soll das U-Boot gestartet werden. Dazu  muss an die Speicherstelle gesprungen werden,  an der das U-Boot programmiert wurde. Dies wird mit dem folgendem Befehl erreicht:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
go 0x32000000&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Waren alle vorherigen Schritte erfolgreich, sollte nun die U-Boot Konsole angezeigt werden.(MINI2440#).  Anschließend wird nun der NAND-Flash vorbereitet &lt;br /&gt;
&lt;br /&gt;
Zuerst muss das NAND-Flash gelöscht werden, dies wird mit dem folgendem Befehl erreicht:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
nand scrub&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Danach wird die Bad-Block Tabelle erstellt, dies kann etwas Zeit in Anspruch nehmen:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
nand createbbt&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Damit U-Boot in das Flash geschrieben wird, muss folgender Befehl ausgeführt werden.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
nand write.e 0x32000000 0x0 &amp;lt;uBoot bin grösse in hex&amp;gt;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Für das Partitionieren des Flashs dient der Befehl:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
dynpart&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Environment Speicher einrichten:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
dynenv set u-boot_env&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Enviroment Parameter sichern:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
saveenv&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Nachdem alle Schritte durchgeführt wurden, muss nur noch das Bord ausgeschaltet werden und S2 wieder auf NAND gestellt werden. Nach dem Einschalten sollte euch nun das U-Boot begrüßen.&lt;br /&gt;
&lt;br /&gt;
== Kernel/Filesystem ==&lt;br /&gt;
=== Kernel aus den Quellen compilieren ===&lt;br /&gt;
Jetzt steht man vor der Wahl welchen Kernel man nimmt. Egal ob EMDebian, Gentoo oder Android, man braucht ihn so oder so. Die fertigen Kernel von [http://www.friendlyarm.net/downloads FriendlyARM] können nur VFAT und JFFS2 daher eignen sich diese nur bedingt für ein System z.b. auf SD/USBStick oder Ext. Platte. Daher ist es sinnvoll sich selbst einen Kernel zu bauen, was nicht schwer ist.&lt;br /&gt;
&lt;br /&gt;
Als erstes besorgen wir uns die Kernel-Quellen und entpacken sie:&lt;br /&gt;
&lt;br /&gt;
==== Gentoo/emDebian ====&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
 $ mkdir micro2440&lt;br /&gt;
 $ cd micro2440&lt;br /&gt;
 $ git clone git://repo.or.cz/linux-2.6/mini2440.git linux-2.6.32-rc8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Android ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $ mkdir android&lt;br /&gt;
 $ cd android&lt;br /&gt;
 $ git clone git://gitorious.org/android-mini2440/kernel-opencsbc.git&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Als nächstes laden wir die Default Config und erstellen die .Config für das Micro2440:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   $ cd linux-2.6.32-rc8&lt;br /&gt;
   $ CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm make mini2440_defconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man noch etwas ändern möchte (z.b. ext3-Treiber) startet man &amp;quot;menuconfig&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   $ CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm make menuconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Den Kernel anschließend compilieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   $ CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Später kann man noch die Module auf die SD-Karte kopieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   $ CROSS_COMPILE=arm-softfloat-linux-gnueabi- ARCH=arm INSTALL_MOD_PATH=/mnt make modules_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Als letztes muss das Kernel Image für U-Boot vorbereitet werden. Aus dem zImage (gzip komprimiertes Kernel-Image) wird ein uImage für U-Boot so erstellt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   cd .../arch/arm/boot&lt;br /&gt;
   mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d zImage uImage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Filesystem erstellen ===&lt;br /&gt;
Als erstes brauchen wir ein RootFS dieses brauchen wir um später die Partition damit zu füllen.&lt;br /&gt;
&lt;br /&gt;
==== emDebian ====&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
mkdir armel-rootfs&lt;br /&gt;
debootstrap --verbose --arch armel --foreign lenny armel-rootfs http://ftp.de.debian.org/debian&lt;br /&gt;
cd armel-rootfs&lt;br /&gt;
tar cfjv ../armel-rootfs.tar.bz2 *&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Gentoo ====&lt;br /&gt;
http://distfiles.gentoo.org/releases/arm/autobuilds/current-stage3/armv4tl-softfloat-linux-gnueabi/stage3-armv4tl-20100620.tar.bz2&lt;br /&gt;
&lt;br /&gt;
==== Android ====&lt;br /&gt;
&amp;lt;c&amp;gt; &lt;br /&gt;
 mkdir android&lt;br /&gt;
 cd android&lt;br /&gt;
 git clone git://gitorious.org/android-mini2440/android-mini2440.git&lt;br /&gt;
 cd android-mini2440&lt;br /&gt;
 tar cfjv ../android-rootfs.tar.bz2 *&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Speichermedien vorbereiten ==&lt;br /&gt;
=== SD-Karte und USB Medien ===&lt;br /&gt;
Als nächstes bereiten wir ein Speichermedium vor, wir brauchen 3 Partitionen, 2x EXT2 und einmal Swap das Beispiel gilt für eine 2GB SD-Karte.&lt;br /&gt;
&lt;br /&gt;
Das machen wir am besten mit fdisk in der Konsole, man kann auch gparted(Grafisch) nutzen aber komischerweise mountet dann bei mir das RootFS nicht ebenso wenn das RootFS ext3 ist, so wie ich raus gefunden habe geht das nur mit SDHC Karten also SD-Karten mit Speicher der &amp;gt;2GB ist.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
fdisk /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Der Rest ist recht einfach, einfach folgendes eingeben: dp1 np1 &amp;lt;enter&amp;gt; +20MB &amp;lt;enter&amp;gt; np2 +1800MB &amp;lt;enter&amp;gt; np3 &amp;lt;enter&amp;gt; &amp;lt;enter&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Danach mit p schauen ob alle 3 Partitionen erstellt wurden und mit w Speichern und fdisk beenden.&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen wir noch die Partitionen Formatieren(für ext3 muss noch -j in der zweiten Zeile angegeben werden):&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
mke2fs /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;1&lt;br /&gt;
mke2fs /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;2&lt;br /&gt;
mkswap /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;3&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BootFS/RootFS einrichten ===&lt;br /&gt;
&lt;br /&gt;
Dieses ist bei allen Distributionen gleich als erstes kopieren wir den Kernel auf das Speichermedium.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
mount /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;1 /mnt&lt;br /&gt;
cp ../linux-2.6.32-rc8/arch/arm/boot/uImage /mnt&lt;br /&gt;
sync&lt;br /&gt;
umount /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;1&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Jetzt muss noch das RootFS erstellt werden:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
mount /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;2 /mnt&lt;br /&gt;
tar xvzfop /path/to/downloaded/&amp;lt;RootFSfile&amp;gt; -C /mnt&lt;br /&gt;
sync&lt;br /&gt;
umount /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;2&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== uBoot ENVs einrichten ==&lt;br /&gt;
So jetzt sind wir fast fertig nur das Wichtigste fehlt noch, wir müssen dem Bootlader noch sagen wo er den Kernel findet und dem Kernel wo er das RootFS findet.&lt;br /&gt;
&lt;br /&gt;
Dazu drücken wir eine Taste um denn Autoboot zu unterbrechen und stellen folgendes ein:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
setenv bootcmd mmcinit ; ext2load mmc 0:1 0x31000000 uImage ; bootm 0x31000000&lt;br /&gt;
setenv bootargs noinitrd mini2440=1tb rootfstype=ext2 root=/dev/mmcblk0p2 rw rootwait&lt;br /&gt;
saveenv&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Android muss noch ein &amp;quot;init=linuxrc&amp;quot; in die zweite Zeile eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
So das war es wen ihr alles durchgearbeitet habt könnt ihr die SD-Karte in den Slot stecken und denn Reset drücken danach sollte das Bord booten.&lt;br /&gt;
&lt;br /&gt;
== Tips/Tricks/Files ==&lt;br /&gt;
=== emDebian/Gentoo ===&lt;br /&gt;
==== /etc/fstab ====&lt;br /&gt;
Beispiel der /etc/fstab: [[Datei:fstab.txt]]&lt;br /&gt;
&lt;br /&gt;
==== /etc/X11/xorg.conf ====&lt;br /&gt;
Beispiel xorg.conf fürs 7&amp;quot; Display: [[Datei:xorg.conf.txt]]&lt;br /&gt;
&lt;br /&gt;
==== Touchscreen kalibrieren ====&lt;br /&gt;
&lt;br /&gt;
Folgende Zeile zur /etc/X11/xorg.conf bei [Section &amp;quot;InputDevice&amp;quot;]&lt;br /&gt;
 hinzufügen.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 Option &amp;quot;Calibrate&amp;quot; &amp;quot;1&amp;quot;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Und dann noch folgendes machen:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 apt-get install xserver-xorg-input-evtouch&lt;br /&gt;
 cp /usr/share/xf86-input-evtouch/empty_cursor.xbm /&lt;br /&gt;
 cd /usr/lib/xf86-input-evtouch&lt;br /&gt;
 sh calibrate.sh&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit folgenden Einträgen in die /etc/X11/xorg.conf bei [Section &amp;quot;InputDevice&amp;quot;] kann man jetzt erst mal die kreuze ausrichten (Siehe Bild.)&lt;br /&gt;
&lt;br /&gt;
[[Datei:touch.jpg|300px|right]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
        Option        &amp;quot;x0&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y0&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x1&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y1&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x2&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y2&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x3&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y3&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x4&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y4&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x5&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y5&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x6&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y6&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x7&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y7&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x8&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y8&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Als nächstes muss man noch die Min/Max werte ermitteln dazu Links unten und oben rechts die Min/Max werte in die xorg.conf übertragen.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
        Option        &amp;quot;MinX&amp;quot;        &amp;quot;153&amp;quot;&lt;br /&gt;
        Option        &amp;quot;MinY&amp;quot;        &amp;quot;78&amp;quot;&lt;br /&gt;
        Option        &amp;quot;MaxX&amp;quot;        &amp;quot;873&amp;quot;&lt;br /&gt;
        Option        &amp;quot;MaxY&amp;quot;        &amp;quot;937&amp;quot;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Beim 7&amp;quot; Display muss man jetzt nur noch der SW sagen das der Touchscreen Falschrum verbaut ist dieses geht mit folgenden Eintrag in die xorg.conf.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
        Option &amp;quot;SwapY&amp;quot; &amp;quot;2&amp;quot;&lt;br /&gt;
        Option &amp;quot;SwapX&amp;quot; &amp;quot;2&amp;quot;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Jetzt noch den Eintrag [Option &amp;quot;Calibrate&amp;quot; &amp;quot;1&amp;quot;] wieder aus der xorg.conf raus schmeißen dann sollte alles funktionieren.&lt;br /&gt;
&lt;br /&gt;
==== Konsole auf dem TFT und Seriell ausgeben ====&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
echo ttySAC0 &amp;gt;&amp;gt;etc/securetty &lt;br /&gt;
printf &amp;quot;T0:123:respawn:/sbin/getty 115200 ttySAC0\n&amp;quot; &amp;gt;&amp;gt; /etc/inittab&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Virtuelle Maus ====&lt;br /&gt;
&lt;br /&gt;
Wer lieber mit einer Maus arbeitet und ein iPOD/iPhone besitzt kann RemotePad benutzen einfach aus dem Appstore Laden (Kostenlos), den Quellcode für die Anwendung gibt es unter http://www.tenjin.org/RemotePad/ dieser lässt sich recht einfach auf dem Board oder in einem Buildroot compilieren.&lt;br /&gt;
&lt;br /&gt;
==== Bildschirmtastatur ====&lt;br /&gt;
&lt;br /&gt;
Als Bildschirmtastatur kann man xvkbd verwenden, bei Xfce z.b. einfach einen Link dazu in dem Autostart Ordner erstellen damit es beim Start von xfce geladen wird.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 apt-get install xvkbd&lt;br /&gt;
 ln /usr/bin/xvkbd ~/.config/autostart&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Android ===&lt;br /&gt;
=== Sonstiges ===&lt;br /&gt;
==== SD-Karte/USB-LW Backupen/Restore ====&lt;br /&gt;
===== Backup =====&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
dd if=/dev/&amp;lt;Geräte Bezeichung&amp;gt; of=sd2gb.img&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Restore =====&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
dd if=sd2gb.img of=/dev/&amp;lt;Geräte Bezeichung&amp;gt;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Restore 2GB Backup -&amp;gt; 4/8/16...GB SD-Karte =====&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
dd if=sd2gb.img of=/dev/&amp;lt;Geräte Bezeichung&amp;gt;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Und danach mit gparted die swap Partition Löschen danach die RootFS Partition vergrößern und eine neue swap erstellen.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
[[Datei:microsdkbesch.png|450px|right]]&lt;br /&gt;
== Connector / GPIO Belegung == &lt;br /&gt;
=== SDK-Board ===&lt;br /&gt;
==== RS232/TTL(CON1-3) ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || CON1  || CON2  || CON3  || RS232(1) || RS232(2) || RS232(3)&lt;br /&gt;
|-&lt;br /&gt;
| 1   || TXD0  || TXD1  || TXD2  ||          ||          || &lt;br /&gt;
|-&lt;br /&gt;
| 2   || RXD0  || RXD1  || RXD2  || RSTXD0   || RSTXD1   || RSTXD2&lt;br /&gt;
|-&lt;br /&gt;
| 3   || VDD5V || VDD5V || VDD5V || RSRXD0   || RSRXD1   || RSRXD2&lt;br /&gt;
|-&lt;br /&gt;
| 4   || GND   || GND   || GND   ||          ||          || &lt;br /&gt;
|-&lt;br /&gt;
| 5   ||       ||       ||       || GND      || GND      || GND&lt;br /&gt;
|-&lt;br /&gt;
| 7   ||       ||       ||       || RSCTS0   ||          ||&lt;br /&gt;
|-&lt;br /&gt;
| 8   ||       ||       ||       || RSRTS0   ||          ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CON8/Taster ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || CON8  || Taster || GPIO  &lt;br /&gt;
|-&lt;br /&gt;
| 1  || EINT8  || K1     || GPG0/?  &lt;br /&gt;
|-&lt;br /&gt;
| 2  || EINT11 || K2     || GPG3/nSS1&lt;br /&gt;
|-&lt;br /&gt;
| 3  || EINT13 || K3     || GPG5/SPIMISO1&lt;br /&gt;
|-&lt;br /&gt;
| 4  || EINT14 || K4     || GPG6/SPIMOSI1&lt;br /&gt;
|-&lt;br /&gt;
| 5  || EINT15 || K5     || GPG7/SPICLK1&lt;br /&gt;
|-&lt;br /&gt;
| 6  || EINT19 || K6     || GPG11/TCLK1  &lt;br /&gt;
|-&lt;br /&gt;
| 7  || VDD33V ||        || 3,3V&lt;br /&gt;
|-&lt;br /&gt;
| 8  || GND    ||        || GND&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CON6 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || CON6   || GPIO         ||PIN || CON6 || GPIO &lt;br /&gt;
|-&lt;br /&gt;
|  1  || VDD5V  || 5V           ||  2 || VDD33V || 3,3V&lt;br /&gt;
|-&lt;br /&gt;
|  3  || GND    || GND          ||  4 || nRESET || Reset&lt;br /&gt;
|-&lt;br /&gt;
|  5  || AIN0   || AD0          ||  6 || AIN1   || AD1&lt;br /&gt;
|-&lt;br /&gt;
|  7  || AIN2   || AD2          ||  8 || ?      || ?&lt;br /&gt;
|-&lt;br /&gt;
|  9  || EINT0  || GPF0         || 10 || EINT1  || GPF1&lt;br /&gt;
|-&lt;br /&gt;
| 11  || EINT2  || GPF2         || 12 || EINT3  || GPF3&lt;br /&gt;
|-&lt;br /&gt;
| 13  || EINT4  || GPF4         || 14 || EINT5  || GPF5&lt;br /&gt;
|-&lt;br /&gt;
| 15  || EINT6  || GPF6         || 16 || EINT8  || GPG0&lt;br /&gt;
|-&lt;br /&gt;
| 17  || EINT17 || GPG7/nRST1   || 18 || EINT18 || GPE10/nCTS1&lt;br /&gt;
|-&lt;br /&gt;
| 19  || I2CSCL || I2CSCL/GPE14 || 20 || I2CSDA || I2CSDA/GPE15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CON4/CMOS Camera ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || CON4      || GPIO  || PIN || CON4     || GPIO &lt;br /&gt;
|-&lt;br /&gt;
|   1 || I2CSDA    || GPE15 ||   2 || I2CSCL   || GPE14&lt;br /&gt;
|-&lt;br /&gt;
|   3 || EINT20    || GPG12 ||   4 || CAMRST   || GPJ12&lt;br /&gt;
|-&lt;br /&gt;
|   5 || CAMCLK    || GPJ11 ||   6 || CAM_HRES || GPJ10&lt;br /&gt;
|-&lt;br /&gt;
|   7 || CAM_VSYNC || GPJ9  ||   8 || CAM_PCLK || GPJ8&lt;br /&gt;
|-&lt;br /&gt;
|   9 || CAMDATA7  || GPJ7  ||  10 || CAMDATA6 || GPJ6&lt;br /&gt;
|-&lt;br /&gt;
|  11 || CAMDATA5  || GPJ5  ||  12 || CAMDATA4 || GPJ4&lt;br /&gt;
|-&lt;br /&gt;
|  13 || CAMDATA3  || GPJ3  ||  14 || CAMDATA2 || GPJ2&lt;br /&gt;
|-&lt;br /&gt;
|  15 || CAMDATA1  || GPJ1  ||  16 || CAMDATA0 || GPJ0&lt;br /&gt;
|-&lt;br /&gt;
|  17 || VDD33V    || 3,3V  ||  18 || VDD_CAM  || VDD_CAM&lt;br /&gt;
|-&lt;br /&gt;
|  19 || VDD18V    || 1,8V  ||  20 || GND      || GND&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CON9/10 Touchscreen ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || CON9  || CON10 || GPIO  &lt;br /&gt;
|-&lt;br /&gt;
|   1 || TSXM  || TSXM  || ?&lt;br /&gt;
|-&lt;br /&gt;
|   2 || TSYM  || TSYM  || ?&lt;br /&gt;
|-&lt;br /&gt;
|   3 || TSXP  || TSXP  || ?&lt;br /&gt;
|-&lt;br /&gt;
|   4 || TSYP  || TSYP  || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CON5 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || CON5    || GPIO       || PIN || CON5    || GPIO &lt;br /&gt;
|-&lt;br /&gt;
|   1 || EINT17  || GPG7/nRST1 ||   2 || EINT18  || nCTS1&lt;br /&gt;
|-&lt;br /&gt;
|   3 || nGCS1   ||            ||   4 || EINT8   || GPG0 &lt;br /&gt;
|-&lt;br /&gt;
|   5 || nGSC2   ||            ||   6 || LnWBE1  ||&lt;br /&gt;
|-&lt;br /&gt;
|   7 || nGSC3   ||            ||   8 || LnWE    ||&lt;br /&gt;
|-&lt;br /&gt;
|   9 || LnOE    ||            ||  10 || nRESET  ||&lt;br /&gt;
|-&lt;br /&gt;
|  11 || nWAIT   ||            ||  12 || nXDACK0 ||&lt;br /&gt;
|-&lt;br /&gt;
|  13 || LADDR0  ||            ||  14 || nXDRWQ0 ||&lt;br /&gt;
|-&lt;br /&gt;
|  15 || LADDR1  ||            ||  16 || LADDR2  ||&lt;br /&gt;
|-&lt;br /&gt;
|  17 || LADDR3  ||            ||  18 || LADDR4  ||&lt;br /&gt;
|-&lt;br /&gt;
|  19 || LADDR5  ||            ||  20 || LADDR6  ||&lt;br /&gt;
|-&lt;br /&gt;
|  21 || LADDR7  ||            ||  22 || LADDR8  ||&lt;br /&gt;
|-&lt;br /&gt;
|  23 || LADDR9  ||            ||  24 || LADDR10 ||&lt;br /&gt;
|-&lt;br /&gt;
|  25 || LADDR11 ||            ||  26 || LADDR12 ||&lt;br /&gt;
|-&lt;br /&gt;
|  27 || LADDR13 ||            ||  28 || LADDR14 ||&lt;br /&gt;
|-&lt;br /&gt;
|  29 || LADDR15 ||            ||  30 || LADDR16 ||&lt;br /&gt;
|-&lt;br /&gt;
|  31 || LADDR17 ||            ||  32 || LADDR18 ||&lt;br /&gt;
|-&lt;br /&gt;
|  33 || LADDR19 ||            ||  34 || LADDR20 ||&lt;br /&gt;
|-&lt;br /&gt;
|  35 || LADDR21 ||            ||  36 || LADDR22 ||&lt;br /&gt;
|-&lt;br /&gt;
|  37 || LADDR23 ||            ||  38 || LADDR24 ||&lt;br /&gt;
|-&lt;br /&gt;
|  39 || LDATA0  ||            ||  40 || DATA1   ||&lt;br /&gt;
|-&lt;br /&gt;
|  41 || LDATA2  ||            ||  42 || DATA3   ||&lt;br /&gt;
|-&lt;br /&gt;
|  43 || LDATA4  ||            ||  44 || DATA5   ||&lt;br /&gt;
|-&lt;br /&gt;
|  45 || LDATA6  ||            ||  46 || DATA7   ||&lt;br /&gt;
|-&lt;br /&gt;
|  47 || LDATA8  ||            ||  48 || DATA9   ||&lt;br /&gt;
|-&lt;br /&gt;
|  49 || LDATA10 ||            ||  50 || DATA11  ||&lt;br /&gt;
|-&lt;br /&gt;
|  51 || LDATA12 ||            ||  52 || DATA13  ||&lt;br /&gt;
|-&lt;br /&gt;
|  53 || LDATA14 ||            ||  54 || DATA15  ||&lt;br /&gt;
|-&lt;br /&gt;
|  55 || VDD5V   || 5V         ||  56 || GND     || GND&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== LCD0/LCD1 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || LCD1  || LCD0     || PIN || LCD1   || LCD0&lt;br /&gt;
|-&lt;br /&gt;
|   1 || VDD5V || VDDLED5V ||   2 || VDD5V  || VDDLED5V&lt;br /&gt;
|-&lt;br /&gt;
|   3 || VD0   || ADJ      ||   4 || VD1    || GND&lt;br /&gt;
|-&lt;br /&gt;
|   5 || VD2   || GND      ||   6 || VD3    || VDD33V&lt;br /&gt;
|-&lt;br /&gt;
|   7 || VD4   || VDD33V   ||   8 || VD5    || MODE(DE/HV)&lt;br /&gt;
|-&lt;br /&gt;
|   9 || VD6   || VM/DE    ||  10 || VD7    || VFRAME&lt;br /&gt;
|-&lt;br /&gt;
|  11 || GND   || VLINE    ||  12 || VD8    || GND&lt;br /&gt;
|-&lt;br /&gt;
|  13 || VD9   || VD7/B5   ||  14 || VD10   || VD6/BD &lt;br /&gt;
|-&lt;br /&gt;
|  15 || VD11  || VD5/B3   ||  16 || VD12   || GND&lt;br /&gt;
|-&lt;br /&gt;
|  17 || VD13  || VD4/B2   ||  18 || VD14   || VD3/B1&lt;br /&gt;
|-&lt;br /&gt;
|  19 || VD15  || VD2/B0   ||  20 || GND    || GND&lt;br /&gt;
|-&lt;br /&gt;
|  21 || VD16  || VD15/G5  ||  22 || VD17   || VD14/G4&lt;br /&gt;
|-&lt;br /&gt;
|  23 || VD18  || VD13/G3  ||  24 || VD19   || GND&lt;br /&gt;
|-&lt;br /&gt;
|  25 || VD20  || VD12/G2  ||  26 || VD21   || VD11/G1&lt;br /&gt;
|-&lt;br /&gt;
|  27 || VD22  || VD10/G0  ||  28 || VD23   || GND&lt;br /&gt;
|-&lt;br /&gt;
|  29 || GND   || VD23/R5  || 30  || LCD_PWR|| VD22/R4&lt;br /&gt;
|-&lt;br /&gt;
|  31 || GPB1  || VD21/R3  || 32  || nRESET || GND&lt;br /&gt;
|-&lt;br /&gt;
|  33 || VM    || VD20/R2  || 34  || VFRAME || VD19/R1&lt;br /&gt;
|-&lt;br /&gt;
|  35 || VLINE || VD18/R0  || 36  || VCLK   || GND&lt;br /&gt;
|-&lt;br /&gt;
|  37 || TSXM  || VCLK     || 38  || TSXP   || GND&lt;br /&gt;
|-&lt;br /&gt;
|  39 || TSYM  || L/R      || 40  || TSYP   || U/D&lt;br /&gt;
|-&lt;br /&gt;
|  41 || ?     ||          ||     ||        || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Stamp-Modul ===&lt;br /&gt;
&lt;br /&gt;
==== JTAG ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || GPIO   || PIN || GPIO  &lt;br /&gt;
|-&lt;br /&gt;
|   1 || VDD33V ||   2 || VDD33V&lt;br /&gt;
|-&lt;br /&gt;
|   3 || nTRST  ||   4 || nRESET&lt;br /&gt;
|-&lt;br /&gt;
|   5 || TDI    ||   6 || TDO&lt;br /&gt;
|-&lt;br /&gt;
|   7 || TMS    ||   8 || GND&lt;br /&gt;
|-&lt;br /&gt;
|   9 || TCK    ||  10 || GND&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PA.1 ====&lt;br /&gt;
&lt;br /&gt;
==== PB.1 ====&lt;br /&gt;
&lt;br /&gt;
==== PC.1 ====&lt;br /&gt;
&lt;br /&gt;
== Peripherie Beschaltung ==&lt;br /&gt;
&lt;br /&gt;
=== SDK-Bord ===&lt;br /&gt;
&lt;br /&gt;
=== Stamp-Modul ===&lt;br /&gt;
&lt;br /&gt;
== Selbstbau Peripherie ==&lt;br /&gt;
&lt;br /&gt;
= Links/Downloads =&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
 [http://code.google.com/p/mini2440/downloads/detail?name=s3c2410_boot_usb-20060807.tar.bz2&amp;amp;can=2&amp;amp;q= s3c2410 USB DL Tool für Linux]&lt;br /&gt;
 [http://www.codesourcery.com/sgpp/lite/arm/portal/package3696/public/arm-none-linux-gnueabi/arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 Crosscompiler von CodeSourcery]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
[http://www.electronics.diycinema.co.uk/ Einige Basteleien (Tempsensor, RGB Treiber, MEMS ...]&lt;br /&gt;
&lt;br /&gt;
== Datenblätter ==&lt;br /&gt;
 [http://www.friendlyarm.net/dl.php?file=micro2440_manual_20100204.pdf Anleitung(Chinesisch)]&lt;br /&gt;
 [http://www.friendlyarm.net/dl.php?file=micro2440_dimension.pdf Dimension Stamp-Modul]&lt;br /&gt;
 [http://www.friendlyarm.net/dl.php?file=micro2440_schematic.zip Micro2440 + SDK-Schaltplan]&lt;br /&gt;
 [http://www.friendlyarm.net/dl.php?file=lcd70_schematic.zip 7&amp;quot; LCD Schaltplan]&lt;br /&gt;
 [http://www.friendlyarm.net/dl.php?file=lcd35_schematic.zip 3,5&amp;quot; LCD Schaltplan]&lt;br /&gt;
&lt;br /&gt;
== Händler ==&lt;br /&gt;
 [http://www.watterott.com/de/FriendlyARM Bezugsquelle Watterott]&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM-Boards]][[Category:ARM]][[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Micro2440&amp;diff=49466</id>
		<title>Micro2440</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Micro2440&amp;diff=49466"/>
		<updated>2010-07-24T14:31:29Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: /* Micro2440 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Micro2440 =&lt;br /&gt;
--[[Benutzer:Theborg0815|Theborg0815]] 19:46, 3. Jul. 2010 (UTC)&lt;br /&gt;
[http://www.friendlyarm.net/products/micro2440 Micro2440 von FriendlyARM]&lt;br /&gt;
&lt;br /&gt;
Das Micro2440 ist im Prinzip wie das [http://www.mikrocontroller.net/articles/Mini2440 Mini2440] nur das es keine 64/128MB Flash Variante gibt.&lt;br /&gt;
Aufgebaut ist es als Stamp-Modul, welches meistens mit einem SDK-Board, der Peripherie und wahlweise einem 3,5&amp;quot; / 7&amp;quot; TFT oder einen LCD2VGA Adapter kombiniert wird.&lt;br /&gt;
&lt;br /&gt;
=== Technische Daten (Stamp Modul) ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Micro2440.jpg|350px|right]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Dimension:&#039;&#039;&#039; 63 x 52 mm&lt;br /&gt;
 &#039;&#039;&#039;CPU:&#039;&#039;&#039; 400 MHz Samsung S3C2440A ARM920T (Max freq. 533 MHz)&lt;br /&gt;
 &#039;&#039;&#039;RAM:&#039;&#039;&#039; 64 MB SDRAM, 32 bit 100 MHz Bus&lt;br /&gt;
 &#039;&#039;&#039;Flash:&#039;&#039;&#039; 64 MB / 128 MB / 256 MB / 1GB NAND Flash and 2 MB NOR Flash with BIOS&lt;br /&gt;
 &#039;&#039;&#039;User Outputs:&#039;&#039;&#039; 4x LEDs Expansion headers (2.0mm)&lt;br /&gt;
 &#039;&#039;&#039;Debug:&#039;&#039;&#039; 10 pin JTAG (2.0mm)&lt;br /&gt;
 &#039;&#039;&#039;OS Support:&#039;&#039;&#039; Android, Linux 2.6, Windows CE 5 and 6&lt;br /&gt;
&lt;br /&gt;
=== Technische Daten (SDK-Board) ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Micro2440-SDK.jpg|350px|right]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Dimension:&#039;&#039;&#039; 180 x 130 mm&lt;br /&gt;
 &#039;&#039;&#039;EEPROM:&#039;&#039;&#039; 1024 Byte 24C08 (I2C)&lt;br /&gt;
 &#039;&#039;&#039;Ext. Memory:&#039;&#039;&#039; SD-Card socket&lt;br /&gt;
 &#039;&#039;&#039;Serial Ports:&#039;&#039;&#039; 3x DB9 connector (RS232)&lt;br /&gt;
 &#039;&#039;&#039;USB:&#039;&#039;&#039; 4x USB-A Host, 1x USB-B Device&lt;br /&gt;
 &#039;&#039;&#039;Audio Output:&#039;&#039;&#039; 3.5 mm stereo jack&lt;br /&gt;
 &#039;&#039;&#039;Audio Input:&#039;&#039;&#039; 3.5mm jack (mono)&lt;br /&gt;
 &#039;&#039;&#039;Ethernet:&#039;&#039;&#039; RJ-45 10/100M (DM9000)&lt;br /&gt;
 &#039;&#039;&#039;RTC:&#039;&#039;&#039; Real Time Clock with battery&lt;br /&gt;
 &#039;&#039;&#039;Beeper:&#039;&#039;&#039; PWM buzzer&lt;br /&gt;
 &#039;&#039;&#039;Camera:&#039;&#039;&#039; 20 pin Camera interface&lt;br /&gt;
 &#039;&#039;&#039;LCD:&#039;&#039;&#039; Connector for FriendlyARM Displays (3,5&amp;quot; and 7&amp;quot;) and VGA Board&lt;br /&gt;
 &#039;&#039;&#039;Touch Panel:&#039;&#039;&#039; 4 pin&lt;br /&gt;
 &#039;&#039;&#039;User Inputs:&#039;&#039;&#039; 6x push buttons and 1x A/D pot&lt;br /&gt;
 &#039;&#039;&#039;Expansion header&#039;&#039;&#039; (2.0mm)&lt;br /&gt;
 &#039;&#039;&#039;Power:&#039;&#039;&#039; 5V connector, power switch and LED&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
== U-Boot ==&lt;br /&gt;
==== U-Boot aus den Quellen bauen ====&lt;br /&gt;
&lt;br /&gt;
Leider kann der vivi-Bootlader nicht viel. Vivi  unterstützt nur yaffs2 Kernel Images, daher ist es sinnvoll diesen durch den U-Boot-Bootloader auszutauschen. Ich benutze U-Boot aus dem OPENMOKO Projekt für das Micro2440 mit 256MB.&lt;br /&gt;
&lt;br /&gt;
Der compilierte U-Boot-Bootloader ist zu finden unter:[[Datei:uBoot-256MB.bin]]. &lt;br /&gt;
&lt;br /&gt;
Für den Anfang sollte abgewogen werden, ob der vivi-Bootloader reicht. Im Fehlerfall kann dieser per JTAG wieder eingespielt werden.&lt;br /&gt;
&lt;br /&gt;
Voraussetzungen dafür ist ein Cross-Compiler z.B. der von [http://www.codesourcery.com/sgpp/lite/arm/portal/package3696/public/arm-none-linux-gnueabi/arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 Codesourcery]. &lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt muss das Build-Verzeichnis angelegt werden und das git-Repository heruntergeladen werden.. Das geschieht mit den Befehlen:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
mkdir uboot ; cd uboot&lt;br /&gt;
git clone git://repo.or.cz/u-boot-openmoko/mini2440.git&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Danach müssen die Source-Dateien für das micro2440 eingestellt und compiliert werden:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
cd mini2440&lt;br /&gt;
export CROSS_COMPILE=arm-none-linux-gnueabi-&lt;br /&gt;
make mini2440_config&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== U-Boot Flash’en ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Den Bootswitch S2 auf NOR stellen, sobald vivi erscheint &amp;quot;q&amp;quot; (in der vivi Konsole) drücken.&lt;br /&gt;
&lt;br /&gt;
Damit U-Boot ab der Adresse 0x32000000 programmiert wird, muss der folgende Befehl eingeben werden:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
load ram 0x32000000 &amp;lt;uboot bin file grösse in bytes&amp;gt; u-boot&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Nun wartet Vivi auf die Datei. In der Shell wird das hochladen mit dem folgenden Befehl initiiert.  Die Dateiübertragung erfolgt über USB. &lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
sudo s3c2410_boot_usb u-boot.bin&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Als nächstes soll das U-Boot gestartet werden. Dazu  muss an die Speicherstelle gesprungen werden,  an der das U-Boot programmiert wurde. Dies wird mit dem folgendem Befehl erreicht:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
go 0x32000000&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Waren alle vorherigen Schritte erfolgreich, sollte nun die U-Boot Konsole angezeigt werden.(MINI2440#).  Anschließend wird nun der NAND-Flash vorbereitet &lt;br /&gt;
&lt;br /&gt;
Zuerst muss das NAND-Flash gelöscht werden, dies wird mit dem folgendem Befehl erreicht:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
nand scrub&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Danach wird die Bad-Block Tabelle erstellt, dies kann etwas Zeit in Anspruch nehmen:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
nand createbbt&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Damit U-Boot in das Flash geschrieben wird, muss folgender Befehl ausgeführt werden.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
nand write.e 0x32000000 0x0 &amp;lt;uBoot bin grösse in hex&amp;gt;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Für das Partitionieren des Flashs dient der Befehl:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
dynpart&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Environment Speicher einrichten:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
dynenv set u-boot_env&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Enviroment Parameter sichern:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
saveenv&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Nachdem alle Schritte durchgeführt wurden, muss nur noch das Bord ausgeschaltet werden und S2 wieder auf NAND gestellt werden. Nach dem Einschalten sollte euch nun das U-Boot begrüßen.&lt;br /&gt;
&lt;br /&gt;
== Kernel/Filesystem ==&lt;br /&gt;
=== Kernel aus den Quellen compilieren ===&lt;br /&gt;
Jetzt steht man vor der Wahl welchen Kernel man nimmt egal ob EMDebian, Gentoo oder Android brauchen tut man ihn so oder so, die fertigen Kernel von friendlyarm.net können nur VFAT,JFFS2 daher eignen sich diese nur bedingt für ein System z.b. auf SD/USBStick oder Ext. Platte, Also ist es sinnvoll diesen sich selber zu bauen dieses ist nicht wirklich schwer. &lt;br /&gt;
&lt;br /&gt;
Als erstes Besorgen wir uns den Kernel und entpacken ihn:&lt;br /&gt;
&lt;br /&gt;
==== Gentoo/emDebian ====&lt;br /&gt;
&amp;lt;c&amp;gt; &lt;br /&gt;
 mkdir micro2440&lt;br /&gt;
 cd micro2440&lt;br /&gt;
 git clone git://repo.or.cz/linux-2.6/mini2440.git linux-2.6.32-rc8&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Android ====&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 mkdir android&lt;br /&gt;
 cd android&lt;br /&gt;
 git clone git://gitorious.org/android-mini2440/kernel-opencsbc.git&lt;br /&gt;
&amp;lt;/c&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Als nächstes laden wir die Default Config und erstellen die .Config für das Micro2440:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
   cd linux-2.6.32-rc8&lt;br /&gt;
   CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm make mini2440_defconfig&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man noch etwas ändern möchte z.b. ext3 Kernelmodule etc.: &lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
   CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm make menuconfig&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Den Kernel anschließend compilieren:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
   CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm make&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Später kann man noch die Module auf die SD-Karte kopieren:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
   CROSS_COMPILE=arm-softfloat-linux-gnueabi- ARCH=arm INSTALL_MOD_PATH=/mnt make modules_install&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Als letztes muss das Kernel Image für U-Boot vorbereitet werden d.h. aus dem vImage(für vivi) wird ein uImage für U-Boot angelegt.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
   cd .../arch/arm/boot&lt;br /&gt;
   mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d zImage uImage&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Filesystem erstellen ===&lt;br /&gt;
Als erstes brauchen wir ein RootFS dieses brauchen wir um später die Partition damit zu füllen.&lt;br /&gt;
&lt;br /&gt;
==== emDebian ====&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
mkdir armel-rootfs&lt;br /&gt;
debootstrap --verbose --arch armel --foreign lenny armel-rootfs http://ftp.de.debian.org/debian&lt;br /&gt;
cd armel-rootfs&lt;br /&gt;
tar cfjv ../armel-rootfs.tar.bz2 *&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Gentoo ====&lt;br /&gt;
http://distfiles.gentoo.org/releases/arm/autobuilds/current-stage3/armv4tl-softfloat-linux-gnueabi/stage3-armv4tl-20100620.tar.bz2&lt;br /&gt;
&lt;br /&gt;
==== Android ====&lt;br /&gt;
&amp;lt;c&amp;gt; &lt;br /&gt;
 mkdir android&lt;br /&gt;
 cd android&lt;br /&gt;
 git clone git://gitorious.org/android-mini2440/android-mini2440.git&lt;br /&gt;
 cd android-mini2440&lt;br /&gt;
 tar cfjv ../android-rootfs.tar.bz2 *&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Speichermedien vorbereiten ==&lt;br /&gt;
=== SD-Karte und USB Medien ===&lt;br /&gt;
Als nächstes bereiten wir ein Speichermedium vor, wir brauchen 3 Partitionen, 2x EXT2 und einmal Swap das Beispiel gilt für eine 2GB SD-Karte.&lt;br /&gt;
&lt;br /&gt;
Das machen wir am besten mit fdisk in der Konsole, man kann auch gparted(Grafisch) nutzen aber komischerweise mountet dann bei mir das RootFS nicht ebenso wenn das RootFS ext3 ist, so wie ich raus gefunden habe geht das nur mit SDHC Karten also SD-Karten mit Speicher der &amp;gt;2GB ist.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
fdisk /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Der Rest ist recht einfach, einfach folgendes eingeben: dp1 np1 &amp;lt;enter&amp;gt; +20MB &amp;lt;enter&amp;gt; np2 +1800MB &amp;lt;enter&amp;gt; np3 &amp;lt;enter&amp;gt; &amp;lt;enter&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Danach mit p schauen ob alle 3 Partitionen erstellt wurden und mit w Speichern und fdisk beenden.&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen wir noch die Partitionen Formatieren(für ext3 muss noch -j in der zweiten Zeile angegeben werden):&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
mke2fs /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;1&lt;br /&gt;
mke2fs /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;2&lt;br /&gt;
mkswap /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;3&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BootFS/RootFS einrichten ===&lt;br /&gt;
&lt;br /&gt;
Dieses ist bei allen Distributionen gleich als erstes kopieren wir den Kernel auf das Speichermedium.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
mount /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;1 /mnt&lt;br /&gt;
cp ../linux-2.6.32-rc8/arch/arm/boot/uImage /mnt&lt;br /&gt;
sync&lt;br /&gt;
umount /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;1&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Jetzt muss noch das RootFS erstellt werden:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
mount /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;2 /mnt&lt;br /&gt;
tar xvzfop /path/to/downloaded/&amp;lt;RootFSfile&amp;gt; -C /mnt&lt;br /&gt;
sync&lt;br /&gt;
umount /dev/&amp;lt;Bezeichnung der SD-Karte&amp;gt;2&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== uBoot ENVs einrichten ==&lt;br /&gt;
So jetzt sind wir fast fertig nur das Wichtigste fehlt noch, wir müssen dem Bootlader noch sagen wo er den Kernel findet und dem Kernel wo er das RootFS findet.&lt;br /&gt;
&lt;br /&gt;
Dazu drücken wir eine Taste um denn Autoboot zu unterbrechen und stellen folgendes ein:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
setenv bootcmd mmcinit ; ext2load mmc 0:1 0x31000000 uImage ; bootm 0x31000000&lt;br /&gt;
setenv bootargs noinitrd mini2440=1tb rootfstype=ext2 root=/dev/mmcblk0p2 rw rootwait&lt;br /&gt;
saveenv&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Android muss noch ein &amp;quot;init=linuxrc&amp;quot; in die zweite Zeile eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
So das war es wen ihr alles durchgearbeitet habt könnt ihr die SD-Karte in den Slot stecken und denn Reset drücken danach sollte das Bord booten.&lt;br /&gt;
&lt;br /&gt;
== Tips/Tricks/Files ==&lt;br /&gt;
=== emDebian/Gentoo ===&lt;br /&gt;
==== /etc/fstab ====&lt;br /&gt;
Beispiel der /etc/fstab: [[Datei:fstab.txt]]&lt;br /&gt;
&lt;br /&gt;
==== /etc/X11/xorg.conf ====&lt;br /&gt;
Beispiel xorg.conf fürs 7&amp;quot; Display: [[Datei:xorg.conf.txt]]&lt;br /&gt;
&lt;br /&gt;
==== Touchscreen kalibrieren ====&lt;br /&gt;
&lt;br /&gt;
Folgende Zeile zur /etc/X11/xorg.conf bei [Section &amp;quot;InputDevice&amp;quot;]&lt;br /&gt;
 hinzufügen.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 Option &amp;quot;Calibrate&amp;quot; &amp;quot;1&amp;quot;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Und dann noch folgendes machen:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 apt-get install xserver-xorg-input-evtouch&lt;br /&gt;
 cp /usr/share/xf86-input-evtouch/empty_cursor.xbm /&lt;br /&gt;
 cd /usr/lib/xf86-input-evtouch&lt;br /&gt;
 sh calibrate.sh&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit folgenden Einträgen in die /etc/X11/xorg.conf bei [Section &amp;quot;InputDevice&amp;quot;] kann man jetzt erst mal die kreuze ausrichten (Siehe Bild.)&lt;br /&gt;
&lt;br /&gt;
[[Datei:touch.jpg|300px|right]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
        Option        &amp;quot;x0&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y0&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x1&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y1&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x2&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y2&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x3&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y3&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x4&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y4&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x5&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y5&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x6&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y6&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x7&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y7&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;x8&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option        &amp;quot;y8&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Als nächstes muss man noch die Min/Max werte ermitteln dazu Links unten und oben rechts die Min/Max werte in die xorg.conf übertragen.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
        Option        &amp;quot;MinX&amp;quot;        &amp;quot;153&amp;quot;&lt;br /&gt;
        Option        &amp;quot;MinY&amp;quot;        &amp;quot;78&amp;quot;&lt;br /&gt;
        Option        &amp;quot;MaxX&amp;quot;        &amp;quot;873&amp;quot;&lt;br /&gt;
        Option        &amp;quot;MaxY&amp;quot;        &amp;quot;937&amp;quot;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Beim 7&amp;quot; Display muss man jetzt nur noch der SW sagen das der Touchscreen Falschrum verbaut ist dieses geht mit folgenden Eintrag in die xorg.conf.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
        Option &amp;quot;SwapY&amp;quot; &amp;quot;2&amp;quot;&lt;br /&gt;
        Option &amp;quot;SwapX&amp;quot; &amp;quot;2&amp;quot;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Jetzt noch den Eintrag [Option &amp;quot;Calibrate&amp;quot; &amp;quot;1&amp;quot;] wieder aus der xorg.conf raus schmeißen dann sollte alles funktionieren.&lt;br /&gt;
&lt;br /&gt;
==== Konsole auf dem TFT und Seriell ausgeben ====&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
echo ttySAC0 &amp;gt;&amp;gt;etc/securetty &lt;br /&gt;
printf &amp;quot;T0:123:respawn:/sbin/getty 115200 ttySAC0\n&amp;quot; &amp;gt;&amp;gt; /etc/inittab&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Virtuelle Maus ====&lt;br /&gt;
&lt;br /&gt;
Wer lieber mit einer Maus arbeitet und ein iPOD/iPhone besitzt kann RemotePad benutzen einfach aus dem Appstore Laden (Kostenlos), den Quellcode für die Anwendung gibt es unter http://www.tenjin.org/RemotePad/ dieser lässt sich recht einfach auf dem Board oder in einem Buildroot compilieren.&lt;br /&gt;
&lt;br /&gt;
==== Bildschirmtastatur ====&lt;br /&gt;
&lt;br /&gt;
Als Bildschirmtastatur kann man xvkbd verwenden, bei Xfce z.b. einfach einen Link dazu in dem Autostart Ordner erstellen damit es beim Start von xfce geladen wird.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 apt-get install xvkbd&lt;br /&gt;
 ln /usr/bin/xvkbd ~/.config/autostart&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Android ===&lt;br /&gt;
=== Sonstiges ===&lt;br /&gt;
==== SD-Karte/USB-LW Backupen/Restore ====&lt;br /&gt;
===== Backup =====&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
dd if=/dev/&amp;lt;Geräte Bezeichung&amp;gt; of=sd2gb.img&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Restore =====&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
dd if=sd2gb.img of=/dev/&amp;lt;Geräte Bezeichung&amp;gt;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Restore 2GB Backup -&amp;gt; 4/8/16...GB SD-Karte =====&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
dd if=sd2gb.img of=/dev/&amp;lt;Geräte Bezeichung&amp;gt;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Und danach mit gparted die swap Partition Löschen danach die RootFS Partition vergrößern und eine neue swap erstellen.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
[[Datei:microsdkbesch.png|450px|right]]&lt;br /&gt;
== Connector / GPIO Belegung == &lt;br /&gt;
=== SDK-Board ===&lt;br /&gt;
==== RS232/TTL(CON1-3) ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || CON1  || CON2  || CON3  || RS232(1) || RS232(2) || RS232(3)&lt;br /&gt;
|-&lt;br /&gt;
| 1   || TXD0  || TXD1  || TXD2  ||          ||          || &lt;br /&gt;
|-&lt;br /&gt;
| 2   || RXD0  || RXD1  || RXD2  || RSTXD0   || RSTXD1   || RSTXD2&lt;br /&gt;
|-&lt;br /&gt;
| 3   || VDD5V || VDD5V || VDD5V || RSRXD0   || RSRXD1   || RSRXD2&lt;br /&gt;
|-&lt;br /&gt;
| 4   || GND   || GND   || GND   ||          ||          || &lt;br /&gt;
|-&lt;br /&gt;
| 5   ||       ||       ||       || GND      || GND      || GND&lt;br /&gt;
|-&lt;br /&gt;
| 7   ||       ||       ||       || RSCTS0   ||          ||&lt;br /&gt;
|-&lt;br /&gt;
| 8   ||       ||       ||       || RSRTS0   ||          ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CON8/Taster ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || CON8  || Taster || GPIO  &lt;br /&gt;
|-&lt;br /&gt;
| 1  || EINT8  || K1     || GPG0/?  &lt;br /&gt;
|-&lt;br /&gt;
| 2  || EINT11 || K2     || GPG3/nSS1&lt;br /&gt;
|-&lt;br /&gt;
| 3  || EINT13 || K3     || GPG5/SPIMISO1&lt;br /&gt;
|-&lt;br /&gt;
| 4  || EINT14 || K4     || GPG6/SPIMOSI1&lt;br /&gt;
|-&lt;br /&gt;
| 5  || EINT15 || K5     || GPG7/SPICLK1&lt;br /&gt;
|-&lt;br /&gt;
| 6  || EINT19 || K6     || GPG11/TCLK1  &lt;br /&gt;
|-&lt;br /&gt;
| 7  || VDD33V ||        || 3,3V&lt;br /&gt;
|-&lt;br /&gt;
| 8  || GND    ||        || GND&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CON6 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || CON6   || GPIO         ||PIN || CON6 || GPIO &lt;br /&gt;
|-&lt;br /&gt;
|  1  || VDD5V  || 5V           ||  2 || VDD33V || 3,3V&lt;br /&gt;
|-&lt;br /&gt;
|  3  || GND    || GND          ||  4 || nRESET || Reset&lt;br /&gt;
|-&lt;br /&gt;
|  5  || AIN0   || AD0          ||  6 || AIN1   || AD1&lt;br /&gt;
|-&lt;br /&gt;
|  7  || AIN2   || AD2          ||  8 || ?      || ?&lt;br /&gt;
|-&lt;br /&gt;
|  9  || EINT0  || GPF0         || 10 || EINT1  || GPF1&lt;br /&gt;
|-&lt;br /&gt;
| 11  || EINT2  || GPF2         || 12 || EINT3  || GPF3&lt;br /&gt;
|-&lt;br /&gt;
| 13  || EINT4  || GPF4         || 14 || EINT5  || GPF5&lt;br /&gt;
|-&lt;br /&gt;
| 15  || EINT6  || GPF6         || 16 || EINT8  || GPG0&lt;br /&gt;
|-&lt;br /&gt;
| 17  || EINT17 || GPG7/nRST1   || 18 || EINT18 || GPE10/nCTS1&lt;br /&gt;
|-&lt;br /&gt;
| 19  || I2CSCL || I2CSCL/GPE14 || 20 || I2CSDA || I2CSDA/GPE15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CON4/CMOS Camera ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || CON4      || GPIO  || PIN || CON4     || GPIO &lt;br /&gt;
|-&lt;br /&gt;
|   1 || I2CSDA    || GPE15 ||   2 || I2CSCL   || GPE14&lt;br /&gt;
|-&lt;br /&gt;
|   3 || EINT20    || GPG12 ||   4 || CAMRST   || GPJ12&lt;br /&gt;
|-&lt;br /&gt;
|   5 || CAMCLK    || GPJ11 ||   6 || CAM_HRES || GPJ10&lt;br /&gt;
|-&lt;br /&gt;
|   7 || CAM_VSYNC || GPJ9  ||   8 || CAM_PCLK || GPJ8&lt;br /&gt;
|-&lt;br /&gt;
|   9 || CAMDATA7  || GPJ7  ||  10 || CAMDATA6 || GPJ6&lt;br /&gt;
|-&lt;br /&gt;
|  11 || CAMDATA5  || GPJ5  ||  12 || CAMDATA4 || GPJ4&lt;br /&gt;
|-&lt;br /&gt;
|  13 || CAMDATA3  || GPJ3  ||  14 || CAMDATA2 || GPJ2&lt;br /&gt;
|-&lt;br /&gt;
|  15 || CAMDATA1  || GPJ1  ||  16 || CAMDATA0 || GPJ0&lt;br /&gt;
|-&lt;br /&gt;
|  17 || VDD33V    || 3,3V  ||  18 || VDD_CAM  || VDD_CAM&lt;br /&gt;
|-&lt;br /&gt;
|  19 || VDD18V    || 1,8V  ||  20 || GND      || GND&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CON9/10 Touchscreen ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || CON9  || CON10 || GPIO  &lt;br /&gt;
|-&lt;br /&gt;
|   1 || TSXM  || TSXM  || ?&lt;br /&gt;
|-&lt;br /&gt;
|   2 || TSYM  || TSYM  || ?&lt;br /&gt;
|-&lt;br /&gt;
|   3 || TSXP  || TSXP  || ?&lt;br /&gt;
|-&lt;br /&gt;
|   4 || TSYP  || TSYP  || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CON5 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || CON5    || GPIO       || PIN || CON5    || GPIO &lt;br /&gt;
|-&lt;br /&gt;
|   1 || EINT17  || GPG7/nRST1 ||   2 || EINT18  || nCTS1&lt;br /&gt;
|-&lt;br /&gt;
|   3 || nGCS1   ||            ||   4 || EINT8   || GPG0 &lt;br /&gt;
|-&lt;br /&gt;
|   5 || nGSC2   ||            ||   6 || LnWBE1  ||&lt;br /&gt;
|-&lt;br /&gt;
|   7 || nGSC3   ||            ||   8 || LnWE    ||&lt;br /&gt;
|-&lt;br /&gt;
|   9 || LnOE    ||            ||  10 || nRESET  ||&lt;br /&gt;
|-&lt;br /&gt;
|  11 || nWAIT   ||            ||  12 || nXDACK0 ||&lt;br /&gt;
|-&lt;br /&gt;
|  13 || LADDR0  ||            ||  14 || nXDRWQ0 ||&lt;br /&gt;
|-&lt;br /&gt;
|  15 || LADDR1  ||            ||  16 || LADDR2  ||&lt;br /&gt;
|-&lt;br /&gt;
|  17 || LADDR3  ||            ||  18 || LADDR4  ||&lt;br /&gt;
|-&lt;br /&gt;
|  19 || LADDR5  ||            ||  20 || LADDR6  ||&lt;br /&gt;
|-&lt;br /&gt;
|  21 || LADDR7  ||            ||  22 || LADDR8  ||&lt;br /&gt;
|-&lt;br /&gt;
|  23 || LADDR9  ||            ||  24 || LADDR10 ||&lt;br /&gt;
|-&lt;br /&gt;
|  25 || LADDR11 ||            ||  26 || LADDR12 ||&lt;br /&gt;
|-&lt;br /&gt;
|  27 || LADDR13 ||            ||  28 || LADDR14 ||&lt;br /&gt;
|-&lt;br /&gt;
|  29 || LADDR15 ||            ||  30 || LADDR16 ||&lt;br /&gt;
|-&lt;br /&gt;
|  31 || LADDR17 ||            ||  32 || LADDR18 ||&lt;br /&gt;
|-&lt;br /&gt;
|  33 || LADDR19 ||            ||  34 || LADDR20 ||&lt;br /&gt;
|-&lt;br /&gt;
|  35 || LADDR21 ||            ||  36 || LADDR22 ||&lt;br /&gt;
|-&lt;br /&gt;
|  37 || LADDR23 ||            ||  38 || LADDR24 ||&lt;br /&gt;
|-&lt;br /&gt;
|  39 || LDATA0  ||            ||  40 || DATA1   ||&lt;br /&gt;
|-&lt;br /&gt;
|  41 || LDATA2  ||            ||  42 || DATA3   ||&lt;br /&gt;
|-&lt;br /&gt;
|  43 || LDATA4  ||            ||  44 || DATA5   ||&lt;br /&gt;
|-&lt;br /&gt;
|  45 || LDATA6  ||            ||  46 || DATA7   ||&lt;br /&gt;
|-&lt;br /&gt;
|  47 || LDATA8  ||            ||  48 || DATA9   ||&lt;br /&gt;
|-&lt;br /&gt;
|  49 || LDATA10 ||            ||  50 || DATA11  ||&lt;br /&gt;
|-&lt;br /&gt;
|  51 || LDATA12 ||            ||  52 || DATA13  ||&lt;br /&gt;
|-&lt;br /&gt;
|  53 || LDATA14 ||            ||  54 || DATA15  ||&lt;br /&gt;
|-&lt;br /&gt;
|  55 || VDD5V   || 5V         ||  56 || GND     || GND&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== LCD0/LCD1 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || LCD1  || LCD0     || PIN || LCD1   || LCD0&lt;br /&gt;
|-&lt;br /&gt;
|   1 || VDD5V || VDDLED5V ||   2 || VDD5V  || VDDLED5V&lt;br /&gt;
|-&lt;br /&gt;
|   3 || VD0   || ADJ      ||   4 || VD1    || GND&lt;br /&gt;
|-&lt;br /&gt;
|   5 || VD2   || GND      ||   6 || VD3    || VDD33V&lt;br /&gt;
|-&lt;br /&gt;
|   7 || VD4   || VDD33V   ||   8 || VD5    || MODE(DE/HV)&lt;br /&gt;
|-&lt;br /&gt;
|   9 || VD6   || VM/DE    ||  10 || VD7    || VFRAME&lt;br /&gt;
|-&lt;br /&gt;
|  11 || GND   || VLINE    ||  12 || VD8    || GND&lt;br /&gt;
|-&lt;br /&gt;
|  13 || VD9   || VD7/B5   ||  14 || VD10   || VD6/BD &lt;br /&gt;
|-&lt;br /&gt;
|  15 || VD11  || VD5/B3   ||  16 || VD12   || GND&lt;br /&gt;
|-&lt;br /&gt;
|  17 || VD13  || VD4/B2   ||  18 || VD14   || VD3/B1&lt;br /&gt;
|-&lt;br /&gt;
|  19 || VD15  || VD2/B0   ||  20 || GND    || GND&lt;br /&gt;
|-&lt;br /&gt;
|  21 || VD16  || VD15/G5  ||  22 || VD17   || VD14/G4&lt;br /&gt;
|-&lt;br /&gt;
|  23 || VD18  || VD13/G3  ||  24 || VD19   || GND&lt;br /&gt;
|-&lt;br /&gt;
|  25 || VD20  || VD12/G2  ||  26 || VD21   || VD11/G1&lt;br /&gt;
|-&lt;br /&gt;
|  27 || VD22  || VD10/G0  ||  28 || VD23   || GND&lt;br /&gt;
|-&lt;br /&gt;
|  29 || GND   || VD23/R5  || 30  || LCD_PWR|| VD22/R4&lt;br /&gt;
|-&lt;br /&gt;
|  31 || GPB1  || VD21/R3  || 32  || nRESET || GND&lt;br /&gt;
|-&lt;br /&gt;
|  33 || VM    || VD20/R2  || 34  || VFRAME || VD19/R1&lt;br /&gt;
|-&lt;br /&gt;
|  35 || VLINE || VD18/R0  || 36  || VCLK   || GND&lt;br /&gt;
|-&lt;br /&gt;
|  37 || TSXM  || VCLK     || 38  || TSXP   || GND&lt;br /&gt;
|-&lt;br /&gt;
|  39 || TSYM  || L/R      || 40  || TSYP   || U/D&lt;br /&gt;
|-&lt;br /&gt;
|  41 || ?     ||          ||     ||        || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Stamp-Modul ===&lt;br /&gt;
&lt;br /&gt;
==== JTAG ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PIN || GPIO   || PIN || GPIO  &lt;br /&gt;
|-&lt;br /&gt;
|   1 || VDD33V ||   2 || VDD33V&lt;br /&gt;
|-&lt;br /&gt;
|   3 || nTRST  ||   4 || nRESET&lt;br /&gt;
|-&lt;br /&gt;
|   5 || TDI    ||   6 || TDO&lt;br /&gt;
|-&lt;br /&gt;
|   7 || TMS    ||   8 || GND&lt;br /&gt;
|-&lt;br /&gt;
|   9 || TCK    ||  10 || GND&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PA.1 ====&lt;br /&gt;
&lt;br /&gt;
==== PB.1 ====&lt;br /&gt;
&lt;br /&gt;
==== PC.1 ====&lt;br /&gt;
&lt;br /&gt;
== Peripherie Beschaltung ==&lt;br /&gt;
&lt;br /&gt;
=== SDK-Bord ===&lt;br /&gt;
&lt;br /&gt;
=== Stamp-Modul ===&lt;br /&gt;
&lt;br /&gt;
== Selbstbau Peripherie ==&lt;br /&gt;
&lt;br /&gt;
= Links/Downloads =&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
 [http://code.google.com/p/mini2440/downloads/detail?name=s3c2410_boot_usb-20060807.tar.bz2&amp;amp;can=2&amp;amp;q= s3c2410 USB DL Tool für Linux]&lt;br /&gt;
 [http://www.codesourcery.com/sgpp/lite/arm/portal/package3696/public/arm-none-linux-gnueabi/arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 Crosscompiler von CodeSourcery]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
[http://www.electronics.diycinema.co.uk/ Einige Basteleien (Tempsensor, RGB Treiber, MEMS ...]&lt;br /&gt;
&lt;br /&gt;
== Datenblätter ==&lt;br /&gt;
 [http://www.friendlyarm.net/dl.php?file=micro2440_manual_20100204.pdf Anleitung(Chinesisch)]&lt;br /&gt;
 [http://www.friendlyarm.net/dl.php?file=micro2440_dimension.pdf Dimension Stamp-Modul]&lt;br /&gt;
 [http://www.friendlyarm.net/dl.php?file=micro2440_schematic.zip Micro2440 + SDK-Schaltplan]&lt;br /&gt;
 [http://www.friendlyarm.net/dl.php?file=lcd70_schematic.zip 7&amp;quot; LCD Schaltplan]&lt;br /&gt;
 [http://www.friendlyarm.net/dl.php?file=lcd35_schematic.zip 3,5&amp;quot; LCD Schaltplan]&lt;br /&gt;
&lt;br /&gt;
== Händler ==&lt;br /&gt;
 [http://www.watterott.com/de/FriendlyARM Bezugsquelle Watterott]&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM-Boards]][[Category:ARM]][[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Mini2440_SDL_GUI_Programmierung&amp;diff=49397</id>
		<title>Mini2440 SDL GUI Programmierung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Mini2440_SDL_GUI_Programmierung&amp;diff=49397"/>
		<updated>2010-07-23T05:59:57Z</updated>

		<summary type="html">&lt;p&gt;Kruemeltee: /* libsdl_gfx */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wer ein kleines Linuxboard mit Display hat, möchte sicher nicht nur die Kernelausgaben auf der Framebuffer-Konsole ansehen oder sich für die popligsten Anwendungen einen X-Server+Window Manager installieren, sich eine Anwendung schreiben und dann erst loslegen können.&lt;br /&gt;
&lt;br /&gt;
Viel einfacher geht es in einigen Fällen mit [http://www.libsdl.org SDL]. Dieser Artikel beschreibt die Einrichtung einer Cross-Toolchain mit SDL-Support für das [[Mini2440]]. &lt;br /&gt;
Die unterschiede von Board zu Board sind meist sehr gering, was die Display-Ausgabe angeht. Daher lässt sich dieser Artikel auch für einige andere Boards verwenden.&lt;br /&gt;
&lt;br /&gt;
Hier ein Screenshot von einem meiner SDL-Programme:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Bild:mini2440_sdl_menu_screenshot.png|100px]]&lt;br /&gt;
&lt;br /&gt;
Die Vorraussetzungen hierfür sind:&lt;br /&gt;
* Die [http://www.mikrocontroller.net/articles/Mini2440#Toolchain FriendlyARM Toolchain]&lt;br /&gt;
* Funktionierender Framebuffer mit Framebuffer Konsole&lt;br /&gt;
* Ein wenig Zeit&lt;br /&gt;
&lt;br /&gt;
= Einrichten der Cross-Toolchain =&lt;br /&gt;
Ich gehe davon aus, dass man alle kommenden Schritte als &amp;quot;normaler&amp;quot; User erledigt. Sämtliche Schritte, die als &amp;quot;root&amp;quot; erledigt werden müssen, wird ein &amp;quot;sudo&amp;quot; vorangestellt. Wenn das bei dir anders gehen sollte (z.B. su -c &#039;...&#039;), dann ändere es für dich!&lt;br /&gt;
&lt;br /&gt;
== libsdl ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
wget http://www.libsdl.org/release/SDL-1.2.14.tar.gz&lt;br /&gt;
tar xvfz SDL-1.2.14.tar.gz&lt;br /&gt;
cd SDL-1.2.14&lt;br /&gt;
RANLIB=/usr/local/arm/4.3.2/bin/arm-linux-ranlib CROSS_COMPILE=arm-linux- ./configure --host=arm-linux --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/ \ &lt;br /&gt;
--enable-input-tslib --enable-video-fbcon --disable-audio --disable-video-x11 --disable-video-directfb&lt;br /&gt;
time make&lt;br /&gt;
sudo time make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Diese Schritte dauerten bei mir ca 5 Minuten.&lt;br /&gt;
&lt;br /&gt;
Nun lassen sich schon die ersten Programme mittels SDL compilieren. Allerdings fehlen noch zusätzliche libs, wie z.B. [http://www.ferzkopp.net/joomla/content/view/19/14/ sdl_gfx] und [http://www.libsdl.org/projects/SDL_image/ sdl_image] um Grafiken, Texte und Bilder anzeigen zu können. SDL alleine steht da ein wenig auf dem Schlauch.&lt;br /&gt;
&lt;br /&gt;
Einen Haken hat die Sache noch. Dadurch, dass SDL in seinem Audio-Code auch Assembler verwendet habe ich es noch nicht hinbekommen, SDL mit ALSA oder OSS Support zu compilieren.&lt;br /&gt;
Wer dazu einen Tip hat, immer her damit :)&lt;br /&gt;
&lt;br /&gt;
== libsdl_image ==&lt;br /&gt;
Mit dieser lib lassen sich recht einfach Bilder laden und anzeigen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
wget http://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.10.tar.gz&lt;br /&gt;
tar xvfz SDL_image-1.2.10.tar.gz&lt;br /&gt;
cd SDL_image-1.2.10&lt;br /&gt;
RANLIB=/usr/local/arm/4.3.2/bin/arm-linux-ranlib CROSS_COMPILE=arm-linux- ./configure --host=arm-linux --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/ \ &lt;br /&gt;
--enable-gif --enable-jpg --enable-bmp&lt;br /&gt;
***HACK*** (siehe Text unter diesem Kasten)&lt;br /&gt;
sudo ln -s /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/libts.la /usr/local/lib/libts.la&lt;br /&gt;
sudo ln -s /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/libts.so /usr/local/lib/libts.so&lt;br /&gt;
***/HACK***&lt;br /&gt;
time make&lt;br /&gt;
sudo time make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anmerkungen zum &amp;quot;Hack&amp;quot;. Beim compilieren spuckt mir SDL_image einen Fehler aus. Es sagt mir, dass er in /usr/local/lib/ die tslib nicht finden kann. Dort hat er aber nichts zu suchen, da dies kein Pfad zum Cross-Compiling ist. Wie ich das abstelle, habe ich noch nicht herausgefunden, also habe ich einfach einen symbolischen Link angelegt.&lt;br /&gt;
&lt;br /&gt;
== libsdl_gfx ==&lt;br /&gt;
Diese lib stellt einen Haufen Grafikfuntkionen bereit, wie Polygone, Rechtecke, Kreise, Linien, ...&lt;br /&gt;
Ausserdem beinhaltet sie eine Textausgabe und Funktionen um Surfaces zu rotieren und zu zoomen.&lt;br /&gt;
&lt;br /&gt;
== libsdl_ttf ==&lt;br /&gt;
Diese lib kann mit TrueType Fonts umegehen und sie anzeigen.&lt;br /&gt;
&lt;br /&gt;
= Verwenden von SDL =&lt;br /&gt;
== tslib-Maus ==&lt;br /&gt;
== Grafik-Funktionen ==&lt;br /&gt;
== Bild-Funktionen ==&lt;br /&gt;
== Threads ==&lt;/div&gt;</summary>
		<author><name>Kruemeltee</name></author>
	</entry>
</feed>