2、环境准备:搭建开发环境、安装串口驱动、配置串口调试工具(如minicom、PuTTY、screen)

在开始TFLite Micro板端日志调试之前,必须先完成一套可靠、可复现的软硬件环境搭建。串口调试的本质是建立主机(Host)与开发板(Target)之间的异步串行通信链路,这条链路的物理层、驱动层和应用层任何一环出现问题,都会直接导致日志无法显示或数据乱码。本章将围绕“开发环境搭建—串口驱动安装—调试工具配置”三个层次展开,并重点说明如何验证链路完整性、规避常见陷阱。

TFLite Micro 串口调试环境链路 主机(Host) 开发环境 · 编译器工具链 · TFLite Micro 源码 · 构建系统(Make/CMake) 串口调试工具 minicom / PuTTY / screen 驱动层 USB转UART桥接芯片 · CP210x / CH340 / FTDI · 内核模块加载 · 设备节点 /dev/ttyUSB0 权限管理(dialout组) 驱动版本与内核匹配 目标板(Target) MCU(Cortex-M等) · UART外设初始化 · GPIO引脚复用 · 波特率/数据位/停止位 日志输出(printf重定向) 错误码打印(TFLM) USB UART 调试链路关键检查点 1 物理连接 USB线/杜邦线 2 驱动识别 lsusb/dmesg 3 设备节点 /dev/ttyUSB* 4 串口参数 波特率/流控 验证命令:dmesg | grep tty · ls -l /dev/ttyUSB* · echo test > /dev/ttyUSB0

2.1 开发环境搭建:从工具链到固件编译

TFLite Micro的板端开发环境与常规嵌入式开发类似,但有其特定的依赖项。首先需要准备一台Linux主机(推荐Ubuntu 20.04/22.04 LTS,或Debian 11/12),因为TFLite Micro的官方构建脚本对Linux支持最完善。Windows环境虽然可以通过WSL2或Cygwin实现,但串口透传和权限管理较为繁琐,不建议初学者使用。

基础工具链包括:build-essential(提供gcc/g++/make)、git(版本管理)、python3及pip3(用于部分脚本和依赖管理)。对于ARM Cortex-M系列目标板,还需要安装对应的交叉编译工具链。以STM32F746G-Discovery板为例,需要gcc-arm-none-eabi工具链,安装命令如下:

sudo apt update
sudo apt install build-essential git python3 python3-pip
sudo apt install gcc-arm-none-eabi gdb-multiarch
# 验证工具链
arm-none-eabi-gcc --version

获取TFLite Micro源码时,建议使用git clone并指定--depth=1参数以减少下载量。源码中包含了所有依赖的第三方库(如CMSIS、flatbuffers、ruy等),但需要执行make命令下载部分子模块:

git clone --depth=1 https://github.com/tensorflow/tflite-micro.git
cd tflite-micro
make -f tensorflow/lite/micro/tools/make/Makefile download_dependencies

编译固件时,需要指定目标平台。TFLite Micro使用Makefile或CMake两种构建方式。以Makefile为例,编译一个针对STM32F746的示例程序:

make -f tensorflow/lite/micro/tools/make/Makefile \
  TARGET=stm32f746g \
  TARGET_ARCH=cortex-m7 \
  generate_hello_world_bin

编译产物通常位于gen/linux_x86_64_default/或对应目标平台的目录下。生成的.bin或.elf文件需要通过烧录工具(如OpenOCD、ST-Link Utility)写入板载Flash。烧录完成后,板子复位即可运行固件。

经验提醒:在编译前务必确认目标板的TARGET和TARGET_ARCH参数与硬件一致。例如,ESP32使用TARGET=esp,而Cortex-M4F内核的板子应使用TARGET_ARCH=cortex-m4。参数错误会导致链接失败或运行时硬件异常。

2.2 串口驱动安装:识别USB转UART芯片

绝大多数开发板(如STM32 Discovery系列、ESP32 DevKit、Raspberry Pi Pico)都板载了USB转UART桥接芯片,常见型号包括Silicon Labs CP210x、WCH CH340、FTDI FT232等。Linux内核通常自带这些芯片的驱动模块,但部分芯片(尤其是CH340)在较老的内核版本中可能未预装,需要手动编译安装。

首先,通过lsusb命令查看USB设备列表,识别芯片型号:

lsusb
# 输出示例
# Bus 001 Device 004: ID 1a86:7523 QinHeng Electronics CH340 serial converter
# Bus 001 Device 005: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge

如果看到1a86:7523,说明是CH340芯片;10c4:ea60则是CP210x系列。接下来检查内核是否已加载对应驱动:

dmesg | grep -i "ch340\|cp210x\|ftdi"
# 如果没有任何输出,说明驱动未加载

对于CH340,如果内核版本低于5.4,可能需要手动编译驱动。下载驱动源码后执行:

git clone https://github.com/juliagoda/CH341SER.git
cd CH341SER
make
sudo insmod ch341.ko
# 永久加载
echo "ch341" | sudo tee /etc/modules-load.d/ch341.conf

驱动加载成功后,系统会生成设备节点/dev/ttyUSB0(或ttyUSB1等)。此时需要将当前用户加入dialout组,以获得串口访问权限:

sudo usermod -a -G dialout $USER
# 重新登录或执行 newgrp dialout 使权限生效
风险提示:部分山寨FTDI芯片可能被驱动识别为“fake”设备,导致系统自动禁用。如果dmesg中出现ftdi_sio: device is not a genuine FTDI device,请更换为原装芯片的板子或使用CP210x/CH340替代。

2.3 串口调试工具配置:minicom、PuTTY与screen实战

串口调试工具的选择取决于使用场景:minicom适合交互式调试,screen适合快速查看日志,PuTTY则更适合Windows环境。无论使用哪种工具,核心参数必须一致:波特率(Baud Rate)、数据位(Data Bits)、停止位(Stop Bits)、校验位(Parity)和流控(Flow Control)。TFLite Micro默认的日志输出配置通常为115200 8N1(即115200波特率、8数据位、无校验、1停止位),无硬件流控。

2.3.1 minicom配置(Linux推荐)

minicom是Linux下最常用的串口工具,支持保存配置文件。首次使用需要以sudo运行并进入配置菜单:

sudo minicom -s
# 进入"Serial port setup"菜单
# 按 A 键修改串口设备为 /dev/ttyUSB0
# 按 E 键设置波特率为 115200,数据位8,无校验,停止位1
# 按 F 键关闭硬件流控
# 按 G 键关闭软件流控
# 选择"Save setup as dfl"保存为默认配置
# 选择"Exit"退出配置

之后直接运行minicom即可连接。minicom支持颜色高亮和日志记录(Ctrl+A后按L开启日志捕获),非常适合长时间观察TFLite Micro的推理日志。

2.3.2 screen快速连接

如果只是临时查看日志,screen是最轻量的选择。一条命令即可完成连接:

screen /dev/ttyUSB0 115200
# 退出:Ctrl+A 然后按 K 键,输入 y 确认

screen的缺点是不支持波特率以外的参数配置(默认8N1),且无法保存日志。但它的启动速度极快,适合快速验证串口是否连通。

2.3.3 PuTTY配置(Windows/Linux通用)

PuTTY在Windows下使用最为广泛。打开PuTTY后,在“Session”页面选择“Serial”连接类型,填写串口号(如COM3)和波特率(115200),然后在左侧“Connection → Serial”中确认数据位为8、停止位为1、无校验、流控为None。保存会话后双击即可连接。PuTTY还支持将日志输出到文件(“Session → Logging”),便于后续分析。

工具 适用平台 日志保存 颜色高亮 配置复杂度 推荐场景
minicom Linux 支持(Ctrl+A → L) 支持 中等(需先配置) 日常开发、长时间日志采集
screen Linux/macOS 不支持 不支持 低(一条命令) 快速连通性测试
PuTTY Windows/Linux 支持(Session → Logging) 支持 低(图形界面) Windows用户、图形化操作

2.4 链路验证与常见误区

环境搭建完成后,必须进行完整的链路验证,确保从目标板到主机的数据通路畅通。验证分为三个层次:物理层验证、驱动层验证、应用层验证。

物理层验证:检查USB线是否支持数据传输(部分充电线只有电源线无数据线),板载串口指示灯是否闪烁。对于使用杜邦线外接USB转UART模块的板子,务必确认TX/RX交叉连接(板子的TX接模块的RX,板子的RX接模块的TX),且共地(GND相连)。

驱动层验证:执行ls -l /dev/ttyUSB*查看设备节点是否存在,使用cat /proc/tty/driver/usbserial查看驱动状态。如果设备节点存在但无法打开,检查权限:ls -l /dev/ttyUSB0应显示crw-rw----,且当前用户属于dialout组。

应用层验证:在主机上执行回环测试。将串口工具的TX和RX短接(或使用跳线帽),然后发送数据,看是否能收到相同数据:

# 方法1:使用echo和cat
echo "test" > /dev/ttyUSB0
cat /dev/ttyUSB0
# 方法2:使用minicom,输入字符应回显

如果回环测试通过,说明主机侧串口链路正常。接下来烧录一个最简单的TFLite Micro示例(如hello_world),观察板端日志是否正常输出。

案例拆解:某工程师在调试STM32F746G板时,minicom连接后无任何输出。排查过程如下:
1. lsusb确认识别到CP210x芯片(ID 10c4:ea60);
2. dmesg | grep tty显示cp210x ttyUSB0: cp210x converter now attached to ttyUSB0,驱动正常;
3. minicom -s检查配置,发现波特率被误设为9600,改为115200后仍然无输出;
4. 使用screen /dev/ttyUSB0 115200连接,依然无输出;
5. 用万用表测量板载UART TX引脚电平,发现始终为高电平(3.3V),说明固件未正确初始化UART;
6. 检查代码,发现printf重定向函数中未启用UART时钟,添加__HAL_UART_ENABLE(&huart1)后日志正常输出。
复盘:串口无输出时,应先区分是主机问题还是板端问题。主机侧通过回环测试快速排除,板端则需检查UART初始化代码和引脚复用配置。

常见误区总结:

  • 误区一:认为串口驱动安装后立即生效。实际上,部分驱动需要重启或重新插拔USB设备才能加载。
  • 误区二:忽略流控设置。如果板端固件未启用硬件流控,而主机侧开启了RTS/CTS,会导致数据无法发送。
  • 误区三:使用错误的设备节点。多个USB转串口设备同时连接时,/dev/ttyUSB0可能不是目标板,应通过ls -l /dev/serial/by-id/查看设备符号链接。
  • 误区四:波特率不匹配。TFLite Micro默认115200,但部分板卡BSP可能修改为921600或其他值,需查阅板级配置文件确认。