Forum: Mikrocontroller und Digitale Elektronik Font in SPI Flash schreiben


von andre (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
bin grad dabei mein Font den ich sonst im Flash des Controllers hab auf 
den SPI Flash zu übertragen und nur einen Buchstaben auf dem Display 
Darzustellen , nur leider klapt das Überhaupt nicht.

Könnte mir jemand von ihnen weiterhelfen

mfg


1
#define FONT_1_ADDR  (0)       /* FONT address in SPI FLASH */
2
3
uint8_t buffer[19200];
4
5
6
7
void Draw_Pixel(uint16_t _usX, uint16_t _usY, uint16_t _usWidth, uint16_t _usHeight)
8
{
9
  u16 xn,yn,start_maske,maske;
10
   u16 wert;
11
   u8 ascii = 55;
12
  
13
df_read( &buffer[0] , sizeof(buffer) );  
14
  
15
16
  
17
18
  //ascii -= 32;
19
  wert=buffer[ascii * 13];
20
21
22
    start_maske=0x80;
23
   
24
    for(yn = 0; yn < 13; yn++) {
25
      maske=start_maske;
26
      // Cursor setzen
27
     
28
      for(xn = 0; xn <8; xn++) {
29
         if((buffer[yn] & maske) == 0x00) {
30
          // Pixel in Hintergrundfarbe zeichnen
31
           LCD_SetPixel_16bpp(560+xn,yn+120,WHITE);
32
    }
33
        else {
34
          // Pixel in Vordergrundfarbe zeichnen
35
           LCD_SetPixel_16bpp(560+xn,yn+120,BLACK);
36
    }
37
        maske=(maske>>1);
38
      }
39
    }
40
}
41
42
43
  SPI_FLASH_Init();
44
  SPI_FLASH_Test();
45
  SSTF016B_Erase( FONT_1_ADDR/SEC_SIZE , ( FONT_1_ADDR+sizeof(&Arial_16x25) )/SEC_SIZE +1 );    /* ??????? */
46
  df_write_open( FONT_1_ADDR );    /* ??????? */
47
48
  DrawString(0,350,"Writing To SPI Flash",&Arial_16x25,LCD_COLOR_WHITE,LCD_COLOR_BLUE);
49
50
     
51
  for(count=0;count<sizeof(Arial_8x13_Table)/255;count++)
52
  {
53
    df_write((uint8_t*)&Arial_8x13_Table[count*255],255); 
54
    df_write_close(); 
55
  }
56
  df_write( (uint8_t*)&Arial_8x13_Table[count*255],sizeof(Arial_8x13_Table)%255);  
57
  df_write_close();   
58
    
59
    
60
    
61
    
62
  df_read_open( FONT_1_ADDR );    /* ??????? */
63
64
  Draw_Pixel(0,0,10,20);

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

andre schrieb:
> nur leider klapt das Überhaupt nicht.

Das ist mal eine wirklich sehr ausführliche Fehlerbeschreibung. Da weiß 
man ja ganz genau, wo das Problem liegt.

von Eric B. (beric)


Lesenswert?

andre schrieb:
> uint8_t buffer[19200];

Wie viel RAM hat denn dein Controller?

von A. S. (Gast)


Lesenswert?

Also das schreiben von einem Byte ins Flash klappt?
Gut.

Also das schreiben von X Bytes ins Flash klappt?
Gut. Du kannst genau die Daten auslesen, die Du reingeschrieben hast.
Für die Kontrolle reicht am Ende das Blinken einer LED.

Also das Lesen der richigen Daten aus dem Flash klappt?
Gut.

Also das Ansteuern des Displays mit Daten direkt aus dem Programm 
klappt?
Gut.

Also wenn Du die Daten aus dem Flash liest, sind es die gleichen wie im 
Programm und Du kannst mit beiden den richtigen Text darstellen?
Gut.

Ich denke, Du bist auf einem guten Weg.

von andre (Gast)


Lesenswert?

Ram ist Ausreichend vorhanden 192kb.

Das schreiben in den Flash funktioniert.
Das TFT die Ansteuerung funktioniert.

Mein Problem ist das auslesen aus dem Flash.

Wenn ich zb ein "A" auf dem Display ausgen will erscheint nur rin 
kästchen von 8x13 Pixel, aber nicht der Buchstabe.

von A. S. (Gast)


Lesenswert?

andre schrieb:
> Wenn ich zb ein "A" auf dem Display ausgen will erscheint nur rin
> kästchen von 8x13 Pixel, aber nicht der Buchstabe.

Ein Kästchen wo alle Pixel gesetzt sind? Das deutet auf einen 
Lesefehler.

Also nochmal zurück zu

Achim S. schrieb:
> Gut. Du kannst genau die Daten auslesen, die Du reingeschrieben hast.
> Für die Kontrolle reicht am Ende das Blinken einer LED.

wenn

Achim S. schrieb:
> Also das Ansteuern des Displays mit Daten direkt aus dem Programm
> klappt?
> Gut.

von andre (Gast)


Lesenswert?

Achim S. schrieb:
> andre schrieb:
>> Wenn ich zb ein "A" auf dem Display ausgen will erscheint nur rin
>> kästchen von 8x13 Pixel, aber nicht der Buchstabe.
>
> Ein Kästchen wo alle Pixel gesetzt sind? Das deutet auf einen
> Lesefehler.

Ja

>
> Also nochmal zurück zu
>
> Achim S. schrieb:
>> Gut. Du kannst genau die Daten auslesen, die Du reingeschrieben hast.
>> Für die Kontrolle reicht am Ende das Blinken einer LED.
>
> wenn
>
> Achim S. schrieb:
>> Also das Ansteuern des Displays mit Daten direkt aus dem Programm
>> klappt?
>> Gut.
Die Ansteuerung vom LCD klappt wenn ich ich den Font im Controller lasse 
kann ich meinen Text oder Buchstaben problemlos anzeigen.


Könnte mir jemand helfen ob meine Daten so richtig geschrieben sind und 
ob das so richtig ist beim auslesen.mfg
1
void ILI9488_DrawBMP(uint16_t _usX, uint16_t _usY, uint16_t _usWidth, uint16_t _usHeight)
2
{
3
4
  uint32_t index_x = 0;
5
  uint32_t index_y = 0;
6
  
7
  uint16_t temp;
8
  const char *wert;
9
   u8 ascii = 55;
10
  
11
df_read( &buffer[0] , sizeof(buffer) );  
12
  
13
14
  
15
16
  //ascii -= 32;
17
  wert=&buffer[ascii * 13];
18
  for (index_y = 0; index_y < _usHeight; index_y++)
19
  {
20
      //df_read( &buffer[0] , sizeof(buffer) );
21
      for (index_x = 0; index_x < _usWidth; index_x++)
22
      {
23
        
24
        temp = *( index_x*2+1+wert );
25
        
26
        temp = ( (temp<<8) | *( index_x*2+0+wert ) );
27
        
28
        LCD_SetPixel_16bpp(index_x, index_y, temp);
29
      }
30
  }
31
}
32
33
34
  SPI_FLASH_Init();
35
  SPI_FLASH_Test();
36
  SSTF016B_Erase( FONT_1_ADDR/SEC_SIZE , ( FONT_1_ADDR+sizeof(&Arial_16x25) )/SEC_SIZE +1 );    /* ??????? */
37
  df_write_open( FONT_1_ADDR );    /* ??????? */
38
39
  DrawString(0,350,"Writing To SPI Flash",&Arial_16x25,LCD_COLOR_WHITE,LCD_COLOR_BLUE);
40
41
     
42
  for(count=0;count<sizeof(Arial_8x13_Table)/255;count++)
43
  {
44
    df_write((uint8_t*)&Arial_8x13_Table[count*255],255); 
45
    df_write_close(); 
46
  }
47
  df_write( (uint8_t*)&Arial_8x13_Table[count*255],sizeof(Arial_8x13_Table)%255);  
48
  df_write_close();   
49
    
50
    
51
    
52
    
53
  df_read_open( FONT_1_ADDR );    /* ??????? */
54
55
  ILI9488_DrawBMP(0,0,8,13);

von A. S. (Gast)


Lesenswert?

Also nochmal auf Anfang:

Du hast ein serielles Flash und weisst nicht, ob Du ein Byte schreiben 
kannst?
Und lesen kannst Du es auch nicht, bzw. nicht unterscheiden, ob Du den 
default (alles 1) liest oder es einfach schief geht?

So ein Flash hat doch
- Register, aus denen man z.B. den Typ oder Revision oder sonstwas 
auslesen kann. Funktioniert das?

- bestimmte Antworten auf schreib- und Erase-Kommandos. Funktionieren 
die?

Notfalls kannst Du alles mit einer LED anzeigen (blinken 1* für jeden 
State, Dauer-AN wenn Fehler, ... egal). Hast Du Oszi, Logic-State? Und 
Du hast ja sogar ein Funktionierendes Display, also hau beliebige Infos 
darauf raus.

Das Inbetriebnehmen eines externen seriellen Flashes ist eine Aufgabe, 
die man sich nicht mit "ich mach jetzt alles auf einmal und frage wenn 
es irgendwo nicht funktioniert" versauen sollte, sondern schritt für 
schritt durchführen sollte.

Allein die Konfiguration des SPI (ich glaube, alle 4 Kombinationen von 
Clock zuerst High oder Low und übernehmen auf fallender oder steigender 
Flanke werden gefühlt auch genutzt, und da hast Du dann in einigen 
Fällen nur "zufällig meist funktionierende Verbindung". Das schreiben in 
Flash ist z.B. wieder eine ganz andere Baustelle (Löschen, 
Statusabfragen, Write-Kommandos richtig interpretieren, ...)

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.