stm32之IIC协议

这篇具有很好参考价值的文章主要介绍了stm32之IIC协议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

主要通过两个层面来讲:物理层、协议层。

IIC是一个同步半双工串行总线协议。

一、物理层(通信模型)

1、最早是飞利浦公司开发的这个协议,最早应用到其产品上去。

2、两线制(两根信号线)

其中SCL为时钟线,SDA为数据线。

stm32之IIC协议,stm32,网络,嵌入式硬件

 

3、挂载在IIC总线上的设备有主从之分,可以同时挂载多个主机和多个从机。

主机:通信的发起方。所有的通信皆由主机先来发起。

从机:和主机进行通信。实现数据的交互。

 

4、IIC通信中,每一个设备(不论是主机还是从机)都有唯一的ID。

那么问题来了,在同一根信号线上有那么多的设备挂载,既有主机也有从机,假设主机1想和从机2进行通信,该怎么实现呢。主机1如何精准的找到我想通信的从机呢?这就和设备的唯一的ID有关,主机1可以去信号线上广播想要通信的从机ID,如果对应ID的从机收到了主机1发起的请求,则发送一个应答信号传送给主机1,表示本从机设备收到了主机的通信请求,然后选择是否应答该请求,如果应答则表示同意通信,如果返回给主机1的是一个非应答信号则表示不想与主机1通信。而其他从设备虽然也能接收到主机1的请求,但因为ID不一样,所以无法与主机1通信。

  1. 同一时刻只能有一个主机和一个从机进行通信

假如在同一个时刻,多个主机同时发起总线请求,也就是说同一时刻多个主机想要占据总线的使用权。此时将会有一个总线仲裁机制来决定到底是哪一个主机能使用信号线进行通信,也就是最终会是谁占据总线的使用权。

总线仲裁机制使用的是线与特性(总线空闲电平状态为高电平),也就是说谁能先拉低总线谁就能得到总线的控制权限,如果两者都能拉低总线,那就看谁的时间更长,总有一个时刻会有一个主机最终获得线权。那么其他主机就会主动的让出总线的控制权限。

stm32之IIC协议,stm32,网络,嵌入式硬件

2.空闲电平状态为高电平。

在时钟线和数据线上都接了一个上拉电阻。其作用就在于使得IIC总线的空闲电平信号为高电平。这两个上拉电阻的必须要的

所以我们在初始化配置GPIO的时候最好给其配置成开漏输出。因为开漏输出是无法自己输出一个高电平的(开漏输出只有低电平状态和高阻态),但是因为IIC设备是一定会接上拉电阻的,所以开漏输出模式下,空闲电平状态将会由上拉电阻来拉高。然而因为我们后面要使用GPIO口模拟的方式来实现IIC协议,所以在这里配置推挽也问题不大,因为在软件模拟的时候,总线的输出高输出低是由我们自己软件控制的。

3.IIC通信是高位先发,是以字节形式发送的(一次发8位)。

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

 

二、协议层

1、起始信号

stm32之IIC协议,stm32,网络,嵌入式硬件

起始信号是表示通信开始的信号,其表现为:在SCL时钟线为高电平期间,数据线产生一个由高到低的下降沿电平切换。

2、停止信号

stm32之IIC协议,stm32,网络,嵌入式硬件 

起始信号是表示通信结束的信号,其表现为:在SCL时钟线为高电平期间,数据线产生一个由低到高的下降沿电平切换。

3、数据有效性

stm32之IIC协议,stm32,网络,嵌入式硬件 

 

因为我们通过数据线发送的信号有高有低,所以在电平信号进行高低切换的过程当中,需要一定的时间,那么这时可以让此时的数据切换这段时间使得数据无效。在IIC里面,只有当时钟线为高电平的期间,数据才有效。时钟线为低电平的期间,数据是无效的。如果在数据切换期间读取数据有效,那么很可能会将切换电平信号识别成开始信号或结束信号。

4、应答信号

(1)应答

stm32之IIC协议,stm32,网络,嵌入式硬件

应答信号:表示一个肯定的回应。其表现为:在时钟线SCL高电平期间,数据线SDA维持一个稳定的低电平。

