12.5MSPS 자작 디지털 오실로스코프

  2000년즘 아르바이트해서 모은 돈으로 청계상가에서 40MHz 아날로그 오실로스코프를 하나 샀었다. 그때 2족 보행 로봇이나 마이크로마우스, 라인트레이서 등등 만들면서 8051, 80C196, AMD188 보드 만든거 디버깅 할 때 아주 요긴하게 잘 썼었다.
요놈은 아직도 내 작업실에서 잘 쓰고 있다. 다만 아쉬운건 저렴한 아날로그 스코프이다 보니 저장 기능이 없고 one-shot 트리거가 안된다.
  요새 갖고 있는 구형 네비게이션 reverse engineering 재미에 빠져 있던 지라 이참에 디지털 오실로스코프를 만들어 보기로 했다.


[XROAD Z3300]

  우선 타겟이 될 네비게이션은 위 사진의 모델이다. XROAD사의 Z3300모델인데 삼성 S3C2410 기반으로 만들어 진거다.
  늘 그렇듯, 배따고 어찌어찌 JTAG 핀 찾아 내고, 기본 펌웨어는 백업 해놓고, 자작한 부트로더를 포팅한 후 시작 한다. 근데 요놈은 LCD 구동을 기본 CPU를 사용하지 않고 BIT1611AG라는 LCD 전용 제어 칩을 사용한다. 인터넷 뒤져봐도 자료가 없다. 젠장...
S3C2410 LCD 출력 데이터 받아서 패널에 뿌려주는듯 한데 칩 제어는 IIC로 하는듯 하다. 데이터 시트가 없으니 이거 뭐 할 수가 없다. 그래서 어쩔수 없이 무선전화기에서 뜯어 놓은 ATMEGA128 기반 보드를 이용해 IIC 버스 모니터(sniffer)를 급하게 만들었다. 16KB SRAM이 같이 붙어 있어 패킷 로깅하기에 아주 용이하다.
  백업 받아 두었던 S3C2410의 원래 바이너리를 다시 주입한다음 LCD가 정상 동작 할 때까지 IIC 모니터로 모든 패킷을 저장한다. 저장된 데이터는 간단하게 분석해서 똑같이 주입 시켜준다. 다행이 잘 되는군. 움하하...

  오실로스코프 디스플레이 파트는 얼추 이걸로 하면 되고, 데이터 취득을 해야 하는데 S3C2410의 ADC는 터치용으로 아예 할당되어 버려 일반 ADC용도로는 사용이 불가능하다. 또한, 속도도 500KSPS 밖에 되지 않아 오실로스코프용으론 좀 부족하다. 그래서 외부에 데이터 취득용으로 TMS320F28335를 추가로 장착 하였다.
  요놈은 내장 ADC가 1채널 일때는 최대 12.5MSPS, 2채널 일때는 8.33MSPS로 동작 가능하다.
  그런데 문제가 하나 있다. F28335에서 12bit 12.5MSPS로 취득되는 데이터량이 어마어마(?)하다. 초당 25MB나 된다. 이걸 어떻게 S3C2410에 전달을 하지?...
  USB를 쓸까 SPI를 쓸까 하다 F28335에서 트리거 찾아내고 디스플레이만 되는 영역 데이터를 뽑아내는 후처리까지 다 하고난 다음 S3C2410에 넘겨주기로 했다. 대충 계산해보니 약 900Kbps만 넘겨도 전체 동작에 무리가 없어 보였다.
  요 F28335와 S3C2410간 데이터 전송은 UART를 적용 했다. 실험해 보니 최대 1.5625Mbps까지 통신이 가능하였다 (S3C2410에서 최대 설정 가능한 수치임).
  원래는 Linux-Xenomai를 기반으로 사용하려고 OS포팅하고 UI까지 다 꾸며 놨는데 결정적으로 OS 오버헤드인지 뭔지 1.5625Mbps로 통신을 하면 뭔가 불안정 해진다. 데이터를 놓치는거 같다. 그래서 OSless 펌웨어로 다시 구현했다. OS가 없으니 그래픽 구현부터 해서 완전히 밑바닥 부터 짜야 했다. 아.. 피곤...
  아주 손쉽게(?) F28335와 S3C2410 코드를 만들어 얼추 돌아가도록 해봤다.


