This is the mail archive of the ecos-discuss@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: Flash Driver Read/Write Alignment Question


I have not encountered an alignment issue (yet), as I haven't gotten that
far.  I am studying the source code (flash_am29xxxxx.inl).  I still don't
see how this is supposed to work.  Effectively, I would have:

	typedef cyg_uint16 flash_data_t; // flash_io.h
	volatile flash_data_t *f_s1, *f_s2;
	f_s1 = (volatile flash_data_t *)0xAAA; // flash base address omitted
	f_s2 = (volatile flash_data_t *)0x555;

	*f_s1 = FLASH_Reset;
	*f_s1 = FLASH_Setup_Code1;
	*f_s2 = FLASH_Setup_Code2;

Where does the 0x555 and 0xAAA get shifted left by 1?  The value of f_s2 is
odd.  Dereferencing it will result in an unaligned transfer.
Jay

-----Original Message-----
From: Gary Thomas [mailto:gary@mlbassoc.com]
Sent: Friday, June 09, 2006 11:02 AM
To: Jay Foster
Cc: 'ecos-discuss@ecos.sourceware.org'
Subject: Re: [ECOS] Flash Driver Read/Write Alignment Question


On Fri, 2006-06-09 at 10:06 -0700, Jay Foster wrote:
> I am puzzling over how the eCos flash drivers are supposed to work when
> using 16-bit wide flash devices.  I'm using an ARM architecture (ARM7TDMI,
> ARM940T), and the AMD AM29LV160 flash device connected in the 16-bit wide
> mode (CYGNUM_FLASH_WIDTH=16).
> 
> Looking at the flash driver code, this defines the flash_data_t as a
16-bit
> type.  This results in all accesses to the flash device to be performed as
> 16-bit reads/writes.
> 
> The flash driver defines some special addresses (FLASH_Setup_Addr1,
> FLASH_Setup_Addr2, etc.).  At least one of these will be defined as an odd
> address.  This will result in an unaligned transfer, causing a DATA ABORT
> exception.  What am I missing here?

They should not end up at odd addresses since they are cast to the
FLASH element type.  If this is 16 bit, Addr(0xA55) == 0x14AA, etc.

If you're ending up with alignment issues, then you've configured
your FLASH driver incorrectly (check the defines).  There are lots
of examples of 16 and 32 bit device setups, as well as some parallel
and banked layouts.

-- 
------------------------------------------------------------
Gary Thomas                 |  Consulting for the
MLB Associates              |    Embedded world
------------------------------------------------------------


-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss

-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]