Confused with voltage output and SPI communication

Hi guys,

Just beginning with Arduino and confused about something.
I have a Arduino UNO R3.
I have a Winbond W25Q16BV flash memory chip, which operates at 3.6v max.

If I use the 3.3v pin to power it, and just connect the other pin to the chip (MOSI, MISO, SS, CLK), should I be good to go?

I'm confused because I read in some tutorials about using 3.3v SPI devices with Arduino and they wer using some kind of circuitry to bring the voltage down instead of using the 3.3v pin... also in another article, it was mentioned that with 3.3v device, you needed to voltage divide the MOSI, MISO, CS lines as well...

Could someone please clarify this, especially the voltage divide transmit lines thing...

Thanks so much!

Yes you will be good to go - all the way to the shop for a new W25Q16BV!. The output of the UNO is 5v on its pins which is far to high for your chip.

You power the chip from the 3.3 you than need to convert the levels from 5v to 3.3 for input to the chip and you may also need to convert from 3.3 to 5v for input to the UNO. Look for a "logic level convert".

Don't forget to to conect the GND's.

Mark

Hi, One approach (if all the I/O devices you are planning to use can run at 3.3V) is to run the Atmel 328 chip at 3.3V. There are some arduino-compatible boards that can run at either 3.3V or 5V and have a built-in 3.3V regulator that puts out more current than the original USB interface chip. One example: http://goo.gl/5T1T6

This is the environment you have to work with in the future with Arduino DUE and Raspberry Pi which are 3.3V

DISCLAIMER: Mentioned stuff from my own shop...

Thanks guys.

The newbie that I am didn't know there was 5v on the pins eventhough I was powering the chip from the 3.3v pin.

Actually - I didn't even realize there was current output from the MOSI/MISO/CS pins.

Read again: I'm a beginner lol.

Thanks for clarifying.

EDIT --

Now let me confess something. I did use the chip with the Arduino - wired to a breadboard etc etc...
Everything was working perfectly, I could read, erase, write several times to it.
Then something happened - and it pretty much stopped working. My sector erase resulted in FFs and 0s instead of all FFs, my readings were all messed up... so I guess I have been pushing the chip with 5v on the lines for too long, it got tired of it and part of its memory just fried... learning the hardway!

I re-read the datasheet, it says:

PARAMETERS SYMBOL CONDITIONS RANGE UNIT
Supply Voltage VCC –0.6 to +4.0 V
Voltage Applied to Any Pin Vio Relative to Ground –0.6 to VCC+0.4 V

Regarding voltage to any pin, I guess the absolute max would be 3.7v in my case, since I connected the 3.3v arduino pin to the chip's Vcc?

One question though - would pushing 5v to a 3.6v max device totally burn it or can partially damage it ?
Because until yesterday, I was still able to read from it and get valid data from some memory locations....

Thanks for the info above though...

Cheers!

One question though - would pushing 5v to a 3.6v max device totally burn it or can partially damage it ?

Yes, that is likely. The internal chip process parameters are optimized for 3.3V and there are mechanisms, especially in flash chips, that are probably going to fail after a while with higher voltage.

There are some "3.3v" chips that will work OK with Arduino because they are designed with inputs that are "5V tolerant" and have outputs that put out almost 3.3V as a '1' which is read OK by Arduino. But not yours :frowning:

During development, chips are tested with a range of voltages outside the normal values. Sometimes a "shmoo" plot (Shmoo plot - Wikipedia) is made of the region that works and doesn't work. When we tested chips this way, there were saveguards to make sure that chips that were subjected to out-of-range voltages never got mixed back into product that would be shipped, because they could have suffered internal damage that would not show up until later.

Like yours??

Thanks a lot Terry for the information!

I guess I pushed my luck too far then :wink:
As I said, learning the hard way... I just read an article from Nick Gammon explaining how to prevent this using a TI buffer, wish I had seen this before.

This chip was actually an Asus motherboard corrupted BIOS. I guess I came that close from fixing it before all hell broke loose (I had written 2048 of 4096 corrupted bytes back to it when it suffered an attrocious death :wink:

The thing is, this motherboard uses a bios chip package that is only available on special orders from Winbond (W25Q16BVDAIG), it was easy to install/remove from the motherboard since it isn't soldered - it uses an DIP-8 socket.
I have a new one in the mail coming from Asus - but I wished I could fix the corrupted one while waiting for the new chip to arrive... oh well, at least I learned a good lesson!

Next time I'll know!

Thanks again!

P.S (Any idea if another chip with the same specs as mine could work on the motherboard - or is there anything that actually checks the chip Manufacturer/Device ID when it is plugged in the motherboard?)