This is the mail archive of the
ecos-patches@sourceware.org
mailing list for the eCos project.
[Bug 1001561] Internal flash driver for Freescale TWR-K60N512 board
- From: bugzilla-daemon at bugs dot ecos dot sourceware dot org
- To: ecos-patches at ecos dot sourceware dot org
- Date: Tue, 26 Jun 2012 10:31:23 +0100
- Subject: [Bug 1001561] Internal flash driver for Freescale TWR-K60N512 board
- Auto-submitted: auto-generated
- References: <bug-1001561-104@http.bugs.ecos.sourceware.org/>
Please do not reply to this email. Use the web interface provided at:
http://bugs.ecos.sourceware.org/show_bug.cgi?id=1001561
--- Comment #25 from Nicolas Aujoux <nau@csm-instruments.com> 2012-06-26 10:31:10 BST ---
(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.
>
> (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.
>
> Have you tried with cyg_flash_read()? It is recommended in manual and I would
> recommend too.
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
>
> Ilija
(In reply to comment #24)
> (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)
Thanks for pointing that out.
>
>
> 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
>
The problem here is that in my driver, I expect a relative address in flash so
I substract the flash base to the address and thus the program command actually
programs the address minus 0x20000. Anyway, my bad, I will post a patch to
correct this.
>
> >
> > 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.