Navi: Unterschied zwischen den Versionen

aus Metalab Wiki, dem offenen Zentrum für meta-disziplinäre Magier und technisch-kreative Enthusiasten.
Zur Navigation springenZur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 67: Zeile 67:


== Linux 4.4-rc2 ==
== Linux 4.4-rc2 ==
** Hardware und Verbindungen müssen im Device-Tree-File eingetragen sein (d.h. eingetragen werden)
* Hardware und Verbindungen müssen im Device-Tree-File eingetragen sein (d.h. eingetragen werden)


* es existieren verschiedene Headerfiles für SPI.  
* Device Tree
** Vorsicht! linux-headers-Paket im User Space installieren&verwenden, nicht /usr/src/linux/include
** offiziell sollten für Peripherie Device-Tree-Overlays verwendet werden (wird zusätzlich zum Board-Device-Tree-File geladen):
** Spezialsyntax __overlay__ { … }
** dtc -@ xxx.dts
** Linux Command Line: dtoverlay=xxx.dtb beim Booten
** geht nicht in Debian, weil "/plugin/" unbekannt


** Device Tree
** Hack: Board-File editieren
*** offiziell sollten für Peripherie Device-Tree-Overlays verwendet werden (wird zusätzlich zum Board-Device-Tree-File geladen):
** bei unserem Host: sun7i-a20-olinuxino-lime2.dts
*** Spezialsyntax __overlay__ { … }
** folgendes hinten anhängen und dann: make dtbs und die entstehende Datei sun7i-a20-olinuxino-lime2.dtb  dem Bootvorgang zur Verfügung stellen
*** dtc -@ xxx.dts
*** Linux Command Line: dtoverlay=xxx.dtb beim Booten
*** geht nicht in Debian, weil "/plugin/" unbekannt
 
*** Hack: Board-File editieren
*** bei unserem Host: sun7i-a20-olinuxino-lime2.dts
*** folgendes hinten anhängen und dann: make dtbs und die entstehende Datei sun7i-a20-olinuxino-lime2.dtb  dem Bootvorgang zur Verfügung stellen


<pre>
<pre>
Zeile 133: Zeile 130:
* Zugriff auf SPI über spidev
* Zugriff auf SPI über spidev
** Linux-Source muss editiert werden., damit /dev/-Datei erscheint
** Linux-Source muss editiert werden., damit /dev/-Datei erscheint
** es existieren verschiedene Headerfiles für SPI. Vorsicht! linux-headers-Paket im User Space installieren&verwenden, nicht /usr/src/linux/include
* Zugriff auf I2C funktioniert auch so
* Zugriff auf I2C funktioniert auch so
* Zugriff auf UART funktioniert auch so
* Zugriff auf UART funktioniert auch so

Version vom 30. November 2015, 02:05 Uhr

Ziele

  • Linux-Navigationsgerät fürs Auto bauen mit ausschließlich Free Software.
  • Einarbeiten in UART, SPI, I²C, SPI mit Linux >= 4.4
  • Spaß haben

Hardware, abstrakt

  • Stromversorgung
  • GPS
  • FM-Radio
  • VAN Bus Controller für Display etc

Hardware, konkret

Verbindungen

  • 12 V -> 5 V "Anker" Netzteil für Auto: ISO-Stecker, USB
  • MT3329 GPS Receiver: UART
  • TSS463-AA VAN Bus Controller: SPI
  • MCP2551 CAN Line Driver: UART
  • RDA5807M FM Radio: I²C, Antenne
  • TDA7850 4-Kanal-Audio-Verstärker: Cinch, ISO-Stecker
  • PT7313E Audio Filter: I²C, Klinke
  • A20-OLinuXIno-LIME2 Host Computer: Ethernet

Hardware-Fallstricke

FM-Antenne

  • vorhanden am Auto etc
  • hat möglicherweise eingebauten Verstärker
    • Verstärker schwierig zu finden (ist meist außerhalb des Autos)
    • Phantomspeisung zur Stromversorgung nötig?
  • Buchse? ISO oder DIN? Wahrscheinlich DIN.
  • Impedanz? 100 Ω? 50 Ω?

EMI

  • ElectroMagnetic Interference
  • unsere Hardware stellt viele Hochfrequenzstörquellen dar
  • Störung von außen gibt’s vielleicht auch
  • Audioverstärker sollte nicht gestört werden
  • Faradayscher Käfig nötig (1 oder mehr)
    • Filterplatte mit Masse
    • min. 2 Lagen

Ghost in the Machine

  • Pull-Up-Widerstände sind auf den Kommunikationsleitungen notwendig, damit kein Blödsinn gesendet/empfangen wird, wenn ein Gerät ohne Strom ist

Software

Linux 4.4-rc2

  • Hardware und Verbindungen müssen im Device-Tree-File eingetragen sein (d.h. eingetragen werden)
  • Device Tree
    • offiziell sollten für Peripherie Device-Tree-Overlays verwendet werden (wird zusätzlich zum Board-Device-Tree-File geladen):
    • Spezialsyntax __overlay__ { … }
    • dtc -@ xxx.dts
    • Linux Command Line: dtoverlay=xxx.dtb beim Booten
    • geht nicht in Debian, weil "/plugin/" unbekannt
    • Hack: Board-File editieren
    • bei unserem Host: sun7i-a20-olinuxino-lime2.dts
    • folgendes hinten anhängen und dann: make dtbs und die entstehende Datei sun7i-a20-olinuxino-lime2.dtb dem Bootvorgang zur Verfügung stellen
&uart4 {
	pinctrl-names = “default”;
	pinctrl-0 = <&uart4_pins_a>;
	status = “okay”;
};

&spi2 {
	status = “okay”;
	pinctrl-names = “default”;
	pinctrl-0 = <&spi2_pins_a>;
	van0: tss463aa@1 {
		compatible = “atmel,tss463aa”;
		reg = <0>;
		spi-max-frequency = <4000000>;
		spi-cpol;
		spi-cpha;
	};
};

&i2c2 {
	pinctrl-names = “default”;
	pinctrl-0 = <&i2c2_pins_a>;
	status = “okay”;
};

&codec {
	status = “okay”;
};
  • Für spidev in Linux drivers/spi/spidev.c editieren :
    • das Array spidev_dt_ids erweitern um
	{ .compatible = “atmel,tss463aa” },
    • vor dem (existierenden) Sentinel
	{},
    • dann ausführen:
make modules
make modules_install

User-Space

  • Zugriff auf SPI über spidev
    • Linux-Source muss editiert werden., damit /dev/-Datei erscheint
    • es existieren verschiedene Headerfiles für SPI. Vorsicht! linux-headers-Paket im User Space installieren&verwenden, nicht /usr/src/linux/include
  • Zugriff auf I2C funktioniert auch so
  • Zugriff auf UART funktioniert auch so
  • Interrupts (EINTxx):
    • /sys/class/gpioXXX/edge
    • /sys/class/gpioXXX/uevent
    • poll() oder select() auf errors

http://svn.nomike.com/playground/trunk/Navi/

TODO

  • besser: Interrupts im Kernel abarbeiten
    • Vorteil: diese werden auch abgearbeitet wenn das User-Space-Programm gerade kaputt ist und wir stellen so sicher, dass das auslösende Gerät weiterarbeiten kann.
  • noch besser: SocketCAN-Netzwerkmodul für VAN-Bus schreiben
    • einfachste Vorlage: vcan