Forum: PC Hard- und Software Carambola - Linux (OpenWRT) und SPI ich werd noch Wahnsinnig!


von Andreas G. (andreasgs)


Lesenswert?

Hallo Zusammen,

Nachdem ich nun unglaublich viel Zeit verbrannt hab, wende ich mich an 
euch, in der Hoffnung, ihr könnt mir weiterhelfen.

Was ich versuche:
Das Carambolaboard (http://www.8devices.com/product/3/carambola) ist an 
sich ein sehr interesantes Board, aber mit wenig Hardware. Deshalb 
möchte ich über SPI einen Erweiterungschip ansprechen (ADC bzw. Mess-IC. 
Welcher ist erstmal egal). Zum Test der Schnittstelle möchte ich erstmal 
über die Shell einen Hexbefehl (beliebig) auf der MOSI Leitung absetzen.
Davon, einen Chip zu initialisieren spreche ich erstmal noch gar nicht. 
Ich wäre schon froh, wenn das Ding überhaupt was macht.

Das Problem:
Nachm Boot, wechselt die CS Leitung und die CLK Leitung auf High, 
ansonsten passiert aber nichts.

Was ich gemacht habe:
Ein Xubuntu samt Crosscompiler Toolchain auf VirtualBox hochgezogen --> 
Ich kann selber ein Kernel kompilieren. Jehea
Wie kann ich nun nur ein Programm (Progrämmchen) für das Carambola 
Compilieren?
Ewig an der Network config gedreht, bis ich auf LAN und WLAN per DHCP 
eine IP addresse vom Router zugeteilt bekomme. --> Die Doku ist hier 
wirklich nicht brauchbar!

Die Carambola.c datei angepasst mit:
1
+struct spi_board_info carambola_spi_dev_info[] __initdata = {
2
+    {
3
+        .modalias   = "spidev",
4
+        .max_speed_hz   = 10000000,
5
+        .bus_num    = 0,
6
+        .chip_select    = 0,
7
+        .mode = SPI_MODE_0,
8
+    },
9
+};

Ich habe alle SPI - Relevanten Kernel Module hinzugefügt.
Ich habe das SPI-dev_Test tool mitinstalliert.

Als einziges Erfolgserlebnis konnte ich das WebCAM Projekt nachbauen. 
Dauerte auch Ewig.


Meine Frage nun an euch.
Kann mir jemand erklären wie ich:
1. den Kernel so übersetzte, dass ich native Treiberunterstützung für 
SPI dabei habe
2. die SPI - Schnittstelle von der Shell ansprechen kann
3. ein c Programm auf dem Xubuntu compiliere
4. das Compilat auf dem Carambola ausführe.


Wenn mir keiner Helfen kann, werde ich das Teil verschrotten, dann hat 
es mir zumindest geholfen, meinen Frust abzubauen.

Grüßle
Andreas

von oszi40 (Gast)


Lesenswert?

Andreas Gassner schrieb:
> nun unglaublich viel Zeit verbrannt

Welche Unterstützung/Beispiele hast Du bisher von Hersteller bekommen?
Eine Mailanfrage hilft evtl. die mühsame Zweiterfindung des Rades zu 
vermeiden? For more information, please contact us at: info@8devices.com

von tut (Gast)


Lesenswert?

Im Forum von 8devices gibt es eine längliche Diskussion zu dem Thema.

von Andreas G. (andreasgs)


Lesenswert?

oszi40 schrieb:
> Andreas Gassner schrieb:
>> nun unglaublich viel Zeit verbrannt
>
> Welche Unterstützung/Beispiele hast Du bisher von Hersteller bekommen?
> Eine Mailanfrage hilft evtl. die mühsame Zweiterfindung des Rades zu
> vermeiden? For more information, please contact us at: info@8devices.com

Genau das Gefühl habe ich aber, wenn ich Posts und Forenkommentare zu 
ähnlichen Linuxboards finde, bei denen es scheint, dass die längste Zeit 
verlohren geht, während man darauf wartet, dass der Lötkolben warm wird.

Es gibt für Linux SPI - Treiber. In der Makefile - Konfiguration für das 
Carambola kann man auch eine Reihe davon auswählen. Unter Tools kann man 
ein SPI - Test Tool (Name weis ich jetzt nicht genau, er lässt aber 
darauf schließen, dass das Tool genau zum SPI test verwendet werden 
kann) ebenfalls mit compilieren lassen. Ob und wie diese aber compiliert 
zusammenspielen lässt sich nicht herausfinden. Da ein Compilerdurchlauf 
mal eben 45Minuten dauert, kann habe ich alle Module, die irgendwie mit 
SPI zu tun haben in den Kernel includiert. Tja, ob sich nun was spreizt 
weis ich ned, weil ICH KANNS JA NICHT TESTEN.

Wenn ich aber dann mal dran gehe, dann ist das einzige verwertbare 
Projekt bei 8devices in Pyhton. Wie man aber diesen SPEZIELLEN (weil das 
board nur 8MB Flash hat, passt der Normale mit 5MB nämlich nicht rein, 
und das EINZIGE python-mini das per Packetupdate installierbar ist, 
bricht beim entpacken ohne Fehlermeldung ab) Pyhton interpreter aufs 
Board kriegt, kann man aber nichtmal Zwischen den Zeilen lesen.

Ich will jetzt nicht alles auf dem Silbertablett serviert bekommen, 
darum gehts mir auch nicht. Ich würd nur gerne einen Hinweis bekommen, 
wie ich Schritt für Schritt, generisch, eine SPI - Schnittstelle unter 
Linux hochziehe und teste. Es kann doch nicht sein, dass ich der Erste 
bin der sowas versucht.

Bitte entschuldigt meinen Ton, aber ich bin wirklich am RANDE DES 
WAHNSINNS.

Da fallen mir meine restlichen Haare auch noch aus, und der Arzt denkt 
es wär erblich... ;-)

