針對串口錯誤 “device reports readiness to read but returned no data (Device disconnected or multiple access on port?)” 的排查和解決方法

硬件方面
- 檢查連接
- 確認串口設備(如串口線、連接的模塊等)與龍芯設備之間的物理連接是否牢固,沒有松動、脫落情況。嘗試重新插拔串口線,確保兩端都插緊。
- 查看串口線是否有破損、斷裂等物理損壞跡象,如有,更換新的串口線。
- 檢查設備供電
- 確保串口設備供電正常。如果是外接設備,檢查其電源適配器是否正常工作,輸出電壓和電流是否符合設備要求。可以使用萬用表測量電源適配器輸出,若不正常,更換適配 器。
- 對于由龍芯設備直接供電的串口設備,檢查龍芯設備的電源輸出是否穩定,可查看龍芯設備電源指示燈狀態,或使用相關工具監測電源輸出。
- 排查設備沖突
- 確認是否有多個設備同時嘗試訪問該串口端口。如果有其他程序或設備在占用 /dev/ttyS3 端口,可能會導致沖突。關閉其他可能使用該串口的程序或設備,然后重新測試。
軟件方面
- 權限檢查
- 確保當前用戶對 /dev/ttyS3 端口有足夠的讀寫權限。在龍芯系統的終端中,使用命令
ls -l /dev/ttyS3
查看端口權限。如果權限不足,可通過 sudo chmod 666 /dev/ttyS3
臨時賦予讀寫權限(不建議長期使用這種寬泛的權限設置,生產環境可通過添加用戶到 dialout 等相關組來解決權限問題,如 sudo usermod -a -G dialout your_username
,然后重新登錄)。
- 驅動檢查與更新
- 確認串口設備的驅動程序已正確安裝。在龍芯系統中,可通過查看系統日志(一般在 /var/log 目錄下,如
dmesg
日志),搜索與串口設備相關的信息,看是否有驅動加載錯誤提示。 - 如果驅動程序版本過舊,嘗試更新驅動。可到龍芯官方或設備制造商官網查找適用于龍芯平臺的最新驅動程序,按照說明進行安裝。
- 程序邏輯檢查
- 檢查使用串口的應用程序代碼,確認打開串口的參數設置(如波特率、數據位、停止位、校驗位等)是否與串口設備實際設置一致。如果設置不匹配,會導致數據讀取異常。
- 排查程序中是否存在多線程或異步操作對串口訪問的影響,確保對串口的讀寫操作是線程安全的,避免出現競爭條件導致數據讀取失敗。
import json
import time
import paho.mqtt.client as mqtt
import serial# 配置
MQTT_BROKER = "115.28.209.116"
MQTT_PORT = 1883
MQTT_USERNAME = "bkrc"
MQTT_PASSWORD = "88888888"
CLIENT_ID = "*************"
DEVICE_ID = "*************"TOPIC_UP = f"device/{DEVICE_ID}/up"
TOPIC_DOWN = f"device/{DEVICE_ID}/down"SERIAL_PORT = "COM4"
BAUDRATE = 115200
TIMEOUT = 1# 連接成功回調
def on_connect(client, userdata, flags, reason_code, properties):if reason_code == 0:print("已連接到MQTT服務器")client.subscribe(TOPIC_DOWN)else:print(f"連接失敗,錯誤碼:{r