XMega_FATboot mit LCD für Flashstatus

  • 1
  • 2
  • 3
  • 4
  • Page 2 of 4
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: XMega_FATboot mit LCD für Flashstatus

 · 
Posted: 29.06.2018 - 19:15  ·  #9
Quote by miparo

In der Profi Doku steht extra:
3.23.1 Bootloader Programm
Allerdings muss das DLD File(s) sich in den ersten 2GB befinden.

Der FAT Treiber darin ist halt nur minimalistisch aus Platzgründen.

miparo

Na zum Glück habe ich nur 2GB SD-Karten im Einsatz :-D
Wie macht man es aber dann, wenn die SD-Karten größer sind...hmmm

Ich sende ja dann die Datei per USB an meine Steuerung, diese schreibt die Firmware auf die SD-Karte, prüft die Checksumme und wenn diese OK ist, wird ein Reset auf den Bootloader ausgeführt.
Aber wie kann ich bei großen SD-Karten sicher sein, das die Firmware immer auf den 2GB Bereich liegt?

Wegen den CharSet(), müsste doch so in der Richtung gehen oder? Ich habe das im AVRco noch nie gemacht:
Code

{--------------------------------------------------------------}
{ Type Declarations }
type
  tgChar         = array[1..7] of byte; //Zeichen Größe
  tgChars        = record
                  x : byte; // X Punkte
                  y : byte; // y Punkte
                  gChar : array[0..127] of tgChar;  // eigentlicher Zeichensatz 128 x tgChar
                end; // End Record  
  
{--------------------------------------------------------------}
const
  gChar        : tgChars   = 'PVSGraphchars.pchr';


Das Array auf einen eigenen Typ lässt AVRco im RECORD ja leider nicht zu, also müsste ich da mit Mehrdimensionalen Arrays arbeiten, ist zwar ungetestet... sollte dann wohl so gehen:
Code

{--------------------------------------------------------------}
{ Type Declarations }
type
  tgChars        = record
                  x : byte; // X Punkte
                  y : byte; // y Punkte
                  gChar : array[0..127, 1..7] of byte;  // eigentlicher Zeichensatz
                end; // End Record  
  
{--------------------------------------------------------------}
const
  gChar        : tgChars   = 'PVSGraphchars.pchr';


Thorsten
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 58
Posts: 959
Registered: 09 / 2007
Subject:

Re: XMega_FATboot mit LCD für Flashstatus

 · 
Posted: 29.06.2018 - 21:23  ·  #10
Ein FW Update stöpselt man eigentlich nur 1x an - Update und Medium wieder raus.
Wobei es bei einer 2GB Disk immer funktionieren sollte.

In deinen Fall könnte man das Update auch auf einen FRAM speichern, das spart und du hast Platz für deine Grafik im Boot.

oder oder :)
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: XMega_FATboot mit LCD für Flashstatus

 · 
Posted: 01.07.2018 - 15:24  ·  #11
Quote by miparo

In deinen Fall könnte man das Update auch auf einen FRAM speichern, das spart und du hast Platz für deine Grafik im Boot.


Der Grund für die SD-Card ist recht einfach, dort befinden sich alle Logfiles, die aktuelle Firmware, die Einstellungen sowie Seiten und Grafiken der Webseite des Controllers.

Angenommen das Gerät ist defekt, braucht das Servicepersonal nur die SD-Card in die neue Steuerung einstecken und das System zieht sich alle Einstellungen von der SD-Card und fertig :-D

@rolf;
@miparo;
Ich habe beim Fehlersuchen im Bootbereich 2 - 3 Probleme:
1. PDI-ICE klappt nicht im Bootloader, im Hauptprogramm funktioniert es? Gibt es da einen Grund?
2. SerPortD0 funktioniert im BOOTLOADER nicht, ich wollte eine kleine Debugausgabe machen mit "Writeln(SerOutD0,OutStr);" Dabei friert der Controller ein und nichts geht mehr. Habt ihr evtl. irgendwo selbst diese SerPortD0 Ausgabe für euren Test genutzt und diese blockiert das ganze evtl.?
3. Ich beise mir im Moment etwas die Zähne aus:
Code

type
// GCHARS
  tLoadChars        = array[129] of byte;  // eigentlicher Zeichensatz