Grüßle
Andreas

von Davis (Gast)


Lesenswert?

Andreas Gassner schrieb:

> Bitte entschuldigt meinen Ton, aber ich bin wirklich am RANDE DES
> WAHNSINNS.

Zum Carambola-Board gibt es nur einen Tipp: auf Ebay damit!

Die Unterstützung des Herstellers ist grauenhaft. Grauenhafter sind nur 
noch das Wiki zum Board und das Englisch der "8devies"-Leute.

von Hans Ulli K. (Gast)


Lesenswert?

Andreas Gassner schrieb:
>
> Meine Frage nun an euch.
> Kann mir jemand erklären wie ich:
> 1. den Kernel so übersetzte, dass ich native Treiberunterstützung für
> SPI dabei habe
> 2. die SPI - Schnittstelle von der Shell ansprechen kann
> 3. ein c Programm auf dem Xubuntu compiliere
> 4. das Compilat auf dem Carambola ausführe.
>
>
> Wenn mir keiner Helfen kann, werde ich das Teil verschrotten, dann hat
> es mir zumindest geholfen, meinen Frust abzubauen.
>
> Grüßle
> Andreas

Hallo,

Ich würde erstmal per git mir das OpenWRT clonen. Dort sind alle Tools 
drin, auch der Crosscompiler (der wird aber noch auf deinem Rechner 
gebaut)
1
git clone git://nbd.name/openwrt.git

dann einen neuen Branch erzeugen (z.B. spi)
1
git checkout -b spi

Hier die Änderungen einpflegen die du gemacht hast.
Teilweise sind einige Module vom Kernel in Kconfig von OpenWRT nicht 
drin, weil OpenWRT primär als Router Firmware gedacht ist.

Bei der SPI Schnittstelle muss ein Device vorhanden sein, damit du diese 
von der Shell erreichen kannst.

von Andreas G. (andreasgs)


Lesenswert?

Hihi,

Hans Ulli Kroll schrieb:

>
1
> git clone git://nbd.name/openwrt.git
2
>
>
> dann einen neuen Branch erzeugen (z.B. spi)
>
1
> git checkout -b spi
2
>
>

Das alles unter Xubuntu, oder? Wie komme ich dann zu einem Code der am 
Carambola läuft? Wer sagt dem Compiler das er für den Ralink kompilieren 
soll? Muss ich im Menuconfig das Derivat wählen, oder?

Grüßle
Andreas

von Hans Ulli K. (Gast)


Lesenswert?

> Das alles unter Xubuntu, oder? Wie komme ich dann zu einem Code der am
> Carambola läuft? Wer sagt dem Compiler das er für den Ralink kompilieren
> soll? Muss ich im Menuconfig das Derivat wählen, oder?
>

