简要对比TWI总线与I2C总线
TWI,IIC总线

采用串行总线技术可以使系统的硬件设计大大简
化、系统的体积减小、可靠性提高。同时,系统 的更改和扩充极为容易。 常用的串行扩展总线有: I2C (Inter IC BUS) 总线、单总线(1-WIRE BUS)、SPI(Serial Peripheral Interface)总线及Microwire/PLUS 等。
c、在传送过程中,当需要改变传送方向时, 起始信号和从机地址都被重复产生一次,但两 次读/写方向位正好反相。
4、总线的寻址
I2C总线协议有明确的规定:采用7位的寻址字节 (寻址字节是起始信号后的第一个字节)。 (1)寻址字节的位定义
D7~D1位组成从机的地址。D0位是数据传送方向位, 为“0”时表示主机向从机写数据,为“1”时表示主机由从 机读数据。
每一个字节必须保证是8位长度。数据传送时,先传 送最高位(MSB),每一个被传送的字节后面都必须跟 随一位应答位(即一帧共有9位)。
由于某种原因从机不对主机寻址信号应答时(如从机 正在进行实时性的处理工作而无法接收总线上的数据), 它必须将数据线置于高电平,而由主机产生一个终止信号 以结束总线的数据传送。 如果从机对主机进行了应答,但在数据传送一段时间后 无法继续接收更多的数据时,从机可以通过对无法接收的 第一个数据字节的“非应答”通知主机,主机则应发出终 止信号以结束数据的继续传送。 当主机接收数据时,它收到最后一个数据字节后,必须 向从机发出一个结束传送的信号。这个信号是由对从机的 “非应答”来实现的。然后,从机释放SDA线,以允许主 机产生终止信号。
两线串行总线概述
两线串行总线采用TWI协议。对外只有两根线。一根数据线SDA,一根时 钟线SCL。可与128个从设备连接。连接方式如图所示:
TWII2C总线技术_单片机

图5.11 启动、停止和重启动状态
• 5、地址数据包格式
在TWI 总线上传送的地址包均为9位,包括7位地 址位、1 位READ/WRITE 控制位与1位应答位。 如果READ/WRITE 为1,则执行读操作;否则执 行 写 操 作 。 从 机 被 寻 址 后 , 必 须 在 第 九 个 SCL (ACK) 周期通过拉低SDA 作出应答。若该从机忙 或有其它原因无法响应主机,则应该在ACK 周期 保持SDA 为高。然后主机可以发出STOP 状态或 REPEATED START状态重新开始发送。地址包 包括从机地址与分别称为SLA+R 或SLA+W 的 READ 或WRITE 位。
(3) TWDR 只有在TWINT 为高时方可写入。否则, 访问被忽略,寄存器TWCR 的写碰撞位TWWC 置位。 TWDR更新后,TWINT位应清零后继续传送。 通过对 TWCR寄存器中写入下述值完成操作:
(4) 这过程会一直重复下去,直到最后的字节发 送完且发送器产生 STOP 或REPEATED START 信号 。STOP 信号通过在 TWCR 中写入下述值 实现:
• Bits 7..1 – TWA: TWI 从机地址寄存器其值为从机 地址。
• Bit 0 – TWGCE: 使能TWI 广播识别置位后MCU 可以识别TWI 总线广播。
• 5.4.6 使用TWI AVR的 TWI接口是面向字节和基于中断的。所有 的总线事件,如接收到一个字节或发送了一个 START 信号等,都会产生一个TWI 中断。 由于TWI 接口是基于中断的,因此TWI接口在字 节发送和接收过程中,不需要应用程序的干预。 TWCR 寄存器的 TWI 中断允许TWIE位和SREG 寄存器的全局中断允许位一起决定了应用程序是 否响应TWINT标志位产生的中断请求。
I2C总线——总结

