현재 직렬 장치 (주로 ARM 보드)에서 데이터를 수신해야하는 시스템을 설계하고 있습니다. 이를 위해 USB-to-Serial (FTDI232) 어댑터를 사용합니다. 설정을 테스트하기 위해 간단한 루프백 프로그램 (9600 보드)을 코딩하고 ARM 보드를 플래시했으며 데이터 손실없이 내가 보낸 모든 것을 성공적으로 수신 할 수있었습니다.
그러나이 시스템은 결국 많은 보드와 통신해야합니다. 따라서 USB 허브를 USB 포트에 연결하여 더 많은 보드를 연결하는 데 사용했습니다. 그러나 며칠 후 우리는 몇 가지 문제를 발견했습니다. 처음에는 약간의 비트 플립이있는 것처럼 보였습니다. 그런 다음 보드에서 메시지를 수신하면 전체 바이트조차도 삭제됩니다. 이러한 어댑터를 일반 USB 포트 (중간 허브없이)에 연결하면 문제가 해결되었습니다.
우리는 이것이 버퍼링 문제라고 가정했습니다. 직렬 컨트롤러 또는 장치가 데이터를 너무 빨리 전송하고있을 수 있습니다. 따라서 직렬 측에 RTS / CTS 흐름 제어를 설치했습니다. 다시 말하지만, 직렬 어댑터가 PC에 직접 연결된 경우가 아니라 USB 허브에 의해 바이트가 삭제되었습니다.
우리는 USB 허브를 더 비싼 것으로 바꿨지 만 아무것도 바뀌지 않았습니다. 우리는 PC를 변경했지만 문제도 해결되지 않았습니다. 또한 허브가 우리가 직렬 어댑터로 보내는 패킷을 드롭하지 않고 직렬 어댑터가 보낸 패킷 만 드롭한다는 것은 혼란 스럽습니다.
아무도 내가 이것을 어떻게 해결할 수 있는지 또는 문제의 원인을 알고 있습니까? 우리는 USB 허브가 원인이라고 생각합니다. 그러나 많은 장치를 연결해야하기 때문에 우리는 그것에 의존합니다. 따라서 자체 직렬 처리 솔루션 (전용 FPGA 또는 Pi 기반)을 만들기 전에 여기에있는 누군가가 무슨 일인지 알고 있는지 물어보고 싶었습니다. 더 빠른 폴링을 허용하는 Linux 구성 파일이 있습니까 (폴링 문제인 경우)? 여기서는 직렬 어댑터가 문제가 아니라고 생각합니다.
이를 위해 USB-to-Serial (FTDI232) 어댑터를 사용합니다.
USB 2.0 HS 프로토콜을 사용하는 더 나은 어댑터를 얻으십시오. HS 허브를 통한 FS 장치의 한 가지는 호스트가 끔찍한 복잡성으로 인한 구현 어려움으로 알려진 분할 트랜잭션 프로토콜을 사용해야한다는 것입니다. 분할 트랜잭션 엔진이 수많은 엉뚱한 FS UART 브리지에서 테스트 된 적이 있다는 사실에 나는 내기를 걸지 않을 것입니다.
다른 하나는 많은 USB 2.0 허브에 단일 TT가 있으므로 전체 성능이 좋지 않으며 버퍼링 / 스케줄링에 매우주의해야합니다. 다시 말하지만, 미친 CDC 폴링 프로토콜을 사용하면 모든 베팅이 해제되어야합니다. FT232H를 기반으로하는 더 나은 USB-UART 브리지를 얻으십시오.
직접 호스트 연결과 USB 허브를 통한 연결의 차이점은 호스트의 경우 트랜잭션이 기본 FS 프로토콜에서 직접 수행되는 반면 허브를 통한 연결에는 분할 트랜잭션과 함께 작동하는 특수 드라이버가 필요하다는 것입니다. 약한 분할 트랜잭션 드라이버가있을 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다