hallo Forum! Bin gerade dabei mit einen Master(AVR) mit einem SPI-Slave kommunizieren zu lassen. Dazu eine Verständnis-Frage. Mal angenommen der Slave antwortet nicht, dann kann der Master das hardwaremäßig gar nicht feststellen, außer dass der SLAVE immer nur 0x00 sendet? D.h. das Programm auf dem Master sollte auch ohne angesteckten Slave laufen! Anbei der Code: void SPI_MasterInit(void) { /* Set MOSI and SCK output, all others input */ DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK); /* Enable SPI, Master, set clock rate fck/16 */ SPCR = (1<<SPE)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA)|(0<<SPR1)|(1<<SPR0); //1/8 FCPU SPSR = 1<<SPI2X; } uint8_t SPI_MasterTransmit(uint8_t cData) { /* Start transmission */ SPDR = cData; /* Wait for transmission complete */ while(!(SPSR & (1<<SPIF))); return SPDR; } PORTC &= ~(1<<PC0); //cs auf low main: ... PORTC |= (1<<PC0); //cs auf low USART_Transmit(SPI_MasterTransmit(0x05)); USART_Transmit(SPI_MasterTransmit(0x00)); USART_Transmit(SPI_MasterTransmit(0x00)); PORTC |= (1<<PC0); //cs auf high ...
Spinat schrieb: > Dazu eine Verständnis-Frage. Mal angenommen der Slave antwortet nicht, > dann kann der Master das hardwaremäßig gar nicht feststellen, außer dass > der SLAVE immer nur 0x00 sendet? Das ist nicht festgelegt. Was der Master ohne Slave Empfängt hängt von der Hardware ab. Das können Zufallsmuster oder eben ein fester Pegel sein. Wenn du diesen Zustand detektieren willst musst du dies selbst machen (z.B. mit einem Pullup Widerstand). > D.h. das Programm auf dem Master sollte > auch ohne angesteckten Slave laufen! Ja, per Design kann sich ein SPI Bus kann nicht aufhängen
Hab glaub ich den Fehler gefunden. This bit selects Master SPI mode when written to one, and Slave SPI mode when written logic zero. If SSis configured as an input and is driven low while MSTR is set, MSTR will be cleared, and SPIF in SPSR will become set. The user will then have to set MSTRto re-enable SPI Master mode. Das Master-Flag wird also gelöscht, wenn der SS-Pin als Eingang gesetzt ist, und auf Low gezogen wird. Habe jetzt den SS-Pin als Ausgang definiert und jetzt läuft das Programm durch. Danke für die Antworten!
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.