Viel einfacher ..
Unter jedem Linux. Lege dir am besten ein Verzechnis an unter dem du die 
OpenWRT "Buildchain" anlegst.

Wie gesagt für den Anfang
1
git clone git://nbd.name/openwrt.git
Dann mal alle feeds updaten und installieren
1
cd openwrt
2
./scripts/feeds update -a
3
./scripts/feeds install -a

Dann kann du mit
1
make menuconfig
Das Target Ralink RT288x/RT3XXX anwählen, Subtarget RT305X, dann 
hast du schon da Carambola Board aktiviert. Was du noch in deinm RootFS 
haben will kannst du dir selber aussuchen.

Wenn du erstmal nur testen willst empfehle ich als Target Image die 
Ramdisk zu nehmen.

Wenn du soweit fertig bist mit der Config, diese zum Schluss 
abspeichern, das kommt im letzten Dialog bei "Exit"

Dann ein ein
1
make
oder wenn du mehr Kerne hast
1
make -j4
Diese Einstellung ist für CPUs mit 2 Kernen, -j8 ist für 4 Kerne (-j 
Anzahl der Jobs)

Das Binäry ist in bin/ramips in deinem "OpenWRT Verzeichnis, zu finden. 
Im Dateiname ist carambola drin.

Per TFTP kannst du das dann erstmal testen.
Dazu brauchst du einen TFTP Server, tftp-hpa dürfte das Paket sein. 
Installieren und einrichten wo der TFTP Server die Files erwartet.

Dein rechner sollte im Netzwerk 192.168.1.0/24 sein und nicht die 
Addresse 192.168.1.1 haben (das hat die Carambola Box)

ggf, noch das Paket picocom installieren und dich per serieller 
Schnittstelle verbinden. Ein USB-Serial Kabel tuts bei mir
1
picocom -b 115200 /dev/ttyUSB0

Hier ein Beispiel
1
Board: Ralink APSoC DRAM:  32 MB
2
relocate_code Pointer at: 81fb0000
3
config usb..
4
******************************
5
Software System Reset Occurred
6
******************************
7
flash_protect ON: from 0xBF000000 to 0xBF01E757
8
flash_protect ON: from 0xBF030000 to 0xBF030FFF
9
============================================ 
10
Ralink UBoot Version: 3.5.0.0
11
-------------------------------------------- 
12
ASIC 3052_MP2 (Port5<->None)
13
DRAM component: 256 Mbits SDR
14
DRAM bus: 16 bit
15
Total memory: 32 MBytes
16
Flash component: NOR Flash
17
Date:Feb 20 2012  Time:16:20:22
18
============================================ 
19
icache: sets:256, ways:4, linesz:32 ,total:32768
20
dcache: sets:128, ways:4, linesz:32 ,total:16384 
21
22
 ##### The CPU freq = 320 MHZ #### 
23
 estimate memory size =32 Mbytes
24
25
Please choose the operation: 
26
   1: Load system code to SDRAM via TFTP. 
27
   2: Load system code then write to Flash via TFTP. 
28
   3: Boot system code via Flash (default).
29
   4: Entr boot command line interface.
30
   7: Load Boot Loader code then write to Flash via Serial. 
31
   9: Load Boot Loader code then write to Flash via TFTP. 
32
33
You choosed 1
34
35
 0 
36
37
   
38
1: System Load Linux to SDRAM via TFTP. 
39
 Please Input new ones /or Ctrl-C to discard
40
  Input device IP (192.168.1.1) ==:192.168.1.1
41
  Input server IP (192.168.1.171) ==:192.168.1.2
42
  Input Linux Kernel filename (test.bin) ==:test.bin

Mit dem SPI usw, wird es etwas schwerer, das muss man erstmal wissen 
welche Hardware dz da hast.

Achja die Doku geht ;-)

von Hans Ulli K. (Gast)


Lesenswert?

Das mit dem
1
git checkout -b spi
ist nur für den Fall wenn du den Code ändern willst. Da bei einem
1
git pull
ggf. dein eigener Code verloren geht, bzw. du weisst nicht mehr was du 
selber gemacht hast.

von Dunkel (Gast)


Lesenswert?


von Mountain (Gast)


Lesenswert?

Davis schrieb:

