Parallel flash guidance

Hello, I’ve found a bunch of articles and topic related to this topic. However, none of them seems to be clear enough for initial curve learning.

I just routed an Arduino Due to a Parallel BGA flash pins in other to dump its contents. To be clear, it is just to understand its working principle for a future project.

I’ve read the datasheet, but isn’t clear though.

Please, can someone help me with that. Trial and error methodology is taking to long since Arduino Due upload is lazy.

MT28F320J3

Attached the datasheet. Please, really need some help!

MT28F(128,640,320)J3.pdf (785 KB)

What part isn't clear? If all you want to do is read the flash, most of the datasheet can be ignored.

Thanks for the quickly reply westfw!

I’m starting with the basic. Trying to read chip ID.

Please, check my code (mount based on others variations found) attached.

I can’t understand if I must set pins low or high in a specific order. Or, how to output or address correctly.

I was hopping to find some application note or a step by step hands on, but I guess this type of memory is to old.

This don’t produce the expected result, or I can’t read the correct result.

MeuLeitorR00.ino (5.17 KB)

ah. Reading the chip-id is likely to be significantly more difficult. :frowning:

The way these chips tend to work is that they'll sit there pretending to be an ordinary ROM - set of the address, send CS and RD, get your data.

Accessing additional function, like erasing, or reading the chip-id, requires that you somehow shift it into special modes where you're accessing control registers instead of the memory array...
(do you get reasonable results if you just try to read the memory?)

The point is that I have no clue if the results are correct. I was hopping chip ID may point some code bug.
Otherwise, it will just be random bits throwing through serial. Any other suggestion?

Sorry; I lack any knowledge at that level of detail. :frowning:

It looks like the special functions are invoked by first doing a "write" cycle to set up the function.
I'd modify your code to have primitives "int readCycle(address);" and "void writeCycle(address, val);", and the "readid" would become something like:

int readID() {
  writeCycle(CMD_ADDRESS, READIDSPACE_CMD);
  int i = readCycle(ID_ADDRESS);
  writeCycle(CMD_ADDRESS, NORMALMODE_CMD);
}

But I don't have any advice on the low-level details, like which bits should be written in which order, nor even a flash chip to try Trial and Error.

Good Luck!

OP: Must you use this device? Can you use a SPI (or even I2C) Flash? A FRAM?

Yes! This is an old hardware that I must interface with. I just started playing with it.

The code is just for test and trial. I'm sure it is a mess.

Any other place where I can ask perhaps?

Perhaps Micron has a user forum?

Yeah! I will try so... Thanks anyway. Any further update I will reply here.

No success!
Please, check my code attached. I really don’t know how to dump this flash.

Read.ino (4.95 KB)