AT45 Flash Device ID auslesen

Gast #2208858
Lesenswert?

Hallo,

hab hier im Forum bisle Source gefunden den ich mal testen wollte.

Es geht mir um das auslesen der Device ID eines AT45 Flash Speichers.

Ich bekomme jedoch nur 1 Byte zurück (0b00001100), Die anderen Bytes 
sind 0.

1
// Reset
2
SET_RESET;
3
_delay_ms(100);
4
CLEAR_RESET;
5
_delay_ms(100);
6

7

8
SET_PIN_CS;
9
SPI_write(0x9f);  // Senden von 0x9f Opcode 
10
for(uint8_t i = 0 ; i < 6 ; i++){
11
  ID1 = SPI_read();
12
  myuart_putc(ID1);
13
}
14
CLEAR_PIN_CS;


Ausschnitte aus spi.h
1
#define  SPI_SET_DDR    DF_SPI_DDR = (1<<DF_SPI_CLK | 1<< DF_SPI_DO | 1<<DF_SPI_CS | 1<<DF_SPI_RESET)
2
#define  SET_PIN_CS    DF_SPI_PORT &= (~(1<<DF_SPI_CS))
3
#define  CLEAR_PIN_CS    DF_SPI_PORT |=   (1<<DF_SPI_CS)
4

5
#define  SET_RESET    DF_SPI_PORT &= (~(1<<DF_SPI_RESET))
6
#define  CLEAR_RESET    DF_SPI_PORT |=   (1<<DF_SPI_RESET)
7

8
#define  SPI_ENABLE    SPCR = (0<<SPIE | 1<<SPI2X | 1<<SPE | 1<<MSTR | 0<<SPR0 | 1<<CPOL | 1<<CPHA)
9
#define  SPI_DISABLE    SPCR = 0

spi.c:
1
// ----------------------------------------------------------------------------
2
void SPI_init(void)
3
{
4
SPI_SET_DDR;                    // Ausgänge setzen
5
SPI_ENABLE;                      // siehe spi_hard.h  
6
CLEAR_PIN_CS;                    // CS auf high
7
SET_RESET;                      // einen Reset ausführen
8
CLEAR_RESET;                    // danach mindestens 20ms warten
9
}              
10

11
// ----------------------------------------------------------------------------
12
// schreibt das übergebene Byte via SPI raus
13
void SPI_write(uint8_t data)
14
{
15
SPDR = data;
16
while (!(SPSR & (1<<SPIF)));             // bis zum Abschluss der Übertragung warten
17

18
}
19

20
// ----------------------------------------------------------------------------
21
// schreibt ein dummy-Byte raus und gibt das vom Slave geschriebene Byte zurück
22
uint8_t SPI_read(void)
23
{
24
SPDR = 0;                      // dummy schreiben, startet den Lesevorgang
25
while (!(SPSR & (1<<SPIF)));              // bis zum Abschluss der Übertragung warten
26
return (SPDR);
27
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren