Hi
We are using MPC8321 freescale microprocessor in one our boards. We are using NOR Flash M29DW323DT, from Numonyx (now Micron) as the boot flash. We are using Code warrior utility to program/access the flash. We are stuck at the first step of programming flash. Flash is not getting accessed properly.
As you may be aware that most of the flashes use CFI (Common Flash Interface) commands for various processes like program, erase, etc. A command consists of a sequence of writes including one or more steps. e.g in M29DW323DT, to put the flash in CFI Query mode the command is
Write Memory XXXX0055 with 0x00000098; this includes only one step of writing.
In contrary, programming/erase processes include three successive writes to put the flash in Programming/Erase mode.
It is observed that in our board, the flash is not able to take back to back writes. So for the commands which include only one write cycle, e.g Putting it in CFI query mode, it works and gives satisfactory outputs. But for commands like Program which includes 3 successive writes, it is failing.
Please suggest what could be the reason?
We have downloaded the flash driver from its respective website and executing the program source code through Code Warrior Debug Utility.
I'm not familar with this device, but writing does take more time, so are you checking the "busy/ready" pin before sending another write command?
No, I don't check the Ready/Busy pin. This pin has differnt meaning for this device. It is asserted only when the flash is getting Programmed/Erased. This pin never gets asserted. So flash never actually enters these modes.
Hi Apurva,
We have a similiar problem with the Flash Command Sequences.
We're using a MCF53017 Freescale Microprocessor and a S29WS128P NOR Flash Spansion.
For debug, we're using Code Warrior 7.2 to program/access the flash.
The system desing works succesfully with the CFI Command, but it doesn't work with other command sequences like Autoselect, Program, Erase, ....
And example with commands and results obtained are following:
=============================================================
/* Write CFI Entry command */
*(baseaddress + 0x555) = (unsigned short)0x98;
/* Get CFI Query */
query_1 = *(baseaddress + 0x10);
query_2 = *(baseaddress + 0x11);
query_3 = *(baseaddress + 0x12);
/* Write CFI Exit command */
*(baseaddress) = (unsigned short)0xF0;
/* setup for Get Manufactured ID and Device ID */
*(baseaddress + 0x555) = (unsigned short)0xAA;
*(baseaddress + 0x2AA) = (unsigned short)0x55; *(baseaddress + 0x555) = (unsigned short)0x90;
/* get id */
mf_id = *(baseaddress);
part_id = *(baseaddress + 1);
=============================================================
RESULTS:
Variables Value
query_1 0x0051 --> 'Q' ok
query_2 0x0052 --> 'R' ok
query_3 0x0059 --> 'Y' ok
mf_id 0x0011 --> Bad Result. Correct it should be 0x0001
part_id 0xEA00 --> Bad Result. Correct it should be 0x227E
=============================================================
I've attached an image of a screenshot of CodeWarrior IDE with the result (CodeWarrior Screen1.JPG)
I don't understand why the device entry into CFI Query Mode correctly but it doesn't works with others command sequence.
Could you resolve this problem?
Thank you in advance,
Francisco José Arroyo
We are having the exact same problem...did either of you 2 figure this out?
Thanks.
-- Dave