thecomfychair
Active member
I am trying to make a standalone device using a Teensy 4.1 powered via USB using an Adafruit Powerboost 500 Basic attached to 2x AA batteries. When I try to initialise the onboard SD card with this setup, the Teensy stops responding. When powered from a PC or USB wall charger using the same USB cable, SD.begin works fine and the Teensy continues as normal.
I have examined the power output of the Powerboost and it is 5.2V, so unlikely to be a voltage issue I'm guessing. The Powerboost also allegedly outputs 500mA so that should also be plenty of current, although I have not tested this.
To reproduce the issue:
Hardware:
Hardware setup:
Program the Teensy with the following sketch using Arduino 1.8.19 and Teensyduino 1.56. It's a slightly modified version of the 'listfiles' example from the Teensy SD library, to which I have added some LED debugging, and removed the wait for the Serial port since no Serial communication would be possible when not connected to a PC.
Test 1:
Power the Teensy using the USB port of a computer, or a USB wall charger, and observe LED.
Result: LED flashes 4 times, then flashes each time it opens a new file from the SD card. This is as expected.
Test 2:
Power the Teensy using the USB port of the Powerboost.
Result: LED flashes only 3 times, then never flashes again after trying to run:
Any thoughts greatly appreciated!
I have examined the power output of the Powerboost and it is 5.2V, so unlikely to be a voltage issue I'm guessing. The Powerboost also allegedly outputs 500mA so that should also be plenty of current, although I have not tested this.
To reproduce the issue:
Hardware:
- 2x AA battery
- Adafruit Powerboost 500 Basic
- USB A - USB micro cable
- Teensy 4.1 with SD card containing files
Hardware setup:
Program the Teensy with the following sketch using Arduino 1.8.19 and Teensyduino 1.56. It's a slightly modified version of the 'listfiles' example from the Teensy SD library, to which I have added some LED debugging, and removed the wait for the Serial port since no Serial communication would be possible when not connected to a PC.
Code:
/*
SD card basic directory list example
This example shows how to create and destroy an SD card file
The circuit:
* SD card attached to SPI bus as follows:
** MOSI - pin 11, pin 7 on Teensy with audio board
** MISO - pin 12
** CLK - pin 13, pin 14 on Teensy with audio board
** CS - pin 4, pin 10 on Teensy with audio board
created Nov 2010
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe
This example code is in the public domain.
*/
#define debugLED 13
#include <SD.h>
// change this to match your SD shield or module;
// Teensy 2.0: pin 0
// Teensy++ 2.0: pin 20
// Wiz820+SD board: pin 4
// Teensy audio board: pin 10
// Teensy 3.5 & 3.6 & 4.1 on-board: BUILTIN_SDCARD
const int chipSelect = BUILTIN_SDCARD;
void setup()
{
pinMode(debugLED, OUTPUT);
LEDblink(200); //debug blink 1
//Uncomment these lines for Teensy 3.x Audio Shield (Rev C)
//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);
LEDblink(200); //debug blink 2
//If not connected to PC with Arduino IDE running, Serial port will never be ready
// while (!Serial) {
// ; // wait for serial port to connect.
// }
Serial.print("Initializing SD card...");
LEDblink(200); //debug blink 3
if (!SD.begin(chipSelect)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
//unresponsive from this point
LEDblink(200); //debug blink 4
File root = SD.open("/");
printDirectory(root, 0);
Serial.println("done!");
}
void loop()
{
// nothing happens after setup finishes.
}
void LEDblink(int len){
digitalWrite(debugLED, HIGH);
delay(len);
digitalWrite(debugLED, LOW);
delay(len);
}
void printDirectory(File dir, int numSpaces) {
while(true) {
File entry = dir.openNextFile();
if (! entry) {
//Serial.println("** no more files **");
break;
}
printSpaces(numSpaces);
Serial.print(entry.name());
if (entry.isDirectory()) {
Serial.println("/");
printDirectory(entry, numSpaces+2);
} else {
// files have sizes, directories do not
unsigned int n = log10(entry.size());
if (n > 10) n = 10;
printSpaces(50 - numSpaces - strlen(entry.name()) - n);
Serial.print(" ");
Serial.print(entry.size(), DEC);
DateTimeFields datetime;
if (entry.getModifyTime(datetime)) {
printSpaces(4);
printTime(datetime);
}
Serial.println();
}
entry.close();
LEDblink(100);
}
}
void printSpaces(int num) {
for (int i=0; i < num; i++) {
Serial.print(" ");
}
}
void printTime(const DateTimeFields tm) {
const char *months[12] = {
"January","February","March","April","May","June",
"July","August","September","October","November","December"
};
if (tm.hour < 10) Serial.print('0');
Serial.print(tm.hour);
Serial.print(':');
if (tm.min < 10) Serial.print('0');
Serial.print(tm.min);
Serial.print(" ");
Serial.print(tm.mon < 12 ? months[tm.mon] : "???");
Serial.print(" ");
Serial.print(tm.mday);
Serial.print(", ");
Serial.print(tm.year + 1900);
}
Test 1:
Power the Teensy using the USB port of a computer, or a USB wall charger, and observe LED.
Result: LED flashes 4 times, then flashes each time it opens a new file from the SD card. This is as expected.
Test 2:
Power the Teensy using the USB port of the Powerboost.
Result: LED flashes only 3 times, then never flashes again after trying to run:
Code:
if (!SD.begin(chipSelect)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
Any thoughts greatly appreciated!