added reset at end of operations. added option to fix delay multiplier. added instructions if something go wrong.master
| @@ -0,0 +1,2 @@ | |||||
| *.o | |||||
| toto* | |||||
| @@ -174,7 +174,7 @@ uint8_t cc_error() | |||||
| * Delay a particular number of cycles | * Delay a particular number of cycles | ||||
| */ | */ | ||||
| struct timespec tp={0,0}; | struct timespec tp={0,0}; | ||||
| static int cc_delay_mult=50; | |||||
| static int cc_delay_mult=80; | |||||
| void cc_delay( unsigned char d ) | void cc_delay( unsigned char d ) | ||||
| { | { | ||||
| volatile unsigned int i = cc_delay_mult*d; | volatile unsigned int i = cc_delay_mult*d; | ||||
| @@ -184,6 +184,11 @@ void cc_delay( unsigned char d ) | |||||
| } | } | ||||
| void cc_setmult(int mult) | |||||
| { | |||||
| cc_delay_mult=mult; | |||||
| } | |||||
| /* provas konsideri la rapidecon de la procesoro */ | /* provas konsideri la rapidecon de la procesoro */ | ||||
| void cc_delay_calibrate( ) | void cc_delay_calibrate( ) | ||||
| { | { | ||||
| @@ -194,7 +199,7 @@ void cc_delay_calibrate( ) | |||||
| cc_delay(200); | cc_delay(200); | ||||
| cc_delay(200); | cc_delay(200); | ||||
| long time1=micros(); | long time1=micros(); | ||||
| cc_delay_mult=cc_delay_mult*200/(time1-time0); | |||||
| cc_delay_mult=cc_delay_mult*400/(time1-time0); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -406,6 +411,17 @@ void cc_setDDDirection( uint8_t direction ) | |||||
| } | } | ||||
| void cc_reset() | |||||
| { | |||||
| pinMode(pinDC, INPUT); | |||||
| pinMode(pinDD, INPUT); | |||||
| pinMode(pinRST, OUTPUT); | |||||
| cc_delay(200); | |||||
| pinMode(pinRST, LOW); | |||||
| cc_delay(500); | |||||
| pinMode(pinRST, INPUT); | |||||
| } | |||||
| ///////////////////////////////////////////////////////////////////// | ///////////////////////////////////////////////////////////////////// | ||||
| ///////////////////////////////////////////////////////////////////// | ///////////////////////////////////////////////////////////////////// | ||||
| //// HIGH LEVEL FUNCTIONS //// | //// HIGH LEVEL FUNCTIONS //// | ||||
| @@ -22,9 +22,12 @@ | |||||
| int cc_init( int pinRST, int pinDC, int pinDD ); | int cc_init( int pinRST, int pinDC, int pinDD ); | ||||
| void cc_delay( unsigned char d ); | void cc_delay( unsigned char d ); | ||||
| void cc_setmult(int mult); | |||||
| uint8_t cc_error(); | uint8_t cc_error(); | ||||
| void cc_reset(); | |||||
| //////////////////////////// | //////////////////////////// | ||||
| // High-Level interaction | // High-Level interaction | ||||
| //////////////////////////// | //////////////////////////// | ||||
| @@ -57,6 +57,7 @@ all commands accept following arguments : | |||||
| -c pin : change pin_DC (default 27) | -c pin : change pin_DC (default 27) | ||||
| -d pin : change pin_DD (default 28) | -d pin : change pin_DD (default 28) | ||||
| -r pin : change reset pin (default 24) | -r pin : change reset pin (default 24) | ||||
| -m : change multiplier for time delay (default auto) | |||||
| the pin numbering used is that of wiringPi. Use "gpio readall" to have the layout on your pi (wPi column). | the pin numbering used is that of wiringPi. Use "gpio readall" to have the layout on your pi (wPi column). | ||||
| @@ -77,6 +78,14 @@ and now you can read chip id, save flash content, erase flash, and write flash w | |||||
| You can also change default values in CCDebugger.h and recompile executables with make. | You can also change default values in CCDebugger.h and recompile executables with make. | ||||
| ## what to try if it doesn't work? | |||||
| ### stop all other programs before flash. | |||||
| ### use the -m option to increase time delays used. Example : | |||||
| ```bash | |||||
| ./cc_write -m 300 CC2531ZNP-Pro.hex | |||||
| ``` | |||||
| ### executables are compiled on my raspbian distribition, you can try to recompile for your distribution with make. | |||||
| ## License | ## License | ||||
| This project is licensed under the GPL v3 license (see COPYING). | This project is licensed under the GPL v3 license (see COPYING). | ||||
| @@ -30,6 +30,7 @@ void helpo() | |||||
| fprintf(stderr," -c : change pin_DC (default 27)\n"); | fprintf(stderr," -c : change pin_DC (default 27)\n"); | ||||
| fprintf(stderr," -d : change pin_DD (default 28)\n"); | fprintf(stderr," -d : change pin_DD (default 28)\n"); | ||||
| fprintf(stderr," -r : change reset pin (default 24)\n"); | fprintf(stderr," -r : change reset pin (default 24)\n"); | ||||
| fprintf(stderr," -m : change multiplier for time delay (default auto)\n"); | |||||
| } | } | ||||
| int main(int argc,char *argv[]) | int main(int argc,char *argv[]) | ||||
| @@ -38,10 +39,14 @@ int main(int argc,char *argv[]) | |||||
| int rePin=-1; | int rePin=-1; | ||||
| int dcPin=-1; | int dcPin=-1; | ||||
| int ddPin=-1; | int ddPin=-1; | ||||
| while( (opt=getopt(argc,argv,"d:c:r:h?")) != -1) | |||||
| int setMult=-1; | |||||
| while( (opt=getopt(argc,argv,"m:d:c:r:h?")) != -1) | |||||
| { | { | ||||
| switch(opt) | switch(opt) | ||||
| { | { | ||||
| case 'm' : | |||||
| setMult=atoi(optarg); | |||||
| break; | |||||
| case 'd' : // DD pinglo | case 'd' : // DD pinglo | ||||
| ddPin=atoi(optarg); | ddPin=atoi(optarg); | ||||
| break; | break; | ||||
| @@ -60,6 +65,7 @@ int main(int argc,char *argv[]) | |||||
| } | } | ||||
| // initialize GPIO and debugger | // initialize GPIO and debugger | ||||
| cc_init(rePin,dcPin,ddPin); | cc_init(rePin,dcPin,ddPin); | ||||
| if(setMult>0) cc_setmult(setMult); | |||||
| // enter debug mode | // enter debug mode | ||||
| cc_enter(); | cc_enter(); | ||||
| // get ChipID : | // get ChipID : | ||||
| @@ -67,4 +73,6 @@ int main(int argc,char *argv[]) | |||||
| res = cc_getChipID(); | res = cc_getChipID(); | ||||
| printf(" ID = %04x.\n",res); | printf(" ID = %04x.\n",res); | ||||
| cc_setActive(false); | cc_setActive(false); | ||||
| // reboot | |||||
| cc_reset(); | |||||
| } | } | ||||
| @@ -30,6 +30,7 @@ void helpo() | |||||
| fprintf(stderr," -c : change pin_DC (default 27)\n"); | fprintf(stderr," -c : change pin_DC (default 27)\n"); | ||||
| fprintf(stderr," -d : change pin_DD (default 28)\n"); | fprintf(stderr," -d : change pin_DD (default 28)\n"); | ||||
| fprintf(stderr," -r : change reset pin (default 24)\n"); | fprintf(stderr," -r : change reset pin (default 24)\n"); | ||||
| fprintf(stderr," -m : change multiplier for time delay (default auto)\n"); | |||||
| } | } | ||||
| int main(int argc,char *argv[]) | int main(int argc,char *argv[]) | ||||
| @@ -38,10 +39,14 @@ int main(int argc,char *argv[]) | |||||
| int rePin=-1; | int rePin=-1; | ||||
| int dcPin=-1; | int dcPin=-1; | ||||
| int ddPin=-1; | int ddPin=-1; | ||||
| while( (opt=getopt(argc,argv,"d:c:r:h?")) != -1) | |||||
| int setMult=-1; | |||||
| while( (opt=getopt(argc,argv,"m:d:c:r:h?")) != -1) | |||||
| { | { | ||||
| switch(opt) | switch(opt) | ||||
| { | { | ||||
| case 'm' : | |||||
| setMult=atoi(optarg); | |||||
| break; | |||||
| case 'd' : // DD pinglo | case 'd' : // DD pinglo | ||||
| ddPin=atoi(optarg); | ddPin=atoi(optarg); | ||||
| break; | break; | ||||
| @@ -60,6 +65,7 @@ int main(int argc,char *argv[]) | |||||
| } | } | ||||
| // initialize GPIO and debugger | // initialize GPIO and debugger | ||||
| cc_init(rePin,dcPin,ddPin); | cc_init(rePin,dcPin,ddPin); | ||||
| if(setMult>0) cc_setmult(setMult); | |||||
| // enter debug mode | // enter debug mode | ||||
| cc_enter(); | cc_enter(); | ||||
| // get ChipID : | // get ChipID : | ||||
| @@ -66,6 +66,7 @@ void helpo() | |||||
| fprintf(stderr," -c : change pin_DC (default 27)\n"); | fprintf(stderr," -c : change pin_DC (default 27)\n"); | ||||
| fprintf(stderr," -d : change pin_DD (default 28)\n"); | fprintf(stderr," -d : change pin_DD (default 28)\n"); | ||||
| fprintf(stderr," -r : change reset pin (default 24)\n"); | fprintf(stderr," -r : change reset pin (default 24)\n"); | ||||
| fprintf(stderr," -m : change multiplier for time delay (default auto)\n"); | |||||
| } | } | ||||
| int main(int argc,char *argv[]) | int main(int argc,char *argv[]) | ||||
| @@ -74,10 +75,14 @@ int main(int argc,char *argv[]) | |||||
| int rePin=-1; | int rePin=-1; | ||||
| int dcPin=-1; | int dcPin=-1; | ||||
| int ddPin=-1; | int ddPin=-1; | ||||
| while( (opt=getopt(argc,argv,"d:c:r:h?")) != -1) | |||||
| int setMult=-1; | |||||
| while( (opt=getopt(argc,argv,"m:d:c:r:h?")) != -1) | |||||
| { | { | ||||
| switch(opt) | switch(opt) | ||||
| { | { | ||||
| case 'm' : | |||||
| setMult=atoi(optarg); | |||||
| break; | |||||
| case 'd' : // DD pinglo | case 'd' : // DD pinglo | ||||
| ddPin=atoi(optarg); | ddPin=atoi(optarg); | ||||
| break; | break; | ||||
| @@ -99,6 +104,7 @@ int main(int argc,char *argv[]) | |||||
| if(!ficout) { fprintf(stderr," Can't open file %s.\n",argv[optind]); exit(1); } | if(!ficout) { fprintf(stderr," Can't open file %s.\n",argv[optind]); exit(1); } | ||||
| // initialize GPIO ports | // initialize GPIO ports | ||||
| cc_init(rePin,dcPin,ddPin); | cc_init(rePin,dcPin,ddPin); | ||||
| if(setMult>0) cc_setmult(setMult); | |||||
| // enter debug mode | // enter debug mode | ||||
| cc_enter(); | cc_enter(); | ||||
| // get ChipID : | // get ChipID : | ||||
| @@ -128,6 +134,8 @@ int main(int argc,char *argv[]) | |||||
| read1k(bank,i*1024, buf1); | read1k(bank,i*1024, buf1); | ||||
| read1k(bank,i*1024, buf2); | read1k(bank,i*1024, buf2); | ||||
| // nbread++; | // nbread++; | ||||
| //if(memcmp(buf1,buf2,1024)) | |||||
| // {printf("x");fflush(stdout);} | |||||
| } while(memcmp(buf1,buf2,1024)); | } while(memcmp(buf1,buf2,1024)); | ||||
| for(uint16_t j=0 ; j<64 ; j++) | for(uint16_t j=0 ; j<64 ; j++) | ||||
| writeHexLine(ficout,buf1+j*16, 16,(bank&1)*32*1024+ i*1024+j*16); | writeHexLine(ficout,buf1+j*16, 16,(bank&1)*32*1024+ i*1024+j*16); | ||||
| @@ -138,6 +146,8 @@ int main(int argc,char *argv[]) | |||||
| fprintf(ficout,":00000001FF\n"); | fprintf(ficout,":00000001FF\n"); | ||||
| // exit from debug | // exit from debug | ||||
| cc_setActive(false); | cc_setActive(false); | ||||
| // reboot | |||||
| cc_reset(); | |||||
| fclose(ficout); | fclose(ficout); | ||||
| } | } | ||||
| @@ -223,6 +223,7 @@ void helpo() | |||||
| fprintf(stderr," -c : change pin_DC (default 27)\n"); | fprintf(stderr," -c : change pin_DC (default 27)\n"); | ||||
| fprintf(stderr," -d : change pin_DD (default 28)\n"); | fprintf(stderr," -d : change pin_DD (default 28)\n"); | ||||
| fprintf(stderr," -r : change reset pin (default 24)\n"); | fprintf(stderr," -r : change reset pin (default 24)\n"); | ||||
| fprintf(stderr," -m : change multiplier for time delay (default auto)\n"); | |||||
| } | } | ||||
| int main(int argc,char *argv[]) | int main(int argc,char *argv[]) | ||||
| @@ -231,10 +232,14 @@ int main(int argc,char *argv[]) | |||||
| int rePin=24; | int rePin=24; | ||||
| int dcPin=27; | int dcPin=27; | ||||
| int ddPin=28; | int ddPin=28; | ||||
| while( (opt=getopt(argc,argv,"d:c:r:h?")) != -1) | |||||
| int setMult=-1; | |||||
| while( (opt=getopt(argc,argv,"m:d:c:r:h?")) != -1) | |||||
| { | { | ||||
| switch(opt) | switch(opt) | ||||
| { | { | ||||
| case 'm' : | |||||
| setMult=atoi(optarg); | |||||
| break; | |||||
| case 'd' : // DD pinglo | case 'd' : // DD pinglo | ||||
| ddPin=atoi(optarg); | ddPin=atoi(optarg); | ||||
| break; | break; | ||||
| @@ -256,6 +261,7 @@ int main(int argc,char *argv[]) | |||||
| if(!ficin) { fprintf(stderr," Can't open file %s.\n",argv[optind]); exit(1); } | if(!ficin) { fprintf(stderr," Can't open file %s.\n",argv[optind]); exit(1); } | ||||
| // on initialise les ports GPIO et le debugger | // on initialise les ports GPIO et le debugger | ||||
| cc_init(rePin,dcPin,ddPin); | cc_init(rePin,dcPin,ddPin); | ||||
| if(setMult>0) cc_setmult(setMult); | |||||
| // entrée en mode debug | // entrée en mode debug | ||||
| cc_enter(); | cc_enter(); | ||||
| // envoi de la commande getChipID : | // envoi de la commande getChipID : | ||||
| @@ -364,6 +370,8 @@ int main(int argc,char *argv[]) | |||||
| // sortie du mode debug et désactivation : | // sortie du mode debug et désactivation : | ||||
| cc_setActive(false); | cc_setActive(false); | ||||
| // reboot | |||||
| cc_reset(); | |||||
| fclose(ficin); | fclose(ficin); | ||||
| } | } | ||||