graf
SMA 프로브 사용 테스트 본문
1. 개요

얼마 전에 파형 측정이나 글리칭 테스트할 때 쓰려고
SMA에 바로 연결 가능한 프로브를 구매했었다.
그런데 저 검은색 바늘이 하필 불량으로 왔다.
내가 원래 재수가 좀 없다.
..라고 하려고 했는데 판매자가 제품 회수 없이 그냥 환불을 해줬다.
알아서 폐기하랜다.
저 바늘 내부가 어떻게 돼있나 까보고 싶었는데 잘됐다.
한번 열어보고 혹시 고칠 수 있다면 고쳐서 써봐야겠다.
2. 수리
2.1 피복 제거

피복을 전부 제거했다.

구조가 굉장히 간단하다.
여기서 가운데 금색 파이프는 내부에 용수철이 들어있어서
바늘이 유연하게 움직일 수 있도록 제작되었다.

문제가 되는건 이 부분이다.
마스킹은 없지만 저항으로 추정 중이다.
이게 원래 오실로스코프용으로 판매하는 거라
측정용 감쇠 용도로 들어간게 아닐까 싶다.
확인해보니 케이블 연결부에서 저항(추정)의 좌측으로는 연결이 된다.
저항의 우측부터 바늘까지도 통전이 잡힌다.
단선이 저항 내부에서 생긴 거다.
저항이 강한 수준이 아니라 아예 연결이 안된다.
저 파이프 내부에서 끊어져있으면 어쩌나 했는데 운이 좋다.
난 이걸 간단한 글리칭이나 측정 테스트를 목적으로 샀다.
기존처럼 저 위치에다 저항을 새로 달아줘도 되겠지만
저길 납으로 덮어서 저항 없이 바로 이어놓는게 원래 목적에는 맞을 거다.
2.2 납땜
크기가 작은 저항을 하나 넣을까 말까를 고민 중이다.
지난번에 점퍼선으로 된 걸 썼을 때 링잉이 꽤 심했었다.
저항이 있으면 측정할 때 이런 노이즈를 좀 잡아줄 수는 있을텐데
너무 저항이 크면 글리치가 의도에 비해 약해진다.
음....
그냥 넣지 말자!
어차피 점퍼선 없이 니들이 바로 나와있는 구조라
노이즈가 그렇게 심하지도 않을 거다.

납땜해왔다.
납이 쉴드랑 연결된 아래쪽으로 넘어가서 식겁했었는데
열심히 닦아냈더니 다행히 합선이 나지는 않았다.
이제 단선됐던 프로브 끝에서 신호가 잡힌다.

단선된 저항은 제거했다.
귀엽게 생겼지만 어쩔 수 없다.
3. 파형 측정 테스트
테스트로 이 때 했던 클럭 사이클 측정을 다시 한번 해볼 거다.
클럭을 다시 잡아보는 김에 링잉이나 노이즈가 얼마나 심한지도 확인해보자.
3.1 파형 캡쳐

세팅은 지난번과 거의 동일하다.
gnd는 공통으로 묶었고 트리거는 MOSI에 연결했다.
이제 저 바늘을 클럭에 놓고 전원을 넣으면 측정이 시작될 것이다.
scope.clock.clkgen_src = "system"
scope.clock.adc_mul = 10
scope.adc.samples = 1000 * scope.clock.adc_mul
scope.adc.offset = 10000 * scope.clock.adc_mul
scope.adc.timeout = 1
scope.clock.clkgen_freq = 20000000
print(scope.clock.clkgen_freq)
import numpy as np
import time
res = []
reset_target(scope)
for i in range(30):
scope.arm()
ret = scope.capture()
if ret:
print('Timeout - no trigger')
else:
res.append(scope.get_last_trace())
print(f"{i} captured")
time.sleep(1)
이번에는 코드를 좀 수정했다.
지난번엔 생각을 못 했었는데
샘플이 긴 시간동안 불연속적으로 나와서 전부 캡쳐를 못하는게 문제라면
캡쳐를 여러번 끊어서 하면 되지 않을까 싶었다.
허스키는 버퍼 상한 때문에 샘플을 13만개까지 밖에 캡쳐를 못하지만
1초씩 띄어서 캡쳐를 1만개씩 30번 잡는 것은 가능하다.
어차피 클럭 속도만 확인할 거라 샘플이 많을 필요도 없다.
이 방식대로면 한번에 잡기 어려웠던 뒷부분까지 다 들어올 거다.
이걸 왜 진작 떠올리지 못했을까.
역시 시험 기간에 아이디어가 잘 떠오른다.

