CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

Losing programming

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
rwskinner



Joined: 08 Dec 2006
Posts: 125
Location: Texas

View user's profile Send private message

Losing programming
PostPosted: Fri Jul 09, 2010 3:13 pm     Reply with quote

Hello to all. I have an odd problem that I need to try and find a solution to. I have a 18F4550 (bunches of them) that randomly lose their program after a power cycle.

The panel can be up and operating fine, a technician goes out, powers down the panel, performs maintenance, powers back up, and the board with the pic 18F4550 is a dead. Reprogramming the flash with the program fixes it but we rather not have to do this !

I have several thousand 16F chips, and 18F series chips out running and I only ran across this a couple of times after a severe lightening storm, but never after a normal power cycle.

I was able to copy the flash, programming bits, and eeprom off one before I reprogrammed it and I'm about to start comparing bits to see where it's getting corrupt at.

Any tips what I might look for?
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Fri Jul 09, 2010 3:43 pm     Reply with quote

Microchip forum threads on power supply problems and lack of the
Brownout fuse causing Program Memory corruption:
http://www.microchip.com/forums/tm.aspx?m=509360
http://www.microchip.com/forums/tm.aspx?m=432788
asmallri



Joined: 12 Aug 2004
Posts: 1630
Location: Perth, Australia

View user's profile Send private message Send e-mail Visit poster's website

Re: Losing programming
PostPosted: Fri Jul 09, 2010 4:32 pm     Reply with quote

rwskinner wrote:
Hello to all. I have an odd problem that I need to try and find a solution to. I have a 18F4550 (bunches of them) that randomly lose their program after a power cycle.

The panel can be up and operating fine, a technician goes out, powers down the panel, performs maintenance, powers back up, and the board with the pic 18F4550 is a dead. Reprogramming the flash with the program fixes it but we rather not have to do this !

I have several thousand 16F chips, and 18F series chips out running and I only ran across this a couple of times after a severe lightening storm, but never after a normal power cycle.

I was able to copy the flash, programming bits, and eeprom off one before I reprogrammed it and I'm about to start comparing bits to see where it's getting corrupt at.

Any tips what I might look for?


Disable LVP and enable brownout
_________________
Regards, Andrew

http://www.brushelectronics.com/software
Home of Ethernet, SD card and Encrypted Serial Bootloaders for PICs!!
rwskinner



Joined: 08 Dec 2006
Posts: 125
Location: Texas

View user's profile Send private message

PostPosted: Fri Jul 09, 2010 4:38 pm     Reply with quote

I did have the CCS CDC Bootloader and just did away with it.
I also already had
NOLVP, BROWNOUT, and BORV20


I just set the following for Grins, Maybe it will help:
PROTECT
CPD
WRT
WRTD
WRTC
WRTB
EBTR
EBTRB
CPB

When I compared the hex I read from the device and the hex that I programmed the device with originally they were so different it wasn't even funny.
asmallri



Joined: 12 Aug 2004
Posts: 1630
Location: Perth, Australia

View user's profile Send private message Send e-mail Visit poster's website

PostPosted: Fri Jul 09, 2010 4:44 pm     Reply with quote

rwskinner wrote:
I did have the CCS CDC Bootloader and just did away with it.
I also already had
NOLVP, BROWNOUT, and BORV20


I just set the following for Grins, Maybe it will help:
PROTECT
CPD
WRT
WRTD
WRTC
WRTB
EBTR
EBTRB
CPB

When I compared the hex I read from the device and the hex that I programmed the device with originally they were so different it wasn't even funny.


If you are powering the PIC from +5volts then the BORV20 setting is too low. The PIC will already have crashed before it gets to this level. It should be more like 43 or whatever the value is for that specific PIC.
_________________
Regards, Andrew

http://www.brushelectronics.com/software
Home of Ethernet, SD card and Encrypted Serial Bootloaders for PICs!!
rwskinner



Joined: 08 Dec 2006
Posts: 125
Location: Texas

View user's profile Send private message

PostPosted: Fri Jul 09, 2010 4:46 pm     Reply with quote

This is what I have. Previously, Brown out voltage was 2.0 volts and all memory was unprotected.

Code:


NOW:

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES HSPLL                    //High speed Osc (> 4mhz)

#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES USBDIV
#FUSES PLL5                     //Divide By 5(48MHz oscillator input)
#FUSES CPUDIV1
#FUSES VREGEN                   //Voltage Regulator
#FUSES NOPBADEN                 //PortB pins are Digital
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES BORV20                   //Brownout reset at 2.0V
#FUSES NOPUT                    //No Power Up Timer
#FUSES STVREN                   //Stack full/underflow will cause reset
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES MCLR                     //Master Clear pin enabled
#FUSES LPT1OSC                  //Timer1 configured for low-power operation


#FUSES PROTECT                //Code protected from reading
#FUSES CPD                    // EE protection
#FUSES WRT                    //Program memory write protected
#FUSES WRTD                   //Data EEPROM write protected
#FUSES WRTC                   //configuration registers write protected
#FUSES WRTB                   //Boot block write protected
#FUSES EBTR                   //Memory protected from table reads
#FUSES EBTRB                  //Boot block protected from table reads
#FUSES CPB                    //Boot Block code protection

BEFORE:

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES HSPLL                    //High speed Osc (> 4mhz)

