Hallo,
ich habe einen externen Flashbaustein (AT25DF) und folgendem Code:
1 | void writeFlash(unsigned long int address, unsigned char data)
|
2 | {
|
3 | unsigned char temp;
|
4 |
|
5 | while( (Flash_impl_readFlashStatus(me) & 0b00000001) )
|
6 | ; //wenn bereit, dann weiter
|
7 |
|
8 | SS_FLASH = 0;
|
9 | spi(WRITE_ENABLE);
|
10 | SS_FLASH = 1;
|
11 |
|
12 | SS_FLASH = 0;
|
13 | spi(WRITE_BYTE);
|
14 | spi((unsigned char)(0x00));
|
15 | spi((unsigned char)(0x07));
|
16 | spi((unsigned char)(0XD0));
|
17 | spi('1');
|
18 | spi('2');
|
19 | spi('3');
|
20 | spi(data);
|
21 | spi('a');
|
22 | spi('b');
|
23 | spi('c');
|
24 | SS_FLASH = 1;
|
25 |
|
26 | putchar1('d');
|
27 | putchar1(':');
|
28 | putchar1(data);
|
29 | putchar1(' ');
|
30 |
|
31 | //nur zum Test
|
32 | while( (Flash_impl_readFlashStatus(me) & 0b00000001) ) //warten bis ready
|
33 | ; //wenn bereit, dann weiter
|
34 |
|
35 | SS_FLASH = 0;
|
36 | spi(READ_ARRAY);
|
37 | spi((unsigned char)(0x00));
|
38 | spi((unsigned char)(0x07));
|
39 | spi((unsigned char)(0XD0));
|
40 | spi(0);
|
41 | temp = spi(0);
|
42 | putchar1(temp);
|
43 | temp = spi(0);
|
44 | putchar1(temp);
|
45 | temp = spi(0);
|
46 | putchar1(temp);
|
47 | temp = spi(0);
|
48 | putchar1(temp);
|
49 | temp = spi(0);
|
50 | putchar1(temp);
|
51 | temp = spi(0);
|
52 | putchar1(temp);
|
53 | temp = spi(0);
|
54 | putchar1(temp);
|
55 | putchar1(' ');
|
56 | SS_FLASH = 1;
|
57 |
|
58 | putchar1('T');
|
59 | putchar1(':');
|
60 | putchar1(data);
|
61 | }
|
Ich verwende den Codevisioncompiler und dort ist die Funktion spi wie
folgt definiert:
unsigned char spi(unsigned char data);
Beim obigem Code erhalte ich folgende Ausgabe:
d:s 1230abc T:s
>>wenn ich einzelne char's ins Flash speichere, so kann ich diese auch wieder
auslesen, aber nicht die übergebene unsigned char Variable "data"!!!
Schlimmer noch wird es, wenn ich statt der konstanten Adresse beim Lesen
und beim Schreiben
1 |
|
2 | spi((unsigned char)(address >> 16));
|
3 | spi((unsigned char)(address >> 8));
|
4 | spi((unsigned char)(address));
|
ersetze, dann kann ich gar nichts mehr aus dem Flash ausgeben nur \0
Woran sollte das liegen?? Ich dachte, dass es keinen Unterschied macht
ob ich
spi((unsigned char)(0x00));
spi((unsigned char)(0x07));
spi((unsigned char)(0XD0));
oder
address = 2000;
spi((unsigned char)(address >> 16));
spi((unsigned char)(address >> 8));
spi((unsigned char)(address));
schreibe. Anscheinend liege ich falsch, warum??