본문 바로가기
Swim & Bicycle

Di2 hack part 1. Di2 유닛간의 통신구조 - CANbus

by DS3MLG 2014. 6. 1.

가.

 해외 포럼(weightweenies 나 bikerumor)에서는 Di2 통신 구조를 CANbus로 이야기 하고 있다.

CANbus라는거는 일종의 프로토콜(통신규약)인데 캔 버스의 주요 장점 중 하나는 중앙 컨트롤러가 없다는 점이다.

따라서 시마노에서는 모든 컴포넌트가 다 업데이트가 되는데

(그때는 이해 못했는데 캔버스라니까 이제 이해가 되는...)

스프린트 버튼(좌우 레버마다 각각 버튼 하나씩이 뒷드의 업,다운을 담당),

클라이머 스위치(뒷드 제어용 업다운 위성스위치)가 왜 레버에 연결되어야 했는지 오해를 했던거 같다. 그냥 버튼인줄 알았는데...


※7970의 경우는 스위치가 제어유니트로 연결되어서 (인디게이터? 정션?) 다른 스위치를 써도 되도록 되어있다...

이런식으로 http://www.endurancenation.us/blog/bike/how-i-hacked-into-the-di2-on-my-p5-to-make-it-better/


 7970이후 나온 2세대 Di2, 일명 E-tube는

뒷드, 앞드, 정션(전압측정 및 조정모드 진입), 레버, 배터리 마운트가 각각 독립되어 따로따로 동작을 한다.

우측 레버가 '리어 쉬프트 업' 명령을 송신하면 메세지 형식으로 버스 내부를 돌아다니는데 리어드레일러는 그 메세지를 읽고 쉬프트업 하고 (아마도) 동작완료 메세지를 버스로 송신 할 것이다.

레버는 메세지를 확인하고 만일 버튼이 계속 눌려있다면

컴포넌트 세팅에 따라 계속 쉬프트업을 명령하던지 아니면 동작완료하고 상태 버퍼에 완료상태를 넣던지 하겠지...

이 동작은 단순히 뒷드만 움직이고 앞드 트리밍(체인간섭이 없도록 조금씩 움직임)이 없다는 전제고,

실제론 앞드가 뒷드 위치에 따라 트리밍을 한다. 따라서 버스에서 뒷드가 버스에 띄우는 메세지를 읽고 움직이던지, 레버가 뒷드 업쉬프팅 할때 앞드도 같이 움직이게 하던지 둘중 하나겠지. 7970시리즈와 6770시리즈가 호환이 안되는 것은 이런 모드의 차이이지 싶다.

배터리 마운트가 독립되어 동작하는 이유는

「배터리 저전압일때 - 앞드 이너 고정, 뒷드만 동작

배터리가 완전 방전되었을때 - 앞드 이너 고정, 뒷드는 마지막 포지션 고정

전압에 따른 기능제한을 하기 위한 것으로 보인다. 하드웨어(뒷드, 앞드)에 강한 충격을 받으면 고정장치를 풀어서 파손을 방지하는 기능도 있다고 하는데 이건 각 앞드, 뒷드에 내장된 기능으로 생각된다.


 캄파뇰로 같은 경우는 헤드 유니트가 배터리와 통합되어 있고, 이것이 나머지를 통제하는 시스템인데, 심안호는 각각 유닛이 따로따로 스스로 서버도, 클라이언트도 될 수 있다. 

작년에 캔셋 대회 준비할때 조사하다가 알게 된 프로토콜인데

위성이라는 녀석은 우주에 올라가 버리면 수리가 불가능한 점을 이유로

이중 또는 다중 중앙처리 프로세서로 안정성을 꾀하는 캔셋(CAN Satellite)등 위성에서 내부 통신에 주로 썼는데 전선 한가닥으로만 통신이 되서 신기했고

한편으론 CAN 위성(깡통 사이즈여서 캔 위성, 조금 큰 건 큐브셋임)에서 사용하는 통신규약이라 CAN bus인줄 알았다(...)


6770이상 시리즈의 연결 방식은

A정션에 컨트롤 레버부가 연결되고, 정션B에서는 이를 막연히 분배하는 허브 역할만 한다.

실험결과 정션 A가 없이는 위성스위치는 동작하지 않는 것이 확인되었으며

기존의 착탈식 배터리 마운트의 모듈 기능(저전압시 앞드 이너에서 정지 명령, 완방시 뒷드 고정)은

