* add arguments to allow pin change on command linemaster
@@ -39,9 +39,9 @@ | |||
/** | |||
* Local properties | |||
*/ | |||
int pinRST=24; | |||
int pinDC=28; | |||
int pinDD=29; | |||
int pinRST= PIN_RST; | |||
int pinDC= PIN_DC; | |||
int pinDD= PIN_DD; | |||
uint8_t errorFlag=0; | |||
uint8_t ddIsOutput=false; | |||
uint8_t inDebugMode=false; | |||
@@ -72,16 +72,16 @@ | |||
void cc_delay_calibrate( ); | |||
int cc_init( int pRST, int pDC, int pDD ) | |||
{ | |||
if(pRST>=0) pinRST=pRST; | |||
if(pDC>=0) pinDC=pDC; | |||
if(pDD>=0) pinDD=pDD; | |||
if(wiringPiSetup() == -1){ | |||
printf("no wiring pi detected\n"); | |||
return 0; | |||
} | |||
cc_delay_calibrate(); | |||
pinRST=pRST; | |||
pinDC=pDC; | |||
pinDD=pDD; | |||
// Prepare CC Pins | |||
pinMode(pinDC, OUTPUT); | |||
pinMode(pinDD, OUTPUT); | |||
@@ -7,6 +7,18 @@ | |||
#define CC_ERROR_NOT_DEBUGGING 2 | |||
#define CC_ERROR_NOT_WIRED 3 | |||
// defaŭltaj valoroj por pingloj | |||
// por restarigi al pinglo 35, DC al pinglo 36, DD al pinglo 38 | |||
#define PIN_RST 24 | |||
#define PIN_DC 27 | |||
#define PIN_DD 28 | |||
// alternativaj valoroj por pingloj | |||
// por restarigi al pinglo 3, DC al pinglo 11, DD al pinglo 13 | |||
// Utila por pi 1. | |||
//#define PIN_RST 8 | |||
//#define PIN_DC 0 | |||
//#define PIN_DD 2 | |||
int cc_init( int pinRST, int pinDC, int pinDD ); | |||
void cc_delay( unsigned char d ); | |||
@@ -12,9 +12,9 @@ git clone https://github.com/jmichault/flash_cc2531.git | |||
``` | |||
Connect the following pins of the debug port to the GPIO port : | |||
1. pin 1 (GND) --> pin 39 (GND) | |||
2. pin 7 (reset) --> pin 35 (GPIO24, BCM19) | |||
3. pin 3 (DC) --> pin 36 (GPIO27, BCM16) | |||
4. pin 4 (DD) --> pin 38 (GPIO28, BCM20) | |||
2. pin 7 (reset) --> pin 35 (wPi 24, BCM19) | |||
3. pin 3 (DC) --> pin 36 (wPi 27, BCM16) | |||
4. pin 4 (DD) --> pin 38 (wPi 28, BCM20) | |||
and insert the usb dongle in a port. | |||
@@ -51,6 +51,30 @@ To flash file to cc2531 : | |||
``` | |||
(takes around 3 minutes). | |||
## Using other pins | |||
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) | |||
the pin numbering used is that of wiringPi. Use "gpio readall" to have the layout on your pi (wPi column). | |||
example, if you want to use pins 3, 11 and 13 : | |||
Connect the following pins of the debug port to the GPIO port : | |||
1. pin 1 (GND) --> pin 14 (GND) | |||
2. pin 7 (reset) --> pin 3 (wPi 8, BCM2) | |||
3. pin 3 (DC) --> pin 11 (wPi 0, BCM17) | |||
4. pin 4 (DD) --> pin 13 (wPi 2, BCM27) | |||
and now you can read chip id, save flash content, erase flash, and write flash with following commands : | |||
```bash | |||
./cc_chipid -r 8 -c 0 -d 2 | |||
./cc_read -r 8 -c 0 -d 2 save.hex | |||
./cc_erase -r 8 -c 0 -d 2 | |||
./cc_write -r 8 -c 0 -d 2 CC2531ZNP-Pro.hex | |||
``` | |||
You can also change default values in CCDebugger.h and recompile executables with make. | |||
## License | |||
@@ -20,13 +20,46 @@ | |||
#include <stdbool.h> | |||
#include <string.h> | |||
#include <stdint.h> | |||
#include <unistd.h> | |||
#include "CCDebugger.h" | |||
int main() | |||
void helpo() | |||
{ | |||
fprintf(stderr,"usage : cc_chipid [-d pin_DD] [-c pin_DC] [-r pin_reset]\n"); | |||
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"); | |||
} | |||
int main(int argc,char *argv[]) | |||
{ | |||
int opt; | |||
int rePin=-1; | |||
int dcPin=-1; | |||
int ddPin=-1; | |||
while( (opt=getopt(argc,argv,"d:c:r:h?")) != -1) | |||
{ | |||
switch(opt) | |||
{ | |||
case 'd' : // DD pinglo | |||
ddPin=atoi(optarg); | |||
break; | |||
case 'c' : // DC pinglo | |||
dcPin=atoi(optarg); | |||
break; | |||
case 'r' : // restarigi pinglo | |||
rePin=atoi(optarg); | |||
break; | |||
case 'h' : // helpo | |||
case '?' : // helpo | |||
helpo(); | |||
exit(0); | |||
break; | |||
} | |||
} | |||
// initialize GPIO and debugger | |||
cc_init(24,27,28); | |||
cc_init(rePin,dcPin,ddPin); | |||
// enter debug mode | |||
cc_enter(); | |||
// get ChipID : | |||
@@ -20,13 +20,46 @@ | |||
#include <stdbool.h> | |||
#include <string.h> | |||
#include <stdint.h> | |||
#include <unistd.h> | |||
#include "CCDebugger.h" | |||
int main() | |||
void helpo() | |||
{ | |||
fprintf(stderr,"usage : cc_erase [-d pin_DD] [-c pin_DC] [-r pin_reset]\n"); | |||
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"); | |||
} | |||
int main(int argc,char *argv[]) | |||
{ | |||
int opt; | |||
int rePin=-1; | |||
int dcPin=-1; | |||
int ddPin=-1; | |||
while( (opt=getopt(argc,argv,"d:c:r:h?")) != -1) | |||
{ | |||
switch(opt) | |||
{ | |||
case 'd' : // DD pinglo | |||
ddPin=atoi(optarg); | |||
break; | |||
case 'c' : // DC pinglo | |||
dcPin=atoi(optarg); | |||
break; | |||
case 'r' : // restarigi pinglo | |||
rePin=atoi(optarg); | |||
break; | |||
case 'h' : // helpo | |||
case '?' : // helpo | |||
helpo(); | |||
exit(0); | |||
break; | |||
} | |||
} | |||
// initialize GPIO and debugger | |||
cc_init(24,27,28); | |||
cc_init(rePin,dcPin,ddPin); | |||
// enter debug mode | |||
cc_enter(); | |||
// get ChipID : | |||
@@ -20,6 +20,7 @@ | |||
#include <stdbool.h> | |||
#include <string.h> | |||
#include <stdint.h> | |||
#include <unistd.h> | |||
#include "CCDebugger.h" | |||
@@ -59,13 +60,45 @@ void read1k(int bank,uint16_t offset,uint8_t * buf) | |||
} | |||
} | |||
int main(int argc,char **argv) | |||
void helpo() | |||
{ | |||
if( argc <2 ) { fprintf(stderr,"usage : %s outfile\n",argv[0]); exit(1); } | |||
FILE * ficout = fopen(argv[1],"w"); | |||
if(!ficout) { fprintf(stderr," Can't open file %s.\n",argv[1]); exit(1); } | |||
fprintf(stderr,"usage : cc_read [-d pin_DD] [-c pin_DC] [-r pin_reset] out_file\n"); | |||
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"); | |||
} | |||
int main(int argc,char *argv[]) | |||
{ | |||
int opt; | |||
int rePin=-1; | |||
int dcPin=-1; | |||
int ddPin=-1; | |||
while( (opt=getopt(argc,argv,"d:c:r:h?")) != -1) | |||
{ | |||
switch(opt) | |||
{ | |||
case 'd' : // DD pinglo | |||
ddPin=atoi(optarg); | |||
break; | |||
case 'c' : // DC pinglo | |||
dcPin=atoi(optarg); | |||
break; | |||
case 'r' : // restarigi pinglo | |||
rePin=atoi(optarg); | |||
break; | |||
case 'h' : // helpo | |||
case '?' : // helpo | |||
helpo(); | |||
exit(0); | |||
break; | |||
} | |||
} | |||
if( optind >= argc ) { helpo(); exit(1); } | |||
FILE * ficout = fopen(argv[optind],"w"); | |||
if(!ficout) { fprintf(stderr," Can't open file %s.\n",argv[optind]); exit(1); } | |||
// initialize GPIO ports | |||
cc_init(24,27,28); | |||
cc_init(rePin,dcPin,ddPin); | |||
// enter debug mode | |||
cc_enter(); | |||
// get ChipID : | |||
@@ -217,13 +217,45 @@ int writePage(int page) | |||
} | |||
int main(int argc,char **argv) | |||
void helpo() | |||
{ | |||
if( argc <2 ) { fprintf(stderr,"usage : %s file_to_flash\n",argv[0]); exit(1); } | |||
FILE * ficin = fopen(argv[1],"r"); | |||
if(!ficin) { fprintf(stderr," Can't open file %s.\n",argv[1]); exit(1); } | |||
fprintf(stderr,"usage : cc_write [-d pin_DD] [-c pin_DC] [-r pin_reset] file_to_flash\n"); | |||
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"); | |||
} | |||
int main(int argc,char *argv[]) | |||
{ | |||
int opt; | |||
int rePin=24; | |||
int dcPin=27; | |||
int ddPin=28; | |||
while( (opt=getopt(argc,argv,"d:c:r:h?")) != -1) | |||
{ | |||
switch(opt) | |||
{ | |||
case 'd' : // DD pinglo | |||
ddPin=atoi(optarg); | |||
break; | |||
case 'c' : // DC pinglo | |||
dcPin=atoi(optarg); | |||
break; | |||
case 'r' : // restarigi pinglo | |||
rePin=atoi(optarg); | |||
break; | |||
case 'h' : // helpo | |||
case '?' : // helpo | |||
helpo(); | |||
exit(0); | |||
break; | |||
} | |||
} | |||
if( optind >= argc ) { helpo(); exit(1); } | |||
FILE * ficin = fopen(argv[optind],"r"); | |||
if(!ficin) { fprintf(stderr," Can't open file %s.\n",argv[optind]); exit(1); } | |||
// on initialise les ports GPIO et le debugger | |||
cc_init(24,27,28); | |||
cc_init(rePin,dcPin,ddPin); | |||
// entrée en mode debug | |||
cc_enter(); | |||
// envoi de la commande getChipID : | |||