def CCwr_config(self,config):
"""Write the config register of a Chipcon."""
self.writecmd(0x30,0x81,1,[config&0xFF]);
+ def CClockchip(self):
+ """Set the flash lock bit in info mem."""
+ self.writecmd(0x30, 0x9A, 0, None);
+
CCversions={0x0100:"CC1110",
0x8500:"CC2430",
0x8900:"CC2431",
0x8100:"CC2510",
0x9100:"CC2511",
+ 0xA500:"CC2530", #page 52 of SWRU191
+ 0xB500:"CC2531",
0xFF00:"CCmissing"};
def CCidentstr(self):
ident=self.CCident();
self.data=[adr&0xff, (adr&0xff00)>>8];
self.writecmd(0x30,0x91, 2, self.data);
return ord(self.data[0]);
+ def CCpeekirambyte(self,adr):
+ """Read the contents of IRAM at an address."""
+ self.data=[adr&0xff];
+ self.writecmd(0x30,0x02, 1, self.data);
+ return ord(self.data[0]);
+ def CCpokeirambyte(self,adr,val):
+ """Write the contents of IRAM at an address."""
+ self.data=[adr&0xff, val&0xff];
+ self.writecmd(0x30,0x02, 2, self.data);
+ return ord(self.data[0]);
+
def CCpokedatabyte(self,adr,val):
"""Write a byte to data memory."""
self.data=[adr&0xff, (adr&0xff00)>>8, val];
"""Check the status."""
self.writecmd(0x30,0x84,0,None);
return ord(self.data[0])
- CCstatusbits={0x80 : "erased",
+ #Same as CC2530
+ CCstatusbits={0x80 : "erase_busy",
0x40 : "pcon_idle",
- 0x20 : "halted",
+ 0x20 : "cpu_halted",
0x10 : "pm0",
- 0x08 : "halted",
+ 0x08 : "halt_status",
0x04 : "locked",
0x02 : "oscstable",
- 0x01 : "overflow"};
+ 0x01 : "overflow"
+ };
+ CCconfigbits={0x20 : "soft_power_mode", #new for CC2530
+ 0x08 : "timers_off",
+ 0x04 : "dma_pause",
+ 0x02 : "timer_suspend",
+ 0x01 : "sel_flash_info_page" #stricken from CC2530
+ };
+
def CCstatusstr(self):
"""Check the status as a string."""
status=self.CCstatus();
def CCstep_instr(self):
"""Step one instruction."""
self.writecmd(0x30,0x89,0,self.data);
-
+ def CCeraseflashbuffer(self):
+ """Erase the 2kB flash buffer"""
+ self.writecmd(0x30,0x99);
+ def CCflashpage(self,adr):
+ """Flash 2kB a page of flash from 0xF000 in XDATA"""
+ data=[adr&0xFF,
+ (adr>>8)&0xFF,
+ (adr>>16)&0xFF,
+ (adr>>24)&0xFF];
+ print "Flashing buffer to 0x%06x" % adr;
+ self.writecmd(0x30,0x95,4,data);