Sonntag, 2. März 2014

Total Recompile - MMBasic neu bauen

Nachdem auch von Carsten Meyer kein baldiges update (u.a. wegen der touch-Geschichte) zu erwarten ist habe ich mich entschlossen die Firmware mit allen nötigen und nützlichen Änderung selbst zu bauen sprich: total recompile

Das hört sich viel komplizierter an, als es ist. Hat man erst einmal die nötigen Tools installiert ist das Erzeugen einer hex-Datei sehr einfach. Auch das Hochladen der Datei ist unproblematisch.

Vorarbeiten

Eine der Grundvoraussetzungen, den MMBasic-Quelltext, hatte ich bereits. Alles was noch dazu fehlte war ein compiler und eine Möglichkeit die FW auf den TFT Maximite zu bekommen.

Leider gibt es den compiler nicht einzeln, man muss sich das komplette MPLAB-IDE herunter laden. Der Empfehlung aus dem c't Hardware Hacks Artikel folgend habe ich mir die Version 8.9 aus dem Archiv von microchip besorgt. Das Archiv findet man entweder über die Suchmaschine seines Vertrauens oder hier:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2115
Die letzte Version der 8.9er IDE ist die 8.92:
http://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB_IDE_8_92.zip
Bevor man sich das aber installiert sollte man sich über folgende Dinge klar sein:
  1. Die Installation braucht 1,2 GB Plattenplatz!!!
  2. Das IDE verewigt sich an allen möglichen Orten im Betriebssystem und ist nur äußerst schwer wieder vollständig zu entfernen.
Eine Linux-Version gibt es nicht. Allerdings habe ich das MPLAB-IDE mit wine (Version 1.6.2-7 unter Debian jessie) zum Laufen bekommen. So ganz reibungslos ist die Installation aber trotzdem nicht verlaufen, wobei der Fehler meiner Meinung nach nicht bei wine liegt.

Es brauchte 6 Anläufe bis endlich ein komplettes MPLAB installiert war. Zwischendurch gab es immer wieder Abbrüche und kryptische Fehlermeldung. Letztendlich habe ich alles komplett deinstalliert und eine neue "custom installation" durchgeführt. Dabei habe ich bemerkt, dass MPLAB sich selbst nicht rückstandsfrei entfernt, und dass selbst bei manueller Nacharbeit das Setup mir immer noch die exakte Liste der vorher gewählten Komponenten präsentiert. Man sollte sich also gut überlegen ob und wohin man das installiert, schon allein wegen des enormen Platzbedarfs. Wine oder eine virtuelle Maschinen bieten sich hier an, da man beides sehr einfach wieder rückstandsfrei entfernen kann.

Welche Komponenten man braucht hängt davon ab wie man letztendlich das fertige Kompilat übertragen will / kann. Wenn man so wie ich den bereits installierten Bootloader nutzen kann genügt folgende Auswahl:

Wichtig sind die Häkchen bei "32-bit MCU", "MPLAB C32 Suite" und "MPLAB Sim". Wenn ich "AN851 Bootloader" und "MPLAB ICD 3" weg gelassen habe gab es bei der Installation kryptische Fehlermeldungen.

Als nächstes muss man den MMBasic Quellcode in ein geeignetes Verzeichnis kopieren. Der Einfachheit halber habe ich alles direkt auf C: unter C:\MMBasicSource kopiert.

Dann wird es interessant. Man startet MPLAB und lädt das Projekt TFT_Maximite.mcp (zu finden unter MMBasicSource\Maximite\MPLAB\). Nachdem man sich vergewissert hat, dass unter "Configure" --> "Select Device" der richtige Prozessor (PIC32MX695F512L) eingestellt und unter "Project" --> "Build Configuration" --> "Release" ausgewählt ist kann man mit "Project" --> "Build All" den Kompiliervorgang starten.

Wenn alles erfolgreich durchgelaufen ist (dauert je nach Computer Sekunden bis Minuten) findet man unter MMBasicSource\Maximite\Output u.a. die Datei "TFT_Maximite.hex". Diese Datei ist nicht identisch mit "TFT_Maximite_44b1.hex" vom github sondern dürfte in etwa dem entsprechen, mit dem der TFT Maximite ausgeliefert wurde.

Um letzte Pannen auszuschließen kann man die frisch erzeugte hex-Datei auf den TFT Maximite laden (s.u.) und versuchen ob er damit läuft. Nicht erschrecken, das Tastaturlayout ist dann erst mal wieder auf "us" eingestellt. Sollte der Maxi nicht starten kann man trotzdem noch die letzte Version vom github "TFT_Maximite_44b1.hex") hochladen, dann läuft wieder alles.

Angeblich ist es unmöglich den TFT Maximite unter Verwendung des bootloader zu bricken (die SW so zu zerschießen, dass man gar nichts mehr mit dem Teil anfangen kann).

Quelltext anpassen und neu kompilieren

