Re: [Tinyos-help] uisp and mica2 programming problems

2006-07-26 Thread Simon Willis

Some more news on this problem.

It is still occurring, but I can now get around it consistently. I also 
discovered that it will program the board with no problems if I change 
the high fuse to 0xD9 (uisp makes is 0xD8). In my last email I said that 
I was setting this fuse to 0x19, but it seems 0xD9 also works. The only 
difference this has from the uisp 0xD8 is that the BOOTRST vector is 
disabled. Does anyone have any idea what's going on here? I also 
discovered that writing 0xD8 to the high fuse will allow me to read the 
fuses reliably (it seems), but when I program it (with Blink for 
example) the program does nothing.


So here is how I program my boards:
-Write 0xD9 (or 0x19) to the high fuse several times: uisp -dprog=mib510 
-dserial=/dev/ttyS0 -dpart=ATmega128 --write_fuse_h=0xD9
-Check the fuses: uisp -dprog=mib510 -dserial=/dev/ttyS0 
-dpart=ATmega128 --rd_fuses

-If the fuse has changed then continue
-Upload the program: make mica2 reinstall mib510,/dev/ttyS0

Does anyone have any ideas why it might be doing this or how I can fix 
it? Or even a few things I can do with the MIB510 to try and 
troubleshoot it?


I have tried reinstalling cygwin and the tinyos environment, but this 
did not fix it. I am using TinyOS1.1.15


Thanks again,

Simon

Simon Willis wrote:

I am having problems programming with uisp. I am using Blink for testing.

I have a MIB510 and a board that we designed that is based on the mica2.

Once I have programmed the ATMEGA128 I cannot reprogram it. It goes 
through all the correct actions, but the program doesn't seem to 
change (tested by changing the blinking LED) With a bit of playing 
around I discovered that I can get it to program after I change the 
fuse high byte to 0x98 (from 0xd8 set by uisp). This turns on the 
'enable JTAG' option (even though I don't have the JTAG plugged in) 
then it works. Another problem is that when I issue a 'rd-fuses' 
command it will quite often return all 0s (or give some other error 
message), also the wr_fuses_h command usually takes about 5 attempts 
until it does actually change the fuses (checked using rd_fuses). Once 
it has changed the fuse to 0x98 then rd_fuses will work reliably and I 
can upload my program. I have also tried other combinations for fuses 
(like 0x19) and it seems that whenever the 'enable JTAG' option is on 
it will work. Does anyone have any idea why this might be or what 
might be wrong here? I have been able to replicate this problem on 2 
boards now (I have only built 2 so far).


Perhaps I should try changing the makefile so that uisp always enables 
JTAG, but this seems like a bit of a workaround problem, since normal 
mica2s seem to work OK.


Anothter note: It also seems that I can't program a fresh ATMEGA with 
uisp until I have plugged in a JTAG and changed the fuses to 0xfd (e) 
0x19 (h) 0xfe (l). Is this normal? I was thinking that perhaps this is 
done by Crossbow before the motes leave the factory.


Thanks for your help.

Simon



___
Tinyos-help mailing list
Tinyos-help@Millennium.Berkeley.EDU
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help


Re: [Tinyos-help] uisp and mica2 programming problems

2006-07-26 Thread Simon Willis
I have now fixed the problem properly and I thought I would post it on 
this mailing list for future reference.


The simple fix was to change the low fuse to 0xFF. It was previously set 
at 0xFD which is what is stated in the fuse information on the xbow 
site. However, I noticed in a different Mica2 document that a screen 
shot of rd_fuses showed is was 0xFF. The difference here relates to the 
clock setting. According to page 37 of the ATMEGA128 datasheet OxFF is 
used for a XTAL with low rising power (start-up time from power save is 
16K CK and additional delay from reset of 65ms). OxFD is used for a 
ceramic resonator with fast rising power (start-up time from power save 
is 1K CK and additional delay from reset is 4.1ms).


This problem probably won't ever bother anyone with a purchased Mica2, 
but may catch out those people like me who are making a node from scratch.


Cheers,

Simon

Simon Willis wrote:

Some more news on this problem.

It is still occurring, but I can now get around it consistently. I 
also discovered that it will program the board with no problems if I 
change the high fuse to 0xD9 (uisp makes is 0xD8). In my last email I 
said that I was setting this fuse to 0x19, but it seems 0xD9 also 
works. The only difference this has from the uisp 0xD8 is that the 
BOOTRST vector is disabled. Does anyone have any idea what's going on 
here? I also discovered that writing 0xD8 to the high fuse will allow 
me to read the fuses reliably (it seems), but when I program it (with 
Blink for example) the program does nothing.


So here is how I program my boards:
-Write 0xD9 (or 0x19) to the high fuse several times: uisp 
-dprog=mib510 -dserial=/dev/ttyS0 -dpart=ATmega128 --write_fuse_h=0xD9
-Check the fuses: uisp -dprog=mib510 -dserial=/dev/ttyS0 
-dpart=ATmega128 --rd_fuses

-If the fuse has changed then continue
-Upload the program: make mica2 reinstall mib510,/dev/ttyS0

Does anyone have any ideas why it might be doing this or how I can fix 
it? Or even a few things I can do with the MIB510 to try and 
troubleshoot it?


I have tried reinstalling cygwin and the tinyos environment, but this 
did not fix it. I am using TinyOS1.1.15


Thanks again,

Simon

Simon Willis wrote:
I am having problems programming with uisp. I am using Blink for 
testing.


I have a MIB510 and a board that we designed that is based on the mica2.

Once I have programmed the ATMEGA128 I cannot reprogram it. It goes 
through all the correct actions, but the program doesn't seem to 
change (tested by changing the blinking LED) With a bit of playing 
around I discovered that I can get it to program after I change the 
fuse high byte to 0x98 (from 0xd8 set by uisp). This turns on the 
'enable JTAG' option (even though I don't have the JTAG plugged in) 
then it works. Another problem is that when I issue a 'rd-fuses' 
command it will quite often return all 0s (or give some other error 
message), also the wr_fuses_h command usually takes about 5 attempts 
until it does actually change the fuses (checked using rd_fuses). 
Once it has changed the fuse to 0x98 then rd_fuses will work reliably 
and I can upload my program. I have also tried other combinations for 
fuses (like 0x19) and it seems that whenever the 'enable JTAG' option 
is on it will work. Does anyone have any idea why this might be or 
what might be wrong here? I have been able to replicate this problem 
on 2 boards now (I have only built 2 so far).


Perhaps I should try changing the makefile so that uisp always 
enables JTAG, but this seems like a bit of a workaround problem, 
since normal mica2s seem to work OK.


Anothter note: It also seems that I can't program a fresh ATMEGA with 
uisp until I have plugged in a JTAG and changed the fuses to 0xfd (e) 
0x19 (h) 0xfe (l). Is this normal? I was thinking that perhaps this 
is done by Crossbow before the motes leave the factory.


Thanks for your help.

Simon




___
Tinyos-help mailing list
Tinyos-help@Millennium.Berkeley.EDU
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help