I2C总线——总结I2C总线是一种串行数据通信协议,用于连接集成电路之间进行通信。
它由Phillips公司于1982年首次提出,并在随后的几十年中得到广泛应用和发展。
I2C总线采用两根线(SDA和SCL)进行通信,具有简单、高效的特点,适用于较短距离的通信。
首先,I2C总线的架构包括两个主要组成部分:主设备和从设备。
主设备通常是微控制器或其他控制器,负责发起和控制通信。
从设备是主设备的外围设备,例如传感器、电池芯片、存储器等。
主设备通过发送信号来控制从设备,并接收从设备发送的响应信号。
在I2C通信中,数据以字节为单位传输,每个字节都包含8位。
通信的起始由主设备发起,并发送设备地址标识。
从设备必须匹配该地址才能进入通信状态。
在通信过程中,主设备发送读取或写入指令,然后发送或接收数据。
每个数据字节都由从设备发送确认信号,以确保数据的准确接收。
除了基本的读写操作,I2C总线还支持一些高级功能,例如时钟同步、主从模式切换和热插拔功能。
这些功能使得I2C总线适用于各种应用场景,包括电子设备、通信系统、工业控制和汽车电子等。
然而,尽管I2C总线具有许多优点,但也存在一些限制和挑战。
首先,I2C总线在传输速度方面不如其他通信协议(如SPI和CAN)。
其次,长距离传输可能受到电压下降、信号失真和干扰等因素的影响。
此外,I2C总线的主设备需要额外的控制逻辑和处理能力,这可能增加系统的复杂性和成本。
综上所述,I2C总线是一种非常常用和实用的串行通信协议。
它具有简单、高效的特点,适用于较短距离的设备间通信。
通过多主机配置和高级功能支持,I2C总线可以满足各种应用的需求。
然而,需要根据具体的应用场景和要求来选择合适的通信协议,以确保系统的性能和可靠性。
SPI、I2C、UART三种串行总线协议的区别

SPI、I2C、UART三种串行总线协议的区别第一个区别当然是名字:SPI(Serial Peripheral Interface:串行外设接口);I2C(INTER IC BUS:意为IC之间总线)UART(Universal Asynchronous Receiver Transmitter:通用异步收发器)第二,区别在电气信号线上:SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。
SPI总线可以实现多个SPI设备互相连接。
提供SPI串行时钟的SPI设备为SPI 主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。
主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。
如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。
I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。
在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。
如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。
(注:I2C资料了解得比较少,这里的描述可能很不完备)UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。
显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。
第三,从第二点明显可以看出,SPI和UART可以实现全双工,但I2C不行;第四,看看牛人们的意见吧!wudanyu:I2C线更少,我觉得比UART、SPI更为强大,但是技术上也更加麻烦些,因为I2C需要有双向IO的支持,而且使用上拉电阻,我觉得抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。
SPI、I2C、UART三种串行总线的原理、区别及应用

简单描述:SPI 和I2C这两种通信方式都是短距离的,芯片和芯片之间或者其他元器件如传感器和芯片之间的通信。
SPI和IIC是板上通信,IIC有时也会做板间通信,不过距离甚短,不过超过一米,例如一些触摸屏,手机液晶屏那些很薄膜排线很多用IIC,I2C能用于替代标准的并行总线,能连接的各种集成电路和功能模块。
I2C 是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。
总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。
多路微控制器能在同一个I2C总线上共存这两种线属于低速传输;而UART是应用于两个设备之间的通信,如用单片机做好的设备和计算机的通信。
这样的通信可以做长距离的。
UART和,UART就是我们指的串口,速度比上面三者快,最高达100K左右,用与计算机与设备或者计算机和计算之间通信,但有效范围不会很长,约10米左右,UART优点是支持面广,程序设计结构很简单,随着USB的发展,UART也逐渐走向下坡;SmBus有点类似于USB设备跟计算机那样的短距离通信。
简单的狭义的说SPI和I2C是做在电路板上的。
而UART和SMBUS是在机器外面连接两个机器的。
详细描述:1、UART(TX,RX)就是两线,一根发送一根接收,可以全双工通信,线数也比较少。
数据是异步传输的,对双方的时序要求比较严格,通信速度也不是很快。
在多机通信上面用的最多。
2、SPI(CLK,I/O,O,CS)接口和上面UART相比,多了一条同步时钟线,上面UART 的缺点也就是它的优点了,对通信双方的时序要求不严格不同设备之间可以很容易结合,而且通信速度非常快。
一般用在产品内部元件之间的高速数据通信上面,如大容量存储器等。
3、I2C(SCL,SDA)接口也是两线接口,它是两根线之间通过复杂的逻辑关系传输数据的,通信速度不高,程序写起来也比较复杂。
一般单片机系统里主要用来和24C02等小容易存储器连接。
第七章 TWII2C总线技术 单片机

