SD Card Reader with buffer

Hello,

I have an Arduino Uno R3 and was wondering if someone could recommend a simple SD card reader? I’ve read a few posts about some SD card readers that do not release the MISO line which will cause issues with other SPI devices on the same bus. It’s not clear to me which SD cards readers have this issue.

I am a simple power supply engineer with little coding experience and I have a home project that I’ve been tinkering with for a year or so and it desperately needs a micro controller to make it work right. The first step in to log temperature with an SD card so I can graph it. I don’t need a RTC at this point. I am using a TMP36 temp sensor.

any help appreciated,

-kooner

Buy from reputable suppliers who support their products and avoid disappointments from Amazon, eBay, Alibaba, etc. The item may cost a bit more, but you get what you pay for.

Example from a reputable supplier, guaranteed to work with 3.3V Arduinos and 5V Arduinos. Adafruit has excellent "getting started" and learning guides as well.

2 Likes

This is an example of one of the ones with the problem. If you have one and really want to use it, cut the trace where circled and add a bodge wire from the MISO pin to the right hand end of the resistor shown.

2 Likes

The modules with the bad design will work fine as long as you don't have another SPI device in your circuit. And you can modify them to fix the defect if you have a soldering iron. The Adafruit module does not have the problem, but is more expensive.

Unrelated to your SD card question, but since you have “little coding experience”…

Why use a TMP36? That’s ancient tech. A digital temperature sensor would be better (such as the DS18B20).

But if you insist, beware: the TMP36 is not ratiometric. There are ways to deal with that…

Hello,

Thanks for the responses.

I do have a soldering iron and small lab at home so I could make the mod to an SD card reader than needs it.

In the photo of the card reader above I see an LVC125A tri state buffer.

The adafruit version uses a CD4050 digital buffer, not tristate, right?

https://learn.adafruit.com/adafruit-micro-sd-breakout-board-card-tutorial/download

So i’m confused, wouldn’t the tristate version be better since it wouldn’t disturb the bus that is shared with other SPI devices?

What is the part number of the one that was modified in the photo above? The yellow wire that connects the MISO pin to resistor, where is that on the schematic? I mean what is the mod doing?

Why use a TMP36? That’s ancient tech. A digital temperature sensor would be better (such as the DS18B20).

I chose the TMP36 because I have used them before. I did get some code running using the ADC to convert the TMP36 voltage to a temp reading with the serial monitor. It’s the only code I’ve actually run on an Arduino (ignoring the blink program of course)

The DS18B20 does look interesting but I would like to get an SD card reader working first. I’m looking at a DS18B20 Maxim datasheet, 1 wire protocol? How does that work with the Arduino? Have you used this without the Vdd pin? Any hiccups in parasite power mode? I don’t see the value of the Cpp bypass cap. The temp sensor would be 3-4 feet from the micro.

My project is adding an internal fan to a 60qt cooler for road trips. I put a thermocouple in my cooler, loaded it with ice and noticed inside the cooler at the highest point (just under the lid) the temp stabilized at 58F (external ambient was 80F) but with a fan it drops to 42F. Next I put the ice in a metal bucket had the fan blow on the bucket and temp dropped to 40F and no watery mess! The fan runs from the 12V cigarette lighter in my van which also charges a battery pack that will run the fan when my van is off. I took the whole thing on a road trip replacing the ice when we stopped for gas.

It worked quite well but has one flaw. The ice retention. Half the ice melts in about 3-4 hours. The water that collects at the bottom of the bucket doesn’t help either (a separate problem). The outside of the cooler (especially the lid) feels a little cool from the fan pushing the air into the cooler walls.

What I need is to cycle the fan on and off depending on temperature. Probably should slow the fan down too. But before I can do that I need an accurate temperature map on the inside of the cooler under all different conditions over several hours. A micro and a few temper sensors can help me do that.

Anyway, that’s my story.

-kooner

The LVC125A has all four of its /EN lines tied to ground. So all four gates are active all the time, and are never tristate. So for the three SPI output lines of the Arduino, the two circuits behave exactly the same.

The difference is in the MISO line, which is an output of the SD card. The card itself will tristate its output except when its /CS line goes low, which means the card has been selected. That's exactly what you want, so Adafruit just connects the SD pin directly to the MISO header pin.

But the buggy version runs MISO through the 125A. In the first place, this just translates the 3.3V MISO signal to, uh, 3.3V. But the bad thing is that MISO never goes tristate because of the 125A. So any other SPI device just gets walked on. The fix just converts that to the Adafruit version, bypassing the 125A. Here's the circuit:

An alternative fix for that card is to pull the enable pin for the buffer used for MISO loose from the PC board and connect that to the chip select line.

Thanks for explaining that. I can see the net named ‘DO’ om the Adarfuit schematic does not use any buffer. I will pickup a couple of the Adafruit versions.

Was the buggy version ever updated to bypass the 125A on the MISO line? Just curious.

I also need an SD memory card to log the temperature data. I see the Arduino Uno can handle 32GB with FAT32? Is there any advantage (reliability?) to using a smaller card?

I need to look at the data on Excel on a Windows 11 machine. The temperature data would be stored once a second for a day so 86400 times whatever bytes are needed to store hh:mm:ss and xx.x (°C). Reliability is more important than cost since this is my first prototype.

No it wasn't. Still widely sold to this day.

I don't think so. An SDHC card would be 4 to 32 GB FAT32. Smaller SD cards may be difficult to find anymore, and may lead you to dubious sources. And I've not found that smaller cards are more reliable.

Does the temperature change that fast? Does your sensor react that fast? A plastic case TMP36 is air doesn't.

With a constant sample interval, save a boatload of space by storing the start time and sample interval once, followed by the data points. The time at each data point can be calculated later.

I’m using the SOT-23 package, it does react slowly in still air however, I’m using a fan which speeds up the readings. I put the sensor in my cooler with the fan, used a 5V supply and DMM and took some basic readings. Just need to get it working with an Arduino.

Interesting, didn’t think of that. Thanks.