Ist man in der Lage funktionierende hex-Dateien zu erzeugen kann man sich daran machen den Quellcode anzupassen.

Touch.c und Touch.h

Carsten Meyer hat auf github eine aktuellere Version der touch-Funktionen abgelegt. Wenn man diese verwenden möchte muss man beide Dateien nach MMBasicSource/Maximite/MMSource kopieren. Da diese aber nicht mehr 100% mit den alten Funktionen kompatibel sind muss man im gleichen Verzeichnis aus noch die Datei "External.c" anpassen. Es ist eine Funktion umbenannt worden, d.h. man muss "item_init" durch "item_active" erstzen.

IOPorts - TFT_Maximite.h

Um die Anschlüsse PL7 und PL9 nutzen zu können muss man diese Datei (zu finden unter MMBasicSource/Maximite/MMSource/IOPorts) anpassen.

Als erstes sollte man im Kopf den Dateinamen ändern:

Das ist zwar nicht zwingend notwendig schadet aber in keinem Fall.

Dann muss weiter unten eine Zeile eingefügt werden:

Macht man das nicht kann man später Pin5 und Pin6 nicht verwenden.

Um mehr als 20 I/O-Pins verwenden zu können muss die entsprechende Variable geändert werden:

Grundsätzlich könnte man bis zu 40 Pins verwenden. Da die analogen Pins auf dem TFT Maximite aber überhaupt nicht verwendet werden kann man sich die letzten 6 Pins sparen.

Jetzt muss man nur noch die Pins selbst definieren:

Diese Zeilen kann man aus IOPorts – ColourMM.h kopieren. Damit ist auch festgelegt, wie man die entsprechenden Pins verwenden kann.

Hat mal alle Änderungen gespeichert kann man mit "Project" --> "Make" (oder wer auf Nummer sicher gehen will mit "Build All" eine hex-Datei erzeugen.

hochladen und testen

Wie man auf einen TFT Maximite eine neue Firmware lädt findet man auf der Seite des Color Maximite:
http://geoffg.net/maximite.html

Unter der Überschift "MMBasic Updates" gibt es ein zip-file mit der aktuellst Firmware. Darin enthalten ist ein pdf (Loading New Firmware.pdf) welches die Prozedur beschreibt und eine BootLoader.exe für Windows.

Für Linux und Macintosh gibt es zum Glück das Programm MPHidFlash welches auch in der Prozedur beschrieben wird. Das Programm kann hier herunter geladen werden:
http://code.google.com/p/mphidflash/

Der einzige Schwachpunkt ist die Abhängigkeit von der Bibliothek libhid, welche in aktuellen Distributionen nicht mehr enthalten ist. Für debian können die erforderlichen Pakete aber auf archive.debian.org herunter geladen werden:
http://archive.debian.org/debian/pool/main/libh/libhid/libhid0_0.2.15+20060325-2.2_i386.deb
Wer das Programm selbst kompilieren will benötigt noch das zugehörige dev-Paket
http://archive.debian.org/debian/pool/main/libh/libhid/libhid-dev_0.2.15+20060325-2.2_i386.deb

Unter Linux funktioniert der Firmware Upload folgendermaßen:
  • TFT Maximite einschalten solange JP1 (BOOTLOADER) gebrückt ist, das Display blinkt dann hell dunkel.
  • TFT Maximite an den PC anschließen, lsusb sollte folgendes Gerät anzeigen:
    Bus xxx Device xxx: ID 04d8:fa8d Microchip Technology, Inc.
    Befindet sich der TFT Maximite nicht im Bootloader Modus erscheint eine andere product ID:
    Bus xxx Device xxx: ID 04d8:fd52 Microchip Technology, Inc.
  • Die Übertragung der hex-datei mit folgendem Befehl starten:
    ./mphidflash -v 04d8 -p fa8d -n -w TFT_Maximite.hex
    Während der Übertragung bleibt der Bildschirm dunkel und fängt erst nach der Übertragung wieder an zu blinken.

Wenn die Fehlermeldung "Error: Device not found (is device attached and in Bootloader mode?)" erscheint, der TFT Maximite aber im Bootloader Modus ist und von lsusb angezeigt wird kann MPHidFlash nicht auf den USB-Anschluss zugreifen, dann muss das Programm mit root-Rechten ausgeführt werden:
sudo ./mphidflash -v 04d8 -p fa8d -n -w TFT_Maximite.hex

Wer dem Programm oder dem ganzen Upload-Prozess misstraut kann auch zuerst versuchen die letzte Version vom github ("TFT_Maximite_44b1.hex") hoch zu laden bevor er sich an die selbst erstellte TFT_Maximite.hex wagt.

Nach Upload und erfolgreichem Neustart steht der TFT Maximite erst mal wieder auf us-Tastaturlayout. Außerdem muss evtl. das Display-Poti nachgestellt werden und eine touch-Kalibrierung durchgeführt werden.

Keine Kommentare:

Kommentar veröffentlichen