본문 바로가기
임베디드SW/Debugging for 임베디드

T32 JTAG 디버거 락 Censorship 기능 구현 Feat. MPC5744P

by 바이너리 임베디드 2022. 9. 14.

 

 

혹시 T32 JTAG 디버거 락 기능을 구현하고 계신가요?

NXP칩이시가요?

그럼 정말 잘 찾아오셨습니다.

 

지금 이 글을 다 읽고 잘 이해하신다면 쉽게 구현하실 수 있을 것이라 생각합니다.

지금부터 Censorship 기능에 대해서 한번 알아보도록 하겠습니다. 고고고!!

 

T32 JTAG 디버거 락 Censorship 기능 구현 Feat. MPC5744P
T32 JTAG 디버거 락 Censorship 기능 구현 Feat. MPC5744P

 

Censorship 기능이란?

MCU를 개발하기 위해서는 디버거 장비가 필요합니다.

그중에서도 회사에서 가장 많이 사용하는 장비는 Trace 32 디버거 장비입니다.

저도 개발의 80%는 Trace32 디버거 장비를 사용하고 있습니다.

 

Trace 32 디버거 장비는 MCU와 JTAG 라인으로 연결되어 있습니다.

그런데 제품을 양산할 시기가 되면 제품을 해커로부터 보호하는 기능들이 필요하게 됩니다.

그중에서도 JTAG 라인으로 디버거 장비를 연결시키지 못하도록 잠가버리는 기능이 필요하게 됩니다.

 

제가 사용했던 MCU는 NXP에서 제공하는 MPC5744P 칩인데요.

NXP에서는 디버거 락 기능의 이름을 Censorship이라고 합니다.

다른 MCU에서는 어떻게 부르는지 모르겠지만 대부분의 MCU는 디버거 락 기능을 가지고 있으니까 레퍼런스 매뉴얼을 살펴보면 금방 찾으실 수 있을 것입니다.

 

 

그럼 Censorship 기능을 사용하여 JTAG 라인을 잠가 보도록 하겠습니다.

그리고 잠갔으면 풀어도 봐야겠죠?ㅎㅎ

T32 JTAG 디버거 락 Censorship 기능 구현 Feat. MPC5744P
T32 JTAG 디버거 락 Censorship 기능 구현 Feat. MPC5744P

 

 

Censorship 기능 구현

 

전체적인 기능 구현 Flow에 대해서 설명하겠습니다.

 

NXP MPC 5744P에는 OTP (OneTime Programmable)  Flash 메모리를 가지고 있습니다.

OTP Flash 메모리는 딱 한 번만 쓸 수 있고 그 이후부터는 절대 Erase 할 수 없는 메모리입니다.

이 메모리 Map에 DCF Records 영역이 있는데 이곳에 정해진 규칙에 맞는 DCF Record 락 패턴 값을 Write 해주면 디버거 락이 됩니다.

그리고 DCF Records 영역에 정해진 규칙에 맞는 DCF Record 언락 패턴 값을 Write 해주면 디버거가 언락이 됩니다.

그럼 더 자세하게 알아볼까요?

UTEST Flash Memory Map 구조

 

MPC 5744P 레퍼런스 매뉴얼에서 보면 UTEST Flash에 DCF Records 블락이 있으며, 시작 번지와 끝 번지가 나와있습니다.

시작 번지는 0x00400200이고 끝 번지는 0x004009FF입니다.

이 영역은 OTP 영역이므로 한번 쓰면 더 이상 지웠다가 다시 쓸 수 없는 영역입니다.

그러니까 신중하게 Write를 진행해야 합니다.

그리고 이곳 DCF Records 블락 부분에 정해진 규칙에 따라 패턴 값을 써주기만 하면 디버거 락과 디버거 언락을 할 수 있게 됩니다.

MPC5744P UTEST Flash Map
MPC5744P UTEST Flash Map

 

Censorship을 위한 DCF Records 설명

 

그럼 DCF Records 영역 부분 패턴 값을 어떻게 입력하는지 살펴보도록 하겠습니다.