(2)非应答

stm32之IIC协议,stm32,网络,嵌入式硬件

非应答信号:表示一个否定的回应。其表现为:在时钟线SCL高电平期间,数据线SDA维持一个稳定的高电平,当然,有的时候,数据的接收方确实没有收到来自数据的发送方的信号,导致数据的接收方就没有理会数据的发送方,此时也属于非应答信号。所以非应答信号其实有好几种可能的情况。

注意:应答信号或非应答信号是谁发的,又是谁接收的呢?

这里需要特别注意一点,应答信号(非应答信号)是数据的接收方发出去的,并且由数据的发送方来接收的。这里要弄清楚一个概念,数据的接收方不等同于从设备,数据的发送方也不等同于主设备,因为数据的接收方可能是主设备也可能是从设备,同理,数据的发送方也一样,可能是主设备也可能是从设备,因为在数据的通信过程中,可能由主机向从机发

 

 

送数据,也可能由从机向主机发送数据(半双工通信,但通信的发起者都是主机)。当由主机向从机发送数据的时候,主机就是数据的发送方,从机就是数据的接收方,而当从机向主机发送数据的时候,从机就是数据的发送方,主机则变成了数据的接收方。所以,这里要特别注意,应答信号(非应答信号)是由数据的接收方发出去,并且由数据的发送方来接收的。

由于某种原因从机不对主机寻址信号应答时(如从机正在进行实时性的处理工作而无法接收总线上的数据),它必须将数据线置于高电平,而由主机产生一个终止信号以结束总线的数据传送。

如果从机对主机进行了应答,但在数据传送一段时间后无法继续接收更多的数据时,从机可以通过对无法接收的第一个数据字节的“非应答”通知主机,主机则应发出终止信号以结束数据的继续传送。

当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对从机的“非应答”来实现的。然后,从机释放SDA线,以允许主机产生终止信号。

5、IIC时序生成方式

IIC时序可以通过软件模拟(即通过GPIO口模拟)的方式产生。

还可以通过硬件生成(通过配置IIC控制器来产生)IIC时序。

三、EEPROM(AT24Cxx)

最好是自己查看手册24C02。

AT24C01/02/04/08/16...是一个1K/2K/4K/8K/16K位串行CMOS,内部含有128/256/512/1024/2048个8位字节,AT24C01有一个8字节页写缓冲器,AT24C02/04/08/16有一个16字节页写缓冲器。该器件通过I2C总线接口进行操作,它有一个专门的写保护功能。

stm32之IIC协议,stm32,网络,嵌入式硬件 

stm32之IIC协议,stm32,网络,嵌入式硬件 

 

AT24C02器件地址为7位,高4位固定为1010,低3位由 A0/A1/A2信号线的电平决定。因为传输地址或数据是以字节为单位传送的,当传送地址时,器件地址占7位,还有最后一位(最低位R/W)用来选择读写方向,它与地址无关。

stm32之IIC协议,stm32,网络,嵌入式硬件 

 

但在我们这块开发板上的是AT24C04,高4位固定为1010,低3位由 A0/A1/A2信号线的其中A0被数据地址位占用了,而原本的A0接入的是NC状态。具体的器件地址还是要看芯片原理图的接法。当P0接0时则表示对数据地址空间的0~255Bytes进行操作,当P0接1时表示对数据地址空间的256~511Bytes进行操作。

stm32之IIC协议,stm32,网络,嵌入式硬件 

 

在原理图中,A2、A1均接地,包括接入NC状态的A0也接了地所以此时的设备地址为0xA0,如果加上读写位的话,写地址:0xA0,读地址:0xA1。文章来源地址https://www.toymoban.com/news/detail-688516.html

