This is the mail archive of the ecos-patches@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]

[Bug 1001561] Internal flash driver for Freescale TWR-K60N512 board


Please do not reply to this email. Use the web interface provided at:
http://bugs.ecos.sourceware.org/show_bug.cgi?id=1001561

--- Comment #24 from Ilija Kocho <ilijak@siva.com.mk> 2012-06-23 17:38:52 BST ---
(In reply to comment #23)
> (In reply to comment #21)
> > Hi Nicolas
> > 
> > I'm sorry for late reply, but I was busy. I tried to disable keeping Redboot
> > configuration data in FLASH bit it still raises exception. Can you post your
> > ECM file?
> 
> No problem. I posted a working for me configuration. I hope this works for you
> as well.

Thanks. I did some testing.

> 
> > 
> > (In reply to comment #20)
> > > Hi Ilija,
> > > 
> > > I have made some tests and in order for the driver to work, I desactivated the
> > > "Redboot FIS support" (in Redboot ROM monitor -> Allow RedBoot tu support FLASH
> > > programming) and desactivated the "Keep Redboot configuration data in flash"
> > > option.
> > > When this options are enabled, Redboot try to read a portion of flash  (with a
> > > memcpy) which leads to a problem.
> > 

The end address in CYG_FLASH_DRIVER is 1 byte too high and it triggers
exception when you FIS directory and fconfig are at end of the FLASH.
It should be

(CYGMEM_REGION_flash + CYGMEM_REGION_flash_SIZE - 1)


Also I think that for the time being we should protect Redboot from overwriting
itself (and prevent writing to FLASH security area (0x400..0x40f). 
Note this can be the reason for your system freeze when you put FIS directory
at beginning of FLASH. Something like this:

#define REDBOOT_IMAGE_SIZE CYGBLD_REDBOOT_MIN_IMAGE_SIZE

cyg_kinetis_flash_dev hal_kinetis_flash_priv;
static const cyg_flash_block_info_t cyg_flash_kinetis_block_info[1] = {
    { KINETIS_FLASH_BLOCK_SIZE, (CYGMEM_REGION_flash_SIZE -
REDBOOT_IMAGE_SIZE)/
        KINETIS_FLASH_BLOCK_SIZE }};

CYG_FLASH_DRIVER(hal_kinetis_flash,
                 &cyg_kinetis_flash_funs,
                 0,
                 CYGMEM_REGION_flash + REDBOOT_IMAGE_SIZE,
                 (CYGMEM_REGION_flash + CYGMEM_REGION_flash_SIZE - 1),
                 1, //number of block info
                 cyg_flash_kinetis_block_info,
                 &hal_kinetis_flash_priv);

With this configuration it works with default configuration. But I have tried
fconfig -i and fis init and it fails to write. Here is the "fconfig -i" minicom
output:

RedBoot> fconfig -i 
Initialize non-volatile configuration - continue (y/n)? y
Run script at boot: false
Use BOOTP for network configuration: false
Gateway IP address: 192.168.209.1 
Local IP address: 192.168.209.77
Local IP address mask: 255.255.255.0
Default server IP address: 192.168.209.7
Console baud rate: 38400
GDB connection port: 9000
Force console for special debug messages: false
Network debug at boot time: false
Update RedBoot non-volatile configuration - continue (y/n)? y
... Erase from 0x0007e000-0x0007efff: ..
... Program from 0x2000d800-0x2000e800 to 0x0007e000: V
Error writing config data at 0x0007e000: Data verify failed after operation


> 
> I found out something about that : it seems to come from th "Flash block
> containing the directory" option which has the value "-1". This value should
> correspond to the last block of flash but when I put the value to 2, I get a
> prompt and the fis command (even if it still crash when I do a fis init).
> 
> > 
> > > 
> > > I also try to move the CYG_FLASH_DRIVER into a new kinetis_flash.c file and add
> > > it to the file to be compile in the .cdl file. Redboot builds fine with it but
> > > when I launch it, it seems that there is no flash init done. I'll keep working
> > > on that but if you have any idea of what I am missing ...
> > 
> > Probably the object file containing CYG_FLASH_DRIVER has been discarded by the
> > linker since effectively there aren't references to it.
> > If the driver is general for all Kinetis devices you can leave it in
> > kinetis_misc.c or put it in kinetis_flash.inl and include in kinetis_misc.c.
> > Otherwise you can put copies in platforms (see STM32 for example). However
> > driver inclusion for compilation should be conditional with some #ifdef.
> 
> So I let it where it is for the moment. Thanks

For the time being you could leave it, but for the permanent 


> 
> > 
> > Ilija

-- 
Configure bugmail: http://bugs.ecos.sourceware.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.


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