1월 082012
 

지난 며칠동안 펌웨어의 오류를 수정하고 펌웨어를 안정화 시키는데 주력을 했습니다.
그러던 중에 엉뚱한 버그가 발견되는 허탈한 상황도 있었습니다…… ㄷㄷㄷㄷ

처음 AF를 성공하던 때는 10번 시도를 하면 1번 성공 될까말까 한 수준이었는데, 펌웨어를 수정하고, 오류도 몇개 수정한 지금 10번 수행을 하면 8번 정도는 성공하는 수준으로 안정되어가고 있습니다.

이번 펌웨어 안정화를 하면서 몇가지 알게된 추가적인 내용을 정리해 보겠습니다.

펌웨어를 운용하는데 있어서 시스템의 안정성에 가장 위협적인 순간은 역시 AF 동작 시, 데이터의 흐름입니다.
렌즈의 입장에서 봤을 때는 바디에서 내려오는 명령이나, AF 상황보고에 대한 4번 핀, ATT의 신호 두가지 입니다만, 이런 자료보고 요청에 대해 렌즈에서 바디로 데이터를 올려야 하는 상황은 아래 그림과 같습니다.

2번핀, DATA 핀을 통해 바디로 데이터를 올려줘야 하는데, 이 자원은 하나이고, 이 자원을 두고 경쟁하는 상황은 아래와 같이 4가지 상황이 발생합니다.

NX 마운트 DAT핀에 대한 경쟁 상황

위의 경쟁 상황에 대해, 실제 NX10에 30팬을 장착하고 AF를 동작하였을 때 데이터를 가지고 설명을 하겠습니다.

NX 마운트 AF 상황별 타이밍

 

실제 제가 NX 용 AF 어댑터를 가지고 테스트를 하는 과정에서, 기본 가정은 렌즈에서 데이터를 전송하기 위해 5번핀 ACK를 HIGH –> LOW로 변경을 하면 바디에서 CMD 또는 ATT 핀을 통해 데이터 요구를 전혀 하지 않을 것이라는 것이었습니다.
이 가정은 3번핀 CMD의 경우 정확하게 지켜졌습니다만, 문제는 4번 핀 ATT였습니다.

얘는 5번핀에 신호를 인가해도 무조건 밀고 들어옵니다.

윗 그림에서도 설명을 했지만, 타이밍이 중요한 데이터를 요구하므로, 이런 양상을 보여주는 것으로 판단합니다. 바디는 렌즈에서 일어나는 상황을 실시간으로 모니터링하고, 현재 위치를 추정하는 알고리즘을 갖고 있을 것으로 추측합니다.

그래서 위의 두번째 데이터 흐름의 로직 애널라이져의 기록을 보면, 4번핀 ATT의 흐름은 전혀 변경이 없이 아주 일정합니다. 주변의 상황이 마치 이 신호핀을 피해 벌어지고 있는 것 같이 말입니다.

그런데, 실제 상황에서 저런 일은 일어날 수 없죠… 타이밍이 겹칠 수 있는 상황은 엄연히 상존합니다. 그런데도 저런 데이터 흐름을 보여준 다는 것은 렌즈에서 ATT 신호에 대해 응답하는 것이 바로 첫번째 우선 순위를 갖고 있으며, 렌즈에서 독립적으로 올라가는 무작위적인 데이터는 인위적으로 이 ATT의 신호를 피해 16.5ms 주기 사이에 올리는 것으로 보입니다.

이 상황에 대해서는 예전에 “의혹”으로 아래 링크의 글을 작성한 바 있습니다.

NX 마운트 AF 신호 분석 중 예기치 못한 현상??


이렇게 ATT 신호를 피해 데이터를 올림에도 불구하고, 위와 같은 상황이 예기치 않게 발생할 수가 있는 것입니다.  그러나 우리의 위대하신  NX 개발자님들은 이마저도 잘 처리하도록 해주고 있음이 보입니다.

현재의 제 펌웨어 어댑터는 저 상황이 발생하면, 먹통이 되어버려서, 전원을 껐다 켜야 합니다. 다만 저 상황이 일어나지 않도록 프로그램을 해놓기는 했습니다. ㅎㅎㅎㅎ

이제 이런 로직을 구현하고, 기타 경쟁상황에 대한 멀티태스킹 기법 중 “뮤텍스”를 이용해, “크리티컬 섹션”을 지정함으로써, 단 하나의 프로세스만이 진입할 수 있도록 지정하여, 시스템의 안정성을 높였습니다.

아래 동영상은 이렇게 구현한 어댑터의 근/원 거리 AF 테스트를 하는 동영상입니다.

아직도 시스템을 더욱 안정시켜야합니다. 현재로는 30팬의 데이터를 이용해 어댑터를 운용중인데, 속도도 많이 늦고, 움직임도 비효율적입니다.

18-55 번들렌즈의 데이터를 이용해 펌웨어를 구현하면 훨씬 빠르고 효율적인 움직임을 보여줍니다. 이는 아직 구현이 제대로 되지 않아 문제 해결 중에 있습니다.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)