Hallo zusammen,
ich möchte auf meinem XPlained256A3BU den Flash (AT45DB642D) mittels
USART-SPI auslesen (Mode 3). Die Schnittstelle habe ich soweit am
laufen, allerdings bekomme ich unschlüssige Daten beim Auslesen der
Device ID. Laut Datenblatt soll das erste Byte ein 0x1F sein, ich
erhalte aber 0x0F. Die Antwort vom SPI-Flash habe ich mal mit einem
Scope aufgezeichnet und angehängt.
Dazu verwende ich den USARTD mit den folgenden Pins:
SCK = 1
MISO = 2
MOSI = 3
Ich sende erst den Befehl und dann ein Dummybyte um die Antwort
auszulesen:
1 | #define AT45DB642D_CMD_READ_ID 0x9F
|
2 |
|
3 | USART_SPI_Transmit(&USARTD0, AT45DB642D_CMD_READ_ID);
|
4 | ID[0] = USART_SPI_Transmit(&USARTD0, 0x00);
|
5 | ...
|
6 |
|
7 | uint8_t USART_SPI_Transmit(USART_t* Device, uint8_t Data)
|
8 | {
|
9 | while(!(Device->STATUS & USART_DREIF_bm));
|
10 | Device->DATA = Data;
|
11 |
|
12 | while(!(Device->STATUS & USART_RXCIF_bm));
|
13 | return Device->DATA;
|
14 | }
|
Die Konfiguration der Schnittstelle habe ich ebenfalls als Screenshot
angehängt. Für mich sieht das so aus, als ob der SPI die Daten bei einer
fallenden Flanke und nicht bei einer steigenden (so wie es sein soll)
sampled. Nach dem Oszilloskopbild kann ich keinen Fehler in der
Übertragung erkennen. Wenn ich die Bits bei der steigenden Flanke
betrachte wird da 0x1F übertragen.
Wo habe ich da einen Fehler gemacht?
Vielen Dank für die Hilfe.
Gruß
Daniel