Raspberry Pi USB裝置斷連自動重連

使用 usbreset 指令讓 Raspberry Pi 失連的USB裝置不重開機自動連回,含自動檢查腳本。

我的 Raspberry Pi Zero 插 4G LTE USB 網卡上網,網卡偶爾會失去連線,重開後又恢復正常,搞半天才發現轉接線捅出的婁子,這點我放到「後記」作敘述。然後就有了這篇筆記,若碰到USB裝置連接斷開,我嘗試用指令讓USB裝置不重開機自動連回,作為暫時性的解決方案。


使用以下指令會將USB裝置列出,並記下常會斷線的USB裝置ID

lsusb
#顯示本機USB裝置列表


參考裝置ID範例(千萬不要照抄)




複製以下Shell Script 並存檔 USB_reconnection.sh,將你記下的USB裝置ID取代掉【Device_ID】

#!/bin/bash

#Use \"lsusb\" command to find the Device ID.
Device_ID="2001:7e35"

#set waiting time
Loop_Time=40

while true
do
	CHK_Device=$(lsusb 2>&1)
	if echo "$CHK_Device" | grep -q "$Device_ID"; then
		echo "Good!" >/dev/null
	else
		sudo usbreset $Device_ID
	fi
	sleep $Loop_Time
done



為檔案增加可執行權限

sudo chmod +x USB_reconnection.sh
#增加可執行權限



接下來執行 USB_reconnection.sh,會每隔固定時間檢查該裝置是否在線,如果斷開連結會一直嘗試重連。

後記

usbreset 指令有兩種常見用法


1. 使用 Bus 和 Device 編號

sudo usbreset 001/006



2. 使用 Product ID

sudo usbreset 2001:7e35



裝置斷連結的原因

因為 Raspberry Pi Zero 的接口是 USB-Micro B,4G網卡是USB A,需要透過一條 USB2.0 Micro-B/公 轉 USB Type-A OTG 線材,問題就出現在這條劣質線材上;我將這條線換成UGREEN的,問題就在也沒法生過了。

線材的問題之所以棘手,因為很難想的到,這種USB裝置偶爾失連的問題很難和新的轉接線作聯想,甚至可能會懷疑是驅動的問題,造成除錯時間大增。

總之,線材的品質還是要注意的!

參考

[1] Reset USB Devices on RaspberryPi Ubuntu

[2] usbreset(1) — Linux manual page

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *