지난 게시글로 어느정도 워밍업이 되셨을 것이라고 보고... ㅎㅎㅎ
오늘 게시글은 상당히 복잡합니다. 바로 NX 바디에 NX 렌즈가 결합되었을 때, 또는 NX 바디의 전원을 켰을 때, 바디와 렌즈가 서로 같인 인증을 거치면서 렌즈로 부터 바디가 필요로 하는 데이터를 수집하는 절차에 대해 글을 올려보겠습니다.
이 절차는 워낙 까다로운 부분이 들어가고, 4년전에 이미 해석을 시도했을 때도 그랬지만, 이번에 좀더 다양한 바디와 렌즈를 이용했음에도 완전히 파악하지 못한 부분입니다. 물론 아주 약간... 4년 전보다는 나아졌지만요....
아... 그리고, 이번에 NX 마운트 통신을 분석할 때 즈음해서, 이번 NX500 스크립트와 관련하여, 렌즈 부팅절차에 도움이 되는 정보도 있었습니다.
github.com/ottokiksmaler/nx...
NX 바디/렌즈가 결합된 상태에서 전원을 켰을 때 데이터 전송 절차
아래 로직 에널라이져의 캡쳐 화면은 NX 30/2 렌즈가 바디에 연결되었을 때, 전체 과정을 보여줍니다.

위의 과정에서 (1)과 (2)의 과정을 거치는 동안 바디에서 CLK (1번 핀)으로 발생하는 동기화 클록은 250 KHz로 통신을 하다가, (3) 단계 부터는 2 MHz로 속도를 올려 쭉 통신을 주고 받습니다.
이제 각 단계에 대해서 좀더 자세하게 알아보겠습니다.
첫번째 통신. ECHO!
지난 글에도 올렸듯이 NX 바디에 렌즈가 물리거나, 바디에 전원을 켜게 되면, 그래서 일단 바디에 뭔가가 체결되었다고 하면 가장 첫번째로 렌즈와 주고 받는 것입니다.

첫번째니까 좀 자세하게 설명드렸습니다. 다음부턴 오가는 데이터만 언급하겠습니다. ㅎㄷㄷㄷ
2단계: 렌즈 기본 정보 요구/수신
아래는 NX 바디가 렌즈에게 렌즈 기본 정보를 요구하고 수신하는 일부분을 캡쳐한 것입니다.

이제 각 블록에 대해 알아보겠습니다.
2단계: 블록 1 : Header (??)
제가 이름 붙이길 Header라고 이름 붙인 부분인데, 모든 바디와 렌즈에서 같은 값이 올라옵니다. 마지막 값을 빼놓고요. 이 값이 혹시 렌즈 종류를 나타내는 고유번호가 아닐까 생갔했는데, 그것도 아니더군요.
일단 모아본 모든 데이터를 올려보겠습니다.

2단계: 블록 2 : 지원 Operation 정의 테이블
지원 Operation 정의 테이블의 구조는 파악했지만, 정확하게 의미하는 것은 알 도리가 없었습니다. 아래는 렌즈별 이 테이블의 값입니다.

예를 들어 NX 20-50 렌즈의 경우 이 테이블은 16진수로 1001, 1005, 1006, 1007, 1008, 1009, 100C, 100D, 1101, 1102, 1004, 1008 들의 값을 가집니다.
이후로 어떤 데이터도 이와 관련한 값은 올라오지 않습니다. 추측컨데, 이 값들에 대한 정의는 NX 바디 내에서 가지고 있는 것 같고, 렌즈에서 올리는 이 값은, 바디 내에 정의된 값들을 지칭하는 값으로 보여집니다.
2단계: 블록 3 : 지원 Event 정의 테이블
이 Event 정의 테이블도 앞선 지원 Operation 정의 테이블과 같은 구조로 되어져 있습니다. 마찬가지로 이 테이블이 Event 정의 테이블이라는 것 이외에는 아무런 정보가 없습니다.
아래는 렌즈별 이 테이블의 값입니다.

앞선 경우와 마찬가지로, NX 45.8 렌즈의 경우 16진수로 4001, 4002, 4003 의 지원 값을 갖습니다.
2단계: 블록 4 : 지원 특성 정의 테이블
이 특성 정의 테이블은 앞선 경우와 다른데, 여기서 정의된 값들은 차후 (3)단계 렌즈 개별 특정 정보 요구/수신 에서 각 값에 대한 상세정보를 요구하는데, 사용됩니다.
아래는 렌즈별 이 테이블의 값입니다.

예를 들자면, NX 30/2 렌즈의 경우는, 16진수로, 5001, 5002, 5003, 5007, 5008, 5009라는 값을 가지는데, 3단계에 가서 각 6개의 값에 대한 상세 정보를 바디에서 질의하고, 렌즈가 답하는 과정을 갖습니다. 그건 좀 있다 다시 설명 드리겠습니다.
2단계: 블록 5 : 지원 특정 데이터 정의 테이블
이 Event 정의 테이블도 앞선 지원 Operation 정의 테이블과 같은 구조로 되어져 있습니다. 마찬가지로 이 테이블이 특정 데이터 정의 테이블이라는 것 이외에는 아무런 정보가 없습니다.
다만, NX1의 바디에선 이 테이블 값 중 특정 2개의 값만을 따로 (3)단계 렌즈 개별 특정 정보 요구/수신 에서 질의하는데, 이건 나중에 3단계에서 다시 설명드리겠습니다.
아래는 렌즈별 이 테이블의 값입니다.

2단계: 블록 6 : 지원 상태 정의 테이블
이 Event 정의 테이블도 앞선 지원 Operation 정의 테이블과 같은 구조로 되어져 있습니다. 마찬가지로 이 테이블이 상태 정의 테이블이라는 것 이외에는 아무런 정보가 없습니다.
아래는 렌즈별 이 테이블의 값입니다.

2단계: 블록 7 : 렌즈 제조사
렌즈 제조사 정보를 담고 있습니다.
아래는 렌즈별 이 필드의 값입니다. 특이하게도 16-50PZ 렌즈만 완전한 렌즈 제조사 뿐만이 아니라 렌즈 이름 까지 완전하게 담고 있습니다.

2단계: 블록 8 : 렌즈 모델
렌즈 모델 정보를 담고 있습니다.
아래는 렌즈별 이 필드의 값입니다.

2단계: 블록 9 : 렌즈 펌웨어
렌즈 펌웨어 정보를 담고 있습니다.
아래는 렌즈별 이 필드의 값입니다.

2단계: 블록 10 : 렌즈 시리얼 번호
렌즈 시리얼 번호 정보를 담고 있습니다. 앞선 블록들과 같은 구조입니다. 이 것에 대한 스샷은 생략하겠습니다.
자 여기까지 해서 2단계까지 진행된 후, 3단계로 들어가면 렌즈 개별 특정 정보 요구/수신하게 되는데, 앞선 블록 4 : 지원 특성 정의 테이블에서 정의한 모든 필드값들을 여기서 상세하게 질의하는 단계를 거칩니다.
이 부분은 다른 게시글로 따로 올리겠습니다. 너무 길어서.. ㅎㄷㄷㄷㄷ
회원정보
아이디 : espskc***
닉네임 : 멀향
포인트 : 10799 점
레 벨 : 우수회원(레벨 : 7)
가입일 : 2015-05-11 00:37
포토앨범보기 쪽지보내기