Projekte

Heute zeige ich mal wie man die Toolchain für den Omega unter Ubuntu baut.

Zuerst holen wir uns das Lede Projekt von Github. Ich installiere für diesen Beitrag einfach mal unter /tmp, weil ich die Toolchain für mich schon gebaut habe.

chrimbo@helios:/tmp$ git clone https://github.com/WereCatf/source.git omega

 Nun gehen wir in das so eben geclonte Projekt und führen das first_time_setup Script aus.

chrimbo@helios:/tmp$ cd omega
chrimbo@helios:/tmp/omega$ ./first_time_setup.sh

 ledeconfig
Am Ende kommt automatisch das Menuconfig und wir müssen ein paar Grundeinstellungen für den Omega2 vornehmen. Mithilfe der Pfeiltasten und Enter kann navigiert werden. Im Bild sind die zu wählenden Einstellungen aufgeführt. Im Anschluss kann die Konfiguration beendet werden, dazu mit Hilfe der Pfeiltasten zum Exit navigieren und das Programm mit einem Druck auf Enter verlassen.

 

  • Target System MediaTek Ralink MIPS
  • Subtarget MT7688 based boards
  • Target Profile Onion Omega2

Nun kann die Toolchain mit folgendem Kommando gebaut werden.

chrimbo@helios:/tmp/omega$ make -j9 toolchain/install

 Sie ist danach im Verzeichnis staging_dir/toolchain-mipsel_24kc_gcc-5.4.0_musl/bin zu finden.

chrimbo@helios:/tmp/omega$ cd staging_dir/toolchain-mipsel_24kc_gcc-5.4.0_musl/bin/

 Ein Aufruf des GCC mit dem version Flag zeigt die korrekte Version an.

chrimbo@helios:/tmp/omega/staging_dir/toolchain-mipsel_24kc_gcc-5.4.0_musl/bin$ ./mipsel-openwrt-linux-gcc --version
mipsel-openwrt-linux-gcc (LEDE GCC 5.4.0 r3660+39-5087b40) 5.4.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

 Test des Compilers

Also schnell ein kleines Hallo Welt tippen

  1. #include <stdio.h>
  2.  
  3. int main(int argc, char **argv)
  4. {
  5. printf("Hallo Welt");
  6. return 0;
  7. }

und durch den Compiler jagen

chrimbo@helios:/tmp$ omega/staging_dir/toolchain-mipsel_24kc_gcc-5.4.0_musl/bin/mipsel-openwrt-linux-gcc -o main.o main.c
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
mipsel-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
chrimbo@helios:/tmp$ ls
main.c main.o omega

Die main.o auf wie auch immer geartete Weise auf den Omega2 bringen. Ich nehme dafür einen USB-Stick aber über scp sollte es genauso gut gehen. Auf den Omega2 einloggen und das Programm ausführen

root@Omega-A067:/mnt# ./main.o
Hallo Welt

 

FT232RL wird nicht erkannt

Und noch ein Problem… Diesmal wurde der FT232RL nicht erkannt. Das Problem ließ sich aber recht schnell lokalisieren. Ich hatte vergessen den Test Pin auf GND zu legen. Der Pin ist wohl für den Hersteller gedacht, jedenfalls ist die Funktion im Datenblatt nicht beschrieben, bloß dass er für ordnungsgemäße Funktion auf GND gelegt werden muss.

Puts the device into IC test mode. Must be tied to GND for normal operation, otherwise the device will appear to fail.

 Zu meinem Glück hat der Hersteller daran gedacht den Pin daneben mit GND zu belegen, sodass es reicht eine kleine Lötbrücke zwischen Pin 25 und Pin 26 zu setzen. Und schon meldet sich der FT232RL am PC als USB-to-Uart Wandler.

12MHz auf CBUS0

ftdi cbusDamit der Audio Codec mit einem Takt versorgt wird muss nun noch die Leitung CBUS0 umkonfiguriert werden. Standardmäßig kann man dort eine LED zur Signalisierung das gesendet wird anschließen. Für den Wecker brauchen wir aber den 12MHz Takt der wie im Bild eingestellt wird. Gleichzeitig kann auch noch die Speisungskonfiguration auf Selfpowered gestellt werden, da der FTDI ja über das 5V Netzteil versorgt wird und nicht über den Bus (kein Bild). Im Anschluss wird das ganze noch gespeichert, dazu drückt man auf den kleinen Blitz in der Toolbar.

Nun sollte auf dem CBUS0 Pin ein 12MHz Takt verfügbar sein, welcher den SGTL5000 versorgt. Ab sofort kann dieser über den I²C Bus des Omega Onion2 angesprochen werden. Dazu ein kleiner Test. Per Putty auf das Omega einloggen und Register 0 des SGTL5000 abfragen:

BusyBox v1.25.1 () built-in shell (ash)

   ____       _             ____
  / __ \___  (_)__  ___    / __ \__ _  ___ ___ ____ _
 / /_/ / _ \/ / _ \/ _ \  / /_/ /  ' \/ -_) _ `/ _ `/
 \____/_//_/_/\___/_//_/  \____/_/_/_/\__/\_, /\_,_/
 W H A T  W I L L  Y O U  I N V E N T ? /___/
 -----------------------------------------------------
   Ω-ware: 0.1.9 b149
 -----------------------------------------------------