프로브를 가져다 댔다.
이제 코드 실행하고 보드에 전원 올려보자.

지난번에 본 링잉은 그대로 있지만 노이즈는 거의 없다시피 하다.
덕분에 링잉이 아주 정갈하게 잡혔다.

주기는 144 샘플. 이전과 동일하다.
이건 이미 확인한 내용이다.
한번 다시 해보자.
3.2 트리거 제거 후 재시도

위 방법으로는 생각보다 캡쳐가 잘 되질 않는다.
마음에 안 든다.
scope.clock.clkgen_src = "system"
scope.clock.adc_mul = 10
scope.adc.samples = 1000 * scope.clock.adc_mul
scope.adc.offset = 10000 * scope.clock.adc_mul
scope.adc.timeout = 1
scope.clock.clkgen_freq = 20000000
print(scope.clock.clkgen_freq)
scope.trigger.triggers = "tio1"
import numpy as np
import time
res = []
for i in range(20):
reset_target(scope)
scope.io.GPIO_PIN_TIO1 = 0
scope.arm()
scope.io.GPIO_PIN_TIO1 = 1
ret = scope.capture()
if ret:
print(f'{i} Timeout - no trigger')
else:
res.append(scope.get_last_trace())
print(f"{i} captured")
time.sleep(0.5)
트리거를 수동으로 설정했다.
tio1을 트리거로 잡고 핀을 직접 활성화하는 형태로 구성했다.
이제 데이터가 있든 없든 캡쳐를 시작할 것이다.

20개 모두 캡쳐됐다.
이 중에 내가 찾는게 하나쯤은 들어있겠지.

좋아 아까보다 훨씬 잘 나왔다.
20개 중에 3, 4, 7, 8, 9, 10 인덱스에서 신호가 나왔다.
cw.plot(res[3][5100:5200])

처음엔 이걸 노이즈라고 생각했는데 아무래도 아닌 것 같다.
신호가 일정한 주기로 이동하고 있다.
고속 클럭이 링잉 때문에 쪼개진 모습이었던 것 같다.

21개의 주기 동안 샘플이 177개 잡혔다.

다른 위치도 찍어봤다.
여기는 23개에 183이다.
cw.plot(res[3][6500:6700])

노이즈가 심하지 않은 곳도 있다.
24에 192다.
여긴 진짜 제대로 나왔다.
모두 평균적으로 샘플 8개에 한 클럭이 지나갔다.
속도는 25MHz다.
클럭 속도가 상당히 빠르다.
데이터시트에서 확인한 최대 속도인 50MHz를 넘지 않고
로직분석기 샘플링 상한이었던 24MHz도 초과한다.
이게 내가 지난번에 찾으려고 했던 고속 클럭의 원형이다.
드디어 그토록 찾아 헤맨 flash의 진짜 속도를 알아냈다.
신호 품질도 점퍼선을 썼던 지난번에 비해 많이 좋아졌다.
링잉은 gnd나 뭐 다른 부분 때문에 발생하는 문제인 것 같고
신호 자체의 불규칙한 노이즈는 확실히 크게 줄었다.
이 정도면 테스트는 성공적이었다고 할 수 있겠다.
허스키 사용법이 점점 익숙해져가는 느낌이다.
'ChipWhisperer > Lab' 카테고리의 다른 글
| 라즈베리파이 3B+ 볼트 글리칭 (4) | 2026.05.04 |
|---|---|
| SPI 클럭 사이클 측정 (0) | 2026.04.20 |
| chipwhisperer 모듈 사용법 (0) | 2026.03.30 |
| JupyterLab 설치 (0) | 2026.03.22 |
| ChipWhisperer 구매 (0) | 2026.03.13 |