싯포스트 내장 배터리의 경우 그 내장배터리에 마운트에 들어있는 모듈 기능이 통합되어서 장착되어있다.


가격으로 설명한다면 어느정도 보충이 될까...

B정션<A정션

외장 착탈식 배터리(Without mount)<내장 싯포스트 배터리




 여튼

스램 초창기 전동구동계의 특허자료를 보면

CANbus 스타일로 (단지 무선이라는게 다를 뿐) 각각 모듈이 상호 통신이 되는 스타일인데 갑자기 혼란스러워진다.

특허 내용이 발표되고, 자료가 공개된 그 당시 살펴볼땐 시마노의 특허를 피하려는 목적으로만 파악했었는데

진상을 알고나니 더 복잡하네...



나.

 내가 원하는 것은 6770의 11단화가 가능한 커스텀 펌웨어였다.

누군가가 나서서 해킹(탈옥)하고 만들어 줄 거라 생각했건만, 죽어도 나오지 않고

9070이 나오고, 6870이 나오고 호환이 안된다는 심안호의 발표에 우울했을 뿐이였다.


"레버는 단지 스위치가 아니였단 말인가?"


6770, 9070에 와서는 답은 "그렇다"이고, 7970에서는 "아니다"




 


 현상황에서 7970을 hack 하는건 가성비가 떨어져서, 굳이 시도 할 필요도 없...(하지만 작업하긴 쉬울꺼 같다)

만일, TISO 처럼 12단, 13단, 14단 단수를 늘리거나... 또는 유선을 무선으로 바꾼다거나 할 때에는 7970이 무조건 쉬워 보인다.

9070 다음 또는 다다음 세대쯤 나와서 싸지면 한번 시도해 볼 수도...



다.

 궁금한점, 앞드의 동작은 10단 뒷드의 경우 거기에 맞춰서, 11단 뒷드는 11단에 맞춰서 움직인다는데 어떻게 구성이 된 건지 궁금하다.

앞드의 펌웨어가 쉬프팅 한 만큼 단계가 움직이게 되어있는 건지(일정한 거리, 횟수기준)

아니면 High, Low limit에 맞춰서 거리만큼 나눠서 움직이는 건지 모르겠다. 체인라인도 자전거 마다 다 다르고, 리밋도 위치가 다 같진 않을텐데.


 6870 동작영상을 보니 아우터링에 올려놓고 뒷드를 변속 했을때 두번정도 트리밍 동작을 한다.

앞드 변속을 할 때는 체인을 확실히 밀어 올리기 위해 리밋까지 움직인 후 2초 뒤에 간섭없는 정상 위치로 돌아온다.

트리밍은 11단 뒷드든 10단 뒷드든 잘 작동된다고 알려져 있는데

앞드는 단수 상관없이 적당히(?) 움직이는 것 같다. 시마노가 가지고 있는 14단 특허 포텐셜을 생각한다면 각 리미트 사이 거리를 잰 후 적당히 나눠서 트리밍을 하게끔 만들테지만 로드맵에 12단이나 감안할까... 그정도로 광범위하게 움직이도록 오버 스펙으로

하드웨어 설계를 하지는 않을 것 같다. (어쩌라고)



라.

 목표는 6770레버-6770뒷드로 11단 동작시키기.

어째서 뒷드가 10단만 동작하는지,

10단 뒷드와 11단 뒷드와의 차이는 뭔지 그 차이를 알게 되면 끝.

가능하면 뒷드 회로를 조사하던지(하드웨어적인 제한), 펌웨어를 리버스 엔지니어링 하는 방법(소프트웨어적인 제한) 조사방법만이 hack이라는 결론...


 김칫국이지만 

프로젝트-11단 커스텀펌웨어(hack? modify?)을 완성해서 배포할 경우...

개인이 아닌 단체로 완성해서 여러명이 커스텀을 하였을 때,

특허가 살아있는 동안 회로도 전체나 펌웨어 전체를 일반에 배포했을 때 발생하는 저작권 침해.

시마노의 대응에 대해서도 고민을 해봐야 하지 않을까. Project Manager수준에서 방어기제가 작동해서

추후 제품의 타용도로의 사용방지에 신경쓰게 되면 Cracking이 고달퍼진다...



참조

http://blog.naver.com/ywcycle/80180367338

http://carltonbale.com/shimano-di2-everything-you-need-to-know/

댓글