Can't get SPI working on Arduino Nano RP2040 Connect

I've been trying for about 5 hours now to get SPI working on the Arduino Nano RP2040 connect. I'm trying to use an SD card reader (https://www.amazon.com/HiLetgo-Adater-Interface-Conversion-Arduino/dp/B07BJ2P6X6/?_encoding=UTF8&pd_rd_w=aFasy&content-id=amzn1.sym.d0ebfbb2-6761-494f-8e2f-95743b37c35c%3Aamzn1.symc.50e00d6c-ec8b-42ef-bb15-298531ab4497&pf_rd_p=d0ebfbb2-6761-494f-8e2f-95743b37c35c&pf_rd_r=H1S8F4HA7NAH483GXV5E&pd_rd_wg=Wguoy&pd_rd_r=02d81db7-64c4-458d-bab9-25d8c8be5b76&ref_=pd_gw_ci_mcx_mr_hp_atf_m) to connect to my Arduino Nano RP2040 connect so I can get some sounds off of it and play them.

The SD card reader is connected like this:
VCC -> 3.3v
GND -> GND
CS -> 10 (GPIO 5)
MOSI -> 11 (GPIO 7)
MISO -> 12 (GPIO 4)
SCK -> 13 (GPIO 6)

I've checked pins_arduino.h and the SPI pins are listed correctly (like above) there. I've checked the wiring many times and I've even tried using multiple software SPI libraries on the above pins and connecting it to A1, A2, and A3 instead. (SoftSPI.h, SoftSPIB.h) And I've tried using another SD card reader in case the first one is broken. (I've also used these readers before with other boards and they've worked fine.)
Everything else I've tried with the board works but it just won't use SPI at all! I've tried connecting to the SD card reader but it always fails to initialize. I've tried doing simple loopback tests, but I just get back a 0 FAIL.
I've tried doing this with the Mbed OS board library and Earle Philhower's Arduino-pico board library.

I don't know what else there is to try. Any suggestions?

One example of a simple program that just won't work (from the RP2040_SD library):


#if !defined(ARDUINO_ARCH_RP2040)
  #error For RP2040 only
#endif

#if defined(ARDUINO_ARCH_MBED)
  
  #define PIN_SD_MOSI       PIN_SPI_MOSI
  #define PIN_SD_MISO       PIN_SPI_MISO
  #define PIN_SD_SCK        PIN_SPI_SCK
  #define PIN_SD_SS         PIN_SPI_SS

#else

  #define PIN_SD_MOSI       PIN_SPI0_MOSI
  #define PIN_SD_MISO       PIN_SPI0_MISO
  #define PIN_SD_SCK        PIN_SPI0_SCK
  #define PIN_SD_SS         PIN_SPI0_SS
  
#endif

#include <SPI.h>
#include <RP2040_SD.h>

File root;

void setup() 
{
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial);

  delay(1000);

#if defined(ARDUINO_ARCH_MBED)
  Serial.print("Starting SD Card ListFiles on MBED ");
#else
  Serial.print("Starting SD Card ListFiles on ");
#endif
  
  Serial.println(BOARD_NAME);
  Serial.println(RP2040_SD_VERSION);
  
  Serial.print("Initializing SD card with SS = ");  Serial.println(PIN_SD_SS);
  Serial.print("SCK = ");   Serial.println(PIN_SD_SCK);
  Serial.print("MOSI = ");  Serial.println(PIN_SD_MOSI);
  Serial.print("MISO = ");  Serial.println(PIN_SD_MISO);

  if (!SD.begin(PIN_SD_SS)) 
  {
    Serial.println("Initialization failed!");
    return;
  }
  
  Serial.println("Initialization done.");

  root = SD.open("/");

  printDirectory(root, 0);

  Serial.println("Print Directory done!");

  #define fileName    "datalog.txt"
  #define fileName1   "newdata.txt"

  File myWFile = SD.open(fileName, FILE_WRITE); 

  if (myWFile)
  {
    char writeData[]  = "Testing RP2040 SD";
  
    myWFile.write((uint8_t *) &writeData, sizeof(writeData));

    Serial.print("writeData = "); Serial.println(writeData);

    myWFile.close();
  }
  else
  {
    Serial.print("Error open for writing "); Serial.println(fileName);
  }

  myWFile = SD.open(fileName1, FILE_WRITE); 

  if (myWFile)
  {
    char writeData[]  = "Testing RP2040 SD";

    //myWFile.seek(0, (SeekMode) SEEK_END);
   
    myWFile.write((uint8_t *) &writeData, sizeof(writeData));

    myWFile.close();
  }
  else
  {
    Serial.print("Error open for writing "); Serial.println(fileName1);
  }

  // OK here to read file
  File myRFile = SD.open(fileName, FILE_READ); 
  
  if (myRFile)
  {
    char readData[64]  = "\0";

    //myWFile.seek(0, (SeekMode) SEEK_END);
    
    myRFile.read((uint8_t *) &readData, sizeof(readData) - 1);

    myRFile.close();

    Serial.print("readData = "); Serial.println(readData);
  }
  else
  {
    Serial.print("Error open for reading "); Serial.println(fileName);
  }

  root = SD.open("/");
  
  printDirectory(root, 0);

  Serial.println("Print Directory done!");
}

void loop() 
{
  // nothing happens after setup finishes.
}

void printDirectory(File dir, int numTabs) 
{
  while (true) 
  {
    File entry =  dir.openNextFile();

    if (! entry) 
    {
      // no more files
      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();
  }
}

This gives the following output (in the Serial monitor) when I use the MbedOS library:

Starting SD Card ListFiles on MBED Nano RP2040 Connect
MBED RP2040_SD v1.0.1
Initializing SD card with SS = 10
SCK = 13
MOSI = 11
MISO = 12
Initialization failed!

And when I run it with the Arduino-pico library, I get this output:

Starting SD Card ListFiles on NANO_RP2040_CONNECT
RP2040_SD v1.0.1
Initializing SD card with SS = 5
SCK = 6
MOSI = 7
MISO = 4
Initialization failed!

I had no problem using SD card with Nano Connect with both cores.
Is your SD card module a 3.3 V one or one with a 5 V conversion?

Yeah I figured it out. Despite the SD card reader saying it works with 3.3v or 5v boards, it only works when you power the VCC with 5v. Maybe they were just saying the logic pins can do 3.3v or 5v?