Code to load a LPC1114 over tx/rx. I have only tested with a 1114 chip but it should work with other LPC uControllers
Dependencies: DirectoryList MODSERIAL mbed
Fork of ika_shouyu_poppoyaki by
Revision 44:568799eac6df, committed 2014-12-10
- Comitter:
- okano
- Date:
- Wed Dec 10 09:24:00 2014 +0000
- Parent:
- 43:c7d6d62abc14
- Child:
- 45:0520330a7528
- Commit message:
- LPC1768 and LPC1769 support added
Changed in this revision
--- a/_user_settings.h Sat Oct 18 09:44:43 2014 +0000 +++ b/_user_settings.h Wed Dec 10 09:24:00 2014 +0000 @@ -19,7 +19,7 @@ // suppress "command and result" monitoring output to terminal // the "command and result" monitoring feature is made for debugging. -#define SUPPRESS_COMMAND_RESULT_MESSAGE +//#define SUPPRESS_COMMAND_RESULT_MESSAGE // enable "AUTO_PROGRAM_START" to let target starts the program after flash writing complete
--- a/isp.cpp Sat Oct 18 09:44:43 2014 +0000 +++ b/isp.cpp Wed Dec 10 09:24:00 2014 +0000 @@ -16,7 +16,6 @@ BusOut leds( LED4, LED3, LED2, LED1 ); Ticker success; - int file_size( FILE *fp ); unsigned int read_crp( FILE *fp ); unsigned int crp_check( FILE *fp ); @@ -36,7 +35,7 @@ return ( ERROR_AT_TARGET_OPEN ); } - printf( " target device found : type = \"%s\"\r\n", tpp->type_name ); + printf( " target device found : type = \"%s\"\r\n", tpp->type_name ); printf( " ID = 0x%08X\r\n", tpp->id ); printf( " RAM size = %10d bytes\r\n", tpp->ram_size ); printf( " flash size = %10d bytes\r\n", tpp->flash_size ); @@ -52,7 +51,12 @@ if ( !data_size ) return ( ERROR_DATA_SIZE_ZERO ); - last_sector = (data_size - 1) / tpp->sector_size; + for ( int i = 0; i < 32768; i += 4096 ) + printf( "%10d : %2d\r\n", i, find_sector( i, tpp ) ); + + +// last_sector = (data_size - 1) / tpp->sector_size; + last_sector = find_sector( data_size - 1, tpp ); if ( data_size < (CRP_WORD_OFFSET + sizeof( unsigned int )) ) { printf( " CRP check is not performed because data size is less than 0x300(768) bytes\r\n" ); @@ -73,9 +77,8 @@ printf( " data size = %d bytes, it takes %d secotrs in flash area\r\n", data_size, last_sector + 1 ); printf( " resetting target\r\n" ); - #ifdef ENABLE_WRITING - if ( erase_sectors( last_sector ) ) + if ( erase_sectors( find_sector( data_size - 1, tpp ) ) ) return ( ERROR_AT_SECTOR_ERASE ); printf( "\r\n ==== flash writing ====\r\n" ); @@ -90,16 +93,28 @@ #endif -#ifdef ENABLE_VERIFYING - printf( "\r\n ==== flash reading and verifying ====\r\n" ); +#if 0 + if ( tpp->id == 0x26113F37 ) { + // The MEMMAP register should be operated if want to verify the LPC176x flash data + } +#endif + - if ( err = verify_flash( fp, tpp, &transferred_size ) ) - return ( err ); +#ifdef ENABLE_VERIFYING + if ( (tpp->id == 0x26113F37) || (tpp->id == 0x26013F37) ) { + printf( "\r\n ==== for the LPC176x, verification is not supported ====\r\n\r\n" ); + } else { + printf( "\r\n ==== flash reading and verifying ====\r\n" ); - printf( " -- %d bytes data are read and verified\r\n", transferred_size ); - leds_off(); + if ( err = verify_flash( fp, tpp, &transferred_size ) ) + return ( err ); + + printf( " -- %d bytes data are read and verified\r\n", transferred_size ); + leds_off(); + } #else printf( "\r\n ==== verifying has been skipped ====\r\n\r\n" ); +} #endif
--- a/target_handling.h Sat Oct 18 09:44:43 2014 +0000 +++ b/target_handling.h Wed Dec 10 09:24:00 2014 +0000 @@ -5,6 +5,7 @@ #define ENTER_TO_ISP_MODE 0 #define NO_ISP_MODE 1 +#define SECTOR_SIZE_VALIABLE4Kx16_AND_32KxN 1 target_param *open_target( int baud_date ); void reset_target( int isp_pin_state );
--- a/target_table.cpp Sat Oct 18 09:44:43 2014 +0000 +++ b/target_table.cpp Wed Dec 10 09:24:00 2014 +0000 @@ -1,6 +1,8 @@ #include "mbed.h" #include "target_table.h" +#define SECTOR_SIZE_VALIABLE4Kx16_AND_32KxN 1 + target_param target_table[] = { { "unknown ttarget", 0xFFFFFFFF, 1024, 4096, 4096, UUENCODE, 0x10000200 }, { "LPC1114FN28(FDH28)/102", 0x0A40902B, 4096, 32768, 4096, UUENCODE, 0x10000200 }, @@ -15,22 +17,40 @@ { "LPC822M101JHI33", 0x00008221, 4096, 16384, 1024, BINARY, 0x10000300 }, { "LPC824M201JDH20", 0x00008242, 8192, 32768, 1024, BINARY, 0x10000300 }, { "LPC822M101JDH20", 0x00008222, 4096, 16384, 1024, BINARY, 0x10000300 }, - +///added for LPC176x series + { "LPC1769FBD100", 0x26113F37, 65536, 524288, SECTOR_SIZE_VALIABLE4Kx16_AND_32KxN, UUENCODE, 0x10000200 }, + { "LPC1768FBD100", 0x26013F37, 65536, 524288, SECTOR_SIZE_VALIABLE4Kx16_AND_32KxN, UUENCODE, 0x10000200 }, }; target_param *find_target_param( char *device_id_string ) { int id; - + id = atoi( device_id_string ); - - for ( int i = 1; i < (sizeof( target_table ) / sizeof( target_param )); i++ ) - { + + for ( int i = 1; i < (sizeof( target_table ) / sizeof( target_param )); i++ ) { if ( id == target_table[ i ].id ) return ( &(target_table[ i ]) ); } - + // return ( target_table ); return ( NULL ); } +int find_sector( int data_size, target_param *tpp ) +{ + switch ( tpp->sector_size ) { + case SECTOR_SIZE_VALIABLE4Kx16_AND_32KxN : + if ( data_size <= (4096 * 16) ) { + return ( data_size / 4096 ); + } else { + data_size -= (4096 * 16); + return ( (data_size / (4096 * 8)) + 16 ); + } + //break; + default : + return ( data_size / tpp->sector_size ); + //break; + } +} +
--- a/target_table.h Sat Oct 18 09:44:43 2014 +0000 +++ b/target_table.h Wed Dec 10 09:24:00 2014 +0000 @@ -21,7 +21,8 @@ extern target_param target_table[]; -target_param *find_target_param( char *device_id_string ); +target_param *find_target_param( char *device_id_string ); +int find_sector( int data_size, target_param *tpp ); #endif // MBED_ISP__TARGET_TABLE__
--- a/writing.cpp Sat Oct 18 09:44:43 2014 +0000 +++ b/writing.cpp Wed Dec 10 09:24:00 2014 +0000 @@ -7,7 +7,7 @@ #include "isp.h" -int write_uuencoded_data( FILE *fp, int ram_size, int sector_size, unsigned int ram_start, int *total_size_p ); +int write_uuencoded_data( FILE *fp, target_param *tpp, int *total_size_p ); int write_binary_data( FILE *fp, int ram_size, int sector_size, unsigned int ram_start, int *total_size_p ); int get_flash_writing_size( int ram_size, unsigned int ram_start ); @@ -15,13 +15,16 @@ int write_flash( FILE *fp, target_param *tpp, int *transferred_size_p ) { if ( tpp->write_type == BINARY ) - return ( write_binary_data( fp, tpp->ram_size, tpp->sector_size, tpp->ram_start_address, transferred_size_p ) ); + return ( write_binary_data( fp, tpp->ram_size, tpp->sector_size, tpp->ram_start_address, transferred_size_p ) ); else // UUENCODE - return ( write_uuencoded_data( fp, tpp->ram_size, tpp->sector_size, tpp->ram_start_address, transferred_size_p ) ); + return ( write_uuencoded_data( fp, tpp, transferred_size_p ) ); } -int write_uuencoded_data( FILE *fp, int ram_size, int sector_size, unsigned int ram_start, int *total_size_p ) + + + +int write_uuencoded_data( FILE *fp, target_param *tpp, int *total_size_p ) { #define BYTES_PER_LINE 45 @@ -29,13 +32,16 @@ long checksum = 0; int size; int total_size = 0; + int sector_number; int flash_writing_size; int lines_per_transfer; int transfer_size; char *b; - + + int ram_size = tpp->ram_size; + unsigned int ram_start = tpp->ram_start_address; initialize_uue_table(); @@ -84,7 +90,11 @@ checksum = 0; - sprintf( command_str, "P %d %d\r\n", total_size / sector_size, total_size / sector_size ); +// sprintf( command_str, "P %d %d\r\n", total_size / sector_size, total_size / sector_size ); + + sector_number = find_sector( total_size, tpp ); + sprintf( command_str, "P %d %d\r\n", sector_number, sector_number ); + if ( try_and_check( command_str, "0" ) ) return ( ERROR_AT_PREPARE_COMMAND );