2007-06-01 12:22 AM
Aplication downloaded from bootloader
2011-05-17 12:43 AM
I found that aplication downloaded from bootloader(writen by me)
RCLK = fMSTR = fPLL = 96Mhz not work when aplication compiled(FMICLK = RCLK) but work when aplication compiled(FMICLK = RCLK/2) It seems like after writing to flash( clock was limited to RCLK = fMSTR = fPLL = 48Mhz , FMICLK = RCLK/2 ) aplication also can not work on maximum FMICLK) Is it a silicon limitation ?2011-05-17 12:43 AM
Hi kesart,
I have the same experience with application loaded by bootloader. For FMICLK=96MHz the FMI_ReadWaitState must =FMI_READ_WAIT_STATE_3 and FMI_WriteWaitState must =FMI_WRITE_WAIT_STATE_1. This is set by FMI_Config function prior to switching the MCLK to PLL at 96MHz. Problem is, that the ST's Software Library has a bug in 91x_fmi.c right in FMI_Config. So originally the processor stucks just in moment of executing the FMI_Config(......) in newly downloaded application in Bank0. Here is the corrected fuction: void FMI_Config(u16 FMI_ReadWaitState, u32 FMI_WriteWaitState, u16 FMI_PWD,u16 FMI_LVDEN, u16 FMI_FreqRange) { /* Configure the write wait state value */ if (FMI_WriteWaitState == FMI_WRITE_WAIT_STATE_1) { FMI->CR |= FMI_WRITE_WAIT_STATE_1; } else { FMI->CR &= FMI_WRITE_WAIT_STATE_0; } /* Write a write flash configuration register command */ *(vu16 *)0x80000 = 0x60; /* Configure the flash configuration register */ *(vu16 *)(0x80000|FMI_ReadWaitState|FMI_PWD|FMI_LVDEN|FMI_FreqRange) = 0x03; } It works either booting from Bank0 or Bank1. I wish the software library from ST will be soon updated. miluk2011-05-17 12:43 AM
Most likely you have overlooked, that boot and non-boot banks have exchanged places.
In Keil it is necessary to correct Flash Configuration Register initialization: ; Write ''Write flash configuration'' command (60h) LDR R0, =FMI_BBADR_Val ; MOV R1, #0x60 STRH R1, [R0, #0] ; Write ''Write flash configuration confirm'' command (03h) LDR R2, =(FLASH_CFG_Val:SHL:2) ADD R0, R0, R2 MOV R1, #0x03 STRH R1, [R0, #0]2011-05-17 12:43 AM
I apologize to ST, the reason for not functioning the FMI_Config was due to wrong configuration of my ST library, not the bug in the library itself.
I'm using RIDE and have selected the using of ST libraries (STRx-LIB). The library is probably compiled for booting from Bank0 and when booting from Bank1 the FMI_Config hangs.2011-05-17 12:43 AM
Hi AlexandrY,
Please answer me. I also think that this is the exactly the problem. But in my aplication that must be downloaded via bootloader i disable the Flash Memory Interface (FMI) option because i use software remaping before jump to aplication. That is why this line : LDR R0, =FMI_BBADR_Val ; not compatible i prefer to use it in such way. Is there any way not to disable Flash Memory Interface (FMI) option ? And to use it exactly as you wrote.2011-05-17 12:43 AM
My programs perfectly work on 96 MHz without disabling EMI check box in Keil startup both in the loader and in an application.
I have written the loading program using an example from ST but without use of their libraries. However procedures of work with FLASH in my program are executed from RAM