2009년 4월 19일 일요일

NEMO10 삽질기 2/2

이전 포스트(NEMO10 삽질기 1/2)에서 이어 갑니다.


결론부터 말하자면, SENA 총판인 TCPLINK에서 받은 트랜스포머잭(XFMRS사의 10BASE-T Filter COMBO)으로 -기존 확장보드를 손 봐- 한큐에 성공하여 잘 사용하고 있습니다.




또한, 요청했던 대로 NEMO10 소개 페이지에 트렌스포머에 대한 언급이 추가 되었으며, SENA를 통해 트랜스포머 잭을 -개당 3천원 정도에?- 구매하실 수 있으실 겁니다.



다만, NEMO10을 소매로 구매할 때 -이중으로 배송료를 물지 않게- 트랜스포머잭을 끼워서 살 수 있으면 더 좋을 것 같네요.



트랜스포머잭은 날 RJ45잭에 트랜스포머와 (PHY칩의 필요에 따라 LPF, 초크등이) 내장된 것으로 핀들의 위치(foot print)는 날 RJ45와 동일하지만 각 핀의 기능은 완전히 다르므로 (같은 PHY칩용 트랜스포머간에도 호환되지 않습니다!) 주의하셔야 겠습니다.


사실 SENA를 통하지 않고도 트랜스포머(또는 트랜스포머잭)을 구할 수 있는 방법을 몇 가지 알게되어 공유합니다.



다만 가격이 높은 편이고, 언제까지 공급이 될지 장담할 수가 없네요.


최악의 경우 PULSE사의 catalog 에서 RTL8019AS용 트랜스포머의 사양을 확인 하여 호환품을 찾으시는 방법이 남아 있는데 순탄치많은 않으실 듯.


지난 포스트에서 시험해본 -for ant PHY 라던- 트랜스포머가 RTL8019AS을 사용한 NEMO10에서 동작하지 않은 이유는 LPF를 추가해 주지 않은 것이 이유인 듯 합니다. 17 MHz LPF가 필요하다고 하네요.



몰라 뭐야.. 귀찮어.



NEMO10의 사용자 메뉴얼에 나와 있는 NEMO10의 확장보드의 회로도는 XFMRS사의 10BASE-T Filter COMBO를 기준으로 그려진 것으로, 다른 트랜스포머를 NEMO10에 붙이시려면 넷상에서 찾은, 같은 RTL8019AS를 사용한 다음 이더넷 모듈들의 회로도를 참고하시면 도움이 되실 듯 합니다.



일련의 사건을 통해 제가 배운 점은:



이더넷 모듈이나 PHY칩을 사용하려면 "된다고 알려진" PHY칩을 먼저 확보하자!



입니다.


XFMRS사의 10BASE-T Filter COMBO를 사용한 NEMO10 확장보드 v3를 드디어 공개합니다.




SENA의 NEMO10평가보드와 비교해 볼때 자주 사용하지 않는 CONSOLE, FACTORY_RESET 스위치를 점퍼 처리 하였고, 5V레귤레이터와 시리얼 전압변환 부분은 제외하였습니다. 따라서, 이 확장보드를 Serial2USB 보드와 연결하면 바로 USB2이더넷 보드로 사용하실수 있게 됩니다.


제 확장 보드에서는 세개의 LED만을 남겨 두었는데 각각 다음과 같습니다.



  • RDY : 콘솔모드가 아닌 경우 (이더넷을 사용할 준비가 된 경우)점등합니다.

  • LINK : 랜 케이블을 연결하면 점등합니다.

  • ACT: 랜선으로 무언가를 주고 받을때 깜박 거립니다.


일전의 MAX232 보드의 설명에서 잠시 언급했든이 NEMO10이 H/W flow control을 사용해 CTS/RTS 핀을 준비하지 않은 근래의 시리얼 보드로는 아예 설정 콘솔에 접근하지 못하는 골탕을 먹을 여지가 있는데, 게다가 SENA의 NEMO10 확장보드는 굉장히 고가에요, CTS/RTS핀을 자뻑하게 해 주면 No flow control로 콘솔에 접근이 가능해 집니다.


위의 확장보드에서 우 하단의 리셋 스위치 옆에 쇼트된 NEMO10의 두 핀 (16,18번)이 이에 해당합니다.


다시? 말씀드리자면 Serial2Ethernet 보드가 유용한 이유는 아두이노의 스케치를 털끝하나 건드리지 않고도 인터넷에 연결하게 해 준다는데 있습니다.


예를 들어, 아두이노에 간단한 시리얼 에코 스케치를 심어 두었다면,


다음과 같이 NEMO10을 tcp서버로 설정하고,



> get host
Host_mode: tcps
Local_port: 6001
Inactivity_timeout(sec): 300

파이썬 twisted를 사용한 간단한 스크립트를 통해 NEMO10에 할당한 IP주소로 데이터를 주고 받으면,
아두이노는 여전히 일상적인 시리얼 통신을 하는 것처럼 인식하고 작동하게 됩니다.




from twisted.internet import reactor, protocol

class EchoClient(protocol.Protocol):
"""접속후 메세지를 보내고, 받은 후 종료"""
def connectionMade(self):
print "Say to server:", "hello NEMO10"
self.transport.write("hello NEMO10\n")

def dataReceived(self, data):
print "Server said:", data # you will received "HELLO NEMO10"
self.transport.loseConnection()

def connectionLost(self, reason):
print "connection lost"

class EchoFactory(protocol.ClientFactory):
protocol = EchoClient
def clientConnectionFailed(self, connector, reason):
print "Connection failed - goodbye!"
reactor.stop()

def clientConnectionLost(self, connector, reason):
print "Connection lost - goodbye!"
reactor.stop()

def main():
f = EchoFactory()
reactor.connectTCP("000.000.000.000", 6001, f) # address of NEMO10
reactor.run()

if __name__ == '__main__':
main()


앞으로, 인터넷에 연결된 아두이노를 활용한 예를 몇가지 올려 보겠습니다. :)