With PJRC wiznet adapter (WIZ850io) and T3.2, I successfully ran a sketch that initialized Ether, then initialized SD and listed SD directory, then sent UDP packets to/from NTP server. Adapter was mounted on female headers of T3.2 and I used SD lib (CS set to pin 4)
UPDATE: plugged adapter into T4.0 with female headers, and sketch worked

Code:
#include <stdint.h>
#include <SPI.h>
//#include <SPIFIFO.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <utility/w5100.h>
#include <time.h>
#include <SD.h>
#define swap4 __builtin_bswap32
// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
static byte mac[6] = {0x0A, 0x1B, 0x3C, 0x4D, 0x5E, 0x6F};
IPAddress ip(192, 168, 1, 15);
#define NBYTES 100000
#define RECLTH 1000
#define TTCP_PORT 5001
EthernetServer server(TTCP_PORT);
EthernetClient client;
unsigned int localPort = 8888; // local port to listen for UDP packets
unsigned int dstport = 7654; // dst port
IPAddress udpServer(192, 168, 1, 4);
#define PACKET_SIZE 1024
byte packetBuffer[ PACKET_SIZE]; //buffer to hold incoming and outgoing packets
// A UDP instance to let us send and receive packets over UDP
EthernetUDP Udp;
#define SS 10
void udp_ntp() {
uint32_t secs, nus, us, rtt;
static uint32_t us0 = 0, secs0, nus0;
while (1) {
packetBuffer[0] = 0x1b; // ntp query
Udp.beginPacket(udpServer, 123);
Udp.write(packetBuffer, 48);
Udp.endPacket();
rtt = micros();
while (!Udp.parsePacket()); // wait ? timeout
us = micros();
rtt = us - rtt;
Udp.read(packetBuffer, sizeof(packetBuffer));
secs = swap4(*(uint32_t *) (packetBuffer + 40));
//nus = swap4(*(uint32_t *) (packetBuffer + 44)) / 4295; // fract sec
uint64_t x = swap4(*(uint32_t *) (packetBuffer + 44));
nus = (1000000 * x) >> 32;
if (us0 == 0) {
us0 = us;
secs0 = secs;
nus0 = nus;
time_t edt = secs - 2208988800 - 4 * 3600; // NTP 1990 to unix 1970 and EDT
Serial.print(ctime(&edt));
}
double t = 1000000 * (secs - secs0) + (nus - nus0); // elapsed remote us
Serial.printf("ntp %u.%06d rtt %d us %.0f ppm over %d s\n",
secs, nus, rtt, (1000000. * ((us - us0) - t)) / t, secs - secs0);
delay(10000);
}
}
File root;
void setup()
{
pinMode(9, OUTPUT);
digitalWrite(9, LOW); // begin reset the WIZ820io
pinMode(10, OUTPUT);
digitalWrite(10, HIGH); // de-select WIZ820io
delay(1);
digitalWrite(9, HIGH); // end reset pulse
// start Ethernet and UDP
Ethernet.begin(mac, ip);
Udp.begin(localPort);
Serial.begin(9600);
while (!Serial);
Serial.print("IP address:");
Serial.println(Ethernet.localIP());
Serial.print("Initializing SD card...");
if (!SD.begin(4)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
root = SD.open("/");
printDirectory(root, 0);
}
void loop()
{
udp_ntp();
delay(5000);
}
void printDirectory(File dir, int numTabs) {
while (true) {
File entry = dir.openNextFile();
if (! entry) {
// no more files
//Serial.println("**nomorefiles**");
break;
}
for (uint8_t i = 0; i < numTabs; i++) {
Serial.print('\t');
}
Serial.print(entry.name());
if (entry.isDirectory()) {
Serial.println("/");
printDirectory(entry, numTabs + 1);
} else {
// files have sizes, directories do not
Serial.print("\t\t");
Serial.println(entry.size(), DEC);
}
entry.close();
}
}