View previous topic :: View next topic |
Author |
Message |
micro_debugger
Joined: 08 Oct 2009 Posts: 73
|
PIC24FV32KA304 #FUSES with bootloader or without can not be |
Posted: Sun Apr 23, 2017 4:52 pm |
|
|
Hi,
Compiler version 5.070
I'm using the PIC24FV32KA304 with CCS bootloader. That is working very well.
Except of one point. The #fuses in the released devices can not be changed.
Explain here,
I have done one mistake on released already devices, and see that the changing of fuses is not working !!
I can not change in the already released devices the #fuses. I have defined properly:
Code: | #define ROM_WRITE_CAN_MODIFY_CONFIG_BITS |
No way. It is not working.
I tried the write_configuration_memory in the core program, just to avoid the bootloader, but it is also not working.
Code: |
unsigned int16 f_data;
f_data=0x0018;
write_configuration_memory(&f_data, 2);
|
Whatever I do, the #fuse is not changing their value.
Any idea to help about that?
Thank you in advance.
BR |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19538
|
|
Posted: Mon Apr 24, 2017 12:31 am |
|
|
If the bootloader is going to work, the fuses have to remain those it uses.
If you change the fuses, then the bootloader may no longer work.
This is why you need to work out what fuses you main program needs, and use these for your bootloader.
The main code then should not set the fuses (#FUSES none).
At the end of the day, if you need to change the fuses, then you may need to reprogram the bootloader....
What fuse is involved?. For some changes that do not affect the boot of the chip, there may be a way of changing the chip settings after boot. However if the fuses already in the chip, prevent the configuration from being written, then the fuses can only be changed by a full erase (so reprogramming...). |
|
|
micro_debugger
Joined: 08 Oct 2009 Posts: 73
|
|
Posted: Mon Apr 24, 2017 2:14 am |
|
|
HI,
Thank you for your answer. However the bootloader has a dedicated option that allows to change the #fuses (however dont). I tried to change this fuse by hand (I mean reprogram the #fuses on existing loaded bootloader) and everything is working well.
The fuse I'm looking to change it from
to
This change does not affect the bootloader itself, just add one pin I/O instead of CLK out.
According to bootloader documentation it should be possible by defining the
Code: | #define ROM_WRITE_CAN_MODIFY_CONFIG_BITS |
what I done in the bootloader, and it is not working.
or it should be also possible by using the function
Code: | write_configuration_memory() |
Which is not working as defined.
In this IC, it is possible to change the #fuses "on the fly" as far I understand.
Thank you for any support.
BR |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19538
|
|
Posted: Mon Apr 24, 2017 9:29 am |
|
|
I have a suspicion this may not be possible on this chip...
Your chip has the 'Codeguard' security.
Have a look at:
<ww1.microchip.com/downloads/en/DeviceDoc/70005182a.pdf>
If the default has Codeguard enabled, the chip will defend the configuration segment against changes....
What are the fuses the bootloader has selected?.
Print out the fuses from the end of the bootloader list file. |
|
|
micro_debugger
Joined: 08 Oct 2009 Posts: 73
|
|
Posted: Mon Apr 24, 2017 9:43 am |
|
|
Hi,
Here it is
Code: | #fuses WRTB //Boot block write protected
#fuses SOSC //Secondary oscillator
#fuses SOSC_LOW //Low-power SOSC circuit is selected
#fuses SOSC_ANALOG //SOSC pins set for Analog mode for use with a crystal
#fuses IESO //Internal External Switch Over mode enabled
#fuses EC //External clock with CLKOUT
#fuses NOOSCIO //OSC2 is clock output
#fuses CKSFSM //Clock Switching is enabled, fail Safe clock monitor is enabled
#fuses WDT_SW //No Watch Dog Timer, enabled in Software
#fuses WDT_NOSL //Watch Dog Timer, disabled during SLEEP
#fuses BROWNOUT //Reset when brownout detected
#fuses BORV_MID //Brown-out Reset set inbetween highest and lowest voltage
//#fuses BROWNOUT_SW //Brownout controlled by configuration bit in special file register
#fuses LVR //Low Voltage Regulator Enabled, Controlled in Software
#fuses PUT //Power Up Timeryu
#fuses MCLR //Master Clear pin enabled
#fuses LPRCLOW //Low-Power FRC Low Power and Low Accuracy |
The only problem is the
Code: | #fuses NOOSCIO //OSC2 is clock output |
That I need to change, as left it by mistake.
I need to have
Crossed my fingers on my hands and legs ;-)
BR |
|
|
micro_debugger
Joined: 08 Oct 2009 Posts: 73
|
|
|
micro_debugger
Joined: 08 Oct 2009 Posts: 73
|
|
Posted: Mon Apr 24, 2017 1:24 pm |
|
|
Hi,
CCS in a rapid time send me update for this bug correction.
It will be included in the next compiler update.
Just testing it.
BR |
|
|
micro_debugger
Joined: 08 Oct 2009 Posts: 73
|
|
Posted: Mon Apr 24, 2017 4:06 pm |
|
|
Confirmed
Working perfectly
Thank you CCS and Ttelmah
BR |
|
|
|