Skip to main content
hemant
Associate II
May 22, 2009
Question

Flash write protection for STM32f103zc

  • May 22, 2009
  • 4 replies
  • 1425 views
Posted on May 22, 2009 at 07:21

Flash write protection for STM32f103zc

    This topic has been closed for replies.

    4 replies

    hemant
    hemantAuthor
    Associate II
    May 17, 2011
    Posted on May 17, 2011 at 13:12

    Hello,

    I want to store calibration constants on the Flash, and then write protect that page.

    I could store calibration constants using Flash Write routines using PDL ver2.0.3 sample code.

    But when i tried the sample code from PDL ver. 2.0.3 to ''write protect the flash'', it gave FLASHSTATUS = FLASH_ERROR_PG, during debug (& standalone also)

    The write protect the code did NOT work and write protect option byte was =0xFFFFFFFF.

    The code is as follows:.....

    //------------------------------------------------------------------------

    myHardwareInit();

    FLASHStatus = FLASH_COMPLETE;

    MemoryProgramStatus = PASSED;

    Data = 0x1753;

    EraseCounter = 0x0;

    /* Unlock the Flash Program Erase controller */

    FLASH_Unlock();

    /* Define the number of page to be erased */

    NbrOfPage = (EndAddr - StartAddr) / FLASH_PAGE_SIZE;

    FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP|FLASH_FLAG_PGERR |FLASH_FLAG_WRPRTERR);

    /* Get pages write protection status */

    WRPR_Value = FLASH_GetWriteProtectionOptionByte();

    ProtectedPages = WRPR_Value & 0x000000C0;

    if (ProtectedPages != 0x00)

    {/* Pages not write protected */

    /* Enable the pages write protection */

    FLASHStatus = FLASH_EnableWriteProtection(FLASH_WRProt_Pages12to13 |FLASH_WRProt_Pages14to15);

    /* Generate System Reset to load the new option byte values */

    NVIC_GenerateSystemReset();

    }

    //------------------------------------------------------------------------

    when executed it always resets the system.

    Can someone help?????

    Hemant.

    hemant
    hemantAuthor
    Associate II
    May 17, 2011
    Posted on May 17, 2011 at 13:12

    Hello,

    Meanwhile i tried Read protection for the device and landed up with more trouble.

    Now, i can NOT even program the flash. The worst part is that it shows that the flash is erased and NOT protected, still it does not program.

    Please refer to the dump produced in the Eclipse IDE....

    Open On-Chip Debugger 0.1.0 (2009-01-21-21:15) Release

    BUGS? Read

    http://svn.berlios.de/svnroot/repos/openocd/trunk/BUGS

    $URL:

    https://svn.berlios.de/svnroot/repos/openocd/tags/openocd-0.1.0/src/openocd.c

    $

    500 kHz

    500 kHz

    Info : JTAG tap: stm32.cpu tap/device found: 0x3ba00477 (Manufacturer: 0x23b, Part: 0xba00, Version: 0x3)

    Info : JTAG Tap/device matched

    Info : JTAG tap: stm32.bs tap/device found: 0x06414041 (Manufacturer: 0x020, Part: 0x6414, Version: 0x0)

    Error: JTAG tap: stm32.bs got: 0x06414041 (mfg: 0x020, part: 0x6414, ver: 0x0)

    Error: JTAG tap: stm32.bs expected 1 of 1: 0x16410041 (mfg: 0x020, part: 0x6410, ver: 0x1)

    Error: trying to validate configured JTAG chain anyway...

    Info : JTAG tap: stm32.cpu tap/device found: 0x3ba00477 (Manufacturer: 0x23b, Part: 0xba00, Version: 0x3)

    Info : JTAG Tap/device matched

    Info : JTAG tap: stm32.bs tap/device found: 0x06414041 (Manufacturer: 0x020, Part: 0x6414, Version: 0x0)

    Error: JTAG tap: stm32.bs got: 0x06414041 (mfg: 0x020, part: 0x6414, ver: 0x0)

    Error: JTAG tap: stm32.bs expected 1 of 1: 0x16410041 (mfg: 0x020, part: 0x6410, ver: 0x1)

    Error: trying to validate configured JTAG chain anyway...

    target state: halted

    target halted due to debug-request, current mode: Handler HardFault

    xPSR: 0x01000003 pc: 0xfffffffe

    verify Capture-IR is disabled

    target state: halted

    target halted due to debug-request, current mode: Handler HardFault

    xPSR: 0x01000003 pc: 0xfffffffe

    Info : device id = 0x10016414

    Error: SWJ-DP STICKY ERROR

    Error: dcb_dhcsr 0x30003, nvic_shcsr 0x20000, nvic_cfsr 0x1, nvic_bfar 0xe000edf8

    Warn : STM32 flash size failed, probe inaccurate - assuming 512k flash

    Info : flash size = 512kbytes

    stm32x mass erase complete

    Error: SWJ-DP STICKY ERROR

    Error: dcb_dhcsr 0x30003, nvic_shcsr 0x20000, nvic_cfsr 0x1, nvic_bfar 0xe000edf8

    Error: SWJ-DP STICKY ERROR

    Error: dcb_dhcsr 0x30003, nvic_shcsr 0x20000, nvic_cfsr 0x1, nvic_bfar 0xe000edf8

    Warn : Block read error address 0x8000000, count 0x100

    unknown error when checking erase state of flash bank #0 at 0x08000000

    # 0: 0x00000000 (0x800 2kB) erased

    # 1: 0x00000800 (0x800 2kB) erased

    # 2: 0x00001000 (0x800 2kB) erased

    Note: the same message for sectors 3 to 252 are removed to save space

    #253: 0x0007e800 (0x800 2kB) erased

    #254: 0x0007f000 (0x800 2kB) erased

    #255: 0x0007f800 (0x800 2kB) erased

    successfully checked protect state

    #0: stm32x at 0x08000000, size 0x00080000, buswidth 0, chipwidth 0

    # 0: 0x00000000 (0x800 2kB) not protected

    # 1: 0x00000800 (0x800 2kB) not protected

    # 2: 0x00001000 (0x800 2kB) not protected

    # 3: 0x00001800 (0x800 2kB) not protected

    Note: the same message for sectors 3 to 252 are removed to save space

    #253: 0x0007e800 (0x800 2kB) not protected

    #254: 0x0007f000 (0x800 2kB) not protected

    #255: 0x0007f800 (0x800 2kB) not protected

    stm32x (High Density) - Rev: Z

    Error: timed out while waiting for target halted

    Error: error executing stm32x flash write algorithm

    Error: flash writing failed with error code: 0xfffffc7a

    Error: error writing to flash at address 0x08000000 at offset 0x00000000 (-902)

    The program segments i used is attached herewith.

    Regards,

    Hemant.

    16-32micros
    Associate III
    May 17, 2011
    Posted on May 17, 2011 at 13:12

    Hi Hemant,

    You can check first that your HSI ( internal High Speed RC) is Enabled and not disabled else the Flash programming will fail.

    the Reset the system at the end is normal as you have issued a system reset :) by calling NVIC_GenerateSystemReset() routine.

    Cheers,

    STOne-32.

    gareth
    Associate II
    May 17, 2011
    Posted on May 17, 2011 at 13:12

    I got around this by adding a different programming algorithm (STM32F10x Flash Options) to the target options. (this is in uVision) Their seems to be a different algorhthm for the flash options bytes, adding this, together with the STM32F10xOPT.s file helped. I did have to remove the normal programming algorithm and run jst this one first before adding back in both to get it working.

    hope this helps