//停止I2C void iic_stop(void) { clr_iic_scl(); DelayuS(30); clr_iic_sda(); DelayuS(30); set_iic_scl(); DelayuS(30); set_iic_sda(); } //向I2C发送一个字节 void iic_write_8bits(byte writedata) { byte i; for(i=8;i!=0;i--) { clr_iic_sda(); if(writedata&0x80) set_iic_sda(); set_iic_scl(); DelayuS(30); clr_iic_scl(); DelayuS(30); writedata=writedata<<1; } }
void iic_start(void) { set_iic_en(); set_iic_output(); set_iic_sda(); DelayuS(30); set_iic_scl(); DelayuS(30); clr_iic_sda(); DelayuS(30); clr_iic_scl(); } //等待ACK响应 void iic_wait_ack(void) { byte ErrorBit; set_iic_sda(); DelayuS(30); set_iic_scl(); set_iic_input(); DelayuS(30); while(get_iic_sda()) ; set_iic_output(); clr_iic_scl(); }
//ACK响应 void iic_ack(void) { clr_iic_sda(); DelayuS(30); set_iic_scl(); DelayuS(30); clr_iic_scl(); DelayuS(30); set_iic_sda(); } //NOACK响应 void iic_no_ack(void) { set_iic_sda(); DelayuS(30); set_iic_scl(); DelayuS(30); clr_iic_scl(); }
SPI总线,IIC总线

2
I2C总线 总线
I2C总线始终和先进技术保持同步,并保持其向 总线始终和先进技术保持同步, 总线始终和先进技术保持同步 下兼容性。 下兼容性。 I2C总线采用二线制传输,一根是数据线SDA 总线采用二线制传输,一根是数据线 总线采用二线制传输 ),另一根是时钟线 (Serial Data Line),另一根是时钟线 ),另一根是时钟线SCL ),所有 (serial clock line),所有 2C器件都连接在 ),所有I 器件都连接在 SDA和SCL上,每一个器件具有一个唯一的地 和 上 址。 I2C总线是一个多主机总线,总线上可以有一 总线是一个多主机总线, 总线是一个多主机总线 个或多个主机(或称主控制器件), ),总线运行 个或多个主机(或称主控制器件),总线运行 由主机控制。 由主机控制。 I2C总线支持多主(multi-mastering)和主从 总线支持多主( 总线支持多主 ) (master-slave)两种工作方式。 )两种工作方式。 3
4
I2C总线 总线
多主方式下, 总线上可以有多个主机 总线上可以有多个主机。 总线 多主方式下,I2C总线上可以有多个主机。I2C总线 需通过硬件和软件仲裁来确定主机对总线的控制权。 需通过硬件和软件仲裁来确定主机对总线的控制权。 主从工作方式时,系统中只有一个主机, 主从工作方式时,系统中只有一个主机,总线上的 其它器件均为从机(具有I 总线接口),只有主 总线接口), 其它器件均为从机(具有 2C总线接口),只有主 机能对从机进行读写访问,因此, 机能对从机进行读写访问,因此,不存在总线的竞 争等问题。在主从方式下, 总线的时序可以模 争等问题。在主从方式下,I2C总线的时序可以模 总线的使用不受主机是否具有I 拟 ,I2C总线的使用不受主机是否具有 2C总线接口 总线的使用不受主机是否具有 总线接口 的制约。 的制约。 ——MCS-51系列单片机本身不具有 2C总线接口, 系列单片机本身不具有I 总线接口, 系列单片机本身不具有 总线接口 可以用其I/O口线模拟 总线 口线模拟I 可以用其 口线模拟 2C总线
i2c总线的工作原理与应用

