sample of erasing sector 7 on LPC1768

Dependencies:   IAP mbed

Fork of IAP_internal_flash_write by Tedd OKANO

Committer:
okano
Date:
Tue Sep 26 03:39:31 2017 +0000
Revision:
7:b43867fa8bef
Parent:
6:2357a04a16ff
sample of erasing sector 7 on LPC1768

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okano 0:b802bd2f4cc9 1 #include "mbed.h"
okano 0:b802bd2f4cc9 2 #include "IAP.h"
okano 0:b802bd2f4cc9 3
okano 0:b802bd2f4cc9 4 #define MEM_SIZE 256
okano 1:a85b51eeb446 5
okano 7:b43867fa8bef 6 #define TARGET_SECTOR 7 // use sector 7 as target sector if it is on LPC1768
okano 0:b802bd2f4cc9 7
okano 0:b802bd2f4cc9 8 void memdump( char *p, int n );
okano 0:b802bd2f4cc9 9 int isprint( int c );
okano 0:b802bd2f4cc9 10
okano 0:b802bd2f4cc9 11 IAP iap;
okano 0:b802bd2f4cc9 12
okano 7:b43867fa8bef 13 void write_dummy_data( void );
okano 0:b802bd2f4cc9 14
okano 7:b43867fa8bef 15
okano 7:b43867fa8bef 16 main()
okano 7:b43867fa8bef 17 {
okano 7:b43867fa8bef 18 int r;
okano 7:b43867fa8bef 19
okano 7:b43867fa8bef 20 // Write dummy data into Flash sector7
okano 7:b43867fa8bef 21 write_dummy_data();
okano 7:b43867fa8bef 22
okano 7:b43867fa8bef 23 printf( "\r\n==== dummy data written ====\r\n" );
okano 7:b43867fa8bef 24
okano 7:b43867fa8bef 25
okano 7:b43867fa8bef 26 printf( "\r\nShowing flash contents of sector %d\r\n", TARGET_SECTOR );
okano 7:b43867fa8bef 27 memdump( sector_start_adress[ TARGET_SECTOR ], MEM_SIZE );
okano 7:b43867fa8bef 28
okano 7:b43867fa8bef 29
okano 7:b43867fa8bef 30 // Try blank check
okano 7:b43867fa8bef 31 r = iap.blank_check( TARGET_SECTOR, TARGET_SECTOR );
okano 7:b43867fa8bef 32 printf( "Try blank check ==> blank check result = 0x%08X\r\n", r );
okano 7:b43867fa8bef 33
okano 7:b43867fa8bef 34 // Try erase
okano 7:b43867fa8bef 35 iap.prepare( TARGET_SECTOR, TARGET_SECTOR );
okano 7:b43867fa8bef 36 r = iap.erase( TARGET_SECTOR, TARGET_SECTOR );
okano 7:b43867fa8bef 37 printf( "Try erase ==> erase result = 0x%08X\r\n", r );
okano 7:b43867fa8bef 38
okano 7:b43867fa8bef 39 printf( "\r\nShowing flash contents of sector %d\r\n", TARGET_SECTOR );
okano 7:b43867fa8bef 40 memdump( sector_start_adress[ TARGET_SECTOR ], MEM_SIZE );
okano 7:b43867fa8bef 41
okano 7:b43867fa8bef 42 }
okano 7:b43867fa8bef 43
okano 7:b43867fa8bef 44 void write_dummy_data( void )
okano 3:63a0993315e5 45 {
okano 0:b802bd2f4cc9 46 char mem[ MEM_SIZE ]; // memory, it should be aligned to word boundary
okano 0:b802bd2f4cc9 47 int r;
okano 0:b802bd2f4cc9 48
okano 3:63a0993315e5 49 printf( "\r\n\r\n=== IAP: Flash memory writing test ===\r\n" );
okano 6:2357a04a16ff 50 printf( " device-ID = 0x%08X\r\n", iap.read_ID() );
okano 6:2357a04a16ff 51
okano 6:2357a04a16ff 52 printf( " CPU running %dkHz\r\n", SystemCoreClock / 1000 );
okano 1:a85b51eeb446 53 printf( " user reserved flash area: start_address=0x%08X, size=%d bytes\r\n", iap.reserved_flash_area_start(), iap.reserved_flash_area_size() );
okano 0:b802bd2f4cc9 54
okano 0:b802bd2f4cc9 55 for ( int i = 0; i < MEM_SIZE; i++ )
okano 0:b802bd2f4cc9 56 mem[ i ] = i & 0xFF;
okano 0:b802bd2f4cc9 57
okano 0:b802bd2f4cc9 58 // blank check: The mbed will erase all flash contents after downloading new executable
okano 0:b802bd2f4cc9 59
okano 0:b802bd2f4cc9 60 r = iap.blank_check( TARGET_SECTOR, TARGET_SECTOR );
okano 1:a85b51eeb446 61 printf( "blank check result = 0x%08X\r\n", r );
okano 0:b802bd2f4cc9 62
okano 0:b802bd2f4cc9 63 // erase sector, if required
okano 3:63a0993315e5 64
okano 0:b802bd2f4cc9 65 if ( r == SECTOR_NOT_BLANK ) {
okano 0:b802bd2f4cc9 66 iap.prepare( TARGET_SECTOR, TARGET_SECTOR );
okano 0:b802bd2f4cc9 67 r = iap.erase( TARGET_SECTOR, TARGET_SECTOR );
okano 1:a85b51eeb446 68 printf( "erase result = 0x%08X\r\n", r );
okano 0:b802bd2f4cc9 69 }
okano 3:63a0993315e5 70
okano 0:b802bd2f4cc9 71 // copy RAM to Flash
okano 0:b802bd2f4cc9 72
okano 0:b802bd2f4cc9 73 iap.prepare( TARGET_SECTOR, TARGET_SECTOR );
okano 0:b802bd2f4cc9 74 r = iap.write( mem, sector_start_adress[ TARGET_SECTOR ], MEM_SIZE );
okano 1:a85b51eeb446 75 printf( "copied: SRAM(0x%08X)->Flash(0x%08X) for %d bytes. (result=0x%08X)\r\n", mem, sector_start_adress[ TARGET_SECTOR ], MEM_SIZE, r );
okano 0:b802bd2f4cc9 76
okano 0:b802bd2f4cc9 77 // compare
okano 0:b802bd2f4cc9 78
okano 0:b802bd2f4cc9 79 r = iap.compare( mem, sector_start_adress[ TARGET_SECTOR ], MEM_SIZE );
okano 1:a85b51eeb446 80 printf( "compare result = \"%s\"\r\n", r ? "FAILED" : "OK" );
okano 0:b802bd2f4cc9 81 }
okano 0:b802bd2f4cc9 82
okano 0:b802bd2f4cc9 83
okano 3:63a0993315e5 84 void memdump( char *base, int n )
okano 3:63a0993315e5 85 {
okano 0:b802bd2f4cc9 86 unsigned int *p;
okano 0:b802bd2f4cc9 87
okano 0:b802bd2f4cc9 88 printf( " memdump from 0x%08X for %d bytes", (unsigned long)base, n );
okano 0:b802bd2f4cc9 89
okano 0:b802bd2f4cc9 90 p = (unsigned int *)((unsigned int)base & ~(unsigned int)0x3);
okano 0:b802bd2f4cc9 91
okano 0:b802bd2f4cc9 92 for ( int i = 0; i < (n >> 2); i++, p++ ) {
okano 0:b802bd2f4cc9 93 if ( !(i % 4) )
okano 1:a85b51eeb446 94 printf( "\r\n 0x%08X :", (unsigned int)p );
okano 0:b802bd2f4cc9 95
okano 0:b802bd2f4cc9 96 printf( " 0x%08X", *p );
okano 0:b802bd2f4cc9 97 }
okano 0:b802bd2f4cc9 98
okano 1:a85b51eeb446 99 printf( "\r\n" );
okano 0:b802bd2f4cc9 100 }