flash signature generation
06-15-2016
12:10 PM
492 Views
lpcware
NXP Employee
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Content originally posted in LPCWare by jpplus on Thu May 21 01:55:35 MST 2015
Hi all,
I try to generate flash signature for LPC43XX, the problem I faced is I can get the correct signature (same with reference one which implement in Python and run in PC) when I generate signature for bank B.
my setting is:
1) my code is in bank A
2) main function and flash generation function are linked to RAM(verified by map file, [color=#00c] flash_signature 0x10000001 Thumb Code 70 main.o(ram_section)[/color])
3)If I put the address to Bank B, then I get correct data
4) if I put addres to Bank A which hold same flash content, I get wrong signature
5) Keil ARM compiler and tick box "one ELF section per function"
6) I have to reset the flash controller, otherwise, I cannot ge correct signature from Bank B.
I think problem still rely on the code in BankA. I disable interrupt when running this code, but still get wrong.
void flash_signature ( uint32_t start, uint32_t stop, int index, uint32_t *sig)
__attribute__((section ("ram_section")));
void flash_signature( uint32_t start, uint32_t stop, int index, uint32_t *sig )
{
FLASHSIG_Type * LPC_FMC;
__disable_irq();
LPC_FMC = (FLASHSIG_Type *)(LPC_FMCA_BASE);//if bank B, change to bank B address
LPC_FMC->FMSSTART = (start >> 4);
LPC_FMC->FMSTATCLR = (1 << 2);
LPC_FMC->FMSSTOP = (stop >> 4) | FLASHSIG_BUSY;
while((LPC_FMC->FMSTAT & (1 << 2)) == 0);
*sig=LPC_FMC->FMSW0;
*(sig + 1) = LPC_FMC->FMSW1;
*(sig + 2) = LPC_FMC->FMSW2;
*(sig + 3) = LPC_FMC->FMSW3;
LPC_FMC->FMSTATCLR = (1 << 2);
__enable_irq();
}
Hi all,
I try to generate flash signature for LPC43XX, the problem I faced is I can get the correct signature (same with reference one which implement in Python and run in PC) when I generate signature for bank B.
my setting is:
1) my code is in bank A
2) main function and flash generation function are linked to RAM(verified by map file, [color=#00c] flash_signature 0x10000001 Thumb Code 70 main.o(ram_section)[/color])
3)If I put the address to Bank B, then I get correct data
4) if I put addres to Bank A which hold same flash content, I get wrong signature
5) Keil ARM compiler and tick box "one ELF section per function"
6) I have to reset the flash controller, otherwise, I cannot ge correct signature from Bank B.
I think problem still rely on the code in BankA. I disable interrupt when running this code, but still get wrong.
void flash_signature ( uint32_t start, uint32_t stop, int index, uint32_t *sig)
__attribute__((section ("ram_section")));
void flash_signature( uint32_t start, uint32_t stop, int index, uint32_t *sig )
{
FLASHSIG_Type * LPC_FMC;
__disable_irq();
LPC_FMC = (FLASHSIG_Type *)(LPC_FMCA_BASE);//if bank B, change to bank B address
LPC_FMC->FMSSTART = (start >> 4);
LPC_FMC->FMSTATCLR = (1 << 2);
LPC_FMC->FMSSTOP = (stop >> 4) | FLASHSIG_BUSY;
while((LPC_FMC->FMSTAT & (1 << 2)) == 0);
*sig=LPC_FMC->FMSW0;
*(sig + 1) = LPC_FMC->FMSW1;
*(sig + 2) = LPC_FMC->FMSW2;
*(sig + 3) = LPC_FMC->FMSW3;
LPC_FMC->FMSTATCLR = (1 << 2);
__enable_irq();
}
0 Replies