답변:
유휴 상태로 들어가고 나올 때 극성이 중요하며 D +와 D- 라인을 바꾸면 문제가 발생합니다.
USB 데이터는 NRZ로 코딩 되어 "1"은 물리적 레벨의 변화가없고 "Zero"는 물리적 레벨의 변화가 있습니다 (아래 그림 참조). 따라서 신호를 반전 시키면 (예를 들어, D +와 D-를 교환하여) 데이터 전송 중에 기능적인 변화가 없습니다. 그러나 데이터 전송 전후에 문제가 발생하여 장치와의 통신이 중단 될 수 있습니다.
호스트에는 각 데이터 라인에 15kΩ 풀다운 저항이 포함되어 있습니다. 장치가 연결되어 있지 않으면 두 데이터 라인이 모두 "단일 종단 0"상태 (USB 문서의 SE0)로 낮아지고 연결이 재설정되었거나 연결이 끊 겼음을 나타냅니다. USB 장치는 1.5kΩ 저항으로 데이터 라인 중 하나를 끌어옵니다. 이는 호스트의 풀다운 저항 중 하나를 압도하고 데이터 라인을 "J"라는 유휴 상태로 둡니다. USB 1.x의 경우 데이터 라인을 선택하면 장치가 어떤 신호 속도를 사용할 수 있는지 나타냅니다. 전 대역폭 디바이스는 D +를 높이고, 저 대역폭 디바이스는 D를 높입니다.
데이터가 NRZI로 인코딩되는 동안, 동기화 시퀀스 및 EoP는 고정 상태 (J / K / SE0)로 정의된다. D + 및 D-가 전환되면 J 상태는 K로 전환되고 SE0은 여전히 SE0 (두 라인 모두 낮음)입니다. 따라서 반전시 동기화 시퀀스와 EoP가 잘못됩니다. USB 1.x에서 D +와 D-가 교체되면 전체 대역폭 장치가 저 대역폭으로 인식되고 그 반대도 마찬가지입니다. 따라서 장치는 호스트와 동일한 속도로 통신하지 않습니다.
EOP (패킷 끝)라고하는 USB 패킷의 끝은 송신기가 SE0의 2 비트 시간 (D + 및 D – 최대 값 모두 아래)과 1 비트 J 상태의 비트를 구동하는 것으로 표시됩니다. 그 후, 트랜스미터는 D + / D- 라인 구동을 중단하고 위에서 언급 한 풀업 저항은이를 J (유휴) 상태로 유지합니다.
D + / D- 스왑 드라이버를 사용하면 호스트는 올바른 (SE0, SE0, J) 대신 시퀀스 (SE0, SE0, K)를 보게됩니다. 그러면 호스트가 패킷 끝을 인식하지 못해 문제가 발생할 수 있습니다.
장치와 호스트가 USB 사양을 엄격하게 준수하는 경우 D +와 D- 핀을 교체하면 오류가 발생합니다. 호스트 디자이너가 그러한 실패 모드를 예견하고 호환성을 내장 한 것으로 생각됩니다. 그러나 그러한 교체 된 케이블이 실제로 작동하는지 여부는 사양에 맞지 않을 것입니다.
앤드류 콜 스미스 (Andrew Kohlsmith)라는 또 다른 회원은 USB 허브의 핀이 실수로 바뀌었을 때 이것을 경험했다. 연결된 장치가 표시되지 않는 것으로 문제가 나타납니다. USB 장치는 전원이 공급되었다고 표시하지만 허브의 업스트림 쪽 (호스트에 올바르게 연결됨)에있는 컴퓨터에서 전혀 인식하지 못했습니다.
편집 : 의견을 보내 주신 분들께 감사드립니다. 나는 당신의 유용한 메모에서 강조와 세부 사항을 추가했습니다.
d +와 d-가 바뀌었을 때만 장치가 저속으로 협상하는 것을 보았습니다. 이것은 최고 속도 (12mbps) 장치와 VIA 칩셋 기반 포트였습니다.