return self.symbols.get(name);
def timeout(self):
print "timeout\n";
return self.symbols.get(name);
def timeout(self):
print "timeout\n";
- def serInit(self, port=None, timeout=1):
+ def serInit(self, port=None, timeout=0.5):
"""Open the serial port"""
# Make timeout None to wait forever, 0 for non-blocking mode.
"""Open the serial port"""
# Make timeout None to wait forever, 0 for non-blocking mode.
+ self.serialport.flushInput()
+ self.serialport.flushOutput()
#Explicitly set RTS and DTR to halt board.
self.serialport.setRTS(1);
self.serialport.setDTR(1);
#Explicitly set RTS and DTR to halt board.
self.serialport.setRTS(1);
self.serialport.setDTR(1);
self.serialport.setDTR(0);
self.serialport.flushInput()
self.serialport.flushOutput()
self.serialport.setDTR(0);
self.serialport.flushInput()
self.serialport.flushOutput()
-
- #Read and handle the initial command.
- #time.sleep(1);
+ #time.sleep(.1);
+ attempts=attempts+1;
self.readcmd(); #Read the first command.
self.readcmd(); #Read the first command.
- #if(self.verb!=0x7F):
- # print "Verb %02x is wrong. Incorrect firmware or bad Info guess?" % self.verb;
- # print "http://goodfet.sf.net/faq/";
- #print "Connected."
+
+ #print "Connected after %02i attempts." % attempts;
+ self.mon_connected();
+
def getbuffer(self,size=0x1c00):
writecmd(0,0xC2,[size&0xFF,(size>>16)&0xFF]);
print "Got %02x%02x buffer size." % (self.data[1],self.data[0]);
def getbuffer(self,size=0x1c00):
writecmd(0,0xC2,[size&0xFF,(size>>16)&0xFF]);
print "Got %02x%02x buffer size." % (self.data[1],self.data[0]);
self.besilent=s;
print "besilent is %i" % self.besilent;
self.writecmd(0,0xB0,1,[s]);
self.besilent=s;
print "besilent is %i" % self.besilent;
self.writecmd(0,0xB0,1,[s]);
+ def mon_connected(self):
+ """Announce to the monitor that the connection is good."""
+ self.writecmd(0,0xB1,0,[]);
def out(self,byte):
"""Write a byte to P5OUT."""
self.writecmd(0,0xA1,1,[byte]);
def out(self,byte):
"""Write a byte to P5OUT."""
self.writecmd(0,0xA1,1,[byte]);
#For tos-bsl, use --invert-reset --invert-test
#For tos-bsl, use --invert-reset --invert-test
-BSL?=goodfet.bsl -c $(GOODFET) --speed=38400
+BSL?=goodfet.bsl --speed=38400
#One of these should be defined explicitly.
#One of these should be defined explicitly.
silent=cmddata[0];
txdata(app,verb,1);
break;
silent=cmddata[0];
txdata(app,verb,1);
break;
+ case MONITOR_CONNECTED:
+ msp430_init_dco_done();
+ txdata(app,verb,0);
+ break;
#define MONITOR_IN 0xA2
#define MONITOR_SILENT 0xB0
#define MONITOR_IN 0xA2
#define MONITOR_SILENT 0xB0
+#define MONITOR_CONNECTED 0xB1
#define MONITOR_READBUF 0xC0
#define MONITOR_WRITEBUF 0xC1
#define MONITOR_READBUF 0xC0
#define MONITOR_WRITEBUF 0xC1
+
+//! Initialization is correct.
+void msp430_init_dco_done(){
+ //Nothing to do for the 1612.
+}
+
+
void msp430_init_dco() {
/* This code taken from the FU Berlin sources and reformatted. */
//
void msp430_init_dco() {
/* This code taken from the FU Berlin sources and reformatted. */
//
#include <io.h>
#include <iomacros.h>
#include <io.h>
#include <iomacros.h>
//! Receive a byte.
unsigned char serial_rx(){
char c;
//! Receive a byte.
unsigned char serial_rx(){
char c;
CALDCO_16MHZ 0x96 CALBC1_16MHZ 0x8f 2619-001.txt
*/
CALDCO_16MHZ 0x96 CALBC1_16MHZ 0x8f 2619-001.txt
*/
+//! Initialization is correct.
+void msp430_init_dco_done(){
+ char *choice=(char *) 0x200; //First word of RAM.
+ choice[0]--;
+}
+
//! Initialize the MSP430 clock.
void msp430_init_dco() {
//! Initialize the MSP430 clock.
void msp430_init_dco() {
char *choice=(char *) 0x200; //First word of RAM.
#ifdef __MSP430_HAS_PORT8__
P8SEL = 0; // disable XT2 on P8.7/8
char *choice=(char *) 0x200; //First word of RAM.
#ifdef __MSP430_HAS_PORT8__
P8SEL = 0; // disable XT2 on P8.7/8
BCSCTL1 = CALBC1_16MHZ;
DCOCTL = CALDCO_16MHZ;
}else{
BCSCTL1 = CALBC1_16MHZ;
DCOCTL = CALDCO_16MHZ;
}else{
- //Info is missing, guess at a good value.
+ /*
+ Info is missing, guess at a good value.
+
+ For now, the choice doesn't jump backward after a successful
+ connection. For that reason, keep this list as small as possible.
+ Future revisions will subtract one from choice[0] after a successful
+ connection, keeping choice[1] as the target.
+ */
+
#define CHOICES 4
DCOCTL = 0x00; //clear DCO
switch(choice[0]++%CHOICES){
#define CHOICES 4
DCOCTL = 0x00; //clear DCO
switch(choice[0]++%CHOICES){
+ //Minor delay.
+ while(i--);
+