第一章 课程导论与硬件基础

各位同学,欢迎来到《串口通信与I2C协议调试与故障定位实战》。我是你们这门课的老张。在嵌入式这行摸爬滚打了十几年,踩过的坑比吃过的盐还多。今天咱们开篇不讲虚的,直接聊点实在的——串口和I2C到底是个啥玩意儿,以及你手头得备齐哪些家伙事儿才能开始干活。

1.1 串口与I2C协议概述

串口和I2C,说白了就是芯片之间“聊天”的两种方言。串口是点对点的,一根线发、一根线收,简单粗暴。I2C呢,是总线型的,两根线能挂一堆设备,靠地址寻址。我刚开始做项目时,总觉得串口太慢,I2C太复杂。后来发现,选哪个不是看心情,得看场景。

核心区别一句话总结:

  • 串口(UART):全双工,异步,点对点,适合两个设备之间简单通信。
  • I2C:半双工,同步,多主多从,适合板级短距离多设备互联。

你想想看,如果只是把GPS模块的数据传给单片机,串口就够了。但要是想挂个温度传感器、再挂个EEPROM、再加个OLED屏,还用串口?那得多少根线?这时候I2C就香了。

1.2 物理层对比:电平标准与接线方式

很多新手栽跟头,就栽在物理层上。电平不匹配,通信直接废掉。我见过有人把5V的串口直接怼到3.3V的芯片上,结果冒烟了。嗯,这里要注意。

特性 串口(UART) I2C
信号线数量 2根(TX, RX) 2根(SCL, SDA)
通信方式 异步(无时钟线) 同步(有时钟线)
电平标准 RS-232(±12V)、TTL(0/3.3V或0/5V) 开漏输出,上拉电阻至VCC
接线方式 TX接RX,RX接TX,GND共地 SCL接SCL,SDA接SDA,GND共地
最大速率 通常115200 bps,高可达数Mbps 标准100 kHz,快速400 kHz,高速3.4 MHz
抗干扰能力 差分(RS-422/485)强,单端弱 较弱,适合板级

我个人习惯,做板级调试时,串口优先用3.3V TTL电平。I2C的上拉电阻,我一般选4.7kΩ,总线电容不大时够用。如果挂的设备多,可以降到2.2kΩ。这个经验值,是我在项目里试出来的。

避坑指南:

我曾经在一个项目里,I2C总线死活不通。查了半天,发现是上拉电阻焊错了,用了10kΩ,总线上升沿太慢,时序不满足。换回4.7kΩ,立马好了。所以,上拉电阻别乱选。

1.3 调试工具准备

工欲善其事,必先利其器。做嵌入式调试,没几把趁手的兵器可不行。下面这三样,是我工作台上常年摆着的。

1.3.1 示波器

示波器是硬件调试的“眼睛”。看波形、量时序、抓毛刺,都靠它。对于串口和I2C,示波器能直接看到电平跳变、波特率是否准确、信号质量如何。

  • 带宽:100 MHz起步,200 MHz更稳。
  • 采样率:至少1 GSa/s。
  • 通道数:4通道最好,2通道也能凑合。

我建议,预算够的话,直接上数字荧光示波器(DPO)。看I2C的地址和数据的时序关系,一目了然。

1.3.2 逻辑分析仪

逻辑分析仪是协议分析的“利器”。它不关心电压具体是多少,只关心高低电平。对于解码串口数据帧、I2C的地址+读写位+ACK,逻辑分析仪比示波器方便得多。

小技巧:

调试I2C时,把SCL和SDA同时接到逻辑分析仪上,设置好触发条件(比如Start条件)。然后一运行,整个通信过程就全抓下来了。哪个从设备没应答,哪个字节发错了,一眼就能看出来。

1.3.3 USB转串口模块

这玩意儿是嵌入式工程师的“瑞士军刀”。电脑没有串口?没关系,一个USB转串口模块搞定。常用的芯片有CH340、CP2102、FT232。

芯片型号 特点 推荐场景
CH340 便宜,国产,驱动兼容性好 日常调试,成本敏感
CP2102 稳定,体积小 便携项目,对稳定性有要求
FT232 功能全,支持多种电平,贵 专业调试,多电压环境

我个人习惯,包里常备一个CH340和一个FT232。CH340给普通板子用,FT232留着对付那些电平特殊的设备。

1.4 知识体系总览

下面这张图,把本章的核心知识点串起来了。你可以把它当成一个地图,后面每讲一个点,都能在这张图上找到位置。

串口与I2C调试知识体系 串口(UART) 物理层:TTL/RS-232 接线:TX↔RX 调试:示波器看波形 工具:USB转串口 I2C 物理层:开漏+上拉 接线:SCL+SDA 调试:逻辑分析仪解码 工具:示波器量时序 核心工具:示波器 + 逻辑分析仪 + USB转串口模块 三者配合,覆盖90%的调试场景

这张图把串口和I2C的物理层、接线、调试工具都串起来了。后面几章,我们会逐个深入。你先把这张图记在脑子里,后面学起来就不容易迷路。

1.5 本章小结

这一章,我们聊了串口和I2C的核心区别,对比了它们的物理层和接线方式,也介绍了三样必备的调试工具。说白了,就是给后面的实战打地基。地基稳了,楼才能盖得高。