usb hub 관련 질문

myth228의 이미지

정말 고민만 하다가 이렇게 질문 글 올립니다.. ^^

제가 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에 대한 개념이 부족해서..몬가 잘못 생각하는거 같은데..

여러분들의 조언을 부탁드립니다..^^