WIZnet Developer Forum

[W7500] Main Flash memory locking in my application (normal boot mode, not in boot mode)

안녕하세요 ~
아래 같이 이미 배포된 상태의 펌웨어에 Flash Memory Read protection을 적용하는
방법을 알고 싶습니다. (최초 배포시에 ISP명령이용한 Lock적용안한 경우입니다.)

  1. 이미 펌웨어는 배포된 상태임(예. v1).
  2. 업그레이드는 현장에서는 UDP로 업그레이드 하면 됨.
  3. 새로운 버젼(ex. v2)으로 펌웨어 업그레이드하면서
    v2 버젼에는 Main Flash Memory locking 기능을 넣을려고 합니다.
    (How to lock Main Flash Memory not in BOOT mode but in normal boot mode)
    가능한 방법을 알고 싶습니다.
    Main Flash Memory: 0x00000000 ~ 0x0001 FFFF
    FLOCKR0, FLOCKR1는 Data block (0x0003 FC00 ~ 0x0003 FFFF)만 제어하는 것 같습니다.
    저는 Main Flash Memory를 Read Lock하고 싶습니다.

감사합니다.

아래 글을 읽어봤으나 BOOT mode조건이라 저의 상황과는 다릅니다.

  • 작성중인 소스는 아래와 같으나 Data0,1영역을 대상으로 하는 것 같습니다.
    저는 Main Flash Memory Read protection in normal_boot_mode에서의 방법을 모르겠습니다.

/* // Flash Read Protection - beging , W7500 flash read and write protection
*(volatile uint32_t *)(0x41005014) = 0x64; //TXD0 - set PAD strengh and pull-up

** FLASH READ PROTECTION
for read protection active, user need to set DRL and CRL in FLOCKR0.
CRL is FLOCKR0[31]
DRL is FLOCKR0[3:2]
DRL0 is FLOCKR0[3] and it is for Data0 area.
DRL1 is FLOCKR0[2] and it is for Data1 area.
*/
{
uint32_t tempFLOCKR0 , tempFLOCKR1 ;

volatile uint32_t * const my_FLOCKR0 = (uint32_t *) 0x41005014;  // set up a pointer to the register
volatile uint32_t * const my_FLOCKR1 = (uint32_t *) 0x41005018;  // set up a pointer to the register

// uint32_t val = *my_FLOCKR0; // read register
// val |= (0x3 << 2); // set bits 2…3 to 0x03 (i.e. set bits 2 and 3)
// val |= (0x1 << 31); // set bit 31 to 0x01 (i.e. set bits 31)
// *my_FLOCKR0 = val;

tempFLOCKR0 = *(uint32_t *)(0x41005014) ; // FLOCKR0 
tempFLOCKR1 = *(volatile uint32_t *)(0x41005018) ; // FLOCKR1 , comparing 

printf("U> [hex:%x, %x ] =Flash Lock Address \r\n", tempFLOCKR0, tempFLOCKR1); 
printf("U> SystemReset Called\r\n") ; 

}

Copyright © 2017 WIZnet Co., Ltd. All Rights Reserved.