| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 深入理解STM32(三)——I2C -> 正文阅读 |
|
[嵌入式]深入理解STM32(三)——I2C |
一、I2C通信模型1、I2C总线之间的连接方式为:时钟线与时钟线连接,数据线与数据线连接; 2、在同一条I2C通信总线上,只存在且必须从在一个主机,可以存在多个从机,即为一对多的通信模式; 3、每个连接到总线的器件都可以通过唯一的地址器件和其它器件通信,主机/从机角色和地址可以配置,主机可以作为主机发送器或者主机接收器; 4、传输速率在标准模式下可达100kbps,快速模式下可达400kbps; 5、连接到总线的IC数量只受到总线的最大负载电容400pF限制; 6、在主机的SCL和SDA上都有一个上拉电阻,所以初始状态时两条线都是高电平; 7、在同一条I2C通信总线上,如果存在多个MCU/CPU,那么必须由程序员决定是哪一个MCU/CPU为主机,其他的都为从机,并且,在I2C总线上作为从机的MCU/CPU必须支持从模式I2C协议,这个问题特别在多机通信的系统中尤其注意; 8、I2C通信时,数据先发高位后低位。 二、I2C总线的特点1、两条数据线,SDA(串行数据线)与SCL(串行时钟线); 2、7位或10位多位寻址模式; 3、每个连接到总线上的器件地址由芯片内部硬件电路和外部地址同时决定,避免了片选线的线连接方法,并建立简单的主从关系,主器件提供接收和发送所必须的时序; 4、I2C是真正的多主机总线,如果两个或更多主机同时请求总线,可通过冲突检测和仲裁防止总线数据被破坏; 5、同步时钟允许器件以不同的数据传输率进行通信。 三、I2C的协议层(1)数据的有效性? ? ? ? 在时钟的高电平周期内,SDA线上的数据必须保持稳定,数据线仅可在时钟SCL为低电平时改变。 (2)起始和结束条件? ? ? ? 起始条件:当SCL线为高电平时,SDA线上由高到低的跳变被定义为起始条件;结束条件:当SCL线为高电平时,SDA线上由低到高的跳变被定义为停止条件。总线在起始条件之后被视为忙状态,在起始条件之后被视为空闲状态。 (3)应答? ? ? ? 每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信息以确认从机是否成功收到数据。从机应答主机所需要的时钟仍是主机提供的,应答出现在每一次主机完成8个数据位传输后紧跟着的时钟周期。 (4)带有7位地址的数据格式? ? ? ? 在典型的I2C传输数据流中,数据由最高位在SCL的驱动下依次传输。在起始条件后,第一个字节由长度为7位的传输地址信息和长度为1位数据方向位组成。数据方向位为1表示主机请求从机数据,为0则表示主机将向从机输出数据。在随后的9个周期内,主机将等待从机的应答。 (5)仲裁? ? ? ??I2C是多主机总线,每个设备都可以访问总线上的主机,但任一时刻只能有一个主机。仲裁事件发生在至少有两个从机设备同时向总线传输起始条件、尝试成为主机的时刻。赢得仲裁的设备将成为主机,其余设备将退出仲裁保持在空闲状态,直至下一次总线空闲后才能再次申请控制总线。 四、I2C的时序1、起始信号在SCL高电平,SDA由高跳变到低电平时为起始条件。 2、停止信号?在SCL低电平,SDA由低跳变到高电平时为起始条件。 3、应答信号ACK:0(1)主机发送应答(2)主机接收应答4、非应答信号NACK:1(1)主机发送非应答信号? (2)主机接收非应答信号5、主机发送1Byte数据例如:发送1010 0101B 6、主机读取1Byte数据例如:读取0101 1101B ?五、代码实现1、产生I2C起始信号
2、产生I2C停止信号
3、等待应答信号
4、产生ACK应答
5、不产生ACK应答
6、I2C发送一个字节
7、I2C读一个字节
8、IO方向设置
|
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 6:33:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |