Question about the SD Card pins on TFT LCD Shields

Hi everyone, I got one of these 2.8" TFT Shields with an included µSD Card slot that i want to use in a future project:


(It's that exact board)
But here's my issue.
Pretty much all of these shields boast 3.3V/5V operation, but does that only apply to the LCD controller, or the SD card as well?
I'm asking because from just looking at the traces on the back of the PCB it seems that the 4 SPI pins (SD_*) just go straight to the µSD card slot without any kind of level shifting.
SD cards don't have 5V tolerant inputs, so if you were to plug this board onto a 5V arduino you would very likely kill the µSD card. or is there a level shifter IC on the other side of the PCB (hidden behind the screen)?
If the former is true and there is no level shifting, then "3.3V/5V operation" seems misleading as i would assume it to mean all features of the board work at both voltages and not "3.3V SD+LCD / 5V LCD operation". and if it's the latter and there is level shifting, then it's perfectly fine.

But because i don't know which one it is and since I wasn't able to find an answer to this online, i'd much rather just ask here than risk destroying one of my µSD cards.
So if anyone knows the answer, or has a PDF of schematic for that exact board, that's be very useful.

1 Like

Might be 5V signals on UNO pins, 3.3V on the additional pinholes.
Maybe you find more info here: http://www.lcdwiki.com/2.8inch_Arduino_Display.

yea that's the page where i got the image from, i didn't find any info on there (nor in the included user manuel) that would explicitly state if the SD card pins are also level shifted or not.

looking over the page again i did notice that they have a screesnhot of the PCB's top side, which shows no hidden level shifter IC. but i can confirm that the dual row connector opposite of the SD card slot is directly connected to it. i also just finally grabbed my multimeter in continuity mode and it seems that the UNO pins are also directly connected to the SD card slot.

So yea i think that confirms it, atleast this specific shield has no level shifting for the SD card meaning using one on a 5V Arduino board will likely damage the card.
i also think most tutorials that showcase these shields only used it for the tutorial itself, so any SD card they used likely wasn't in there long enough to be noticeably damaged by the out of spec voltage.

that still rasies the questions:

  1. why isn't this documented anywhere?
  2. why is there no level shifting in the first place, the PCB already has 2 ICs, so why not just add a 3rd? BOM cost maybe?

anyways i'll guess i just have to include a level shifter myself for those 4 pins.

Should be in there: 2.8 inch QD-TFT2802 TFT LCD Schematic and PCB Package Library

I still believe the UNO pins marked SD are for 5V, on the 5V side of the level converters, the pin-holes on the other. But you need to check yourself, I am too busy or lazy to download zip-files.
Another look at the backside suggests I am wrong.

i did find those files, but there was no PDF included (i hate it when people forget to do that) and i'm not gonna register and install some other CAD program to just look at a single schematic.
so instead i grabbed an arduino board, some wires, and my multimeter and set it up such that the power pins were all connected (GND, 5V, 3V3), then i hooked up one of the SD card SPI pins to 5V as well and measured directly at the contacts of the SD card slot, and yep, 5V at the slot.

so that fully confirms that there is no level shifting. so this product can only be fully used when using a 3.3V MCU board or when you have an extra board with a level shifter or some voltage divider.
for my project, i'll likely go the voltage divider route as it's cheaper and simplier than going fully 3.3V.

Google "SD voltage tolerance" finds quite some information, e.g.:
https://forum.arduino.cc/t/do-not-use-this-sd-card-module-with-5v-arduinos/601589

MicroSD card modules, on the other hand, typically have level-shifting ICs that convert the 5V signals to 3.3V. They work fine. I don't know why standard-size SD modules don't also include these ICs.

Would need additional investigation to confirm.

Are there no pullup resistors on MOSI, SCK and CS, or at least MOSI and SCK (CS actually has a pullup inside the SD card). They would be pullups to 3.3V if present, 4.7K to 10K probably.

And speakiing of 3.3V, is the 3.3V pin on your shield actually the ouput of the voltage regulator? If so, you would not also connect the Arduino's 3.3V output there.

The MISO line doesn't need to be translated. The SD card's 3.3V output on that line will be read as HIGH by the Arduino, so it can just go straight through.

Google "SD voltage tolerance" finds quite some information

I'll have to read through a few more of those, but it still seems like the maximum a modern Micro SD card can withstand is ~3.6-4V.

Are there no pullup resistors on MOSI, SCK and CS, or at least MOSI and SCK (CS actually has a pullup inside the SD card).

the PCB doesn't seem to have any pullups on it. i think i see where you're heading with this, if it had 3.3V pull-ups, libraries could interface with it without level shifting by either pulling the pins low or switching to input mode, effectively mimicing open drain outputs.

And speakiing of 3.3V, is the 3.3V pin on your shield actually the ouput of the voltage regulator?

I checked it by only connecting 5V and GND via some wires and, nope! the 3.3V pin on the shield is not connected to the onboard regulator, in fact it doesn't seem to be connected to anything.
Because i also tried to supply the shield with only 3.3V and GND and the LCD wouldn't even light up.
to me that sounds like it fully relies on the onboard regulator, which also means that if you plug this into a fully 3.3V board without an arduino compatible 5V pin, it simply won't work despite the advertising implying that it should.

If so, you would not also connect the Arduino's 3.3V output there.

it's a shield, meaning it plugs directly onto an arduino board.
so both 5V and 3.3V are always supplied from the arduino board to the shield, which is something the user cannot control (unless you cut the pin i guess).

The MISO line doesn't need to be translated. The SD card's 3.3V output on that line will be read as HIGH by the Arduino, so it can just go straight through.

ye, that's useful. though technically speaking i'm not planning to use this shield with an arduino, but a custom board specifically for the shield that runs at 5V. which is why i asked about the SD slot to know if my board should include some level shifting or not. but now i see that using software open drain ports with a simple 3.3V pullup would also work.

In the old thread a fix I offered was to connect the SD holder pins to the header through 1N4148 diodes, so that MOSI, SCK and CS could be pulled low by the processor, but when those pins go high to 5V, current is blocked because the diode is reverse biased. But that requires having pullups to 3.3V on the SD side of the diodes. This is likely to be more compatible with SD libraries since you don't have to switch the pins into input mode.

But I guess you could add your own pullups as well as the diodes.

Well it has to be connected to something. Anyway, if the SD card is powered out of the 3.3V regulator, which appears to be a 1117, then you need a 5V supply to power the shield. But you may not have that available from a 3.3V microcontroller. So you need 5V power, but 3.3V signal lines. Yet there is no translation. It seems this shield was not well thought out, which I guess is your complaint.

You might also look at something like a 74LVT125, which is a quad buffer chip. It is used for translation because even though powered by 3.3V, its inputs are 5V tolerant. Something like that will be faster than anything relying on pullup resistors. Also comes in single gate, like 74LV1T34, which you would need three of. But no resistors would be needed, and no software hacks.

ooo, not a bad idea, and pretty cheap to implement!

i rechecked it, both the VCC pin on the SD Card slot and the level shifter ICs (and likely the LCD controller as well) are only connected to the onboard regulator, so i think that pretty much confirms that this shield that advertises itself with "3.3V/5V operation" REQUIRES a 5V supply to function, even when using 3.3V signals.

I'll have to keep that chip in mind for future proiects, thanks!

ultimately i guess that's what I get for buying some random TFT LCD online instead of an actual brand like adafruit, which also have a bunch of shields like this and they already look much higher quality with level shifting for both the LCD controller and SD card slot and being able to be powered by either 3.3V or 5V as well.
I'm kinda considering getting one of these (even if they are obviously more expensive) just for the sake of having something more complete (plus having more space as i don't have to copy the Arduino pin header layout)

You could also just connect one of these to the pinholes of the display:
Micro SD Storage Expansion Board Micro SD TF Card Memory Shield Module SPI For Arduino Promotion.
It has level converters and LDO.
I use these with 5V Arduino's and e.g. 3.3V ESP32. For 3.3V VCC I bridge the LDO with a jumper added.

MicroSD card modules, on the other hand, ...

I admit, I didn't realize that this refers to the adapter modules, not the MicroSD card itself.

i could, but it looks kinda stupid if there are 2 SD card slots on seperate PCBs with only one of them being functional...

Instead of trying to give a quick answer, with unconfirmed guesses, I should have asked what processor you intend to use first. But when an Arduino UNO shield picture is shown, I just guessed...
Good luck anyway!

I don't buy Adafruit much because of the price, but I think you get pretty consistent quality from them, as to both design and build. And you get schematics that tell you exactly what you're getting. No surprises.

I have a similar problem with a card like this, it doesn't read my card

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.