View previous topic :: View next topic |
Author |
Message |
eskimobob
Joined: 07 Feb 2009 Posts: 40
|
Code protect not working |
Posted: Tue Dec 15, 2009 7:13 am |
|
|
Using an 18F6622.
For some reason I cannot get this to work:
#FUSES PROTECT //Code protected from reads
It simply does not generate the right config code to protect the memory from reads. I only noticed because I thought I'd try the feature in the CCS programmer which can check after programming that the code is indeed protected - it wasn't!
I've tried compiling with versions 4.089 onwards to 4.102 but the config fuses remain the same. I definitely don't have the NOPROTECT somewhere else which might be turning it off.
In case it is related, here are the fuses I am using:
Code: | #FUSES HS //1.08 HS High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES put //2.00 PUT Power Up Timer
#FUSES nobrownout //2.01 NOBROWNOUT No brownout reset
#FUSES nowdt //2.08 NOWDT No Watch Dog Timer
#FUSES mclr //3.15 MCLR Master Clear pin enabled
#FUSES nolvp //4.02 NOLVP No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES nodebug //4.07 NODEBUG No Debug mode for ICD
#FUSES PROTECT //5.00 PROTECT Code protected from reads
#FUSES wrt //6.00 WRT Program Memory Write Protected
|
I've tried upper and lower case - no difference...
Anyone else spotted this? |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Dec 15, 2009 12:32 pm |
|
|
Compile a small test such as the one shown below, and look at the Config
bits shown at the end of the .LST file. I did that for vs. 4.099 and it
shows the correct value for code protection in Config word #5. All the
bits in the lower byte are 0's. That means all 8 blocks are protected:
Quote: |
Configuration Fuses:
Word 1: 0100 XT NOIESO NOFCMEN
Word 2: 1E1E BROWNOUT NOWDT BORV22 PUT WDT32768
Word 3: 81F3 CCP2C1 NOLPT1OSC MCLR
Word 4: 0081 STVREN NODEBUG NOLVP NOXINST BBSIZ1K
Word 5: C000 PROTECT NOCPD NOCPB
Word 6: E00F NOWRT NOWRTD NOWRTC NOWRTB
Word 7: 400F NOEBTRB NOEBTR
|
Also, make sure you're not trying to compile code for the ICD debugger.
If you do that, the compiler will automatically disable any fuses that
conflict with the debugger operation.
From the MPLAB help file for the ICD2:
Quote: |
Q: Can I use code protection with MPLAB ICD 2?
A: No. Code protection, especially table read protection on any area in
program memory will prevent MPLAB ICD 2 from functioning. Do not use
any code protection or table read protection configuration settings when
debugging with MPLAB ICD 2. Code protection can be enabled when
programming a part for testing without MPLAB ICD 2. |
Here's the test program:
Quote: |
#include <18F6622.h>
#fuses XT,NOWDT,PUT,BROWNOUT,NOLVP, PROTECT
#use delay(clock=4000000)
//======================================
void main(void)
{
while(1);
} |
|
|
|
eskimobob
Joined: 07 Feb 2009 Posts: 40
|
|
Posted: Mon Jan 04, 2010 5:43 am |
|
|
PCM programmer wrote: | Also, make sure you're not trying to compile code for the ICD debugger.
If you do that, the compiler will automatically disable any fuses that
conflict with the debugger operation. |
Thank you PCM programmer. I'd not realised I had left the debug condition in - I should have tried a small program . All works as expected now. |
|
|
picj1984
Joined: 01 Mar 2010 Posts: 73
|
|
Posted: Wed Apr 06, 2011 6:11 pm |
|
|
I'm having the same problem, and I understand that my problem is that I'm programming for the ICD debugger.
what do I need to include in my code so that I'm NOT compiling for the debugger?
Is it just a matter of leaving out "#device ICD=TRUE" if so, I tried commented that out and I'm still having problems. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Apr 06, 2011 6:19 pm |
|
|
Post your PIC.
1. Remove "DEBUG" from your #fuses statement.
2. If in MPLAB, set the Release/Debug box at the top of MPLAB for "Release". |
|
|
picj1984
Joined: 01 Mar 2010 Posts: 73
|
|
Posted: Wed Apr 06, 2011 6:53 pm |
|
|
Setting that box to "Release" did the trick! Thanks a million PCM programmer! |
|
|
|