
bilahari akkiraju wrote:
I did
protect off all
I have tried the following command sequences but didnt succeed in my objective of writing to and erasing first sector on flash.
WRITE COMMAND SEQUENCE:
mw ff000555 00AA00AA mw ff0002AA 00550055 mw ff000555 00A000A0 mw ff000000 12345678
SECTOR ERASE COMMAND SEQUENCE:
mw ff000555 00AA00AA mw ff0002AA 00550055 mw ff000555 00800080 mw ff000555 00AA00AA mw ff0002AA 00550055 mw ff000000 00300030
Note: I tried mw.b, mw.w, mw.l with appropriate data but didnt succeed.
In first place is it possible to write to AMD flash manually like this or shud it be done only programatically. Any one has tried writing to flash this way before ( I could write to Intel strata flash this way).
I walked through u-boot code for cfi_flash.c and flash_write() function that is called when cp (copy) command is invoked, the code does the same thing, the only extra thing it does is it polls on data register bits for a certain amount of time (flash erase, write timeout intervals) and also does a reset to bring back device to read array mode
mw.w ff000000 00F0 ; reset cmd
I have a ppc 8343 processor on board. I am wondering if U-boot that came with my target board has configuration that is preventing me to write to flash (but cp commands works fine with flash). Any one who has same spansion flash chip s29GL064M can try it, I cannot figure out the missing link in the chain, any advise, comments, suggestion will be of great help
Thanks, Bilahari
You can write to flash by hand, if you do it right. It is a good way to learn how to do it programatically.
I believe the addresses you are using are wrong because your example shows two 16 bit chips to make up your 32 bits of data. This means that the LSB address line becomes a chip select between the two chips (logically, if not physically) and is not seen by the chips themselves. The result is the chips see the addresses shifted right 1 bit. Equivalently, you have shift your addresses left by 1 bit to compensate.
Chip address: xxx555 => 0101 0101 0101 Your address: xxxAAA => 101 0101 0101x (x is the dropped bit) Or, regrouped: 1010 1010 101o (filling in 'o' for the "unused" LSB)
Chip address: xxx2AA => 0010 1010 1010 Your address: xxx554 => 0001 0101 010x Or, regrouped: 0001 0101 010o (filling in 'o' for the "unused" LSB)
Try the following, I suspect it will work. WRITE COMMAND SEQUENCE:
mw ff000AAA 00AA00AA mw ff000554 00550055 mw ff000AAA 00A000A0 mw ff000000 12345678
The standard flash driver figures this all out for you and thus works.
gvb