Code Read Protection with SWD?

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

Code Read Protection with SWD?

跳至解决方案
1,696 次查看
phatpaul
Contributor III

I'm porting from Kinetis KL05 to LPC804 (due to availability).

On KL05 I enable Flash Security by setting FSEC[SEC] bits to 00.  That allows only mass-erase using the SWD debug port.

This is ideal because I can prevent the casual hacker from downloading the flash from my product, but if we find a firmware bug after chips have been flashed, we can mass-erase and re-flash them.

On LPC8x, I'm reading that if I enable "Code Read Protection" it will disable the SWD port.  I wasn't planning to use the ISP (UART bootloader). So am I unable to mass-erase and reflash a secured part from the SWD port?

Does this mean I need to expose both SWD and ISP pins to my debug header?  Seems like a lot of pins wasted.

标签 (1)
0 项奖励
回复
1 解答
1,682 次查看
xiangjun_rong
NXP TechSupport
NXP TechSupport

Hi, Paul,

For LPC804, that the SWD port is blocked means the SWD is blocked exactly, there is not backdoor like Kinetis.

Pls refer to Table 6 in UM11065.pdf, if you use CRP1, the SWD port is blocked, in ISP mode, you can erase all flash sector, then download application code to flash again via SWD. This is similar to the Kinetis mass erase function in security mode.

So I suggest you keep the ISP function on your target board.

LPC804 link:

https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mc...

Hope it can help you

BR

XiangJun Rong

 

xiangjun_rong_0-1636703641674.png

 

在原帖中查看解决方案

0 项奖励
回复
2 回复数
1,683 次查看
xiangjun_rong
NXP TechSupport
NXP TechSupport

Hi, Paul,

For LPC804, that the SWD port is blocked means the SWD is blocked exactly, there is not backdoor like Kinetis.

Pls refer to Table 6 in UM11065.pdf, if you use CRP1, the SWD port is blocked, in ISP mode, you can erase all flash sector, then download application code to flash again via SWD. This is similar to the Kinetis mass erase function in security mode.

So I suggest you keep the ISP function on your target board.

LPC804 link:

https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mc...

Hope it can help you

BR

XiangJun Rong

 

xiangjun_rong_0-1636703641674.png

 

0 项奖励
回复
1,693 次查看
phatpaul
Contributor III

I think I can answer my own question.  I found an app note about CRP but for the LPC11 (not LPC8) but it looks like it is relevant. https://www.nxp.com/docs/en/application-note/AN10968.pdf

And I also found in startup\startup_lpc804.c

//*****************************************************************************
// Variable to store CRP value in. Will be placed automatically
// by the linker when "Enable Code Read Protect" selected.
// See crp.h header for more information
//*****************************************************************************
#include <NXP/crp.h>
__CRP const unsigned int CRP_WORD = CRP_NO_CRP ;

 

That includes NXP/crp.h, which explains it pretty clearly:

// Disables UART and USB In System Programming (reads and writes)
// Leaves SWD debugging, with reads and writes, enabled
#define CRP_NO_ISP    0x4E697370

// Disables SWD debugging & JTAG, leaves ISP with with reads and writes enabled
// You will need UART connectivity and FlashMagic (flashmagictool.com) to reverse
// this. Don't even try this without these tools; most likely the SWD flash
// programming will not even complete.
// Allows reads and writes only to RAM above 0x10000300 and flash other than
// sector 0 (the first 4 kB). Full erase also allowed- again only through UART
// and FlashMagic (NO JTAG/SWD)
#define CRP_CRP1      0x12345678

// Disables SWD debugging & JTAG, leaves UART ISP with with only full erase
// enabled. You must have UART access and FlashMagic before setting this
// option.
// Don't even try this without these tools; most likely the SWD flash
// programming will not even complete.
#define CRP_CRP2      0x87654321

/************************************************************/
/**** DANGER CRP3 WILL LOCK PART TO ALL READS and WRITES ****/
#define CRP_CRP3_CONSUME_PART 0x43218765
/************************************************************/

 

So it seems that I can't even program a production flash image with a SWD connection.

I hope my contract assembler can flash with ISP.

0 项奖励
回复