PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : WIZ812MJ Ethernetmodul SPI klappt nicht



Ceos
21.01.2009, 08:35
ich finde dieses Forum passt am besten, wenn dem nicht so ist bitte moven!

ich hab mir jetzt endlich doch die WIZ812MJ bestellt

(zu finden auf :
http://www.dacomwest.de/de/ethermodul.htm
)

leider klappt die kommunikation via SPI nicht, hier mal die codeschnipsel


void SPI_MasterInit(void)
{
/* Set MOSI and SCK output, all others input */
DDRB |= (1<<PB1)|(1<<PB3)|(1<<PB7); // PB7 ist /SS für WIZ modul
PORTB |= (1<<PB0); // /SS vom atmel auf high legen, pin ist nicht angeschlossen
DDRB &= ~(1<<PB2);
PORTB |= (1<<PB7);
/* Enable SPI, Master, set clock rate fck/2 */
SPCR = (1<<SPE)|(1<<MSTR);
SPSR = (1<<SPI2X);
}
unsigned short SPI_MasterWrite(unsigned short cData, unsigned short highbyte, unsigned short lowbyte)
{
unsigned short ret;
PORTB &= ~(1<<PB7);
/* Start transmission */
SPDR = 0xf0;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
SPDR = highbyte;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
SPDR = lowbyte;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
ret = SPDR;
PORTB |= (1<<PB7);
return ret;
}

unsigned short SPI_MasterRead(unsigned short highbyte, unsigned short lowbyte)
{
unsigned short ret;
PORTB &= ~(1<<PB7);
/* Start transmission */
SPDR = 0x0f;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
SPDR = highbyte;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
SPDR = lowbyte;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
SPDR = 0x55;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
ret = SPDR;
PORTB |= (1<<PB7);
return ret;
}


egal ob schreiben oder lesen, wie im datenblatt beschrieben, bekomm cih 0x00 für den op-code, 0x01 und 0x02 für die addressbytes aber 0x00 statt 0x03 beim schreiben zurück, als zielregister habe cih die gatewayregister genommen, im parallelmodus konnte ich sie einzeln beschreiben, nur eben nicht in serie und halbwegs effizent von der zeit her

ich benutze den mySmartUSB, ein 128er Emebedit-modul mit RS232, Strom kommt vom mySmart, das WIZ-modul hängt über nen 3.3V Spannungsregler ebenfalls an den 5V vom mySmart

hoffe jemand hat schon erfahrungen gesammelt und kann mir helfen