stm32专题十五:IIC通讯

IIC

I2C 通讯协议(Inter-Integrated Circuit)是由Phiilps公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。

IIC总线物理层的特点:

       1 它是一个支持多设备的总线。“总线”指多个设备共用的信号线。在一个I2C通讯总线中,可连接多个I2C通讯设备,支持多个通讯主机及多个通讯从机;

       2 一个I2C总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线 (SCL)。数据线即用来表示数据,时钟线用于数据收发同步;

       3 每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问;

       4 总线通过上拉电阻(通常4.7K)接到电源(2 ~ 15V)。当I2C设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平;

       5 多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线;

       6 具有三种传输模式:标准模式传输速率为100kbit/s ,快速模式为400kbit/s ,高速模式下可达 3.4Mbit/s,但目前大多IIC设备尚不支持高速模式;

       7 连接到相同总线的 IC 数量受到总线的最大电容 400pF 限制 ;

IIC总线协议层:

       IIC的协议定义了通讯的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地址广播等环节。

接下来的这些内容全部来自于IIC总线协议:

1 数据有效性:

       由于连接到IIC总线上的设备工艺不同,逻辑0和逻辑1的电平不是固定的(由VDD决定),每传输一个数据位就产生一个时钟脉冲;

       SDA 线上的数据必须在时钟的高电平周期保持稳定。SDA线高/低电平状态只有在 SCL 线的时钟信号是低电平时才能改变;

2 起始和终止条件

       起始条件: SCL 线是高电平时 SDA 线从高电平向低电平切换;

       终止条件: SCL 是高电平时 SDA 线由低电平向高电平切换;

起始信号:

// step1 把两根总线拉高
SDA = 1;
SCL = 1;

// step2 等待电平稳定
delay(us);

// step3 依次拉低SDA SCL(中间要等待电平稳定)
SDA = 0;
delay(us);
SCL = 0;
delay(us);

终止信号:

// step1 两根线按时间轴拉低
SCL = 0;
SDA = 0;

// step2 等待电平稳定
delay(us);

// step3 按时间轴依次拉高
SCL = 1;
delay(us);
SDA = 1;
delay(us);

3 传输数据

字节格式

      发送到 SDA 线上的每个字节必须为8位每次传输可以发送的字节数量不受限制 每个字节后必须跟一个应答位首先传输的是数据的最高位 MSB。如果从机要完成一些其他功能后 例如一个内部中断服务程序,才能接收或发送下一个完整的数据字节,可以使时钟线 SCL保持低电平迫使主机进入等待状态。当从机准备好接收下一个数据字节并释放时钟线SCL后,数据传输继续。

7位设备地址和8位设备地址

      比如EEPROM的设备地址为:1111 000,有时会写为0X78,这都表示7位设备地址。

8位设备地址:7位地址 + 读写位

      读地址:0X78 + 1 = (1111 000) << 1 + (0000 0001) = 0XF1 = 1111 0001

      写地址:0X78 + 0 = (1111 000) << 1 + (0000 0000) = 0XF0 = 1111 0000

4 数据应答

      数据传输必须带响应。相关的时钟脉冲由主机产生,在响应的时钟脉冲期间,发送器释放SDA线,此时被SDA被自动拉高。在响应的时钟脉冲期间,接收器必须将SDA线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平;

      通常,被寻址的接收器在接收到的每个字节后,除了用CBUS地址开头的报文,必须产生一个响应;

      当从机不能响应从机地址时,例如它正在执行一些实时函数不能接收或发送,从机必须使数据线保持高电平,主机然后产生一个停止条件终止传输,或者产生重复起始条件开始新的传输

5 数据的传输格式

传输过程描述:

  1. 起始信号;
  2. 一个字节(7位地址 + 读写位)+ ACK;
  3. 一个数据字节 + ACK;
  4. ...
  5. 停止信号;

几种可能的数据格式:

1 主机向从机写入数据,整个的传输方向不变;

2 主机在发送第一个字节后,立即读从机。后面的字节传输方向发生改变,第一次的应答仍由从机产生,后续的应答信号全部由主机产生,当读取到指定个数的数据时,主机先发送非应答信号,然后发送停止信号。

3 复合格式

      传输改变方向的时侯,起始条件和从机地址都会被重复。但R/ W位取反。如果主机接收器发送一个重复起始条件,它之前应该发送了一个不响应信号。

      复合格式可以用于例如控制一个串行存储器(EEPROM),先写从机设备地址,然后在第一个数据字节期间,要写内部存储器的地址。再重复起始条件和从机地址后,数据可被传输。

复合格式的一般应用:

前面一般是7位设备地址+0(写方向),然后第一个数据字节(发送要读取的寄存器地址),这个地址会被EEPROM内部保存起来,然后重新发送起始信号,再写7位设备地址+1(读方向),接下来就可以读到数据。

6 数据位定义

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值