#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES USBDIV
#FUSES PLL5                     //Divide By 5(48MHz oscillator input)
#FUSES CPUDIV1
#FUSES VREGEN                   //Voltage Regulator
#FUSES NOPBADEN                 //PortB pins are Digital
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES BORV43                   //Brownout reset at 4.3V
#FUSES NOPUT                    //No Power Up Timer
#FUSES STVREN                   //Stack full/underflow will cause reset
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES MCLR                     //Master Clear pin enabled
#FUSES LPT1OSC                  //Timer1 configured for low-power operation


#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads
#FUSES NOCPB                    //No Boot Block code protection

rwskinner



Joined: 08 Dec 2006
Posts: 125
Location: Texas

View user's profile Send private message

PostPosted: Fri Jul 09, 2010 4:54 pm     Reply with quote

Ah, I overlooked the obvious, in the bootloader code, I did not have the fuses for Brownout and BOR set !!!

For Protection and Bootloader code, are these fuses ok?

PROTECT, NOCPD, NOWRT, NOWRTD, WRTB, WRTC, EBTR,EBTRB, CPB

This ought to protect everything but program memory and eeprom correct?
rwskinner



Joined: 08 Dec 2006
Posts: 125
Location: Texas

View user's profile Send private message

PostPosted: Sat Jul 10, 2010 6:26 am     Reply with quote

Since I have your ear, where are the CCS Fuses for Brownout and Powerup Timer for the 18F26J50? I see the Deep Sleep Brownout DSBOR.

CONFIG3L in the datasheet, describes the config bits but it's all for Deep Sleep.

Richard
Ttelmah



Joined: 11 Mar 2010
Posts: 19222

View user's profile Send private message

PostPosted: Sat Jul 10, 2010 2:34 pm     Reply with quote

You do realise, that if you 'protect' the code, what you read back from a chip, will not resemble the hex file at all...
The 'verify' sequence with a chip with the protect fuse, is:
1) Write the chip without the protect fuse.
2) Verify against the hex file
3) Enable the protect fuse.
4) Read the data from the chip, and store it.
Then in future, program new chips, from the original hex file, but with the protect fuse set, and _verify_ against the file generated in step 4.

Best Wishes
obdave



Joined: 25 Sep 2010
Posts: 1

View user's profile Send private message

PostPosted: Sat Sep 25, 2010 3:07 pm     Reply with quote

Howdy folks, I found this topic via Google because I just had one of my devices lose its mind. Here are particulars:

* processor is PIC18F25J11 (part of the PIC18F46J11 family)
* I have a bootloader
* processor went into a weird mode and stayed there
* rebooting umpteen times didn't resolve the issue
* code failed to verify using MPLAB ICD2
* flashing in new code via ICD2 fixed the problem

Sounds like program memory corruption to me.

Here's the thing - in studying the data sheet for this PIC, there is no fuse for Brown Out Reset. BOR is always enabled on this device, as is the internal voltage regulator. This PIC does have a Deep Sleep BOR fuse. I don't use Deep Sleep mode but I have the fuse enabled anyway. I'm not sure if I've overlooked anything or whether this is enough to eliminate BOR as a cause for my memory corruption.

Any suggestions would be gratefully accepted.

Regards,

Dave
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sun Sep 26, 2010 6:32 pm     Reply with quote

It could be any of the following, or several other things that are not listed:

Hardware:
1. A problem with your individual 18F25J11, or with the entire production
lot that your PIC is from.
2. A undiscovered errata with the silicon revision of your 18F25J11.
3. A problem with the design of your board, in the track layout,
component placement, and/or selection of component types or values.
Standard design practices may not have been followed.
4. A problem with a bad component on your individual board.
5. A misinterpretation of the PIC data sheet, so that the PIC on your
board is running outside of spec'ed design parameters. Or it could be
a misinterpretation of data sheets for other components on the board.
6. It could be a problem with the environment that the board operates
in, including electrical or temperature, etc.

Software:
7. It could be a problem with your version of the compiler. What is your
version ?
8. It could be a coding error done by you.
9. It could be the enabling of incorrect #fuses by you.

Here's a thread just on PCB track layout problems:
http://www.ccsinfo.com/forum/viewtopic.php?t=42775

The question is how to discover which of these things is causing the
problem. A lot of it can be done by swapping. Try using a similar PIC
from a "non-J" family. Try using a standard demo board from Microchip
as the platform, instead of your board. Try running the board in a
different environment. Try using a different CCS compiler version.
Try commenting out non-vital sections of your code. See if you still
get the problem.

Read my comments in this thread. See if you're doing any of those:
http://www.ccsinfo.com/forum/viewtopic.php?t=41964
assaad



Joined: 09 Dec 2009
Posts: 37

View user's profile Send private message

Re: Losing programming
PostPosted: Tue Sep 28, 2010 9:18 am     Reply with quote

rwskinner wrote:
Hello to all. I have an odd problem that I need to try and find a solution to. I have a 18F4550 (bunches of them) that randomly lose their program after a power cycle.

The panel can be up and operating fine, a technician goes out, powers down the panel, performs maintenance, powers back up, and the board with the pic 18F4550 is a dead. Reprogramming the flash with the program fixes it but we rather not have to do this !

I have several thousand 16F chips, and 18F series chips out running and I only ran across this a couple of times after a severe lightening storm, but never after a normal power cycle.

I was able to copy the flash, programming bits, and eeprom off one before I reprogrammed it and I'm about to start comparing bits to see where it's getting corrupt at.

Any tips what I might look for?


Do you use flash write ? It can be a bug in your software. I have this issue 2 years ago, but it was a bug.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group