I2C只用两条线(SDA和SCL)在连接到总线上的设备之间传送数据.每一个设备都由唯一的地址来识别(不管是微处理器.LCD驱动器.存储器或者键盘接口),并且可以依照设备的功能作为发送器或者接收器使用.LCD驱动器可能只是个接收器,而存储器可以发送和接受数据.除了发送器和接收器,当传送数据时设备还可以作为主机或者从机.主机就是初始化数据传输和产生时钟信号的设备,在那个时刻,任何被寻址的设备都是从机.        I2C总线是一个多主机总线.意味着可以连接多个可以控制总线的设备到总线上.主机通常是…
I2C总线协议的软件模拟实现方法 在上一篇博客中已经讲过I2C总线通信协议,本文讲述I2C总线协议的软件模拟实现方法. 1. 简述 所谓的I2C总线协议的软件模拟实现方法,就是用软件控制GPIO的输入.输出和高低电平变化,来模拟I2C总线通讯过程中SCL.SDA的电平变化来实现的. 2. I2C总线的封装 每个处理器对应的GPIO操作都有差异,即使是同一款处理器,不同的人也会有不同的GPIO封装风格,就以我个人习惯用的GPIO方法为例来进行讲解.我习惯上将GPIO的组和位封装为一个结构体,这样使…
UART 属于异步通信,比如电脑发送给单片机,电脑只负责把数据通过TXD 发送出来即可,接收数据是单片机自己的事情.而 I2C 属于同步通信, SCL 时钟线负责收发双方的时钟节拍, SDA 数据线负责传输数据. I2C 的发送方和接收方都以 SCL 这个时钟节拍为基准进行数据的发送和接收. I2C总线包括SCL,SDA 两根信号线,其中SCL是时钟线,SDA是数据线. 1.起始信号 UART 通信是从一直持续的高电平出现一个低电平标志起始位:而 I2C 通信的起始信号的定义是 SCL 为高电平…
I2C总线的结构.工作时序与模拟编程 I2C总线的结构.工作时序与模拟编程I2C总线(Inter Integrated Circuit)是飞利浦公司于上个世纪80年代开发的一种"电路板级"的总线结构.与其它串行接口相比,无论从硬件结构.组网方式.软件编程都有很大的不同.在AT89C51系统上使用汇编语言模拟I2C总线的各种信号及编程原理,为自主开发.设计具有I2C总线接口的系统打下一个良好的基础,也为其它串口的模拟编程创造一个好的思路和可行的方法. I2C总线的主要特点 1. 二线制结…
转自:http://blog.csdn.net/w89436838/article/details/38660631 1  I2C总线物理拓扑结构      I2C 总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成.通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递.在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平. I2C通信方式为半双工,只有一根SDA线,同一时间只可以单向通信,485…
I2C总线信号时序总结 总线空闲状态  I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态.此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高. 启动信号  在时钟线SCL保持高电平期间,数据线SDA上的电平被拉低(即负跳变),定义为I2C总线总线的启动信号,它标志着一次数据传输的开始.启动信号是一种电平跳变时序信号,而不是一个电平信号.启动信号是由主控器主动建立的,在建立该信号之前I2C总线必须处于空闲状态.重启动信号  在…
其实,10bit地址我没用过,通用广播地址更没用过.通用广播地址应该是在多个mcu之间用i2c进行通信时使用的.虽说没用到,但还是做了翻译,说不定以后有机会用到: 10bit地址 10bit的寻址扩展可能寻址的数目.有7bit地址和10bit地址的设备可以连接到相同的I2C总线上,而且7bit寻址和10bit寻址都可以用在所有的总线速度模式下.不过,10bit寻址用的不多. 10bit的从机地址由开始条件(S)或重复开始条件(Sr)后的两个字节组成.第一个字节的前7位是1111 0XX,XX是1…
时钟拉伸(Clock stretching)clock stretching通过将SCL线拉低来暂停一个传输.直到释放SCL线为高电平,传输才继续进行.clock stretching是可选的,实际上大多数从设备不包括SCL驱动,所以它们不能stretch时钟.从字节级来看,一个设备可能在快速模式下接受数据,但是需要更多的时间来存储接收到的字节或者准备将要传输的另一个字节.从机可以以一种握手的处理方式在接受和应答字节后将SCL线拉低来强制使得主机进入wait状态知道从机准备好下一个字节的传输.从…
字节格式 发送到SDA线上的每个字节必须是8位.每次传输的字节数量是不受限制的.每个字节后必须跟着一个ACK应答位.数据从最高有效位(MSB)开始传输.如果从机要执行一些功能后才能接收或者发送新的完整数据,比如说服务一个内部中断,那么它可以将时钟线SCL拉低来强制使主机进入wait状态.当从机准备好新的字节数据传输时,释放时钟线SCL,数据传输便继续进行. ACK和NACK 每个字节后都有ACK发生.ACK应答位允许接收器通知发送器字节成功接收了下一个字节可以发送了.主机产生所有的时钟脉冲,包括…
一.协议 1.空闲状态 I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态.此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高. 2.起始位与停止位的定义: 起始信号:当SCL为高期间,SDA由高到低的跳变:启动信号是一种电平跳变时序信号,而不是一个电平信号. 停止信号:当SCL为高期间,SDA由低到高的跳变:停止信号也是一种电平跳变时序信号,而不是一个电平信号. 3.ACK 发送器每发送一个字节,就在时钟脉冲9期间释放数据线…