root@Wecker:/# i2cset -y 0 0x0a 0 0
root@Wecker:/# i2cget -y 0 0x0a 0 w
0x11a0
root@Wecker:/#

0x11a0 ist der Inhalt von Register 0. a0 ist die Part ID, die 11 ist die Revisions ID

Keine Enumeration

TUSB2036KorrekturManchmal ist es vorgekommen, dass der USB Hub nicht erkannt wurde. Ich vermute das liegt daran, dass der Reset des TUSB2036 schneller fertig ist, als das USB System auf dem Omega2 bereit ist und deswegen keine Enumeration erfolgt. Wenn man den am Reset vorgesehenen Kondensator (C37) von 10nF durch 47nF tauscht, wird der Hub immer erkannt.  Also kurz den Lötkolben angeschmissen und ab geht die Lucy.

Die Änderung ist im Beitrag BOM schon angepasst.

USB: rejected 1 configuration due to insufficient available bus power

Noch so ein peinlicher Fehler. Der USB-Hub ist durch seine Außenbeschaltung als Bus-Powered gekennzeichnet. Ich habe nicht herausgefunden wie ich ihm beibringen kann wie hoch der maximale Strom sein darf und so meldet der Kernel beim einstecken eines USB-Sticks: USB: rejected 1 configuration due to insufficient available bus power. Das kann man umgehen mit einem Kommando:

echo 1 > /sys/bus/usb/devices/1-1.4/bConfigurationValue

wobei 1-1.4 auf den jeweiligen Port zu ändern ist. Bloß muss dieses Kommando bei jedem einstecken eines Gerätes durchgeführt werden, was natürlich den Komfort kaputt macht wenn man einen USB-Stick einsteckt um die darauf befindliche Musik zu hören. Wenn allerdings der Pin 8 BUSPWR auf 3.3V statt auf GND gesetzt wird wechselt die Konfiguration in den Self-Powered Modus. Diese Änderung ist leider nur durch hochbiegen des Beinchens und anlöten eines kleinen Kupferlackdrähtchens möglich.

Der Hub ist nur ein 2-Port Hub

Als nächtes fiel mir auf, dass sich der Hub nur als 2-Port meldet. Auch dies ist über die Pinkonfiguration änderbar. Dafür verantwortlich ist der Pin 24 NP3, der auf GND statt auf  3.3V gezogen werden muss. Auch hier muss der Pin wieder hochgebogen werden, allerdings ist direkt daneben an Pin 23 schon GND verfügbar, dass kein Drähtchen angelötet werden muss, sondern der Pin einfach zur Seite gebogen und ein Kurzschluss mit Pin 23 gelötet werden muss.

Platine vorne5V
Nach einer Teilbestückung folgte der erste Funktionstest. Dabei fiel mir auf, dass das Netzteil die 3.3V hervorragend erzeugt, die 5V allerdings bei 0V bleiben. Als erstes habe ich versucht die Pins des Netzteils nachzulöten, aber das bracht keine Besserung. Also habe ich im ausgeschalteten Zustand den Widerstand zwischen 5V und GND gemessen. Das Multimeter zeigte einen sauberen Kurzschluss an. Dann habe ich sukzessive das 5V-Netz mithilfe eines Cutter-Messers aufgetrennt. Der Kurzschluss war nun nur noch in der oberen linken Ecke zu finden. Es zeigte sich kurze Zeit später, dass der GND Pin der USB2-Buchse (ganz links) eine Verbindung zur 5V Fläche hatte. Dies war mir wohl beim Verschieben der Buchs nach oben entgangen. So entstand ein Kurzschluss durch die Durchkontaktierung.

Kurzschluss 5VDen Kurzschluss konnte ich dann wunderbar mittels Minibohrer (z.B. von Dremel) und dem passenden Schleifkörper entfernen. Dazu einfach links und rechts von der Bohrung das Kupfer entfernen.

Die Fehlersuche habe ich auf einer zweiten Platine durchgeführt, so dass ich auf der Platine für den Funktionstest nun auch nur diese beiden Verbindungen entfernen musste. Beim erneuten Anstecken des Netzteils wurden die 5V schließlich korrekt erzeugt und die Inbetriebnahme konnte weitergehen.

Nach dem ich den Schaltplan gezeichnet hatte konnte die Platine geroutet werden.

Unterkategorien

Galvanisch getrennter USB-Hub im Selbstbau

Gerade beim Basteln kann es vorkommen, dass unerwartet Kurzschlüsse oder gar Überspannung bei der Bastelei auftreten. Wenn diese dabei auch noch am PC hängt, sei es zur Programmierung oder zu Debugzwecken, dann kann diese Störung auch auf den PC übertragen werden und ihn schlimmstenfalls zerstören. Um dies zu vermeiden ist es sinnvoll die Potenziale von PC und der Schaltung zu trennen. Diesen Vorgang nennt man galvanische Trennung oder Isolation. Der hier vorgestellte Hub erfüllt diese Funktion. Der Hub unterstützt den USB Fullspeed modus was für die üblichen Basteleien absolut ausreichend ist. Bisher sind mir auch keine Trennverstärker für USB untergekommen, die eine schnellere Übertragung ermöglichen.

Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung unserer Dienste erklären Sie sich damit einverstanden, dass wir Cookies verwenden.
Weitere Informationen Ok Ablehnen