usb hub 관련 질문
정말 고민만 하다가 이렇게 질문 글 올립니다.. ^^
제가 usb hub를 이용하여 둘 이상의 다른 device를 pc에서 제어하고자 하는데요.
1. pc는 usb hub와 enum을 통해 set address를 설정하고 (hub dev address를 설정합니다)
2. pc는 get_port_status로 hub의 status를 체크하고,
hub에 device가 붙으면 hub는 hub status change를 pc에 알려줍니다.
3. pc는 붙은 device가 뭔지 알기 위해 get_descriptor(device)를 보냅니다. 이때는 다시 dev_addr을 0 으로 해서 보내는데요.
여기서 질문이 있는데요.
보통 usb hub chip을 보면 register에 dev_addr을 셋팅할 수 있게 되어있는데..이건 hub의 dev_addr 일거잖아요
default로 "0"으로 되어있다가 pc가 보내준 set_address를 통해 예를 들면 "2"로 셋팅을 할거구요..
그러면 pc가 hub에 붙은 device를 알기 위해 get_descriptor를 보낼때는 dev_addr을 "0" 으로 보낼텐데
usb hub는 그전에 dev_addr을 "0"으로 바꾸고 pc가 보내는 descriptor을 받아야 하는걸까요?
pc가 "0"으로 보내는 dev_addr에 "2"로 셋팅되어있는 hub는 어떻게 usb signal을 받을 수 있을까요?
하드웨어적으로 dev_addr이 맞는 usb signal만 인터럽트를 띄워주거든요..제가 사용하는 칩에서는요..
사실 제가 사용하는 usb 칩은 dwc usb 2.0 otg 이긴 하지만요..
usb hub 다른칩 spec을 보아도 dev_addr 관련 레지스터는 딱 하나 있던데요..
제가 usb hub에 대한 개념이 부족해서..몬가 잘못 생각하는거 같은데..
여러분들의 조언을 부탁드립니다..^^
댓글 달기