核心定义
双线接口 是一种串行通信接口协议,它仅使用两条信号线在多个设备(通常是一个主设备和多个从设备)之间进行数据交换。它最著名的实现是I²C。
虽然TWI有时被用作I²C的同义词,但两者在技术渊源上稍有区别,不过在实际使用中几乎完全等同。可以这样理解:
I²C 是飞利浦公司为该协议注册的商标。
TWI 是Atmel公司(现为Microchip的一部分)为了规避商标问题,在其AVR微控制器上使用的名称,意为“完全相同的实现”。
所以,在绝大多数情况下,当你看到TWI,基本就可以认为它指的是I²C协议。
核心特性与工作原理
1. 两条信号线
SDA: 串行数据线。用于双向传输实际的数据。
SCL: 串行时钟线。由主设备产生,用于同步所有设备的数据传输时序。
2. 多主多从架构
总线可以连接多个主设备(如多个MCU)和多个从设备(如传感器、存储器、IO扩展芯片等)。
每个从设备都有一个唯一的7位或10位地址,主设备通过这个地址来选择通信对象。
3. 通信流程
一次典型的TWI/I²C通信包含以下步骤:
起始条件: 主设备在SCL为高时,将SDA从高拉低,表示通信开始。
发送地址帧: 主设备发送7位(或10位)从设备地址,紧跟1位读写控制位(0-写,1-读)。
应答信号: 被寻址的从设备在第9个时钟周期将SDA拉低,作为“ACK”应答。
数据传输: 主设备或从设备开始发送或接收8位数据包,每个数据包后都跟一个应答位。
停止条件: 主设备在SCL为高时,将SDA从低拉高,表示通信结束。
4. 上拉电阻
两条信号线都需要通过上拉电阻连接到正电源。这是因为TWI总线是“开漏输出”结构,设备只能将线拉低(输出0),释放时靠上拉电阻将线拉回高电平(1)。这使得不同电压的设备可以方便地进行电平转换。
优点
引脚经济: 仅需两根线,节省微控制器的宝贵IO口。
支持多设备: 理论上可连接大量设备(7位地址支持128个,但需去除保留地址)。
有应答机制: 每字节都有确认,通信更可靠。
速度可选: 有多种标准模式:
标准模式: 100 kbit/s
快速模式: 400 kbit/s
高速模式: 3.4 Mbit/s
超快模式: 5 Mbit/s
技术成熟: 协议简单,有大量现成的芯片支持。
缺点
通信速率相对较低: 与SPI、USB等协议相比速度较慢。
总线上电容影响大: 线缆过长或设备过多会导致总电容增大,可能引发通信错误,需要降低速度。
软件开销: 协议相对复杂,需要微控制器用软件或硬件模块正确处理起始、停止、应答等信号。
典型应用场景
TWI/I²C非常适合连接PCB板卡上或短距离内的多个低速外设,例如:
连接各种传感器(温度、湿度、气压、陀螺仪等)
访问小容量EEPROM存储器
控制IO端口扩展芯片
与实时时钟芯片通信
与LCD显示器、DAC/ADC转换器通信
与SPI的简单对比
为了方便理解,这里与另一种常见串行总线SPI做个快速对比:
特性 | TWI/I²C | SPI |
|---|---|---|
信号线数量 | 2条 (SDA, SCL) | 4条或更多 (SCLK, MOSI, MISO, CS/SS...) |
拓扑结构 | 多主多从,总线式 | 一主多从,点对点(每个从设备独立片选) |
最大速率 | 标准/快速模式 (100k/400k) | 通常更高 (可达几十Mbps) |
硬件复杂度 | 协议复杂,硬件逻辑相对复杂 | 协议简单,硬件实现简单 |
软件复杂度 | 软件驱动相对复杂 | 软件驱动相对简单 |
引脚占用 | 极少,不随从设备增加而增加 | 较多,每增加一个从设备通常需一个片选脚 |
总结
双线接口 是一种通过两条信号线(SDA和SCL)在多个设备间进行通信的优雅解决方案。它以I²C协议为技术核心,在引脚资源紧张、设备数量不多、对速度要求不极端的中低速应用场景中(如传感器网络、板载外设管理)具有巨大优势。理解TWI/I²C是进行嵌入式系统设计和硬件编程的基础技能之一。