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); | ||||
} | } | ||||