SD modules and 3.3V Arduinos.

Has anyone run one of those cheap SD modules on a 3.3V Arduino?

I have several modules that I stopped using after finding out that they're not good for the SD cards, a single resistor for voltage leveling is not enough.

But suppose I level the voltage between the Uno and the module, can the module with resistor for 5V work with 3.3V? Then it won't slowly kill my SD card.

Doesn't it work to supply the 5 volt SD's with 5 volt, the Arduino with 3.3 volt and level shifters for the data exchange?

There is no such thing as a 5V SD card, only 3.3V SD that must have some form of voltage leveling. What the cheap modules like I have uses does not really level the voltage is what Terry King let me know and over time it seems to be true. Terry is an EE though he may not be a member any more and the circuit schematic does show only 1 resistor per line is used to "level" the voltage. It's like an electrical equivalent of driving around on under-inflated tires, you can do it but it's not real bright.

The very best option is to use a 3.3V Arduino with an SD card module. These Pro Minis work great!

To use a 5V Arduino with an SD module, most people use a bidirectional level shifter like this one.

Yet another, very convenient option is to use the self contained, remarkably cheap Sparkfun OpenLog and either hardware or software serial to communicate. That way, no program space is required for the SD library.

I have to dig in boxes to get them but I do have 74HC4050's to do leveling with, should work on DIY SD adapters.

But I have these modules (1 not packed away) and wonder if they can work after DIY leveling given the cheap resistor-leveling (not voltage dividers, just 1 series resistor) ---- if a 3.3V signal can get through in time.

Quickest & easiest answer is if someone else tried to use a cheap SD module with a 3.3V board and it worked or not otherwise I gotta dig to find out while I'm downsizing and trying to pack to move before yet another year goes by.

if someone else tried to use a cheap SD module with a 3.3V board and it worked or not

Did you miss the first of reply #3?

The Sparkfun Openlog uses a 3.3V Atmega328 Arduino as the processor.

So yes, people actually do use the preferred method of interfacing to a 3.3V SD card, which is a 3.3V processor chip.

Does the Sparkfun Openlog 3.3V 328P have resistors between the 328P and flash?

I don't think so.

These modules have the resistors, that's the difference.

I already know that a 3.3V MCU can be wired directly to SD and work. I've modified a floppy cable as SD adapter before.

Now you have me wondering what your real question might be.

Never mind, though. Good luck with your project!

The cheap SD adapter modules I have here are powered by 5V, have a 3.3V regulator on board (AMS1117 iirc), and have a tri-state buffer for level shifter. Schematics are readily available online.

Removing & then bypassing the regulator should be all there is to it to get the thing to work on a 3.3V power supply. The buffer doesn't get in the way - as long as it's not the poorly designed version which doesn't release the MISO line when not in use, blocking you from using other SPI modules.

These have regulator, 4 resistors and 4 caps. LC Technology circa 2014, 12 were less than $20.

I had a schematic that I sent to an EE who advised me it would work but would degrade the SD card. Maybe it's a bit like if you fed tiny 5V spikes to a led then maybe you could half the life.

It might be easier to buy the kind you have though likely fewer.

I wouldn't mind a bare clip on a board with pins. As it is with my modules, the clip contacts come out and a nice Dremel cut renders the rest moot if it won't work on 3.3V lines.

4 caps could be for the regulator (I’m guessing 100 nF ceramic plus a larger tantalum).

4 resistors could be for MOSI/MISO/CLK/SS - acting as a poor man’s level shifter, relying on the clamping diodes. I’ve even read this in Atmel documentation (datasheet or AN) as a way of interfacing a 5V processor with a 0V/12V digital signal: add resistor to bring current to <0.5 mA, and you’re good to go.

I really don’t know if a microSD also has clamping diodes, but if they do this should work fine. MISO is a 3.3V signal which is good for the Arduino to read directly; the resistor on that line should have no effect on this.

I think almost all of the Ebay microSD modules have level shifter ICs, and they work fine with 5V Arduinos. However, they do not release MISO when CS is off, so they don't play well with other SPI devices.

Almost all of the full size SD modules have those resistors, which actually are pullup resistors, that accomplish nothing, and they send the full 5V to the SD card's input pins, which is not good. However here's a full size SD module which does have level shifters, although it may suffer from the MISO problem as well:

https://www.dx.com/p/sd-tf-card-adapter-module-for-arduino-3-3v-5v-compatible-multi-functional-reading-writing-module-2044018

The MISO issue could be handled if the Output Enable pin for the gate that's shifting MISO were tied to CS instead of to ground. I don't know why they don't design these modules that way.

When an SD card is selected it goes through an initialization doesn't it? So it it's always selected, it runs faster on average during operations.

Fun fact: ATmega serial ports can run as full-speed master mode SPI ports. Card to card data xfer could go faster on 2 SPI buses than on 1.

GoForSmoke: When an SD card is selected it goes through an initialization doesn't it? So it it's always selected, it runs faster on average during operations.

No, I don't think so. The CS just tells the SD whether it is currently being addressed or some other device. In fact, when sending commands to the SD card, it is customary to toggle CS off, then back on. So asserting CS doesn't cause it to re-initialize. I don't think there's any difference in speed.

It doesn't forget what file is open or where seek is either so no, no card re-init.

If I have an SPI port with SD and a serial port acting as SPI with SD it should be possible to synchronize data out from one card to data in to the other, port to port in the AVR. Otherwise it's select SD A, fill buffer, select SD B, copy buffer, repeat till done like having a single FD back in the day.

GoForSmoke: It doesn't forget what file is open or where seek is either so no, no card re-init.

I always thought that were software things, not card/hardware things.

The card has a controller, it wear levels the flash and uses a DOS FAT system (might be a Sandisk filesystem choice) to work as a drive server/subsystem for the flash. You don’t access SD flash directly.

If you use serial flash, it’s a different thing, same with EEPROM. They’re simpler since this app doesn’t need wear leveling or file access, just write once, read many operation. It won’t pause either.

STMicro makes the M95M02-DRCS6TP/K EEPROM 2 Mbit serial SPI 30pF 1.8 to 5.5V.
Mouser wants $3.64 for 1, price falls below $3 ea at 100.

That’s for 256KB. SPI can bus several if needed.

One 8G SD holds 32000 times as much.