IIC通信协议技术说明

IIC通信协议技术说明简介IICBus最早是Philips半导体开发的两线时串行总线,经常用于微控制器和外设之间的连接。IIC通信方式为半双工,只有一根SDA线,同一时间只可以单向通信,485为半双工,SPI和UART为全双工。网络拓扑SDA:串行数据线SCL:串行时钟线数据传输每个字节传输必须带有响应位ACK,相关的响应时钟也有主机产生,在响应的时钟脉冲期间(第9个时钟周期),发送端释放SDA线,接收端把SDA拉低。SCL第9位时钟高电平信号期间,SDA拉低代表了有ACK响应位。当出现非响应NACK位:

大家好,又见面了,我是你们的朋友全栈君。

简介

IIC Bus 最早是Philips半导体开发的两线时串行总线,经常用于微控制器和外设之间的连接。IIC通信方式为半双工,只有一根SDA线,同一时间只可以单向通信,485为半双工,SPI和UART为全双工。

网络拓扑

在这里插入图片描述
SDA:串行数据线
SCL:串行时钟线

在这里插入图片描述

数据传输在这里插入图片描述

每个字节传输必须带有响应位ACK,相关的响应时钟也有主机产生,在响应的时钟脉冲期间(第9个时钟周期),发送端释放SDA线,接收端把SDA拉低。SCL第9位时钟高电平信号期间,SDA拉低代表了有ACK响应位。
当在SCL第9位时钟高电平信号期间,SDA仍然保持高电平,这种情况定义为NACK。这种情况下,主机可以直接产生STOP条件,终止以后的数据传输或者重新START开始一个新的传输。
出现非响应NACK位:
1.接收机没有发送机响应的地址,接收端没有任何ACK发送给发射机
2.由于接收机正在忙碌处理实时程序导致无法接收或者发送
3.传输过程中,接收机识别不了发送机的数据和命令
4.主机接收完成读取数据后,要发送NACK结束告知从机

操作演示

1.主设备从从设备中写数据
2.主设备从设备中读数据
3.主设备往从设备写数据,然后重启起始条件,紧接着从从设备读取数据

  • 从设备中读流程
/* @brief @param1 器件slave address 地址 @param2 数据的地址 @param3 数据 */
uint8_t IIC_ReadOneByte(uint8_t addr, uint8_t reg, uint8_t* data)
{ 
   
    IIC_Start();                                           // 开始 调整SDA和CLK电平
    IIC_Send_Byte(addr << 1 | I2C_Direction_Transmitter);  // 确定数据传输方向
    if (IIC_Wait_Ack())                                    // 等待ACK反馈,此时SDA为输入口
	{ 
   
        IIC_Stop();
        return 0;
    }
    IIC_Send_Byte(reg);                                    // 发送数据的地址
    IIC_Wait_Ack();
	IIC_Start();
	IIC_Send_Byte(addr << 1 | I2C_Direction_Receiver);  // 确定数据传输方向
	IIC_Wait_Ack();
    *data = IIC_Read_Byte();          //读数据 
    IIC_NAck();
    IIC_Stop();
 }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136579.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2019年总结-做时间的朋友

    2019年总结-做时间的朋友插曲:抽风了,使用在线网页的markdown写2019年的总结,都快写完了,然后手欠点击了总结里贴的一个链接地址,页面毫不留情的跳转了。当我返回到写总结的页面时,发现写好的内容不见了,这是一种什么心情,我太南了~心情顿时不那么好了。重新理一下心情和思绪,简单整几句总结吧。2020年第一天,吃过晚饭,在电脑桌前,打开网易云音乐,播放了收藏的轻音乐,开始写下这些文…

    2022年2月28日
    43
  • springloaded配置说明

    springloaded配置说明

    2021年5月12日
    137
  • ansys隐式显式算法区别_算力与算法的区别举例说明

    ansys隐式显式算法区别_算力与算法的区别举例说明2.4PIMPLE算法2.4.1速度的非线性耦合在2.1节中,我们曾对流动系统的压力速度耦合问题进行过讨论,实际上,在流动系统中除了压力和速度的耦合关系,我们还存在着另一种重要的耦合关系,速度的非线性耦合关系。当我们对速度进行求解时(例如求解动量预测方程),速度是未知量,因此对流项∇⋅(U⃗U⃗)\nabla\cdot(\vecU\vecU)∇⋅(UU)是一个未知量乘以未知量的结果,这样会使得原来呈线性的方程变为非线性方程(即未知数的最高次数从1变为2)。直接求解非线性系统的矩阵方程需要调用非线性

    2025年7月7日
    3
  • 电容器图片及型号图片_电容电阻图片大全

    电容器图片及型号图片_电容电阻图片大全图1是胆电容;图2是灯具电容器;图3是MKPH电容;图4是MET电容;图5、图10是PEI电容;图6是胆贴片电容;图7是MPE电容;图8是贴片电容;图11是轴向电解电容器;图12是MPP电容。图1是PPN电容;图2是PET电容;图3是MEA电容;图4MPB是电容;图5是PPT电容;图6是MPT电容;图7是电解电容器;图8是MET电容;图9是MKPH电容;图10、11是电机用电容;图12是MKS电…

    2022年8月22日
    11
  • C#获取进程的主窗口句柄「建议收藏」

    C#获取进程的主窗口句柄「建议收藏」publicclassUser32API{  privatestaticHashtableprocessWnd=null;  publicdelegateboolWNDENUMPROC(IntPtrhwnd,uintlParam);  staticUser32API()  {    if(processWnd==nu

    2022年7月14日
    21
  • bridge桥接模式_透明桥模式

    bridge桥接模式_透明桥模式bridge模式动机案例要点总结笔记动机由于某些类型的固有的实现逻辑,使得他们具有两个变化维度,乃至多个维度的变换如何应对这种”多维度的变化“?如何利用面向对象技术来是使得类型可以轻松地沿着两个乃至多个方向变换而不引入额外地复杂度?案例PC端和Mobile端平台和业务分离朴素class Messager{ public: virtual void Login(string username,string password) = 0; virtual void SendM

    2022年8月9日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号