ถ้าใช้ J_Link จะเข้าถึง และแก้ Byte RPD ของ Option_Byte ได้อย่างไรอ่ะครับ

Started by TaoTao, May 03, 2016, 01:15:51 PM

Previous topic - Next topic

TaoTao

พอดี ผมมีทั้ง ST Link v2 กับ J Link

J Link รวดเร็วกว่ามาก ทั้งการ Debug และ Program
แต่ Software ของ J-Link ไม่เห็นมีให้แก้ Option Byte เลยอ่ะครับ

แล้ว เราจะเปลี่ยนค่า RDP ใน Option Byte ได้อย่างไรอ่ะครับ
ใน Ref Manual เห็นบอกว่า แก้ด้วยโค้ด ไม่ได้
(ไม่รู้ ผมแปรผิดพลาดหรือเปล่า ภาษา ปะกิต ไม่แข็งแรง)

แล้วต้องทำไงหว่า  @_@!


void Change_ob(uint8_t   new_value){

uint8_t *my_rdp = (uint8_t*)0x1FFFF800;

while(FLASH->SR & 1);

// Unlock FLASH
if(FLASH->CR & 1<<7){
FLASH->KEYR = 0x45670123;
FLASH->KEYR = 0xCDEF89AB;
}

// Unlock OB
if((FLASH->CR & (1<<9)) == 0){
FLASH->OPTKEYR = 0x45670123;
NOP;
FLASH->OPTKEYR = 0xCDEF89AB;
NOP;
}
FLASH->CR |= 1<<4;
NOP;

*my_rdp = new_value;   // เด้งเข้า Hard Fault ISR ที่บรรทัดนี้ครับ  T_T!

while(FLASH->SR & 1);

// Deinitial_FLASH->CR
FLASH->CR = 0;
FLASH->CR |= 1<<7;
}


อันนี้ โคดที่ผมร่างขึ้นมา เพื่อแก้ OB (STM32F051C8)
ลองรัน 2 ครั้ง ทีละบรรทัด.. เพื่อดู Register ทีละตัว

พอถึง บรรทัด แก้ Byte.. RDP ปรากฎ Chip เน่าเลย
ต้องใช้ UART.. ERASE Option Byte ถึงจะใช้ได้อีกรอบ
เวงกำ

ขอบคุณล่วงหน้าครับ
:'(

dec

Set เป็น level อะไรไว้ครับ ถ้า level 2 ก็ตามนี้ครับ

QuoteWhen enabling read protection level 2 it's no more possible to go back to level 1 or 0

ส่วน J-Link มันไม่ใช่ของ ST ครับ ไม่น่าจะแก้ Option Byte ได้

TaoTao

Quote from: dec on May 03, 2016, 04:18:24 PM
Set เป็น level อะไรไว้ครับ ถ้า level 2 ก็ตามนี้ครับ

QuoteWhen enabling read protection level 2 it's no more possible to go back to level 1 or 0

ส่วน J-Link มันไม่ใช่ของ ST ครับ ไม่น่าจะแก้ Option Byte ได้

อืม Code ไปแก้ Byte RDP ไม่สำเร็จครับ
ทดลอง 2 รอบ ST Link กับ J-Link มองไม่เห็นเลย

เลยลองต่อด้วย RS232 ปรากฎ เข้าไป Erase Option Byte ได้
เลยกลับมาใช่ได้อีกรอบครับ