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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.