Forums

Olimex LPC-H2294 Intel Flash

Started by Paulo de Almeida April 22, 2005

Hi,

The Olimex LPC-H2294 board has an Intel Flash (TE28F320C3BD70) with
32 Mbits arranged as 2MBx16bits. The board uses the chip at external
memory bank 0 with memory map 0x80008000 through 0x80200000.
According to the TE28F320C3BD70 datasheet each memory address
corresponds to one word (16 bits), my problem is that the LPC2294
doesn't let me write16 bit words at consecutive addresses, ex:
*0x80008000=0x0ff1 ,* 0x80008001=0x0ff2, *0x80008002=0x0ff3 etc.
but forces the use of 16bit pointer so I have to use
*0x80008000=0x0ff1 ,* 0x80008002=0x0ff2, *0x80008004=0x0ff3 each uses
only 2Mbytes of the 4Mbyes that the TE28F320C3BD70 has.

I don't know if I made myself clear, but can someone please give me
some advice on how can I use the total 4Mbtes of the TE28F320C3BD70 ?

Thanks

Paulo A.


An Engineer's Guide to the LPC2100 Series

Hello Paulo,

We made the same mistake on one of our own prototype PCBs, and I did not
get this working either. If you don't have any 8-bit devices on the bus,
you may try to set A0 as GPIO pin and set/clear this pin to access the
odd/even words of the flash. But keep in mind this is very tricky,
because an access to the GPIO may happen while the EMC is still busy
with a write request. Inserting a number of nops may help. I did not
have any problems accessing the GPIO after a read request. Use a logic
analyser or an oscilloscope to check your code. Richard.
Paulo de Almeida wrote:

>Hi,
>
>The Olimex LPC-H2294 board has an Intel Flash (TE28F320C3BD70) with
>32 Mbits arranged as 2MBx16bits. The board uses the chip at external
>memory bank 0 with memory map 0x80008000 through 0x80200000.
>According to the TE28F320C3BD70 datasheet each memory address
>corresponds to one word (16 bits), my problem is that the LPC2294
>doesn't let me write16 bit words at consecutive addresses, ex:
>*0x80008000=0x0ff1 ,* 0x80008001=0x0ff2, *0x80008002=0x0ff3 etc.
>but forces the use of 16bit pointer so I have to use
>*0x80008000=0x0ff1 ,* 0x80008002=0x0ff2, *0x80008004=0x0ff3 each uses
>only 2Mbytes of the 4Mbyes that the TE28F320C3BD70 has.
>
>I don't know if I made myself clear, but can someone please give me
>some advice on how can I use the total 4Mbtes of the TE28F320C3BD70 ?
>
>Thanks
>
>Paulo A. >--------
>*>. >
>




> >The Olimex LPC-H2294 board has an Intel Flash (TE28F320C3BD70) with
> >32 Mbits arranged as 2MBx16bits. The board uses the chip at external
> >memory bank 0 with memory map 0x80008000 through 0x80200000.
> >According to the TE28F320C3BD70 datasheet each memory address
> >corresponds to one word (16 bits), my problem is that the LPC2294
> >doesn't let me write16 bit words at consecutive addresses, ex:
> >*0x80008000=0x0ff1 ,* 0x80008001=0x0ff2, *0x80008002=0x0ff3 etc.
> >but forces the use of 16bit pointer so I have to use
> >*0x80008000=0x0ff1 ,* 0x80008002=0x0ff2, *0x80008004=0x0ff3 each uses
> >only 2Mbytes of the 4Mbyes that the TE28F320C3BD70 has.

> >I don't know if I made myself clear, but can someone please give me
> >some advice on how can I use the total 4Mbtes of the TE28F320C3BD70

The LPC2294 is byte addressing, therefore 0x80008000 = 0x0ff1 sets
0x80008001 to 0x0f (the high byte).
Addressing 16bit pointers to odd locations would give you unaligned
transfers, which aren't supported in the ARM7.

If you look at the Olimex schematic A1 from the processor is connected
to A0 of the flash, so each _even_ address accesses a 16 bit word.
So you are accessing all the memory, it just extends twice as far as
you think it does...

Richard Tuffin