[0.5Vp-p 1KHz 측정 3us/div]


[0.5Vp-p 1KHz 측정 2ms/div]


[프로브 연결부 및 입력 전압 분압용 가변 저항부]


[최종 완성]

<> 사양
  - 주 제어기 (LCD 디스플레이 및 UI): S3C2410 200MHz
  - 보조 제어기 (ADC): TMS320F28335 150MHz
  - 입력 채널: 2채널
  - 속도: 12.5MSPS(1채널), 8.33MSPS(2채널)
  - 트리거 모드: Hold-Off, One-Shot, Run/Stop
  - 트리거 엣지(상승/하강) 선택 및 트리거 레벨 조절 가능
  - 시간축 설정(/div): 3/5/10/20/50us, 0.1/0.2/0.5/1/2/5/10/20/50ms, 0.1/0.2/0.5s
  - 디스플레이: 480x234

댓글 23개:

  1. 답글
    1. 제 블로그에 달리는 백만년만의 댓글 이군요.. 하하..
      감사합니다.

      삭제
  2. 정말 대단하십니다
    저도 고장난 xroad v7 네비가 있는데 ...
    욕심이 생기네요..
    뭐든 만들어보고 싶은데.. 기술이...

    답글삭제
    답글
    1. v7이면 MIPS기반 Alchemy군요.
      자료는 인터넷에 널려 있습니다.

      삭제
  3. 아주 좋은생각이고 한번기회생기면 만들어보겠습니다.

    답글삭제
  4. 아주 손쉽게(?) !!!!!
    대단하십니다 .. ㄷㄷ

    답글삭제
    답글
    1. 네.. 아주 손쉽게...
      손은 쉬운데 잠은 부족해지더군요..
      흐흐..

      삭제
  5. 대단하십니다
    이건 갖고 논다는 표현이 어울리신듯 합니다
    진정 능력자십니다

    답글삭제
    답글
    1. 갖고 노는 장난감 치곤 손이 많이 갑니다ㅎㅎ

      삭제
  6. 진정 저 말들이 뭔지는 몰라도 대단하십니다

    답글삭제
    답글
    1. 알아주시는 분이 있다니 다행이군요...

      삭제
  7. 자료가 인터넷에 널렸다는글을보고 열심히 구글링해봐도 자료가 없습니다
    아니 찾지를 못합니다
    혹시 차근차근 맹그는 방법을 공유해즤실수는 없는지요?
    스마트폰으르 맹글어쓰는데 전압도 한계가있고 파형도 영 거시기하고 해서 믿을수가 없답니다
    어려우시면 추천 사이트나 참고할만한 사이트좀 알려주심 감사하겠 습니다

    답글삭제
    답글
    1. MIPS기반 네비를 보유하고 계신분이 있어 Alchemy CPU자료에 대해 언급 드린건데, 네비를 디지털 오실로스크프로 개조하는 일반적인 방법은 아마 없을 겁니다.

      삭제
  8. 십여 년간 구글링하여 본 작품 중에서 가장 훌륭합니다.
    카페의 링크를 따라 왔습니다.
    Diy를 아주 좋아하지만, 따라 해 볼 엄두가 나지 않습니다.
    이렇게 단순히 소개할 것이 아니라, 펀딩하여 사업으로 발전시킬 일이라고 봅니다.

    답글삭제
    답글
    1. 하루 방문객 10명 내외였는데 갑자기 방문자가 많아진게 카페에 링크가 올라갔나 보군요. 안쓰는 네비의 큼지막한 디스플레이를 그냥 두기 아까워 활용해 보고자 했는데 사업성이 있는지는 모르겠군요ㅎㅎ

      삭제
  9. 전혀 감이 없네요
    능력자 이신듯 합니다
    부럼네요

    답글삭제
  10. 왠만한 중소기업 임베디드 개발팀보다 훨씬 대단하시네요. 감탄하고 갑니다.

    답글삭제
    답글
    1. 설마 여러명이 일하는 팀보다 낫겠습니까...

      삭제
  11. 우와! 2015년 게시물을 이제야 보게 되었네요. 정말 대단하시네요. 쵝오!

    답글삭제