sample of erasing sector 7 on LPC1768
Fork of IAP_internal_flash_write by
main.cpp@7:b43867fa8bef, 2017-09-26 (annotated)
- 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?
User | Revision | Line number | New 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 | } |