XMODEM 프로토콜을 사용하여 직렬 포트를 통해 파일 보내기

XMODEM 프로토콜을 사용하여 직렬 포트를 통해 파일 보내기

직렬 포트를 통해 작은 파일을 보내야 합니다(실제로 /dev/ttyUSB0포트에는 USB-직렬 변환기가 연결되어 있습니다). 이 작업은 스크립트 가능해야 합니다. 즉, 비대화형이어야 합니다.

내가 시도한 것은 다음과 같습니다.

  • minicom- 잘 작동하지만 대화형입니다. --script=SCRIPT옵션이 유망해 보이지만 스크립트 방법을 모르겠습니다.
  • sx- 비대화형이지만 멈춥니다. 아마도 전송 속도와 바이트 형식(정지 비트, 패리티, 데이터 비트)을 지정하지 않았기 때문일 것입니다.

내 옵션은 무엇입니까?


편집 1: stty+sx

여전히 운이 좋지 않았고 minicom은 38400 8N1파일을 올바르게 보냈습니다. 내가 뭐하는 거지

sudo stty -F /dev/ttyUSB0 38400 cs8 -parenb -cstopb -ixoff
sx ~/test_signals/ones.bin -vvvvvvvvvvvv

sx그냥 얼었어요. 출력은 다음과 같습니다.

vorac@laptop:~/projects/megaboot$ sx ~/test_signals/ones.bin -vvvvvvvvvvvv
sx 0.12.21rc

mode:1
Sending /home/vorac/test_signals/ones.bin, 7 blocks: Give your local XMODEM receive command now.
wctx:file length=1000
                     Calling read: alarm=60  Readnum=128 

그리고 그냥 거기 있어라. 수신자는 2바이트 crc("C" 전송으로 표시됨) 대신 짧은 1바이트 체크섬 방법(파일 시작 부분에 NACK 전송으로 표시됨)을 사용합니다. 어쩌면 이것이 지원되지 않습니까 cx?


편집 2: cu++sttysx

cu에 대한 광범위한 문서를 읽지 않기 위해 다음에서 명령을 복사했습니다.이 기사. 아직도 운이 없습니다.

vorac@laptop:~$ sudo cu -l /dev/ttyUSB0 -s 38400
cu: open (/dev/ttyUSB0): Permission denied
cu: /dev/ttyUSB0: Line in use
vorac@laptop:~$ groups vorac
vorac : vorac adm dialout cdrom sudo dip plugdev lpadmin sambashare wireshark

답변1

xmodem 변환은 여기에서 이루어집니다. 입력/출력 리디렉션 후(예시 참고)Wouter Verhelst가 제안한 대로 경험을 바탕으로 추가하세요. 운 좋게도 Linux에서 2개의 명령이 포함된 bin 펌웨어를 받았습니다.

$ sudo stty -F /dev/ttyUSB1 9600 cs8 -parenb -cstopb -ixoff
$ sudo stty -F /dev/ttyUSB1
speed 9600 baud; line = 0;
-brkint -imaxbel

$ sx fw.bin < /dev/ttyUSB1 > /dev/ttyUSB1

답변2

sx직렬 포트 자체와 통신하지 않으며 표준 출력을 통해 통신합니다. 유용한 작업을 수행하려면 출력을 리디렉션해야 합니다.

cu개인적으로 저는 직렬 연결을 설정하고 *MODEM을 사용하여 데이터 수신을 시작하기 위해 원격 측에서 필요한 모든 것을 실행한 다음 cu이스케이프 코드를 사용하여 sx로컬로 실행하는 것이 가장 쉽다고 생각합니다 . 이스케이프 시퀀스로 ~$sx(다음에 전달하려는 옵션 )을 사용하여 sx이를 수행 할 수 있습니다 .

그러나 cu줄 시작 부분의 이스케이프 시퀀스만 인식한다는 점에 유의하세요.

편집하다: "Line in use" 메시지는 다른 장치가 직렬 포트를 사용하고 있음을 나타냅니다. fuser /dev/ttyUSB0그것이 무엇인지 알아보기 위해 달려가서 죽이십시오 . 또는 USB-직렬 변환기를 USB 포트에서 분리했다가 다시 연결하면 직렬 포트를 점유하고 있는 모든 것이 확실히 종료됩니다. 그 후에는 cu라인이 제대로 작동할 것입니다.

그래도 문제가 해결되지 않으면 오래된 잠금 파일이 있을 수 있습니다 /var/lock. 그러나 kill -9이전 도구를 사용하지 않으면 이런 일이 발생할 가능성이 없습니다 .

답변3

sx전송 속도 등을 설정하지 않았습니다 .

당신은 이런 일을 하곤 합니다 stty. 보내는 파일에 XON 또는 XOFF 바이트가 있는 경우 xmodem에 대해 xon/xoff를 비활성화할 수도 있으므로 해당 -ixon옵션을 사용하십시오.

예를 들어, 115200,n,8,1의 경우 다음을 사용합니다.

stty -F /dev/ttyUSB0 115200 cs8 -parenb -cstopb -ixon

man stty자세한 내용은 참조하십시오 .

답변4

비슷한 일을 할 수 없습니까?

$ picocom -b 115000 /dev/ttyUSB0 
// 2nd term
$ cat file > /dev/ttyUSB0

관련 정보