Hallo,
ich habe mir mein USART SPI Programm geschrieben, dass auch funktioniert
solange ich im internen Loopmode bin (Tx->rx verbunden) oder MISO und
MOSI Pins miteinander verbinde. Sobald ich mein SPI Flash anschliesse,
bekomme ich oft falsche Werte. Der Receiver wird bei einem CS auf low
resettet.
Ich benutze ein SAM4s und ein S25FL216K. (USART im SPI Master Mode)
Weiss jemand, was man hier noch berücksichtigen muss?
Die Timeouts des Atmel habe ich deaktiviert.
Hier der Code für den Write/Read Vorhang!
USART1->US_CR = US_CR_FCS; //select slave, set CS to 0
/*start communication with slave */
USART1->US_CR = US_CR_RXDIS;
USART1->US_CR = US_CR_RXEN;
size_t i=0;
while(length)
{
while (!(USART1->US_CSR & US_CSR_TXRDY)){}
USART1->US_THR = US_THR_TXCHR((tx_data[i]));
while (!(USART1->US_CSR & US_CSR_RXRDY)){}
rx_data[i] = USART1->US_RHR & US_RHR_RXCHR_Msk;
length--;
i++;
}
/*end communication with slave */
USART1->US_CR = US_CR_RCS; //release slave, set CS to 1
Bin für jede Idee dankbar!
Hallo Patrik, ich würde mal die Hardware überprüfen. -Ist der Baustein richtig mit Spannung versorgt (Bei einem Loop wird ja keine zusätzliche Spannungsversorgung benötigt)? -Liegen alle nicht benutzten Pins auf einem definierten Potential (Pullup/Pulldown-Widerstände)? Ich hatte mal ein Problem, wenn andere SPI-IC's am gleichen Bus hängen, die aber aus Stromspargründen ausgeschaltet waren. Diese haben sich über interne Dioden selbst versorgt und die eigentliche SPI-Kommunikation gestört.
Danke Michael, Die Stromversorgung für den Flash ist konstant bei 3.3V. Es ist ein Xplained Board von Atmel das ich benutze. (Stromversorung über USB) und an dem hängt derzeit nur der SPI Flash dran. Die nicht definierten Pins sind alle auf high.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.