ZTE 3g 모뎀이 있습니다. 연결을 설정하기 위해 이동통신사에서 제공하는 다이얼러를 사용합니다. ppp 연결이 활성화되면 몇 가지 AT 명령(예: 신호 강도 쿼리)을 보내고 싶습니다 AT+CSQ
. 하지만 제가 사용하고 있는 다이얼러는 /dev/ttyUSB0
모뎀에 AT 명령을 보내기 위한 명령 포트인 포트를 잠급니다. 그렇다면 연결이 활성화된 후에 명령을 보낼 수 있는 방법이 있습니까?
편집: 추가 포트 /dev/ttyUSB1도 시도했습니다. 그러나 포트는 모뎀에서 임의의 데이터를 전송하고 있습니다. 아래에 예가 나와 있습니다.
T^PREFMODE??
^PREFMODE:8
OK
TC
^DSDORMANT:1
+CSQ:19, 99
OK
T^SYSINFO
^SYSINFO:2,3,0,4,255
OK
TT^SYSINFO?
^SYSINFO:2,3,0,4,255
내 명령을 추가하려고 시도했고 출력도 얻었습니다. 하지만 반응이 별로였어요. 대부분의 경우 AT 명령은 눈에 띄지 않습니다.
답변1
장치가 ppp 트래픽에 사용되는 한 AT 명령 1을 동시에 실행할 수 없습니다 . 따라서 모든 최신 모뎀은 /dev/ttyUSB0 및 /dev/ttyUSB1(또는 Linux의 USB CDC 모뎀의 경우 /dev/ttyACM0 및 /dev/ttyACM1)과 같은 여러 직렬 인터페이스를 제공합니다.
전화기에 RS-232 호환 커넥터(IrDA가 부착되었을 수 있음)가 있었을 때 3GPP는 다중화 프로토콜을 다음과 같이 표준화했습니다.07.10물리적 한계를 극복하기 위해 PC에 특수 드라이버가 필요했지만 결코 성공하지 못했습니다. 오늘날 USB의 고유한 멀티플렉싱 기능을 사용하면 여러 직렬 인터페이스(일반적으로 2개만 제공)를 제공하지 않을 이유가 없습니다.
주석에서 이미 언급했듯이 다른 직렬 장치를 사용해야 합니다 /dev/ttyUSB1
.
1 이론적으로 모뎀은 +++
연결이 진행되는 동안 AT 명령을 실행할 수 있도록 이스케이프를 지원할 수 있습니다. 단, 이러한 명령을 삽입하고 응답을 추출하려면 어떤 방식으로든 다이얼러를 수정해야 합니다. .
답변2
또한 많은 모뎀은 단일 물리적 uart에 여러 가상 uart를 구현하기 위해 멀티플렉서 계층을 지원합니다.
일반적으로 모뎀에서 mux를 설정하려면 일부 at 명령(AT+CMUX)이 필요하며, 그런 다음 pppos에 하나의 가상 포트를 사용하고 at 명령에 다른 가상 포트를 사용할 수 있습니다.
이는 멀티플렉싱 계층의 호스트 측을 구현하는 Linux 드라이버입니다. https://www.kernel.org/doc/html/latest/driver-api/serial/n_gsm.html