You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetson Nano读取SIM7600模块返回乱码问题求助

SIM7600与Jetson Nano通信乱码问题排查方案

核心问题分析

Termite能正常通信说明硬件连接、波特率匹配无问题,乱码大概率出在Python串口配置或代码逻辑上,以下是针对性修复方案:

1. 修正串口初始化配置

SIM7600默认不启用硬件流控,需在串口初始化时明确禁用,同时清空缓冲区避免残留数据干扰:

def __init__(self):
    self.ser = serial.Serial(
        "/dev/ttyTHS1",
        baudrate=9600,
        timeout=1,
        bytesize=serial.EIGHTBITS,
        parity=serial.PARITY_NONE,
        stopbits=serial.STOPBITS_ONE,
        xonxoff=False,
        rtscts=False,
        dsrdtr=False
    )
    time.sleep(2)
    # 清空收发缓冲区
    self.ser.flushInput()
    self.ser.flushOutput()

2. 修复代码逻辑漏洞

  • 发送指令后需给模块响应时间,避免立刻读取导致数据不完整
  • 优化读取逻辑,保留编码错误提示便于排查
  • 移除无意义的返回值打印

修改后的完整代码:

import serial
import time

class sim7600:
    def __init__(self):
        self.ser = serial.Serial(
            "/dev/ttyTHS1",
            baudrate=9600,
            timeout=1,
            bytesize=serial.EIGHTBITS,
            parity=serial.PARITY_NONE,
            stopbits=serial.STOPBITS_ONE,
            xonxoff=False,
            rtscts=False,
            dsrdtr=False
        )
        time.sleep(2)
        self.ser.flushInput()
        self.ser.flushOutput()

    def readData(self):
        lines = []
        # 短延时确保模块完成响应
        time.sleep(0.5)
        while self.ser.in_waiting > 0:
            # 用replace保留错误标记,方便排查编码问题
            line = self.ser.readline().decode('utf-8', errors='replace').strip()
            if line:
                print(f"Received: {line}")
                lines.append(line)
        return lines

    def sendData(self, command, timeout=2):
        try:
            fullcommand = f"{command}\r\n"
            self.ser.write_timeout = timeout
            bytes_written = self.ser.write(fullcommand.encode('utf-8'))
            if bytes_written == len(fullcommand):
                print(f"Sent: {fullcommand.strip()}")
            else:
                print("数据未全部发送")
        except serial.serialutil.SerialTimeoutException:
            print("发送超时")

my_module = sim7600()
while True:
    my_module.sendData("AT")
    received_message = my_module.readData()
    # 避免循环过快占用资源
    time.sleep(1)

3. 额外排查点

  • 权限检查:运行脚本前执行sudo chmod 666 /dev/ttyTHS1,或把当前用户加入tty和dialout组(sudo usermod -aG tty,dialout $USER,重启生效)
  • 串口一致性确认:确保Termite使用的串口和脚本一致(比如是否是ttyTHS1而非ttyUSB0)
  • 波特率尝试:若9600仍有问题,可切换为115200(SIM7600默认波特率常为115200)

内容的提问来源于stack exchange,提问作者Ângelo Galvão

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 17:41:29