이번엔 16채널 Logic Analyzer를 만들어 봤다.
원래는 이걸 만들기 위한게 아니었었다.
uHD-1200이라는 아주 오래된 USB 기반의 디지털 TV 튜너를 가지고 있었는데 요걸로 TV나 볼까 하고 드라이버와 SW를 찾아 봤는데 회사가 망해서 자료가 없다.
[uHD-1200 외장형 HDTV 수신기]
어차피 쓰지도 못하는거 뭐가 들었나 까봤다.
NTSC아날로그 입력처리용 SAA7111 비디오칩과 LGDT3302라고하는 디모듈레이터, 그리고 큼지막한 HDTV 튜너가 달려있었다.
[사진출처 케이벤치 - http://www.kbench.com]
그리고 영상을 USB를 통해 PC로 전달해 주기위한 Cypress사의 CY7C68013칩도 붙어 있었다.
libusb로 USB 2.0 디바이스 펌웨어 공부나 좀 해볼까 해서 간단하게 펌웨어 만들어 LED 깜박거리고 이것저것 테스트 하면서 자료를 찾던중 CY7C68013칩을 기반으로 Logic Analyzer 오픈소스 프로젝트 (https://sigrok.org)가 있다는걸 알게 되었다.
오호... 뭔가 재미난게 될 거 같다.
내용을 보니 CY7C68013에는 고속 USB데이터 전송을 위한 8/16bit FIFO가 내장되어 있는데 최대 24MHz까지 동작이 가능한 FIFO이다. 요 FIFO의 8/16bit 데이터 버스를 로직 프로브로 활용하고 FIFO를 동작 시키면 PC에서 최대 24MHz로 캡쳐된 데이터를 볼 수가 있는 것이다. 캡쳐된 데이터를 UART, I2C, SPI, JTAG, USB등등 별도 분석 알고리즘을 동원하여 PC에서 GUI나 CLI를 이용해 쓸 수 있는 것이었다.
수백~수천만원을 호가하는 Logic Analyzer에서나 가능했던 기능들인데 이런 SW를 오픈소스로 공유하고 있었던 것이다.
오...
멋진 사람들...
대단한 사람들...
누가 그러더만, 오픈소스는 가난한 개발자들에게 주는 신의 선물이라고...
sigrok홈페이지에 가보면 지원 가능한 디바이스들 목록이 나오는데 Logic Analyzer는 대부분 CY7C68013혹은 CY7C68013A를 기반으로 하고 있으며 하드웨어는 십수만원대에서 저렴하게 구입할 수 있는듯 해보였다.
나는 그것 마저도 살 수 없는 정말 똥가래가 찢어지게 가난한 사람이다.
(아... 저는 똥가래가 뭔지 잘 모르는 사람입니다. 아재 아닙니다.
모립니다. 정말 모립니다.)
그래서 앞서 배 따놓은 외장 HDTV 수신기를 sigrok에서 사용가능한 Logic Analyzer로 개조하기로 했다.
개조는 간단하다. CY7C68013의 FIFO버스를 외부로 빼 내면 된다. 물론 FIFO버스에 물려있는 다른 칩들은 모두 제거해야 한다.
[외장 HDTV 수신기 개조]
위 사진 처럼 CY7C68013과 3.3V 레귤레이터를 제외하고 모두 걷어낸후 16bit FIFO버스를 외부로 빼낸다. 원래 달려있던 동작 확인용 LED는 걷어낸 LGDT3302에서 드라이브를 하고 있었던 모양이다. 요 LED는 USB 5V 라인에 저항과 연결해 USB 연결 확인용으로 활용 한다.
PC연결시 USB식별용 VID와 PID를 저장하고 있는 시리얼 EEPROM도 제거한다.
[외장 HDTV 수신기 개조 - PCB 반대편]
[PCB 지지용 서포터 장착]
[케이스 장착 모습]
[최종 완성]
사용은 간단하다.
sigrok홈페이지에서 PulseView를 다운로드 받고 설치한다.
개조한 하드웨어를 PC에 연결하면 시리얼 EEPROM이 제거되었기 때문에 CY7C68013의 기본 VID-04B4/PID-8613로 디바이스가 보일텐데 이때 PulseView와 함께 설치된 Zadig이라는 유틸리티를 이용해 드라이버를 설치한다.
드라이버 설치후 PulseView를 실행하면 아래와 같이 16채널 Logic Analyzer로 사용이 가능해 진다.
CY7C68013 펌웨어는 PulseView에서 자동으로 주입하므로 Zadig로 기본 VID/PID 드라이버 설치만 되어 있다면 별도 신경은 쓰지 않아도 된다.
(사실 이렇게 쉽게 되는지도 모르고 지원가능한 디바이스를 모사해야 할꺼 같아 디바이스 목록표에서 VID/PID를 수집해 시리얼 EEPROM에 써넣으려고 삽질을 하고 있었다. 크크크)
[PulseView 실행 화면]
CY7C68013 데이터시트를 확인해 보니 동작은 3.3V로 하지만 외부 FIFO 버스핀은 모두 5V tolerance 기능이 들어있어 3.3V 및 5V로직에 대해 모두 사용이 가능하다.
VIH(논리 1이라고 인식하는 최소 전압)가 2V이므로 2.5V 로직에 대해서도 사용 가능해 보인다.
나에게도 무려 16채널의 Logic Analyzer가 생겼다!!! 우와!!!
움하하하...