Hallo zusammen,
ich versuche seit ein paar Stunden mein 93LC46 EEPROM mit meinem
ATMega32 zum laufen zubekommen.
Also meine SPI-Routine funktioniert, ich kann sowohl lesen als auch
schreiben. Nur wenn ich eine bestimmte Adresse auslese (Werkseinstellung
0xFF) empfange ich 0x7F, also um ein bit nach rechtsverschoben. Dann
habe ich einmal ein Byte 0x1C geschrieben und beim wieder auslesen
erhalte ich 0x0E, also auch wieder um ein bit verschoben.
Leider finde ich den Fehler nicht.
Laut Datenblatt (welches ich euch einmal angehängt habe) wird eine null
auf die DO Leitung mit dem letzten Bit welches ich Sende, also vermute
ich mal das es damit zu tun haben wird.
Aber wie kann ich diesen Fehler verhindern?
1 | // Dieser Abschnitt steht in meiner Main
|
2 | spi_send_word(0x0349); //Read 0x49
|
3 | param = spi_send_byte(0xFF);
|
4 |
|
5 | uint8_t spi_send_byte(uint8_t byte)
|
6 | {
|
7 |
|
8 | SPDR = byte;
|
9 | while(!(SPSR & (1<<SPIF)))
|
10 | ;
|
11 | return SPDR;
|
12 | }
|
13 |
|
14 | uint16_t spi_send_word(uint16_t word)
|
15 | {
|
16 | uint16_t rxData = 0;
|
17 |
|
18 | // send MS byte of given data
|
19 | rxData = (spi_send_byte((word>>8) & 0x00FF))<<8;
|
20 | // send LS byte of given data
|
21 | rxData |= (spi_send_byte(word & 0x00FF));
|
22 |
|
23 | // return the received data
|
24 | return rxData;
|
25 | }
|
Danke für Eure Hilfe.
Michael