Forum: Mikrocontroller und Digitale Elektronik Xmega16a4 / Dataflash / USART SPI Master


von Michael K. (saxosun)


Lesenswert?

Hallo,
ich versuche mich gerade in den o.g. Xmega einzuarbeiten, und möchte ein 
dataflash AT45DB041D ansteuern.
Dieses hat über die SPI Schnittstelle auch problemlos funktioniert, aber 
nun möchte ich auf den USART Master SPI Mode umsteigen, und kann keine 
Daten richtig empfangen. Das Statusregister läßt sich wiederholt 
auslesen -> 0b1001100, auf dem Scope sieht soweit auch alles ordentlich 
aus. Wenn der µC neu gestartet / initialisiert wird empfange ich beim 
ersten mal genau das erwartete Datenpaket, und ab dem zweiten Mal 
empfange ich nur noch Müll. Dann sind während des gesamten Protokolls 
schon Daten auf der SI Leitung.

Die Initialisierung sieht wie folgt aus:

USARTD1.BAUDCTRLA = 200;
USARTD1.BAUDCTRLB = 0;
USARTD1.CTRLC = USART_CMODE_MSPI_gc | 0b00000010;     //UCPHA
USARTD1.CTRLA = 0;
USARTD1.CTRLB = USART_TXEN_bm | USART_RXEN_bm;
//////////////////////
unsigned char DF_SPI_RW (unsigned char output)
{
  unsigned char input;
  USARTD1.DATA = output;
  while (! (USARTD1.STATUS & USART_DREIF_bm));
  input = USARTD1.DATA;
  return input;
}
//////////////////////
unsigned char Buffer_Read_Byte (unsigned char BufferNo, unsigned int 
IntPageAdr)
  {
    unsigned char data = 0;
    unsigned char opcode;
    flash_cs_off;
    if (1 == BufferNo) opcode = Buf1Read; else opcode = Buf2Read;
    DF_SPI_RW(opcode);          //op-code
    DF_SPI_RW(0x00);            //don't cares
    DF_SPI_RW((unsigned char)(IntPageAdr>>8));
    DF_SPI_RW((unsigned char)(IntPageAdr));
    DF_SPI_RW(0x00);            //don't cares
    data = DF_SPI_RW(0x00);          //read byte
    flash_cs_on;
    return data;                //return the read data byte
  }


Ich würde mich über Hilfe sehr freuen, viele Grüße

Michael

von Michael K. (saxosun)


Lesenswert?

Hallo,
ich denke, ich habe den Fehler selber gefunden.

Falsch:

while (! (USARTD1.STATUS & USART_DREIF_bm));

Richtig:

while ( !(USARTD1.STATUS & USART_RXCIF_bm));

viele Grüße
Michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.