Not able to access SD card

Jupeman

Member
Working on audio guestbook project. Teensy 4.0 connected to Audio Shield Rev D2.

I have tested continuity between pins on Teensy and headers/pins on the Audio Shield for pins GND, 5V, 7, 10, and 14. I run this code:

Code:
/*
  SD card test 
   
 This example shows how use the utility libraries on which the'
 SD library is based in order to get info about your SD card.
 Very useful for testing a card when you're not sure whether its working or not.
 	
 The circuit:
  * SD card attached to SPI bus as follows:
 ** MOSI - pin 11 on Arduino Uno/Duemilanove/Diecimila, pin 7 on Teensy with audio board
 ** MISO - pin 12 on Arduino Uno/Duemilanove/Diecimila
 ** CLK - pin 13 on Arduino Uno/Duemilanove/Diecimila, pin 14 on Teensy with audio board
 ** CS - depends on your SD card shield or module - pin 10 on Teensy with audio board
 		Pin 4 used here for consistency with other Arduino examples

 
 created  28 Mar 2011
 by Limor Fried 
 modified 9 Apr 2012
 by Tom Igoe
 */
 // include the SD library:
#include <SD.h>
#include <SPI.h>

// set up variables using the SD utility library functions:
Sd2Card card;
SdVolume volume;
SdFile root;

// change this to match your SD shield or module;
// Arduino Ethernet shield: pin 4
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
// Teensy audio board: pin 10
// Teensy 3.5 & 3.6 & 4.1 on-board: BUILTIN_SDCARD
// Wiz820+SD board: pin 4
// Teensy 2.0: pin 0
// Teensy++ 2.0: pin 20
const int chipSelect = 10;

void setup()
{
  //UNCOMMENT THESE TWO LINES FOR TEENSY AUDIO BOARD:
  SPI.setMOSI(7);  // Audio shield has MOSI on pin 7
  SPI.setSCK(14);  // Audio shield has SCK on pin 14
  
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect.
  }


  Serial.print("\nInitializing SD card...");


  // we'll use the initialization code from the utility libraries
  // since we're just testing if the card is working!
  if (!card.init(SPI_HALF_SPEED, chipSelect)) {
    Serial.println("initialization failed. Things to check:");
    Serial.println("* is a card inserted?");                           
    Serial.println("* is your wiring correct?");
    Serial.println("* did you change the chipSelect pin to match your shield or module?");
    return;
  } else {
   Serial.println("Wiring is correct and a card is present.");
  }

  // print the type of card
  Serial.print("\nCard type: ");
  switch(card.type()) {
    case SD_CARD_TYPE_SD1:
      Serial.println("SD1");
      break;
    case SD_CARD_TYPE_SD2:
      Serial.println("SD2");
      break;
    case SD_CARD_TYPE_SDHC:
      Serial.println("SDHC");
      break;
    default:
      Serial.println("Unknown");
  }

  // Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
  if (!volume.init(card)) {
    Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
    return;
  }


  // print the type and size of the first FAT-type volume
  uint32_t volumesize;
  Serial.print("\nVolume type is FAT");
  Serial.println(volume.fatType(), DEC);
  Serial.println();
  
  volumesize = volume.blocksPerCluster();    // clusters are collections of blocks
  volumesize *= volume.clusterCount();       // we'll have a lot of clusters
  if (volumesize < 8388608ul) {
    Serial.print("Volume size (bytes): ");
    Serial.println(volumesize * 512);        // SD card blocks are always 512 bytes
  }
  Serial.print("Volume size (Kbytes): ");
  volumesize /= 2;
  Serial.println(volumesize);
  Serial.print("Volume size (Mbytes): ");
  volumesize /= 1024;
  Serial.println(volumesize);

  
  //Serial.println("\nFiles found on the card (name, date and size in bytes): ");
  //root.openRoot(volume);
  
  // list all files in the card with date and size
  //root.ls(LS_R | LS_DATE | LS_SIZE);
}


void loop(void) {
  
}

I receive the response:


Initializing SD card...initialization failed. Things to check:
* is a card inserted?
* is your wiring correct?
* did you change the chipSelect pin to match your shield or module?

I have tried four different SD cards.

I don't know what to do/try next. Any suggestions?
 
I have tested continuity between pins on Teensy and headers/pins on the Audio Shield for pins GND, 5V, 7, 10, and 14.

Teensy 4.0 and audio shield rev D2 use these 6 pins for the SD card: GND, 3.3V, 10, 11, 12, 13. The GND pin is the one in the lower left corner next to pin 0.


I don't know what to do/try next. Any suggestions?

If this didn't help enough, try showing us what you have with photos. Often when things that should work don't work it's because of a mistake or misunderstanding. If you tell us what you did, the words are correct. But when you show us what you did, especially if there was some sort of misunderstanding of the words, we might be able to see what's really not quite right.
 
Here are some pics of the two boards.

IMG_6157.jpgIMG_6155.jpgIMG_6156.jpg
 
I tried moving the boards one slot so pin 13 would be connected, no change. Those are not the pins in the code. Is the code wrong? That's just standard code I took to test when the guest book code failed on SD card.
 
All 14 pins end to end need to be in place on both boards.

It needs to connect GND on the USB end and then to both end corners pins #12 and #13 to be properly and fully connected.

Third pic p#3 shows added Teensy pin - but p#4 suggests it was just shifted against the Audio board?
 
All 14 pins end to end need to be in place on both boards.

It needs to connect GND on the USB end and then to both end corners pins #12 and #13 to be properly and fully connected.

Third pic p#3 shows added Teensy pin - but p#4 suggests it was just shifted against the Audio board?

Okay, nice, thank you, I am missing the last pins on the Teensy! It seems so basic, but the kit I ordered along with the Teensy only had the headers that long. Rookie mistake. Thank you!
 
Okay, nice, thank you, I am missing the last pins on the Teensy! It seems so basic, but the kit I ordered along with the Teensy only had the headers that long. Rookie mistake. Thank you!

That seems EVIL to send 13 pin header kit when 14 pins are needed. Even if you knew better (rather than expecting the kit parts to be complete) you would not then have the parts on hand to complete the kit.

Hopefully shifting the AUDIO GND pin down to the Teensy 3.3V pin (on the 5V pin side) didn't cause any breakage.
 
Yes, I am stumped. This was from Sparkfun... Now I am anxious to get off work and test as I also hope I didn't fry anything.
 
You're missing connections on pins 12 and 13.

pins.jpg

pins2.jpg

Maybe the Sparkfun sockets kit came with a 3rd piece with 7 pins that you're meant to solder onto the end? The 5 pads in the middle aren't needed, and in fact you may need to trim those 5 pins short so they don't touch the SD socket. But the 2 outside pins absolutely are essential for the SD card to work.
 
You're missing connections on pins 12 and 13.

View attachment 31841

View attachment 31842

Maybe the Sparkfun sockets kit came with a 3rd piece with 7 pins that you're meant to solder onto the end? The 5 pads in the middle aren't needed, and in fact you may need to trim those 5 pins short so they don't touch the SD socket. But the 2 outside pins absolutely are essential for the SD card to work.

For: sparkfun.com/products/15845

Pictures don't show ... and ::

Code:
The two rows of 14x1 headers [B]are not included[/B] to give you the freedom to choose how to connect your audio board with your Teensy.

Thank you both, incredibly helpful and I'm thankful for the immediate and supportive feedback. I will go do some soldering and cross fingers I didn't hurt anything from ignorance, but all a learning experience.
 
Back
Top