처음 Start Record가 입력되어 있어야 합니다. 패턴 값은 정해져 있습니다.

패턴 값은 0x05AA55AF_00000000입니다.

그리고 Start Record 번지는 고정 주소입니다. 주소 시작 번지는 0x00400200이며 이곳에 패턴 값이 Write 되어 있어야 합니다.

 

그리고 이제 Data Record 부분에 디버거 락을 하기 위한 패턴 값을 Write 하면 됩니다.

하나의 레코드는 8byte 크기이며, 디버거 락을 위한 패턴 값은 3개의 레코드 값을 가지고 있습니다.

 

첫 번째 레코드 값은 NVSCI Record 값으로 0x55AAXXXX_0100000C값을 가지게 됩니다. (X는 55AA만 아니면 됨)

이 값은 디버거 락을 진행하겠다는 의미 정도로 이해하시면 됩니다.

두 번째 레코드 값은 NVPWDL 값으로 0xXXXXXXXX_01000004 값을 가지게 됩니다. (X는 하위 패스워드입니다.)

세 번째 레코드 값은 NVPWDH 값으로 0xXXXXXXXX_01000008 값을 가지게 됩니다. (X는 상위 패스워드입니다.)

이렇게 3개의 레코드 값을 Start Record 뒤에 바로 Write 해주게 되면 디버거로 접근이 불가능 해집니다.

그리고 디버거 락을 해주기 위해서는 패스워드를 알고 있어야 합니다.
만약 패스워드가 12345678_12345678 값이라면 T32 입력 창에 sys.option.keycode 0x1234567812345678이라고 입력해주면 일시적으로 Attach가 가능하게 됩니다.


이 상태에서 DCF Record Flash 영역에 디버거 언락 하는 데이터 Record를 Write 해주게 되면 다시 정상적으로 디버거를 사용할 수 있게 됩니다.
데이터 Record 형태는 0x55AA55AA_0100000C 패턴 값을 Write 해주면 됩니다.


마지막으로 Stop Record는 0xFFFFFFFF_FFFFFFFF 값이므로 처음부터 0xFF값을 가지고 있으므로 따로 해줄 조치는 없습니다.


Appending DCF records 쓰는 방법
Appending DCF records 쓰는 방법

 

 

T32로 패턴 값을 쓰는 방법

 

간단하게 DCF Record 영역에 Write 하려면 아래에 명령어를 T32 명령 창에 입력하면 쉽게 Flash에 Write가 가능합니다.

 

FLASH.program ALL

data.set 0x00400200 %QUAD 0x05AA55AF00000000

FLASH.program off

 

그리고 아래는 T32에 사용법에 대한 간단한 영상입니다.

잘 정리되어 있으므로 꼭 참고 하시기 바랍니다.

 

https://www.youtube.com/watch?v=JBrBhO_j9BA

 

그럼 오늘 포스팅은 여기까지 하겠습니다!!

 

@함께 읽으면 좋은 글들

2021.11.12 - [임베디드SW/TC275 Lite Kit for 임베디드] - 임베디드 SW 개발자 되는 방법

 

임베디드 SW 개발자 되는 방법

바이너리 임베디드를 열며! 바이너리 임베디드에 오신 여러분들 축하드립니다.!!  짝짝짝!!! 이곳에 오시고 이 글을 만나신 분에게 우선 축하드린다고 말씀드리고 싶습니다. 앞으로 

cookbook.tistory.com

2021.11.13 - [임베디드SW/TC275 Lite Kit for 임베디드] - 임베디드 개발보드를 구매해보셨나요?

 

임베디드 개발보드를 구매해보셨나요?

왜 임베디드 개발 보드를 구매해야 하는가? 임베디드 SW 개발자가 되기 위해서 우리는 위대한 일을 하려고 합니다. 바로 임베디드 개발 보드를 구매해보려고 합니다. 임베디드 SW의

cookbook.tistory.com

 

@임베디드 카페

https://cafe.naver.com/binaryembedded

 

임베디드 유니버스 : 네이버 카페

임베디드 유니버스 : 임베디드의 세계로 초대합니다.

cafe.naver.com

 

 

 

댓글