Forum: Mikrocontroller und Digitale Elektronik BMP Lesen von nand Flasch


von david (Gast)


Angehängte Dateien:

Lesenswert?

Guten Tag,
Ich arbeie mit einen STM32F103 mit externen NandFlasch,nun wollte ich
ein BP Array in das Nand Flash schreiben und wieder Auslesen und aufs 
Display anzeigen leider klapt das überhauptnicht.

Mein Aufruf:
1
Pic320_240_8_NAND(0,0,160,106,bmp160x106)
1
void Pic320_240_8_NAND(u16 StartX,u16 StartY,u16 EndX,u16 EndY,const u8 *str)
2
{               
3
u8 a,b,c;
4
u16  x1 = 0,x, y;
5
6
 //SCHREIBEN   
7
  WriteReadAddr.Zone = 0x00;
8
    WriteReadAddr.Block = 0x00;
9
    WriteReadAddr.Page = 0x00;
10
11
  //FSMC Initialization 
12
  FSMC_NAND_Init();
13
   
14
15
   for(y = StartY; y < (StartY + EndY); y++ )
16
   {
17
        for(x = StartX; x < (StartX + EndX); x++ ) 
18
     {  
19
          nand_TxBuffer[x]   = *str++;
20
      nand_TxBuffer[x+1] = *str++;
21
      nand_TxBuffer[x+2] = *str++;
22
            
23
         
24
     }
25
        FSMC_NAND_WriteSmallPage(nand_TxBuffer, WriteReadAddr, nand_PageNumber);
26
     WriteReadAddr.Page  ++;
27
    }  
28
  //}  
29
   DrawString(0,0,"Lesen",&Arial_16x25,WHITE,RED); 
30
      
31
 //LESEN   
32
  WriteReadAddr.Zone = 0x00;
33
    WriteReadAddr.Block = 0x00;
34
    WriteReadAddr.Page = 0x00;
35
36
37
   
38
39
   for(y = StartY; y < (StartY + EndY); y++ )
40
   {
41
        
42
    FSMC_NAND_ReadSmallPage (nand_RxBuffer, WriteReadAddr, nand_PageNumber);
43
    
44
    for(x = StartX; x < (StartX + EndX); x++ ) 
45
     {  
46
          a = nand_RxBuffer[x]; 
47
          b = nand_RxBuffer[x+1]; 
48
          c = nand_RxBuffer[x+2];
49
            
50
         Draw_Point(x,y,RGBCONVERT(a,b,c));
51
     }
52
        
53
     WriteReadAddr.Page  ++;
54
    }
55
}



Ich kann einzelne Bytes in das Nand schreiben und wieder auslesen das 
klappt,
nur mit meinen array nicht.

das Array kann ich einwandfrei aufs Display azigen.



Könnte mir einer von ihnen weiterhelfen

von Daniel A. (daniel-a)


Lesenswert?

david schrieb:
>         for(x = StartX; x < (StartX + EndX); x++ )
>      {
>           nand_TxBuffer[x]   = *str++;
>       nand_TxBuffer[x+1] = *str++;
>       nand_TxBuffer[x+2] = *str++;

nand_TxBuffer[x+1] wird beim zweiten schleifendurchgang mit 
nand_TxBuffer[x] = *str++; überschrieben. meinten Sie nand_TxBuffer[x*3] 
?

Den Rest schau ich mir villeicht später an. Hab sowas noch nie gemacht.

von david (Gast)


Lesenswert?

Das was ich noch vergessen hab.

#define BUFFER_SIZE 0x800

NAND_IDTypeDef NAND_ID; NAND_ADDRESS WriteReadAddr;
uint8_t nand_TxBuffer[BUFFER_SIZE], nand_RxBuffer[BUFFER_SIZE];
uint32_t PageNumber = 2, WriteReadStatus = 0, status= 0;


/* NAND memory address to write to */
WriteReadAddr.Zone = 0x00;
WriteReadAddr.Block = 0x00;
WriteReadAddr.Page = 0x00;


//Wenn neue Page geschrieben wird muss diese zuerst gelöscht werden.
WriteReadAddr.Page ++;
NAND_EraseBlock(WriteReadAddr);


Daniel A. schrieb:
> david schrieb:
>         for(x = StartX; x < (StartX + EndX); x++ )
>      {
>           nand_TxBuffer[x]   = *str++;
>       nand_TxBuffer[x+1] = *str++;
>       nand_TxBuffer[x+2] = *str++;
>
> nand_TxBuffer[x+1] wird beim zweiten schleifendurchgang mit
> nand_TxBuffer[x] = *str++; überschrieben. meinten Sie nand_TxBuffer[x*3]
> ?
Ja Richtig.

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.