i2c总线的工作原理与应用1. 简介i2c(Inter-Integrated Circuit)总线是一种常见的串行通信总线,用于在集成电路之间进行数据传输。
它采用两根线(SDA和SCL)进行通信,支持多主机和多从机的连接。
i2c总线通常用于连接传感器、存储器、显示器等设备。
2. 工作原理i2c总线采用主从式架构。
主机(Master)负责控制总线的访问和数据传输,从机(Slave)接收并响应主机的指令。
2.1 信号线i2c总线有两根信号线:•SDA(Serial Data Line):用于传输数据。
•SCL(Serial Clock Line):用于同步数据传输。
2.2 传输模式i2c总线支持两种传输模式:•标准模式(Standard Mode):最大传输速率为100kbps。
•快速模式(Fast Mode):最大传输速率为400kbps。
2.3 通信流程i2c总线的通信流程如下:1.主机发送起始信号(Start):主机将SDA从高电平拉到低电平,然后拉低SCL线。
2.主机发送地址和读写位:主机发送从机的地址和读写位,指定数据是读取还是写入操作。
3.从机应答:从机接收地址和读写位后,发送应答信号(ACK)给主机。
4.数据传输:主机和从机之间传输数据,每个字节都要从高位(MSB)依次传输到低位(LSB)。
5.应答验证:每个字节传输后,接收方发送应答信号,表示接收成功。
6.停止信号(Stop):主机发送停止信号,将SDA从低电平拉到高电平,然后拉高SCL线。
应用案例i2c总线广泛应用于各种电子设备中,以下是一些常见的应用案例:3.1 传感器模块传感器模块通常使用i2c总线进行数据传输。
例如,温度传感器可以通过i2c 总线将实时温度数据发送给主控制器,以便进行温度监测和控制。
3.2 存储器i2c总线可以连接到存储器芯片,用于存储和读取数据。
例如,实时时钟芯片可以使用i2c总线来存储和读取时间数据。
3.3 显示器一些液晶显示器可以通过i2c总线进行控制和数据传输。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简要对比TWI总线与I2C总线
摘要在简要对比TWI总线与I2C总线的基础上,详细介绍TWI总线的内部模块、工作时序和工作模式,并给出一个编程实例加以说明.对TWI总线和传统的I2C总线的正确区分及使用具有现实的指导意义。
关键词两线串行总线TWI I2C
AVR系列的单片机内部集成了TWI(Two-wire SerialInterface)总线。
该总线具有I2C总线的特点,即接线简单,外部硬件只需两个上拉电阻,使用时钟线SCL和数据线SDA就可以将128个不同的设备互连到一起;而且支持主机和从机操作,器件可以工作于发送器模式或接收器模式,数据传输率高达400 kHz。
正因为TWI总线具有这么多的优点,因此受到了使用者的青睐。
由于该总线与传统的I2C总线极其相似。
因此不少人误以为TWI总线就是I2C总线,其实这只是一种简单化的理解。
TWI总线是对I2C总线的继承和发展。
它定义了自已的功能模块和寄存器,寄存器各位功能的定义与I2C总线并不相同;而且TWI总线引入了状奁寄存器,使得TWI总线在操作和使用上比I2C总线更为灵活。
在实际应用上,由于大部分单片机内部没有集成I2C总线,因此单片机的控制是通过模拟I2C总线的时序来完成其操作的。
AVR系列的单片机内部集成了TWI总线,而且其用法也比I2C更为灵活。
本文结合一个实例对TWI总线的内部模块、工作时序和工作模式进行了详细介绍,目的在于正确区分TWI 总线和传统的I2C总线,对如何正确使用TWI总线编程也具有现实的指导意义。
1 TWI内部模块
TWI内部由总线接口单元、比特率发生器、地址匹配单元和控制单元等几个子模块组成,如罔1所示。
图中,SCL、SDA为MCU的TWI接口引脚。
引脚的输出驱动器包含一个波
形斜率限制器以满足TWI规范;引脚的输入部分包含尖峰抑制单元,以去除小于50ns的毛刺。
总线接口单元包括数据与地址寄存器TWDR、START/STOP控制器和总线仲裁判定硬件电路。
比特率发生器单元用来控制TWI工作于主机模式时时钟信号SCL的周期,具体由TWI状态寄存器TWSR的预分频系数以及比特率寄存器TWBR设定;当TWI工作于从机模式时,无需对比特率或预分频进行设定。
地址匹配单元将检测从总线上接收到的地址是否与TWAR寄存器中的7位地址相匹配。
控制单元监视TWI总线,根据TWI控制寄存器TWCR的设置作出相应的响应。
2 TWI的工作时序
TWT接口是面向字节和基于中断的。
所有的总线事件(例如接收到一个字节或发送一个START信号等),都会产生一个TWI中断。
由于TWI接口是基于中断的,因此TWI接口在字节发送和接收过程中,不需要应用程序干预。
TWCR寄存器的TWI中断允许TWTE位和
SREG寄存器的全局中断允许一起决定应用程序是否响应TWINT标志位产生的中断请求。
如果TWIE被清零,则应用程序只能采用轮询TWINT标志位的方法来检测TWI总线状态;
如果TWINT标志位被置位,则表示TWI接口完成了当前的操作,等待应用程序响应。
在这种情况下,TWI状态寄存器TWSR包含了当前TWI总线的状态值。
应用程序可读取TWCR 的状态码,判别此时的状态码是否正确,并通过设置TWCR与TWDR寄存器来决定下一个TWI总线周期TWI接口应如何工作。
典型的主机字节发送的工作时序如图2所示。
3 TWI的工作模式
TWI可以工作于4种不同的模式,即主机发送模式(MT)、主机接收模式(MR)、从机发送模式(ST)和从机接收器模式(SR)。
即使同一应用程序也可以使用几种模式。
例如,TWI可用MT模式向TWI的EEPROM写入数据,用MR模式从EEPROM读取数据。
如果系统中有其他主机存在,则它们可能给TWI发送数据,此时可以用SR模式。
由应用程序决定采用何种模式。
由于在实际使用过程中,多使用主机发送模式,所以只对主机发送模式作详细介绍,其它模式下格式和状态可以依此类推。
在主机发送模式下,主机向从机发送数据。
为了进入主机模式,必须先发送START信呼;紧接着的地址包格式决定是进入MT或MR模式。
如果发送SLA+W,则进入MT模式;如果发送SLA+R,则进入MR模式。
主机发送模式的格式和状态如图3所示。
4 TWI的编程实例
下面将通过一个具体的实例来说明如何在实际应用中对TWl进行编程。
本程序的主要功能是向PCA9554中写入数据,若错误则返回一1;否则返回O。
其中参数command为命令字节,data为要写入的数据。
5 结论
AVR系列单片机内部有可编程Flash,自带EEPROM,支持JTAG接口片内调试和对Flash、EEPROM、熔丝位和锁定位的编程,因此成为众多单片机芯片的首选。
同时,AVR系列单片机内部集成有TWI接口,弥补了其他型号单片机依靠时序模拟完成I2C芯片工作的缺陷。
本文通过对TWI总线的详细介绍,旨在介绍一种对TWI总线进行编程的方法,对TWI的正确使用具有现实的指导意义。