Linux에서 USB 프로토콜을 변경할 수 있습니까?

Linux에서 USB 프로토콜을 변경할 수 있습니까?

나는 uart-USB 브리지를 사용하지 않고 마이크로 컨트롤러가 USB를 통해 컴퓨터와 직접 통신하도록 하는 방법을 찾으려고 노력해 왔습니다. USB 포트에 대한 USB 프로토콜을 비활성화하고 포트를 일반 직렬 포트로 사용하면 이 작업을 수행할 수 있다고 생각했습니다. 이를 달성하기 위해 포트. 포트. 그런데 USB 부분은 끌 수 없다고 하더군요. 그러나 Linux 운영 체제의 내부 작동 방식 중 많은 부분이 변경될 수 있다는 이야기도 들었습니다. Linux에서는 USB 프로토콜을 변경하고 USB 포트를 일반 직렬 포트로 전환할 수 있습니까?

답변1

USB는 어떤 의미에서든 이전 RS-232 직렬 포트 표준(EIA/TIA-232라고도 함)과 일치하는 "직렬 포트"가 아닙니다. "추가 요구 사항을 해제"하여 USB를 RS-232로 변환할 수 없습니다.

기존 RS-232 직렬 포트와 달리 USB는 차동 신호를 사용합니다. 신호 레벨과 기타 전기적 특성은 매우 다르지만 실제로는 RS-485와 다소 유사합니다.

RS-232는 최대 +/- 15V의 신호 전압을 사용할 수 있습니다. USB는 USB 2 Hi-Speed ​​​​모드에서 USB 1 모드에서 <0.3V 로직 로우 및 2.8-3.6V 로직 하이를 사용하며 전압은 훨씬 더 높습니다. .

RS-232에서 TTL 로직 레벨(0..5V)을 사용하는 경우에도 USB 송신기는 RS-232 "공간"(=더 높은 전압 상태) 신호를 안정적으로 생성할 수 없습니다. 이러한 표준 사이에는 신호 레벨에 불일치가 있습니다. USB 송신기의 신호는 RS-232 UART 수신기에 비해 너무 약하고 RS-232 출력 신호는 USB 수신기에 과부하가 걸립니다.

또한 간단한 레벨 변환기 회로로는 비호환성 문제를 해결할 수 없습니다. USB 트랜시버는 시작 비트, 데이터 바이트, 정지 비트 한두 개를 보내는 대신 패킷을 처리합니다. 패킷 시작 부분에는 동기화 시퀀스(USB 1의 경우 8비트, USB 2 Hi-Speed의 경우 32비트)가 있어야 하며 몇 바이트가 전송되고 마지막으로 패킷 신호의 끝이 일반 " 논리 낮음" 또는 "논리 높음" 상태입니다. 이 모든 것은 효율성을 위해 하드웨어에서 구현될 수 있으며 일반적으로 다른 작업을 수행할 이유가 없기 때문에 직접적인 소프트웨어 제어에서 실제 데이터 라인을 "비트 탭핑"하는 방법이 없을 것입니다.

비교 신호 예RS-232그리고USB 1.1위키피디아에서.

요약하자면: 아니요, 문제는 USB와 RS-232가 실제 하드웨어 수준에서 너무 다르다는 것입니다.

관련 정보