uint8_t W5100Class::init(void)
{
uint16_t TXBUF_BASE, RXBUF_BASE;
uint8_t i;
delay(200);
//Serial.println("w5100 init");
#ifdef USE_SPIFIFO
SPIFIFO.begin(W5200_SS_PIN, SPI_CLOCK_12MHz); // W5100 is 14 MHz max
#else
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV2);
initSS();
#endif
if (isW5100()) {
CH_BASE = 0x0400;
SSIZE = 2048;
SMASK = 0x07FF;
TXBUF_BASE = 0x4000;
RXBUF_BASE = 0x6000;
writeTMSR(0x55);
writeRMSR(0x55);
} else if (isW5200()) {
#ifdef USE_SPIFIFO
//SPIFIFO.begin(W5200_SS_PIN, SPI_CLOCK_24MHz); // W5200 is 33 MHz max
#endif
CH_BASE = 0x4000;
SSIZE = 4096;
SMASK = 0x0FFF;
TXBUF_BASE = 0x8000;
RXBUF_BASE = 0xC000;
for (i=0; i<MAX_SOCK_NUM; i++) {
writeSnRX_SIZE(i, SSIZE >> 10);
writeSnTX_SIZE(i, SSIZE >> 10);
}
for (; i<8; i++) {
writeSnRX_SIZE(i, 0);
writeSnTX_SIZE(i, 0);
}
} else {
//Serial.println("no chip :-(");
chip = 0;
return 0; // no known chip is responding :-(
}
for (int i=0; i<MAX_SOCK_NUM; i++) {
SBASE[i] = TXBUF_BASE + SSIZE * i;
RBASE[i] = RXBUF_BASE + SSIZE * i;
}
return 1; // successful init
}