看懂官方技术文档-->从软件和硬件理解IIC通信协议原理与使用

本文围绕IIC协议展开,介绍了开发环境和资源,从硬件方面解释IIC概念,从软件方面解析时序图完成代码逻辑,包括发送数据过程、开始与终止条件等。还阐述了通讯步骤,并给出51/52和STM32F4系列开发板的IIC代码及使用示例。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

目录

开发环境:

开发板与其它资源:

一、什么是IIC-->从硬件方面理解

二、解析时序图->完成代码逻辑(软件方面理解)

2.1、完整的发送数据过程

2.2、开始条件

2.3、终止条件

2.4、开始与终止信号注意点

2.5、发送应答与接收应答

2.6、数据格式

2.7、数据有效性与发送一个字节数据

2.8、时间间隔

三、通讯步骤

四、51/52开发板,代码

4.1、IIC各个部分代码

4.2、IIC代码使用示例-->AT24C02

五、STM32F4系列开发板,IIC代码

5.1、IIC各个部分代码

5.2、IIC代码使用示例-->AT24C02



开发环境:

wins 10家庭版;

keil 5 编辑器;

开发板与其它资源:

51/52系列单片机板;->>模拟I/O高低电平,进行软件模拟IIC协议

STM32F4系列板;-->使用内置的IIC控制器,直接读取硬件传输的高低电平,硬件模拟IIC协议

AT24C02芯片;

为了验证代码可行性,建议使用串口(串口助手打印数据也很容易)或者显示屏(LCD1602比较容易)进行显示数据;

IIC数据手册;-->链接放在我上传的资源(需要进我的主页找),需要使用可以下载(几个积分);

注意点:

STM32代码部分,适用于STM32F4系列板,其它板能不能用不知道,没有进行测试,但代码思路的没有问题的;

51/52代码部分,适用于C51/52,S51/52板,其它系列板能不能用不知道,没测试;

一、什么是IIC-->从硬件方面理解

       Inter IC BUS,简称(又称I2C总线)IIC;

        I2C总线的意思是“完成集成电路或功能单元之间信息交换的规范或协议”。Philips公司推出的I2C总线采用一条数据线(SDA),加一条时钟线(SCL)来完成数据的传输及外围器件的扩展;对各个节点的寻址是软寻址方式,节省了片选线,标准的寻址字节SLAM为7位,可以寻址127个单元。------>在同一个数据线(SDA)传输数据,故为半双工通信。

        I2C总线有三种数据传输速度:标准,快速模式和高速模式。标准的是100Kbps,快速模式为400Kbps,高速模式支持快至3.4Mbps的速度。所有的与次之传输速度的模式都是兼容的。I2C总线支持7位和10位地址空间设备和在不同电压下运行的设备。

硬件电路总线图:


主机与从机连接在SDA与SCL线上,当需要进行通信时,一个设备发送寻址到总线,每一个设备都会收到该地址,符合该地址的设备返回应答,返回应答的设备在本次通信的过程是从机,发送寻址到总线在本次通信过程是主机;

进行发送寻址的设备是主机,寻址位有7位,故理论上最多可以存在2^7个从机;

二、解析时序图->完成代码逻辑(软件方面理解)

2.1、完整的发送数据过程



技术文档:

Every byte put on the SDA line must be eight bits long. The number of bytes that can be
transmitted per transfer is unrestricted. Each byte must be followed by an Acknowledge
bit. Data is transferred with the Most Significant Bit (MSB) first . If a slave cannot receive or transmit another complete byte of data until it has performed some other function, for example servicing an internal interrupt, it can hold the clock line SCL LOW to force the master into a wait state. Data transfer then continues when the slave is ready for another byte of data and releases clock line SCL.

理解:

放在SDA线上的每个字节必须是8位长,每次传输字节大小不受限制,每次传输1个字节必须有一个应答,数据传输先从最高有效位(MSB)开始,当从机接收不到完整数据时(1个字节),可以强制主机进行等待,当主机能继续传输时(且从机准备就绪),数据继续传输,传输结束释放总线SCL;

2.2、开始条件

时序图如下图2:

                                            图2


技术文档:A HIGH to LOW transition on the SDA line while SCL is HIGH defines a START condition.

理解:在SCL线维持高电平时,SDA线从高电平跳变到低电平

51/52单片机代码逻辑:

给SCL,I/O口;
给SDA,I/O口;

开始函数(void)
{
    SDA高电平;
    SCL维持在高电平;
    SDA跳变到低电平;
    释放SCL(为下一阶段做准备);
}

STM32代码逻辑:

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值