到了这里,关于stm32之IIC协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式毕设分享 stm32智能鱼缸监控投喂系统(源码+硬件+论文)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年03月17日
    浏览(73)
  • 【嵌入式Linux内核驱动】05_IIC子系统 | 硬件原理与常见面试问题 | 应用编程 | 内核驱动 | 总体框架

    1.1 IIC 基础 IIC协议简介—学习笔记_iic标准协议_越吃越胖的黄的博客-CSDN博客 I2C(Inter-Integrated Circuit)是一种串行通信协议,用于连接微控制器、传感器、存储器和其他外设。 I2C使用两条线(SDA和SCL)进行通信,可以连接多个设备,每个设备都有一个唯一的地址。I2C总线上的

    2024年02月09日
    浏览(59)
  • SPI、UART、RS232、RS485、IIC 5种嵌入式经典通信总线协议

      UART即通用异步收发器,是一种通用的串行、异步通信总线。该总线有两条数据线,可以实现全双工的发送和接收。在嵌入式系统种常用于主机与辅助设备之间的通信。UART就是串口,也是一种通信协议/总线协议。 电脑上已经逐步没有了,换成了usb,但是在嵌入式领域是最

    2024年01月16日
    浏览(56)
  • 模拟IIC通讯协议(stm32)(硬件iic后面在补)

            1、IIC通讯需要两条线就可以,SCL、SDA。         2、IIC的数据传输的速率,不同的ic是不同的,根据电平维持的延时函数的时间来确定IIC数据传输的速率.         3、IIC的延时函数可以使用延时函数,延时函数一般使用系统滴答时钟产生延时,也是在Sysclk频率总线的

    2024年04月15日
    浏览(58)
  • 【嵌入式学习笔记】嵌入式基础9——STM32启动过程

    程序段交叉引用关系(Section Cross References):描述各文件之间函数调用关系 删除映像未使用的程序段(Removing Unused input sections from the image):描述工程中未用到被删除的冗余程序段(函数/数据) 映像符号表(Image Symbol Table):描述各符号(程序段/数据)在存储器中的地址、类

    2024年02月15日
    浏览(81)
  • 【嵌入式AI部署神经网络】STM32CubeIDE上部署神经网络之指纹识别(Pytorch)——篇一|环境搭建与模型初步部署篇

    前言: 本篇主要讲解搭建所需环境,以及基于pytorch框架在stm32cubeide上部署神经网络,部署神经网络到STM32单片机,本篇实现初步部署模型,没有加入训练集与验证集,将在第二篇加入。篇二详细讲解STM32CubeIDE上部署神经网络之指纹识别(Pytorch)的数据准备和模型训练过程等

    2024年04月25日
    浏览(52)
  • stm32嵌入式实验考核

    STM32 实验考核题目 1. 利用 STM32 小板实现:控制外接 LED 灯每隔 3 秒钟亮暗变换,同 时在 PC 机上显示 MCU 的计时时间,MCU 的初始时间由 PC 机 方设置。 2. 利用 STM32 小板实现:利用导线外接 GPIO 口模拟 2 个按键输入, 根据输入组合的四种情况,分别控制三色灯四种流水灯效果

    2024年02月03日
    浏览(49)
  • STM32的时钟系统(嵌入式学习)

    时钟是指用于计量和同步时间的装置或系统。时钟是嵌入式系统的脉搏,处理器内核在时钟驱动下完成指令执行,状态变换等动作,外设部件在时钟的驱动下完成各种工作,例如:串口数据的发送、AD转换、定时器计数等。因此时钟对于计算机系统是至关重要的,通常时钟系

    2024年02月16日
    浏览(47)
  • 嵌入式——新建STM32工程(标准库)

    目录 一、初识标准库 1.CMSIS标准及库层级关系 2.库文件介绍 (1)Libraries文件夹 ①CMSIS文件夹 ②STM32F10x_Std_Periph_Driver文件夹 ③ 在用库建立一个完整的工程时,还需要添加stm32f10x_it.c、 stm32f10x_conf.h 和 system_stm32f10x.c文件 (2)Project文件夹 (3)Utilities文件夹 3.库各文件之间的关

    2024年01月23日
    浏览(53)
  • STM32串口通信详解(嵌入式学习)

    时钟信号在电子领域中是指用于同步和定时电路操作的周期性信号。它在数字系统和通信系统中起着至关重要的作用,用于协调各个组件之间的数据传输和操作。 时钟信号有以下几个重要的方面: 频率:时钟信号的频率是指单位时间内信号周期的数量。它通常以赫兹(Hz)为

    2024年02月09日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包