35달러 백업 카메라 디스플레이의 AMT630A 칩을 리버스 엔지니어링하다
Reverse-engineering a $35 backup camera display (AMT630A)
AMT630A 기반 복합 비디오 LCD 모니터 보드의 하드웨어 OSD 엔진을 제어하는 Arduino/ESP32 라이브러리. 5개의 OSD 윈도우, 텍스트/글리프/비트맵, 팔레트 애니메이션, 블렌딩, 스케일링, 블링크, 윈도우 이동을 지원한다. Python 이미지 변환기와 특정 펌웨어의 숨겨진 공장 메뉴 진입 자동화도 포함. 실제 하드웨어 리버스 엔지니어링에 기반했으며, 펌웨어 의존적 기능은 주의가 필요하다.
AMT630A는 SYS 레지스터 C6를 사용하여 내부 8051 MCU 또는 외부 I2C가 내부 레지스터를 제어할지 선택한다. 하드웨어 테스트된 모니터에서, 재고 펌웨어는 주기적으로 내부 비디오/디코더 레지스터에 접근하며 일반적으로 MCU 소유권을 기대한다. 정상 재고 펌웨어 작동 중 외부 소유권을 반복적으로 가져오면 결국 OSD와 라이브 복합 비디오를 포함한 전체 디스플레이 파이프라인이 정지되는 것으로 나타났다.
HN 토론
19- mogrinz
이 모든 건 제가 실물 크기 Robby the Robot 슈트를 만들고 나서 그 안에서 실제로 밖을 볼 수 없다는 걸 깨닫게 되면서 시작됐습니다 (https://youtu.be/gAHd46ErNA8?si=-iOwbobp4trPXdGB)
그 문제를 해결하려고 35달러짜리 백업 카메라/디스플레이를 샀는데, 그 디스플레이에 AMT630A 비디오 프로세서가 들어 있고 OSD 시스템이 의외로 쓸 만하다는 걸 알게 됐죠. 그렇게 I2C 프로빙, 펌웨어 덤핑, 레지스터 추적, 커스텀 그래픽, 비트맵 포맷, 숨겨진 공장 메뉴를 파헤치고, 결국 ESP32로 라이브 컴포지트 비디오 위에 프로그래밍 가능한 HUD를 생성하는 방법까지 알아내는 토끼굴에 빠졌습니다.
배운 걸 Arduino 라이브러리로 만들어 GitHub에 공개했습니다. 내장 및 커스텀 폰트, 여러 OSD 창, 16색 비트맵, 팔레트, 투명도, 애니메이션을 지원합니다. 카메라 외의 다른 컴포지트 비디오 소스와도 함께 쓸 수 있습니다.
라이브러리와 코드는 여기 있습니다: https://github.com/mogrinz/AMT630A
Arduino IDE Library Manager에서 직접 설치할 수도 있습니다 (AMT630A 검색)
- bobsmooth
전형적인 리버스 엔지니어링 사례네요. readme가 얼마나 자세한지 정말 마음에 듭니다.
- BugsJustFindMe
제목 지적: "backup"은 두 번째 복사본을 뜻하고, "back up"은 뒤로 움직이는 동사구입니다. 동사구는 명사 바로 앞에서 형용사로 쓰일 때 명확성을 위해 하이픈을 붙입니다. 따라서 "backup camera"가 아니라 "back-up camera"가 되어야 합니다.