> Zum Carambola-Board gibt es nur einen Tipp: auf Ebay damit!
>
> Die Unterstützung des Herstellers ist grauenhaft. Grauenhafter sind nur
> noch das Wiki zum Board und das Englisch der "8devies"-Leute.

Ich behaupte das Gegenteil: Ich habe bisher prompt eine Antwort
bekommen. Zudem reagieren sie auf positive Kritik umgehend. Ich kann
das Carambola-Board guten Gewissens empfehlen. Man muss aber bereit
sein, etwas Zeit zu investieren - 8devices OpenWRT Umgebung installieren
und kompilieren.

Mal im Ernst: Was erwartest Du für 22 Euro ?

von Andreas G. (andreasgs)


Lesenswert?

Mountain schrieb:

> Mal im Ernst: Was erwartest Du für 22 Euro ?

Nicht viel, deshalb schreibe ich ja hier. Ich würde mich selber als 
durchaus leidensfähigen Bastler bezeichnen, der es aber leid ist, noch 5 
Stunden in ein eigendlich triviales Problem zu investieren.

Mein Englisch ist jetzt nicht der Hit, aber ich hab immer das Bekommen, 
was ich wollte. Besser kein perfektes Oxford Englisch als russisch...

Dunkel schrieb:
> Hier nutzt jemand SPI:
> http://lnxpps.de/can2udpe/smallest-rocrail-server-ever/

Mit dem Verfasser des Textes bin ich jetzt in Emailkorrespondenz.

von Davis (Gast)


Lesenswert?

Mountain schrieb:

> Man muss aber bereit sein, etwas Zeit zu investieren - 8devices OpenWRT
> Umgebung installieren und kompilieren.

Du bist der ideale Elektronikkonsument. Lässt dir einfach ein Produkt 
andrehen, dass mit Leichtigkeit bereits ab Werk SPI-Unterstützung 
und/oder andere Module haben sollte. Respekt.

von Mountain (Gast)


Lesenswert?

Davis schrieb:
> Mountain schrieb:
>
>> Man muss aber bereit sein, etwas Zeit zu investieren - 8devices OpenWRT
>> Umgebung installieren und kompilieren.
>
> Du bist der ideale Elektronikkonsument. Lässt dir einfach ein Produkt
> andrehen, dass mit Leichtigkeit bereits ab Werk SPI-Unterstützung
> und/oder andere Module haben sollte. Respekt.

Bleiben wir mal bei den Fakten:
Das SPI Modul funktioniert - es stammt übrigens von den OpenWRT 
Entwicklern:
1
/*
2
 * ramips_spi.c -- Ralink RT288x/RT305x SPI controller driver
3
 *
4
 * Copyright (C) 2011 Sergiy <piratfm@gmail.com>
5
 * Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org>
6
 *

Man muss nur Wissen, das der Chip nur SPI-Halfduplex kann:
http://www.tracermcc.ru/foto/bender/RT3050_5x_V2.0_081408_0902.pdf
Seite 68 -> STARTWR und STARRD

Halfduplex ist kein Problem.

Leider wurde im Linux Kernel IMHO keine saubere Unterstützung von
SPI-Halfduplex eingebaut bzw. Treiber gehen blind davon aus das SPI
immer Fullduplex macht. Besser wäre die Verwendung von
spi_write_then_read anstatt spi_write - aber das ist eher selten.

von uwe (Gast)


Lesenswert?

Ich nutze zur Hardware-Erweiterung i2c. Die Ansteuerung erfolgt über 
PHP. Nach sehr viel Einarbeitungszeit bin ich mit Carambola sehr 
zufrieden.

Die Einarbeitungszeit in ein Atmel-Board war bei mir auch nicht 
geringer.

von Sven B. (scummos)


Lesenswert?

Hans Ulli Kroll schrieb:
> Da bei einem
>
1
> git pull
2
>
> ggf. dein eigener Code verloren geht, bzw. du weisst nicht mehr was du
> selber gemacht hast.

was? Nein. git macht gar kein pull, wenn du "unstaged changes" hast 
(kommt 'ne Fehlermeldung).
Was du selber gemacht hast, kannst auch jederzeit nachsehen, mit "git 
diff".

Ein eigener Branch ist aber sicher trotzdem sinnvoll. ;)

</ot>

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.