[U-Boot-Users] minimum bdi config to read flash on 85xx
David Hawkins
dwh at ovro.caltech.edu
Wed Sep 12 20:00:57 CEST 2007
Hi Robert,
> Thanks all for the help so far. I'm going to jump back in the
> discussion at this part in the thread. We ran out of S29GL01GP chips
> so we temporarily moved to the S29GL512P 64MB chip, with a chip size
> of 4000000. The good news is after jumpering the board to the correct
> addresses we can do a "mdf 0xfc000000" and get all F's . We can also
> do a "erase 0xfc000000 CHIP" and the command completes successfully.
>
> When we do a "prog 0xfc000000 uboot.bin bin" however, we get
> ""Programming flash memory failed" . Our questions at this point are:
Before assuming an address that reads 0xFFFFFFFF is really
your flash, you did double-check that the Flash CE# and OE#
signals are active for those accesses correct?
> 1) If we can do an erase as shown above does that mean our unlocking
> sequence has been performed correctly?
As I have commented before; if you're unsure, *do it manually*,
read the manufacturer ID first, and sector protection, or
whatever.
> What's confusing us here is that the "0x555 0xAA 0x2AA 0x55" sequence
> seems to be the same for our current S29GL512P, the S29GL01GP, Ben's
> S29GL064M, and the MPC8548CDS chip , the AM29LV641D. Maybe some CFI
> standard thing?
Don't be confused; read the data sheet :)
Yes, its a CFI thing. However, non-CFI JEDEC flash has something
similar.
> Anyways. Ben's sequence and an example I found for the
> CDS board is this:
>
> ; Enable flash programming
> WM16 0xfe000000 0x0060 ;clear flash lock-bits
> WM16 0xfe000000 0x00d0
> DELAY 1000
> WM16 0xfe000000 0xffff
I don't see an unlock sequence here though. Perhaps there
is an unlock-bypass command earlier on.
> In our case 0xfe000000 becomes 0xfc000000. We found a 8540ads with
> the same code. In the 8548cds case they seem to use the equivalent
> for 0xFF800000 with WM32. In all these examples where not sure where
> these addresses come from as they don't seem to be clearly from the
> respective manuals.
I explained earlier the fact that the processor starts off
with a default memory map that you can then override.
So 0xFF800000 is the default map with an 8MB window at
the top of memory, while 0xFE000000 is a 32MB window setup
by writes to the local bus registers (OR/BR or whatever
they're called).
> We also can execute the unlock command successfully, with this entry
> in our config files:
>
> ERASE 0xFc000000 CHIP; Erase whole Chip
If the chip started out with 0xFFFFFFFF, then you can't
really say you've had success :)
> 2) Any other ideas on why we can read and erase but not write our flash?
>
> Thanks all, been quite a ride but I think we're almost ready to get
> into debugging our u-boot code.
Go back to basics first;
1. Confirm that accesses to the addresses you believe the
Flash are located generate CE# and OE#
(I'm sure you did this, but you didn't re-state it)
2. Use memory commands to read the manufacturer ID
3. Use memory commands to write a word
4. Use memory commands to erase that sector
5. Repeat 3
6. Use memory commands to erase the chip
Then try the software equivalents.
Then try programming U-boot.
Cheers,
Dave
More information about the U-Boot
mailing list