This is the mail archive of the
ecos-discuss@sourceware.org
mailing list for the eCos project.
Re: redboot on STM32f4-discovery board
- From: Oleg Uzenkov <o dot uzenkov at unicore dot co dot ua>
- To: Sergei Gavrikov <sergei dot gavrikov at gmail dot com>, John Dallaway <john at dallaway dot org dot uk>
- Cc: eCos Discussion <ecos-discuss at sourceware dot org>
- Date: Mon, 13 Oct 2014 14:59:39 +0300
- Subject: Re: redboot on STM32f4-discovery board
- Authentication-results: sourceware.org; auth=none
- References: <542D110B dot 9080002 at unicore dot co dot ua> <542E8B41 dot 8030905 at dallaway dot org dot uk> <543003B9 dot 20300 at siva dot com dot mk> <5436AE5C dot 6060401 at unicore dot co dot ua> <alpine dot DEB dot 2 dot 00 dot 1410092235420 dot 10121 at sg-laptop>
Hi,
I have got redboot working on my board (with no external ram).
When I set (CYGBLD_REDBOOT_LOAD_INTO_FLASH == 1) I get such response:
RAM: 0x20000000-0x2001f000 [0x200039c8-0x1fff3000 available]
0x10000000-0x10010000 [0x10000000-0x10010000 available]
FLASH: 0x08000000-0x0807ffff, 4 x 0x4000 blocks, 1 x 0x10000 blocks, 3 x
0x20000 blocks
RedBoot>
*Note* invalid RAM range ([0x200039c8-0x1fff3000 available]).
When I set (CYGBLD_REDBOOT_LOAD_INTO_FLASH == 0) I get:
RAM: 0x20000000-0x2001f000 [0x20003998-0x20013000 available]
0x10000000-0x10010000 [0x10000000-0x10010000 available]
FLASH: 0x08000000-0x0807ffff, 4 x 0x4000 blocks, 1 x 0x10000 blocks, 3 x
0x20000 blocks
RedBoot>
*RAM range is valid*
It looks like CYGBLD_REDBOOT_LOAD_INTO_FLASH functionality occupies
0x20013000â0x1fff3000=0x20000 (this is actually the size of a flash
block (at the end on stm32f407, 128K)).
This is the Flash geometry I am using:
#define STM32_FLASH_SIZE (512*1024)
#define STM32_FLASH_BLOCK_INFO { { { 16*1024, 4 } , { 64*1024, 1 }, {
128*1024, 3} } }
#define STM32_FLASH_NUM_BLOCK_INFOS 3
It looks like a lot of RAM is used by CYGBLD_REDBOOT_LOAD_INTO_FLASH
functionality. Or does it depend on flash block size it is mapped to?
Can I shift it to occupy a smaller block of flash (for example 4th from
the end - 64K)?
BTW, what occupies the memory from 0x20013000 to 0x2001f000? I do not
have CYGOPT_REDBOOT_FIS enabled. It is usually FIS that occupies the end
of flash address map, but as I said it is disabled.
With best wishes,
Oleg
On Thu, 9 Oct 2014, Oleg Uzenkov wrote:
But, without Flash Image System I do not see how to use redboot to
load and store and run images.
Even for builds (CYGOPT_REDBOOT_FIS == 0) you can manage FLASH using
absolute FLASH addresses and FIS sub-commands: erase and write.
When you make RedBoot work smoothly on your target, then you can try to
load images directly to FLASH if you enable
cdl_option CYGBLD_REDBOOT_LOAD_INTO_FLASH {
user_value 1
};
eCos is designed with XIP (eXecute In Place) in mind and you can use
RedBoot 'go' command to execute ROM image from specified place of FLASH.
For simple applications it would be enough just to shift *rom* ORIGIN
address and *rom_vectors* address in `target.ld' file and re-link ROM
application, then with the option above it is possible to load and run
such ROM image as
load -m <protocol>
go
I call that it worked on my target (load-into-flash-and-go). However,
you need to inspect and may be fix HAL startup files for such "FLASH"
builds.
Sergei
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss