Sorry not sure what else I can say, hopefully someone from Arduino will comment on it.
If you look at their schematic:
PmodSD.sch (digilent.com)
You will see that the VCC pins go directly to the SD adapter, plus there are 10K PU resistors on most all of the IO pins. So it is feeding the VCC back to the IO pins on the GIGA.
Which the logic level is 3.3v and I am pretty sure that the pins are not 5v tolerant.
If it were me, I would probably do a quick and dirty test to make those IO pins appear to be working OK...
I usually run something like:
//#define PINS_TO_TEST NUM_DIGITAL_PINS
#define PINS_TO_TEST 14 // maybe just pins 0-13
#define digitalWriteFast digitalWrite
#define digitalReadFast digitalRead
void setup() {
Serial.begin(115200);
while (!Serial && millis() < 10000)
;
Serial.print("Num Digital Pins: ");
Serial.println(NUM_DIGITAL_PINS, DEC);
if (PINS_TO_TEST != NUM_DIGITAL_PINS) {
Serial.print("Count testing Digital Pins: ");
Serial.println(PINS_TO_TEST, DEC);
}
Serial.flush();
testForShorts();
}
void loop() {
allPinTest();
}
uint32_t pinLast[NUM_DIGITAL_PINS];
void allPinTest() {
uint32_t ii;
Serial.print("PULLUP Start Vals:\n ");
Serial.print("PULLUP :: TEST to GND\n ");
for (ii = 0; ii < PINS_TO_TEST; ii++) {
pinMode(ii, INPUT_PULLUP);
delayMicroseconds(5);
pinLast[ii] = digitalReadFast(ii);
if (!pinLast[ii]) {
Serial.print("\nd#=");
Serial.print(ii);
Serial.print(" val=");
}
Serial.print(pinLast[ii]);
Serial.print(',');
}
Serial.println();
Serial.println();
while (1) {
uint32_t jj, dd = 0, cc = 0, ee = 4;
cc = 0;
for (ii = 0; ii < PINS_TO_TEST; ii++) {
jj = digitalReadFast(ii);
if (jj != pinLast[ii]) {
dd = 1;
cc++;
pinLast[ii] = jj;
Serial.print("d#=");
Serial.print(ii);
if (pinLast[ii]) Serial.print("\t");
Serial.print(" val=");
Serial.print(pinLast[ii]);
Serial.print(',');
}
if (cc > 1 && ee) {
Serial.println(">>> MULTI CHANGE !!");
ee--;
}
}
if (dd) {
dd = 0;
Serial.println();
delay(50);
}
}
}
void testForShorts() {
uint32_t ii;
Serial.print("Quick Test for Shorts to adjacent pin");
Serial.println("\n try Pull up and see if setting low follow");
for (ii = 0; ii < PINS_TO_TEST - 1; ii++) {
pinMode(ii + 1, INPUT_PULLUP);
pinMode(ii, OUTPUT);
digitalWrite(ii, LOW);
delayMicroseconds(5);
if (!digitalRead(ii + 1)) {
Serial.print(ii, DEC);
Serial.print(":");
Serial.println(ii + 1, DEC);
}
}
Serial.println();
}
This is extracted from another version that I run on other boards... I have it limited to just the first pins...
Once running, I then have jumper wire, one end to ground, and I touch the different IO pins which the code setup as high (INPUT_PULLUP). And if a pin changes state, it prints the new state...
And I see output like:
Num Digital Pins: 103
Count testing Digital Pins: 14
Quick Test for Shorts to adjacent pin
try Pull up and see if setting low follow
PULLUP Start Vals:
PULLUP :: TEST to GND
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
d#=0 val=0,
d#=0 val=1,
d#=1 val=0,
d#=1 val=1,
d#=2 val=0,
d#=2 val=1,
d#=3 val=0,
d#=3 val=1,
d#=4 val=0,
d#=4 val=1,
d#=13 val=0,
d#=13 val=1,
Note I often run something like this to verify that the pins I think are connected, actually are...
Beyond that, not sure what else to try.