SPI SD/MMC power efficiency

Go To Last Post
5 posts / 0 new
Author
Message
#1
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I'm using an SD card on SPI for data storage on FAT for a data logging and capturing application.

Battery life is important in this application, so I've already implemented sector buffering in FAT (i.e. cache last FAT, directory and write blocks), and data buffering in the application (i.e. cache data in sram until sector_size multiple before writing out to FAT).

The next challenge is to improve power efficiency by sleeping or turning off both the SPI peripheral block and the SD card between write outs.

Question is: looking at SD/MMC specs, there's no granular way to power save, by the looks of it, the only choice for me is to send a CMD0 to go back to idle state, then on recovery, go through CMD1 initialisation.

Does this sound right, has anyone else tackled this problem, comments, suggestions, hints, etc?

Thanks!

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Hi,

if you take care of timing and hardware, then you can switch off the complete SD/MMC.

Check if it´s worth it, (compare the idle power consumption)

Klaus
********************************
Look at: www.megausb.de (German)
********************************

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I chose to run the power for the mmc from one of my port pins. I'm using a 16Meg card and it only uses a few Milliamps. I just re-initialize the card each time I need to store data. I only write to it every minute or so. Basically it is off most of the time.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Hi,

take care: during power OFF:
no dataline and control line should be high to prevent from powering the SD from the datalines
via the protection diodes.

Klaus
********************************
Look at: www.megausb.de (German)
********************************

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I shut down power to the card, and then re-power and re-initialize it when I need it, using the CMD0, CMD1 sequence.

One issue I have not completely analyzed is how long it actually takes to initialize. Specs say it could take up to 500 ms.

Another issue that I am confused by is that specs say that a block write typically takes 0.5 ms, but when I look at the increased current draw that occurs with a block write, it always lasts for 50 ms, which means that the power consumption is 100x what is supposed to by "typical".

Have you or anyone else looked at this, or have an explanation?