Xmega16a4 / Dataflash / USART SPI Master

OP #2470107
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren