2、环境准备:搭建开发环境、安装串口驱动、配置串口调试工具(如minicom、PuTTY、screen)
在开始TFLite Micro板端日志调试之前,必须先完成一套可靠、可复现的软硬件环境搭建。串口调试的本质是建立主机(Host)与开发板(Target)之间的异步串行通信链路,这条链路的物理层、驱动层和应用层任何一环出现问题,都会直接导致日志无法显示或数据乱码。本章将围绕“开发环境搭建—串口驱动安装—调试工具配置”三个层次展开,并重点说明如何验证链路完整性、规避常见陷阱。
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 使权限生效
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),观察板端日志是否正常输出。
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或其他值,需查阅板级配置文件确认。