Add to 11U68 11E68

Dependencies:   DirectoryList MODSERIAL mbed

Fork of ika_shouyu_poppoyaki by Tedd OKANO

Committer:
okano
Date:
Wed Sep 25 04:00:04 2013 +0000
Revision:
33:ce9fff4cbf09
Parent:
32:3700d5df4e18
Child:
34:eaca33d3e632
options of "ENABLE_VERIFYING" and "CHECK_CRP_CODE" are added in _user_settings.h.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okano 30:e0d7524661ca 1
okano 30:e0d7524661ca 2 #include "mbed.h"
okano 30:e0d7524661ca 3 #include "target_table.h"
okano 30:e0d7524661ca 4 #include "serial_utilities.h"
okano 30:e0d7524661ca 5 #include "command_interface.h"
okano 30:e0d7524661ca 6 #include "writing.h"
okano 30:e0d7524661ca 7 #include "uu_coding.h"
okano 30:e0d7524661ca 8 #include "target_handling.h"
okano 30:e0d7524661ca 9 #include "verification.h"
okano 30:e0d7524661ca 10 #include "isp.h"
okano 30:e0d7524661ca 11 #include "_user_settings.h"
okano 30:e0d7524661ca 12
okano 30:e0d7524661ca 13
okano 30:e0d7524661ca 14 BusOut leds( LED4, LED3, LED2, LED1 );
okano 30:e0d7524661ca 15 Ticker success;
okano 30:e0d7524661ca 16
okano 30:e0d7524661ca 17
okano 32:3700d5df4e18 18 int file_size( FILE *fp );
okano 33:ce9fff4cbf09 19 unsigned int read_crp( FILE *fp );
okano 32:3700d5df4e18 20 unsigned int crp_check( FILE *fp );
okano 32:3700d5df4e18 21 void success_indicator();
okano 30:e0d7524661ca 22
okano 33:ce9fff4cbf09 23
okano 30:e0d7524661ca 24 int isp_flash_write( char *file_name )
okano 30:e0d7524661ca 25 {
okano 30:e0d7524661ca 26 FILE *fp;
okano 30:e0d7524661ca 27 target_param *tpp;
okano 30:e0d7524661ca 28 int data_size;
okano 30:e0d7524661ca 29 int last_sector;
okano 30:e0d7524661ca 30 int transferred_size;
okano 30:e0d7524661ca 31 int err;
okano 30:e0d7524661ca 32
okano 30:e0d7524661ca 33 if ( NULL == (tpp = open_target( ISP_BAUD_RATE )) ) {
okano 30:e0d7524661ca 34 return ( ERROR_AT_TARGET_OPEN );
okano 30:e0d7524661ca 35 }
okano 30:e0d7524661ca 36
okano 30:e0d7524661ca 37 printf( " target device found : type = \"%s\"\r\n", tpp->type_name );
okano 30:e0d7524661ca 38 printf( " ID = 0x%08X\r\n", tpp->id );
okano 30:e0d7524661ca 39 printf( " RAM size = %10d bytes\r\n", tpp->ram_size );
okano 30:e0d7524661ca 40 printf( " flash size = %10d bytes\r\n", tpp->flash_size );
okano 30:e0d7524661ca 41
okano 30:e0d7524661ca 42 printf( " opening file: \"%s\"\r\n", file_name );
okano 30:e0d7524661ca 43
okano 30:e0d7524661ca 44 if ( NULL == (fp = fopen( file_name, "rb" )) ) {
okano 30:e0d7524661ca 45 return ( ERROR_AT_FILE_OPEN );
okano 30:e0d7524661ca 46 }
okano 30:e0d7524661ca 47
okano 30:e0d7524661ca 48 data_size = file_size( fp );
okano 30:e0d7524661ca 49 last_sector = data_size / tpp->sector_size;
okano 33:ce9fff4cbf09 50
okano 33:ce9fff4cbf09 51 if ( crp_check( fp ) ) {
okano 33:ce9fff4cbf09 52 printf( " the CRP is enabled in the data source file\r\n" );
okano 33:ce9fff4cbf09 53
okano 33:ce9fff4cbf09 54 #ifdef CHECK_CRP_CODE
okano 33:ce9fff4cbf09 55 printf( " aborting execution by CRP warning\r\n" );
okano 33:ce9fff4cbf09 56
okano 33:ce9fff4cbf09 57 return ( WARNING_CRP_CODE_DETECTED );
okano 33:ce9fff4cbf09 58 #else
okano 33:ce9fff4cbf09 59 printf( " this program continues to write the CRP enabled binary into the target flash\r\n" );
okano 33:ce9fff4cbf09 60 #endif
okano 32:3700d5df4e18 61 }
okano 30:e0d7524661ca 62
okano 30:e0d7524661ca 63 printf( " data size = %d bytes, it takes %d secotrs in flash area\r\n", data_size, last_sector + 1 );
okano 30:e0d7524661ca 64 printf( " resetting target\r\n" );
okano 30:e0d7524661ca 65
okano 30:e0d7524661ca 66 if ( erase_sectors( last_sector ) )
okano 30:e0d7524661ca 67 return ( ERROR_AT_SECTOR_ERASE );
okano 30:e0d7524661ca 68
okano 30:e0d7524661ca 69 printf( "\r\n ==== flash writing ====\r\n" );
okano 30:e0d7524661ca 70
okano 30:e0d7524661ca 71 if ( err = write_flash( fp, tpp, &transferred_size ) )
okano 30:e0d7524661ca 72 return ( err );
okano 30:e0d7524661ca 73
okano 30:e0d7524661ca 74 printf( " -- %d bytes data are written\r\n", transferred_size );
okano 30:e0d7524661ca 75
okano 33:ce9fff4cbf09 76 #ifdef ENABLE_VERIFYING
okano 30:e0d7524661ca 77 printf( "\r\n ==== flash reading and verifying ====\r\n" );
okano 30:e0d7524661ca 78
okano 30:e0d7524661ca 79 if ( err = verify_flash( fp, tpp, &transferred_size ) )
okano 30:e0d7524661ca 80 return ( err );
okano 30:e0d7524661ca 81
okano 30:e0d7524661ca 82 printf( " -- %d bytes data are read and verified\r\n", transferred_size );
okano 33:ce9fff4cbf09 83 #else
okano 33:ce9fff4cbf09 84 printf( "\r\n ==== verifying has been skipped ====\r\n\r\n" );
okano 33:ce9fff4cbf09 85 #endif
okano 30:e0d7524661ca 86
okano 30:e0d7524661ca 87 fclose( fp );
okano 30:e0d7524661ca 88
okano 30:e0d7524661ca 89 post_writing_process( tpp );
okano 30:e0d7524661ca 90
okano 30:e0d7524661ca 91 return ( 0 );
okano 30:e0d7524661ca 92 }
okano 30:e0d7524661ca 93
okano 30:e0d7524661ca 94
okano 30:e0d7524661ca 95 int file_size( FILE *fp )
okano 30:e0d7524661ca 96 {
okano 30:e0d7524661ca 97 int size;
okano 30:e0d7524661ca 98
okano 30:e0d7524661ca 99 fseek( fp, 0, SEEK_END ); // seek to end of file
okano 30:e0d7524661ca 100 size = ftell( fp ); // get current file pointer
okano 30:e0d7524661ca 101 fseek( fp, 0, SEEK_SET ); // seek back to beginning of file
okano 30:e0d7524661ca 102
okano 30:e0d7524661ca 103 return size;
okano 30:e0d7524661ca 104 }
okano 30:e0d7524661ca 105
okano 30:e0d7524661ca 106
okano 32:3700d5df4e18 107 unsigned int crp_check( FILE *fp )
okano 32:3700d5df4e18 108 {
okano 32:3700d5df4e18 109 unsigned int crp;
okano 32:3700d5df4e18 110
okano 33:ce9fff4cbf09 111 switch ( crp = read_crp( fp ) ) {
okano 33:ce9fff4cbf09 112 case NO_ISP :
okano 33:ce9fff4cbf09 113 printf( "\r\n WARNING : CRP code detected 0x%08X (NO_ISP)\r\n", crp );
okano 33:ce9fff4cbf09 114 break;
okano 33:ce9fff4cbf09 115 case CRP1 :
okano 33:ce9fff4cbf09 116 printf( "\r\n WARNING : CRP code detected 0x%08X (CRP1)\r\n", crp );
okano 33:ce9fff4cbf09 117 break;
okano 33:ce9fff4cbf09 118 case CRP2 :
okano 33:ce9fff4cbf09 119 printf( "\r\n WARNING : CRP code detected 0x%08X (CRP2)\r\n", crp );
okano 33:ce9fff4cbf09 120 break;
okano 33:ce9fff4cbf09 121 case CRP3 :
okano 33:ce9fff4cbf09 122 printf( "\r\n WARNING : CRP code detected 0x%08X (CRP3)\r\n", crp );
okano 33:ce9fff4cbf09 123 break;
okano 33:ce9fff4cbf09 124 default :
okano 33:ce9fff4cbf09 125 crp = 0x0; // no CRP code detected
okano 33:ce9fff4cbf09 126 break;
okano 33:ce9fff4cbf09 127 }
okano 33:ce9fff4cbf09 128
okano 33:ce9fff4cbf09 129 return ( crp );
okano 33:ce9fff4cbf09 130 }
okano 33:ce9fff4cbf09 131
okano 33:ce9fff4cbf09 132
okano 33:ce9fff4cbf09 133 unsigned int read_crp( FILE *fp )
okano 33:ce9fff4cbf09 134 {
okano 33:ce9fff4cbf09 135 unsigned int crp;
okano 33:ce9fff4cbf09 136
okano 32:3700d5df4e18 137 fseek( fp, 0x2FC, SEEK_SET ); // seek back to beginning of file
okano 32:3700d5df4e18 138
okano 32:3700d5df4e18 139 if ( 1 != fread( &crp, sizeof( crp ), 1, fp ) )
okano 32:3700d5df4e18 140 return ( CRP_CHECK_ERROR );
okano 32:3700d5df4e18 141
okano 32:3700d5df4e18 142 fseek( fp, 0, SEEK_SET ); // seek back to beginning of file
okano 32:3700d5df4e18 143
okano 32:3700d5df4e18 144 return ( crp );
okano 32:3700d5df4e18 145 }
okano 32:3700d5df4e18 146
okano 32:3700d5df4e18 147
okano 30:e0d7524661ca 148 void start_target_in_normal_mode( int baud_rate )
okano 30:e0d7524661ca 149 {
okano 30:e0d7524661ca 150 set_target_baud_rate( baud_rate );
okano 30:e0d7524661ca 151 reset_target( NO_ISP_MODE );
okano 30:e0d7524661ca 152 }
okano 30:e0d7524661ca 153
okano 30:e0d7524661ca 154 void start_success_indicator( void )
okano 30:e0d7524661ca 155 {
okano 30:e0d7524661ca 156 success.attach( &success_indicator, 0.1 );
okano 30:e0d7524661ca 157 }
okano 30:e0d7524661ca 158
okano 30:e0d7524661ca 159 void success_indicator()
okano 30:e0d7524661ca 160 {
okano 30:e0d7524661ca 161 static int i = 0;
okano 30:e0d7524661ca 162
okano 30:e0d7524661ca 163 leds = 0x1 << (i++ & 0x3);
okano 30:e0d7524661ca 164 }
okano 30:e0d7524661ca 165
okano 30:e0d7524661ca 166
okano 30:e0d7524661ca 167 void toggle_led( char v )
okano 30:e0d7524661ca 168 {
okano 30:e0d7524661ca 169 leds = leds ^ (0x1 << v);
okano 30:e0d7524661ca 170 }
okano 30:e0d7524661ca 171