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 | }
|