I have an ATtiny861 microcontroller powered directly from a Lipo battery. My circuit is designed to operate on supply voltages from 3V - 4.2V (bonus if it tolerates up to 4.6V).
I need to interface with a MicroSD card, which works around 3.3V. I'm using this datasheet from Kingston as a reference (feel free to point me toward a more authoritative spec).
I'm looking for suggestions on sourcing (or building) a level shifter that tolerates the entire 3V-4.2V range on one side, and 3.3V on the other. Initially I looked at the TXB0104 but it's inappropriate because it requires one side always remain lower than the other. (I suppose I could run my SD card under-voltage, eg. at 2.9V, but I'm hoping there's a better way).
Also note I'd like to minimize part count, routing complexity and footprint (in roughly that order).
A few more details:
I only need to read the card, and am limiting myself to SPI mode. That means three unidirectional "output" lines from the uC to the SD (CLK, CMD, CS/DAT3), and one unidirectional "input" line from the SD to the uC (DAT2).
Running the uC at 3.3V isn't an option I'm considering. It spends most of it's time sleeping, and periodically wakes to see if activity is required. I figure putting a linear or buck converter between the battery and uC would likely waste some power due to conversion losses during these periods. It would also necessitate a redesign of some other parts of my circuit.
I'm powering the SD card with a 3.3 buck regulator (PAM2301CAAB330) which is shut down when I'm not reading the card (nor using other devices sharing the same enable line).
I could probably do a quick-and-dirty hack by wiring the input directly to the uC, and the three outputs through voltage dividers. It might work at "typical" values, but would violate the min/max specs of the components.
Some helpful tidbits from the datasheets:
uC input HIGH min: 0.7 * Vcc (so down to 2.1V) uC input LOW max: 0.2 * Vcc uC output HIGH min (@3V Vcc): 2.5V uC output LOW max (@5V Vcc): 0.6V SD Vdd: 2.7V - 3.6V SD input HIGH min: 0.625 * Vdd SD input LOW max: 0.25 * Vdd SD output HIGH min: 0.75 * Vdd SD output LOW max: 0.125 * Vdd