...
const
  gLoadChars        : tLoadChars   = 'PVSGraphchars.pchr';
...
var
// LCD VARs
   HxDispData    [@PORTE, 2 ] : bit;
   bContrast_level : byte;
   DispMem         : Array[2048] of byte; // Speicher für ViewPort Screen


Ich möchte Die Daten im DispMem vorbereiten und mit einen Refresh das ganze zum Display senden. Im Simulator (im ICE kann ich es nicht prüfen siehe Punkt 1) Sieht der gLoadChars Array richtig und komplett aus. Aber sobald ich dann einen Buchstaben in den DispMem-Speicher kopieren möchte, funktioniert es leider nicht :-( Geht das im Bootloadbereich nicht?

Wenn ich nicht aus dem geladenen Zeichensatz kopiere geht es...
Code
// Per Hand zum testen, das funktioniert
 DispMem[xiDispFor+$00] :=$3E;
 xiDispFor:=xiDispFor+32;
 DispMem[xiDispFor] :=$22;
 xiDispFor:=xiDispFor+32;
 DispMem[xiDispFor] :=$22;
 xiDispFor:=xiDispFor+32;
 DispMem[xiDispFor] :=$22;
 xiDispFor:=xiDispFor+32;
 DispMem[xiDispFor] :=$22;
 xiDispFor:=xiDispFor+32;
 DispMem[xiDispFor] :=$3E;
  xiDispFor:=xiDispFor+32;
   xiDispFor:=xiDispFor+32;


Sobald ich aus dem Zeichensatz kopiere erhalte ich nur Schrott...
Code
// Per Hand zum Test
// Aus dem geladenen Zeichensatz,
// sollte "1" sein, das geht nicht
 DispMem[xiDispFor] :=gLoadChars[9];
  xiDispFor:=xiDispFor+32;
 DispMem[xiDispFor] :=gLoadChars[10];
  xiDispFor:=xiDispFor+32;
 DispMem[xiDispFor] :=gLoadChars[11];
  xiDispFor:=xiDispFor+32;
 DispMem[xiDispFor] :=gLoadChars[12];
  xiDispFor:=xiDispFor+32;
 DispMem[xiDispFor] :=gLoadChars[13];
  xiDispFor:=xiDispFor+32;
 DispMem[xiDispFor] :=gLoadChars[14];
  xiDispFor:=xiDispFor+32;
 DispMem[xiDispFor] :=gLoadChars[15];
  xiDispFor:=xiDispFor+32;


Gibt es da Begrenzungen im Bootloader?
Im Anhang das Testprogramm

Thorsten
Attachments
Filename: BOOTSD_Test.zip
Filesize: 5.24 KB
Title: DemoCode Boot SD
Information: DemoCode Boot SD
Download counter: 32
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: XMega_FATboot mit LCD für Flashstatus

 · 
Posted: 01.07.2018 - 17:19  ·  #12
Hallo Thorsten
ja. Im Boot sind einige Dinge nicht möglich bzw nicht implementiert.
Hier ist das Boot vollkommen überladen und überlastet.Es muss hier eigentlich eine komplette Applikation übernehmen
Aber dafür ist es nicht gedacht.
LCD Grafik? Fat32? SerPort evtl noch USB?
Ich meine die Strategie ist falsch.
Boot mit FAT nur für Firmware update.
Log Daten und Files nur in der App.
Damit wären 2 SD Karten nötig.
Meine Meinung
rolf
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: XMega_FATboot mit LCD für Flashstatus

 · 
Posted: 01.07.2018 - 18:31  ·  #13
Quote by rh

Hallo Thorsten
ja. Im Boot sind einige Dinge nicht möglich bzw nicht implementiert.
Hier ist das Boot vollkommen überladen und überlastet.Es muss hier eigentlich eine komplette Applikation übernehmen
Aber dafür ist es nicht gedacht.
LCD Grafik? Fat32? SerPort evtl noch USB?
Ich meine die Strategie ist falsch.
Boot mit FAT nur für Firmware update.
Log Daten und Files nur in der App.
Damit wären 2 SD Karten nötig.
Meine Meinung
rolf


Hallo rolf,

im Prinzip geht es mir nur darum.
Ich möchte beim Boot die Firmware vom Flash übernehmen und ein paar Infos auf dem Display ausgeben, fertig. Kein USB und keine LCD-Grafikfunktionen von AVRco.

Die Ser Ausgabe wollte ich nur, weil ich aus irgendeinen Grund den Charset nicht in den Speicherübernehmen kann, ich wollte mal ein paar Daten als Debugausgabe auf die Ser Ausgeben. Schreibe ich es direkt in den DispMem Speicher geht es ja ?!?!

Warum geht der PDI-ICE im BOOT nicht?

Und warum kann ich aus dem Const / Array die Bytes nicht korrekt in den DispMem übernehmen?
Das ist doch einfach nur ein Byte-Schieben und fertig.

Logbuchfunktionen sind nur im Hauptprogramm enthalten, Deine LCD-Grafik nutze ich im BOOT nicht, es geht mir hier nur um die Anzeige einiger Zustände beim Flash. Nicht mehr und nicht weniger. Also ein paar Textausgaben auf dem Display, mein Display unterstützt leider keinen eigenen Textmode, da geht nur der Weg über den CharSet.

Das muss doch möglich sein von der CONST auf ein VAR die Bytes zu kopieren!
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 58
Posts: 959
Registered: 09 / 2007
Subject:

Re: XMega_FATboot mit LCD für Flashstatus

 · 
Posted: 01.07.2018 - 20:28  ·  #14
nach sicher funzt das ICE im Boot

und Const nach var , da fehlt bestimmt ein FlashPtr davor
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: XMega_FATboot mit LCD für Flashstatus

 · 
Posted: 02.07.2018 - 13:55  ·  #15
Quote by miparo

nach sicher funzt das ICE im Boot ...


Dann mache ich was falsch, Hardware defekt oder Designfehler schließe ich mal aus, da das ICE in der Hauptapplikation funktioniert. Siehe Bilder, so geht es bei 2 verschiedenen Rechnern, verschiedenen ISP3-USB und xISB3-USB. Bei beiden im BOOT das selbe Problem.

Quote by miparo

...und Const nach var , da fehlt bestimmt ein FlashPtr davor

Hmm, habe ich schon alles probiert (siehe Bild mit Display, scheinbar erhalte ich immer $FF.

Letzter Versuch war nun so:
Code

type
// gCHARS
  tLoadChars        = array[129] of byte;  // eigentlicher Zeichensatz
...
const
  gLoadChars        : tLoadChars   = 'PVSGraphchars.pchr';
...
var
   DispMem         : Array[2048] of byte; // Speicher für Screen
   ptrLoadChars    : Pointer to tLoadChars;
   vLoadChars : tLoadChars;
...
//-------------------------------------------------------------
// DispChar
procedure DispChar;
var
 xDispFor  : word; // Zeile
 xiDispFor : word; // Spalte
 xiii      : word; // Adresse GraphColArr

begin

// Per Hand zum testen, das funktioniert Viereck
 DispMem[xiDispFor+$00] :=$3E;
 xiDispFor:=xiDispFor+32; // Neue Zeile im Display
 DispMem[xiDispFor] :=$22;
 xiDispFor:=xiDispFor+32; // Neue Zeile im Display
 DispMem[xiDispFor] :=$22;
 xiDispFor:=xiDispFor+32; // Neue Zeile im Display
 DispMem[xiDispFor] :=$22;
 xiDispFor:=xiDispFor+32; // Neue Zeile im Display
 DispMem[xiDispFor] :=$22;
 xiDispFor:=xiDispFor+32; // Neue Zeile im Display
 DispMem[xiDispFor] :=$3E;
  xiDispFor:=xiDispFor+32; // Neue Zeile im Display
   xiDispFor:=xiDispFor+32;  // Neue Zeile im Display

// Aus dem geladenen Zeichensatz,
// sollte "1" sein, das geht nicht
//Das hatte auch keine Lösung gebracht.
{
ptrLoadChars := @gLoadChars;
 DispMem[xiDispFor] :=FlashPtr (ptrLoadChars)^[9];
  xiDispFor:=xiDispFor+32;
 DispMem[xiDispFor] :=FlashPtr (ptrLoadChars)^[10];
  xiDispFor:=xiDispFor+32;
 DispMem[xiDispFor] :=FlashPtr (ptrLoadChars)^[11];
  xiDispFor:=xiDispFor+32;
 DispMem[xiDispFor] :=FlashPtr (ptrLoadChars)^[12];
  xiDispFor:=xiDispFor+32;
 DispMem[xiDispFor] :=FlashPtr (ptrLoadChars)^[13];
  xiDispFor:=xiDispFor+32;
 DispMem[xiDispFor] :=FlashPtr (ptrLoadChars)^[14];
  xiDispFor:=xiDispFor+32;
 DispMem[xiDispFor] :=FlashPtr (ptrLoadChars)^[15];
  xiDispFor:=xiDispFor+32;
  xiDispFor:=xiDispFor+32;
}

 DispMem[xiDispFor] :=vLoadChars[9];
  xiDispFor:=xiDispFor+32; // Neue Zeile im Display
 DispMem[xiDispFor] :=vLoadChars[10];
  xiDispFor:=xiDispFor+32; // Neue Zeile im Display
 DispMem[xiDispFor] :=vLoadChars[11];
  xiDispFor:=xiDispFor+32; // Neue Zeile im Display
 DispMem[xiDispFor] :=vLoadChars[12];
  xiDispFor:=xiDispFor+32; // Neue Zeile im Display
 DispMem[xiDispFor] :=vLoadChars[13];
  xiDispFor:=xiDispFor+32; // Neue Zeile im Display
 DispMem[xiDispFor] :=vLoadChars[14];
  xiDispFor:=xiDispFor+32; // Neue Zeile im Display
 DispMem[xiDispFor] :=vLoadChars[15];
  xiDispFor:=xiDispFor+32; // Neue Zeile im Display
  xiDispFor:=xiDispFor+32; // Neue Zeile im Display
end DispChar;

...
{ Main Program }
{$IDATA}
begin
 ptrLoadChars := @gLoadChars; // Ziehe
   vLoadChars:=  FlashPtr (ptrLoadChars)^;
   DispChar;  // zum Test
...




Attachments
Schritt 1
Filename: 02-07-_2018_13-27-52.jpg
Filesize: 19.84 KB
Title: Schritt 1
Information: Schritt 1
Download counter: 105
Schritt 2
Filename: 02-07-_2018_13-28-00.jpg
Filesize: 31.84 KB
Title: Schritt 2
Information: Schritt 2
Download counter: 103
Schritt 3
Filename: 02-07-_2018_13-28-17.jpg
Filesize: 35.16 KB
Title: Schritt 3
Information: Schritt 3
Download counter: 114
Schritt 4
Filename: 02-07-_2018_13-28-33.jpg
Filesize: 34.23 KB
Title: Schritt 4
Information: Schritt 4
Download counter: 112
Fehlerhafte Daten aus Const
Filename: 02-07-_2018_13-42-51.jpg
Filesize: 135.81 KB
Title: Fehlerhafte Daten aus Const
Information: Fehlerhafte Daten aus Const
Download counter: 110
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: XMega_FATboot mit LCD für Flashstatus

 · 
Posted: 03.07.2018 - 13:19  ·  #16
@rolf
@miparo

Also ich bin jetzt langsam am Ende mit meinen Ideen, warum kann ich im BOOT nicht auf dem
Code
// gCHARS
  tLoadChars        = array[129] of byte;  // eigentlicher Zeichensatz


Zugreifen? Scheinbar erhalte ich immer $FF zurück.
Habt ihr noch eine Idee? Ich wollte schon den einfachen Weg gehen einfach die Texte-Als Grafik Const in das System laden.
Code
CONST
  Bootbmp         : Array[1..(32*8 div 8)+2] of Byte = 'boot.pbmp';
  Flashbmp         : Array[1..(32*8 div 8)+2] of Byte = Flash.pbmp';
  Errorbmp         : Array[1..(32*8 div 8)+2] of Byte = 'Error.pbmp';
 


Nur habe ich da ja genau das gleiche Problem mit dem Zugriff auf die CONSTs

Thorsten
  • 1
  • 2
  • 3
  • 4
  • Page 2 of 4
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 17 · Cache Hits: 15   145   160 · Page-Gen-Time: 0.032208s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI