리눅스 usb-serial latency 값 줄이기
2024. 2. 12. 20:58ㆍ프로젝트 로그/테스트x솔루션 JIG 개발기
반응형
JIG에서 UART 메시지를 이용하여 Target MCU의 펌웨어 업데이트 하는 기능이 있습니다.
Target MCU에 펌웨어 업데이트 시간을 줄이기 위해 MCU에서 지원하는 최대 baud_rate로 설정하고 리눅스에 설정되어 있는 usb-serial 장치의 latency_timer 값을 1로 설정 하였다.
usb-serial/devices/latency_timer란
usb-serial 장치에서 데이터 전송을 얼마나 자주 할 것인지를 결정하는 설정 입니다.
이 값은 USB 버스에서 장치가 데이터 패킷을 보내는 빈도를 조절 합니다.
예를 들어, 'latency_timer'가 낮은 값으로 설정되어 있다면, 시스템은 더 자주 데이터를 보내게 되어 실시간성이 좋아 지지만 전체 처리량은 감소 할 수 있습니다.
반대로 'latency_timer'가 높은 값으로 설정되면, 데이터 전송은 덜 자주 일어나지만 더 큰 데이터 덩어리를 한번에 보낼 수 있어 전체적인 네트워크 처리량은 증가 할 수 있습니다.
latency_timer를 수동으로 줄이는 방법
아래와 같은 스크립트를 작성하고 실행하면, /sys/bus/usb-serial/devices 폴더에 있는 장치들의 latency_timer 값을 1로 변경 합니다.
echo "Set Serial Latency"
for entry in "/sys/bus/usb-serial/devices"/*
do
if [ -d "$entry" ]; then
echo $entry
echo 1 > $entry"/latency_timer"
fi
done
udev 파일을 이용하여 latency_timer 값을 1로 설정하는 방법
lsusb로 디바이스의 VendorID와 Product ID를 확인
orangepi@orangepi5:/sys/bus/usb-serial/devices$ lsusb
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 007 Device 002: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)
Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 005: ID 0403:6011 Future Technology Devices International, Ltd FT4232H Quad HS USB-UART/FIFO IC
Bus 002 Device 004: ID 0403:6011 Future Technology Devices International, Ltd FT4232H Quad HS USB-UART/FIFO IC
Bus 002 Device 003: ID 0403:6011 Future Technology Devices International, Ltd FT4232H Quad HS USB-UART/FIFO IC
Bus 002 Device 002: ID 0424:2517 Microchip Technology, Inc. (formerly SMSC) Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 1409:8000 IDS Imaging Development Systems GmbH U3-36LxXC-C
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
아래와 같이 setserial을 설치하고, rules파일을 만듭니다.
$ sudo apt install setserial
$ vi 99-usb-serial-latency.rules
vi 99-usb-serial-latency.rules 파일 내용
ACTION=="add", SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", DRIVER=="ftdi_sio", RUN+="/bin/sh -c 'echo 1 > /sys%p/latency_timer'"
위에서 작성한 rules 파일을 /etc/udev/rules.d/에 복사 하고 Reboot 해서 적용 되었는지 확인 합니다.
# cp 99-usb-serial-latency.rules /etc/udev/rules.d/
# sudo reboot
제대로 설정 되었는지 확인
orangepi@orangepi5:/sys/bus/usb-serial/devices$ cd ~
orangepi@orangepi5:~$ cd /sys/bus/usb-serial/devices/
orangepi@orangepi5:/sys/bus/usb-serial/devices$ ls
ttyUSB0 ttyUSB1 ttyUSB10 ttyUSB11 ttyUSB12 ttyUSB2 ttyUSB3 ttyUSB4 ttyUSB5 ttyUSB6 ttyUSB7 ttyUSB8 ttyUSB9
orangepi@orangepi5:/sys/bus/usb-serial/devices$ cat ttyUSB1/latency_timer
1
orangepi@orangepi5:/sys/bus/usb-serial/devices$
반응형
'프로젝트 로그 > 테스트x솔루션 JIG 개발기' 카테고리의 다른 글
라즈베리파이, 오렌지파이 SD 카드 깨짐 문제 (0) | 2024.02.07 |
---|---|
[PySide2] TextEdit의 textChanged 이벤트를 받아 개행 문자 삭제 (0) | 2024.01.26 |
오렌지파이5B GPIO로 전원 끄기 (0) | 2024.01.11 |
orangepi에서 root 권한으로 실행하는 명령을 비밀번호 없이 수행되도록 설정하기 (0) | 2024.01.03 |
[testXJIG QR 코드 인식 고도화 #3-3] 구현 부분 (0) | 2023.07.21 |