Browse Source

increased default delays for better stability.

added reset at end of operations.
added option to fix delay multiplier.
added instructions if something go wrong.
master
jmichault 4 years ago
parent
commit
e1067774f0
12 changed files with 68 additions and 6 deletions
  1. +2
    -0
      .gitignore
  2. +18
    -2
      CCDebugger.c
  3. +3
    -0
      CCDebugger.h
  4. +9
    -0
      README.md
  5. BIN
      cc_chipid
  6. +9
    -1
      cc_chipid.c
  7. BIN
      cc_erase
  8. +7
    -1
      cc_erase.c
  9. BIN
      cc_read
  10. +11
    -1
      cc_read.c
  11. BIN
      cc_write
  12. +9
    -1
      cc_write.c

+ 2
- 0
.gitignore View File

@@ -0,0 +1,2 @@
*.o
toto*

+ 18
- 2
CCDebugger.c View File

@@ -174,7 +174,7 @@ uint8_t cc_error()
* Delay a particular number of cycles
*/
struct timespec tp={0,0};
static int cc_delay_mult=50;
static int cc_delay_mult=80;
void cc_delay( unsigned char 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 */
void cc_delay_calibrate( )
{
@@ -194,7 +199,7 @@ void cc_delay_calibrate( )
cc_delay(200);
cc_delay(200);
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 ////


+ 3
- 0
CCDebugger.h View File

@@ -22,9 +22,12 @@

int cc_init( int pinRST, int pinDC, int pinDD );
void cc_delay( unsigned char d );
void cc_setmult(int mult);

uint8_t cc_error();

void cc_reset();

////////////////////////////
// High-Level interaction
////////////////////////////


+ 9
- 0
README.md View File

@@ -57,6 +57,7 @@ all commands accept following arguments :
-c pin : change pin_DC (default 27)
-d pin : change pin_DD (default 28)
-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).

@@ -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.

## 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

This project is licensed under the GPL v3 license (see COPYING).


BIN
cc_chipid View File


+ 9
- 1
cc_chipid.c View File

@@ -30,6 +30,7 @@ void helpo()
fprintf(stderr," -c : change pin_DC (default 27)\n");
fprintf(stderr," -d : change pin_DD (default 28)\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[])
@@ -38,10 +39,14 @@ int main(int argc,char *argv[])
int rePin=-1;
int dcPin=-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)
{
case 'm' :
setMult=atoi(optarg);
break;
case 'd' : // DD pinglo
ddPin=atoi(optarg);
break;
@@ -60,6 +65,7 @@ int main(int argc,char *argv[])
}
// initialize GPIO and debugger
cc_init(rePin,dcPin,ddPin);
if(setMult>0) cc_setmult(setMult);
// enter debug mode
cc_enter();
// get ChipID :
@@ -67,4 +73,6 @@ int main(int argc,char *argv[])
res = cc_getChipID();
printf(" ID = %04x.\n",res);
cc_setActive(false);
// reboot
cc_reset();
}

BIN
cc_erase View File


+ 7
- 1
cc_erase.c View File

@@ -30,6 +30,7 @@ void helpo()
fprintf(stderr," -c : change pin_DC (default 27)\n");
fprintf(stderr," -d : change pin_DD (default 28)\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[])
@@ -38,10 +39,14 @@ int main(int argc,char *argv[])
int rePin=-1;
int dcPin=-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)
{
case 'm' :
setMult=atoi(optarg);
break;
case 'd' : // DD pinglo
ddPin=atoi(optarg);
break;
@@ -60,6 +65,7 @@ int main(int argc,char *argv[])
}
// initialize GPIO and debugger
cc_init(rePin,dcPin,ddPin);
if(setMult>0) cc_setmult(setMult);
// enter debug mode
cc_enter();
// get ChipID :


BIN
cc_read View File


+ 11
- 1
cc_read.c View File

@@ -66,6 +66,7 @@ void helpo()
fprintf(stderr," -c : change pin_DC (default 27)\n");
fprintf(stderr," -d : change pin_DD (default 28)\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[])
@@ -74,10 +75,14 @@ int main(int argc,char *argv[])
int rePin=-1;
int dcPin=-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)
{
case 'm' :
setMult=atoi(optarg);
break;
case 'd' : // DD pinglo
ddPin=atoi(optarg);
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); }
// initialize GPIO ports
cc_init(rePin,dcPin,ddPin);
if(setMult>0) cc_setmult(setMult);
// enter debug mode
cc_enter();
// get ChipID :
@@ -128,6 +134,8 @@ int main(int argc,char *argv[])
read1k(bank,i*1024, buf1);
read1k(bank,i*1024, buf2);
// nbread++;
//if(memcmp(buf1,buf2,1024))
// {printf("x");fflush(stdout);}
} while(memcmp(buf1,buf2,1024));
for(uint16_t j=0 ; j<64 ; j++)
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");
// exit from debug
cc_setActive(false);
// reboot
cc_reset();
fclose(ficout);

}

BIN
cc_write View File


+ 9
- 1
cc_write.c View File

@@ -223,6 +223,7 @@ void helpo()
fprintf(stderr," -c : change pin_DC (default 27)\n");
fprintf(stderr," -d : change pin_DD (default 28)\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[])
@@ -231,10 +232,14 @@ int main(int argc,char *argv[])
int rePin=24;
int dcPin=27;
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)
{
case 'm' :
setMult=atoi(optarg);
break;
case 'd' : // DD pinglo
ddPin=atoi(optarg);
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); }
// on initialise les ports GPIO et le debugger
cc_init(rePin,dcPin,ddPin);
if(setMult>0) cc_setmult(setMult);
// entrée en mode debug
cc_enter();
// envoi de la commande getChipID :
@@ -364,6 +370,8 @@ int main(int argc,char *argv[])

// sortie du mode debug et désactivation :
cc_setActive(false);
// reboot
cc_reset();
fclose(ficin);

}


Loading…
Cancel
Save