projects
/
goodfet
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Proper block fetch.
[goodfet]
/
firmware
/
apps
/
chipcon
/
chipcon.c
diff --git
a/firmware/apps/chipcon/chipcon.c
b/firmware/apps/chipcon/chipcon.c
index
fac551c
..
c189118
100644
(file)
--- a/
firmware/apps/chipcon/chipcon.c
+++ b/
firmware/apps/chipcon/chipcon.c
@@
-148,6
+148,7
@@
void cchandle(unsigned char app,
//Might hurt too.
//ccdebuginit();
long i;
//Might hurt too.
//ccdebuginit();
long i;
+ int blocklen, blockadr;
switch(verb){
//CC_PEEK and CC_POKE will come later.
switch(verb){
//CC_PEEK and CC_POKE will come later.
@@
-187,6
+188,7
@@
void cchandle(unsigned char app,
//Micro commands!
case CC_CHIP_ERASE:
//Micro commands!
case CC_CHIP_ERASE:
+ case CC_MASS_ERASE_FLASH:
cc_chip_erase();
txdata(app,verb,1);
break;
cc_chip_erase();
txdata(app,verb,1);
break;
@@
-244,9
+246,18
@@
void cchandle(unsigned char app,
txdata(app,verb,1);
break;
case CC_READ_XDATA_MEMORY:
txdata(app,verb,1);
break;
case CC_READ_XDATA_MEMORY:
- cmddata[0]=cc_peekdatabyte(cmddataword[0]);
- txdata(app,verb,1);
+ //Read the length.
+ blocklen=1;
+ if(len>2)
+ blocklen=cmddataword[1];
+ blockadr=cmddataword[0];
+
+ //Return that many bytes.
+ for(i=0;i<blocklen;i++)
+ cmddata[i]=cc_peekdatabyte(blockadr+i);
+ txdata(app,verb,blocklen);
break;
break;
+
case CC_WRITE_XDATA_MEMORY:
cmddata[0]=cc_pokedatabyte(cmddataword[0], cmddata[2]);
txdata(app,verb,1);
case CC_WRITE_XDATA_MEMORY:
cmddata[0]=cc_pokedatabyte(cmddataword[0], cmddata[2]);
txdata(app,verb,1);
@@
-264,9
+275,10
@@
void cchandle(unsigned char app,
cc_pokedatabyte(i,0xFF);
txdata(app,verb,0);
break;
cc_pokedatabyte(i,0xFF);
txdata(app,verb,0);
break;
- case CC_MASS_ERASE_FLASH:
+
case CC_CLOCK_INIT:
case CC_PROGRAM_FLASH:
case CC_CLOCK_INIT:
case CC_PROGRAM_FLASH:
+ default:
debugstr("This Chipcon command is not yet implemented.");
txdata(app,NOK,0);//TODO implement me.
break;
debugstr("This Chipcon command is not yet implemented.");
txdata(app,NOK,0);//TODO implement me.
break;
@@
-344,13
+356,16
@@
unsigned short cc_get_chip_id(){
//Find the flash word size.
switch(cmddata[0]){
case 0x01://CC1110
//Find the flash word size.
switch(cmddata[0]){
case 0x01://CC1110
+ case 0x11://CC1111
case 0x81://CC2510
case 0x91://CC2511
case 0x81://CC2510
case 0x91://CC2511
- flash_word_size=0x02;
//debugstr("2 bytes/flash word");
//debugstr("2 bytes/flash word");
+ flash_word_size=0x02;
break;
default:
break;
default:
- debugstr("Warning: Guessing flash word size.");
+ //debugstr("Warning: Guessing flash word size.");
+ //flash_word_size=0;
+ break;
case 0x85://CC2430
case 0x89://CC2431
//debugstr("4 bytes/flash word");
case 0x85://CC2430
case 0x89://CC2431
//debugstr("4 bytes/flash word");
@@
-455,8
+470,9
@@
void cc_write_flash_page(u32 adr){
return;
}
return;
}
- if(flash_word_size==0){
- debugstr("Flash word size is wrong.");
+ if(flash_word_size!=2 && flash_word_size!=4){
+ debugstr("Flash word size is wrong, aborting write to");
+ debughex(adr);
while(1);
}
while(1);
}
@@
-475,8
+491,7
@@
void cc_write_flash_page(u32 adr){
flash_word_size);
//debugstr("Wrote flash routine.");
flash_word_size);
//debugstr("Wrote flash routine.");
-
-
+
//MOV MEMCTR, (bank * 16) + 1;
cmddata[0]=0x75;
cmddata[1]=0xc7;
//MOV MEMCTR, (bank * 16) + 1;
cmddata[0]=0x75;
cmddata[1]=0xc7;
@@
-491,13
+506,13
@@
void cc_write_flash_page(u32 adr){
while(!(cc_read_status()&CC_STATUS_CPUHALTED)){
while(!(cc_read_status()&CC_STATUS_CPUHALTED)){
- P
1OUT^=1;//blink LED while flashing
+ P
LEDOUT^=PLEDPIN;//blink LED while flashing
}
//debugstr("Done flashing.");
}
//debugstr("Done flashing.");
- P
1OUT&=~1
;//clear LED
+ P
LEDOUT&=~PLEDPIN
;//clear LED
}
//! Read the PC
}
//! Read the PC