《CH03-06-STM32F40x的I2C通信模块原理.pptx》由会员分享,可在线阅读,更多相关《CH03-06-STM32F40x的I2C通信模块原理.pptx(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、嵌入式系统设计原理STM32F40 x的I2C通信模块原理主讲人:赖树明东莞理工学院05I2C总线控制与应用作业01I2C总线介绍02I2C总线时序03I2C总线时序编程04FT5206触摸屏驱动示例0101I2C总线介绍总线概述总线物理拓扑结构总线通信原理总线特征I2C总线与UART比较I2C总线介绍 总线概述01I2C 又称IIC,即Inter-Integrated Circuit(内部集成电路)。I2C总线是PHLIPS公司推出的一种串行同步通信总线。I2C总线有两根双向信号线,一根数据线SDA,另一根时钟线SCL。简介I2C 总线应用非常广泛,尤其在传感器类芯片中,如温度湿度传感器、光
2、强传感器,触摸屏传感器、加速度传感器。应用I2C总线介绍 总线物理拓扑结构01拓普结构主从结构,一条总线并联多个设备,任何一时刻,只能有一个是主机,其他是从机。总线上每个从机都有一个惟一的设备地址,用于供主机寻址。通信只能由主机发起,主机对总线具备有绝对的控制权。IIC设备的接口内部是开漏输出,无法输出高电平,在硬件设计中,SDA,SCL线必须有上拉电阻,通过上拉电阻实现高电平输出,上拉电阻一般在4.7K100K之间。I2C总线介绍 总线通信原理01数据传输主机发送起始信号发送从机地址,并指明操作类型(读或写)方向位:1表示读数据,0表示写数据。等待从机发送应答信号。传输数据:如果是写操作则主
3、机发送数据,如果读操作,则主机接收数据。应答周期:如果是写操作,则从机发送应答,如果是读操作,则主机发送应答。数据传送完毕后,主机发送停止总线信号。数值传递时先发送数据高位,再发送数据低位。传输说明I2C总线介绍 总线特征01通信只能由主机主动发起,主机对通信过程具备绝对的控制权。I2C总线数据传输速率:标准模式可达 100kbit/s(所有器件都支持);快速模式可达 400kbit/s(大部分器件支持)高速模式可达 3.4Mbit/s(少量新型器件支持)数据传输只能以字节(8位)为单位进行数据传输,先发送高位,再发送低位。同一时刻只能有一个设备是主设备,其他都是从设备,从设备地址是唯一的。通
4、常MCU设备作为主设备,其他作为从设备(有多个MCU时总线会自动仲裁)。I2C设备地址有两种:7位地址和10位地址,其中7位地址的器件较常见。同一条总线上可以同时有7位地址设备和10位地址设备共存。重要特征I2C总线介绍 总线特征01设备地址组成:由固化地址和可编程地址构成:固化地址:芯片出厂就固定了;可编程地址:由使用都硬件设计或软件配置决定的。示例:At24C02芯片设备地址:地址7位:高4位是固定为1010,这部分地址称为固化地址 低3位是:A2A0,可编程地址,由硬件设计决定一条总线上可挂载的设备数量:理论上,只要能保证每个从设备地址惟一,7位地址模式可以挂载127个设备,10位地址挂
5、载1023个设备(0不能用于设备地址),但是I2C总线上可挂接的设备数量受总线最大电容 400pF 限制。思考:一条总线可以接多少个AT24C02?8个!重要特征I2C总线介绍 I2C总线与UART比较01特征对比名称IIC总线UART通信方式同步、半双工异步、全双工数据位长度8位58位通信速度标准三种模式(实际上也要可以是极限速度下任何一个速度)很多种(但是一般都有固定的速度)结构主从设备通信不分主设备与从设备0202I2C总线通信时序起始和停止条件应答和非应答信号三种通信过程时序波形I2C总线通信时序 起始和停止条件时序02空闲状态:不进行数据传输时SDA和SCL状态,都维持高电平。起始条
6、件:SCL为高电平期间,SDA线由高到低电平,SCL线为低电平。停止条件:SCL为高电平期间,SDA线由低电平到高电平。时序描述时序波形I2C总线通信时序 应答和非应答信号02起始条件+8位数据(高位在前)+应答/非应答信号+停止条件。数据位:SCL线为低电平准备数据,SCL线为高电平采集数据。应答/非应答信号:在每传输1字节后,跟随一个应答位:SCL高电平期间,低电平表示应答信号,高电平表示非应答信号。应答信号/非应答信号是由接收方发出,发送方检测。时序描述主机写操作I2C总线通信时序 三种通信过程02主机:1)发送起始条件 2)发送7位地址数据(高位在前)+写方向;3)检测从机发的 应答/
7、非应答信号;4)有应答时开始发送1字节数据;5)检测从机发的应答/非应答信号;6)循环执行4,5两步 发送数据;7)发送停止条件,终止本次通信时序描述主机读操作I2C总线通信时序 三种通信过程02主机:1)发送起始条件 2)发送7位地址数据(高位在前)+读方向;3)检测从机发的 应答/非应答信号;4)有应答时开始接收1字节数据;5)发应答信号给从机(不需要更多数据时发送非答应信号);6)循环执行4,5两步 接收数据;7)发送停止条件,终止本次通信时序描述主机读写切换I2C总线通信时序 三种通信过程02IIC总线允许读/写过程中不停止总线而直接重新发送起始条件,来切换读/写操作,或重启总线重复原
8、来的读写操作。时序描述0303模拟I2C总线时序编程初始化函数起始条件实现停止条件实现发送应答信号实现接收应答信号实现发送一个字节数据接收一个字节数据void IIC_GpioInit(void)RCC-AHB1ENR|=(1 MODER&=(3 MODER|=(1 OTYPER|=(1 MODER&=(3 MODER|=(1 OTYPER|=(1 PUPDR&=(3 PUPDR|=(1 BSRRL =1BSRRH=1BSRRL =1BSRRH=1IDR&19)代码实现宏定义GPIO配置时序波形void IIC_Start(void)SCL_H();/刚开始,IIC总线为高电平 SDA_H()
9、;/刚开始,IIC总线为高电平 iic_delay();/起始信号的建立时间 SDA_L();/产生下降沿 iic_delay();/起始信号的保持时间 SCL_L();/为后面数据传输做准备相关操作模拟I2C总线时序编程 起始条件实现03SCL_H():拉高SCL线的宏调用SCL_L():是拉低SCL线的宏调用SDA_H():是拉高SDA线的宏调用SDA_L():是拉低DA线的宏调用iic_delay:是满足I2C时延要求的函数代码实现时序波形void IIC_Stop(void)SDA_L();/拉低SDA线 SCL_H();/时钟线准备为 高电平 iic_delay();/停止信号的建立
10、时间。SDA_H();/拉高数据线,产生上升沿。iic_delay();/延时相关操作模拟I2C总线时序编程 停止条件实现03SCL_H():拉高SCL线的宏调用SCL_L():是拉低SCL线的宏调用SDA_H():是拉高SDA线的宏调用SDA_L():是拉低DA线的宏调用iic_delay:是满足I2C时延要求的函数代码实现时序波形/ack 0:表示应答;1:表示非应答void IIC_send_ack(u8 ack)ack?SDA_H():SDA_L();iic_delay();/延时 SCL_H();/稳定数据线数据 iic_delay();/延时 SCL_L();/拉低模拟I2C总线时
11、序编程 发送应答信号实现03相关操作SCL_H():拉高SCL线的宏调用SCL_L():是拉低SCL线的宏调用SDA_H():是拉高SDA线的宏调用SDA_L():是拉低DA线的宏调用iic_delay:是满足I2C时延要求的函数时序波形/*备注:返回:0表示应答,1表示非应答*/u8 IIC_check_ack(void)u8 is_ack=0;SCL_L();/让从设备准备数据 SDA_H();/释放SDA线的控制权 iic_delay();/延时 SCL_H();/稳定SDA线数据 is_ack=RD_SDA();/读数据 iic_delay();SCL_L();/完整周期 return
12、 is_ack;/返回应答/非应答模拟I2C总线时序编程 接收应(非)答信号实现03相关操作SCL_H():拉高SCL线的宏调用SCL_L():是拉低SCL线的宏调用SDA_H():是拉高SDA线的宏调用SDA_L():是拉低DA线的宏调用RD_SDA():读取SDA线电平状态宏调用iic_delay:是满足I2C时延要求的延时函数时序波形/返回:0应答,发送成功;1非应答,发送失败u8 IIC_WriteByte(u8 data)u8 i,ack;for(i=0;i 8;i+)/发送数据0或1到SDA线上 (data&0 x80)?SDA_H():SDA_L();iic_delay();/延
13、时 SCL_H();/稳定数据 iic_delay();/延时 SCL_L();/准备发下一位数据。data=1;/移动下一位待发数据 ack=IIC_check_ack();/检测应答信号 return ack;模拟I2C总线时序编程 发送一个字节数据03相关操作SCL_H():拉高SCL线的宏调用SCL_L():是拉低SCL线的宏调用SDA_H():是拉高SDA线的宏调用SDA_L():是拉低DA线的宏调用iic_delay:是满足I2C时延要求的延时函数代码实现要点:时序波形/接收一字节数据,并且发送应答/非应答/参数:ack为1表示发送非应答,为0发送应答/返回:接收到的数据u8 II
14、C_ReadByte(u8 ack)u8 i,buf=0;SDA_H();/主机释放SDA数据线 for(i=0;i 8;i+)iic_delay();/延时 SCL_H();buf=1;/移出最低位 /读取1bit数据,保存到最低位 buf|=RD_SDA();iic_delay();/延时 SCL_L();/准备接收下一位数据 IIC_send_ack(ack);return buf;模拟I2C总线时序编程 接收一个字节数据03相关操作SCL_H():拉高SCL线的宏调用SCL_L():是拉低SCL线的宏调用SDA_H():是拉高SDA线的宏调用SDA_L():是拉低DA线的宏调用iic_
15、delay:是满足I2C时延要求的延时函数代码实现0404FT5206触摸屏驱动示例(可选内容:学员根据兴趣选择性学习)芯片介绍读时序分析重要寄存器硬件原理图分析软件设计内部框架图FT5206触摸屏驱动示例芯片介绍04AFE:触摸面板接口电路,连接电容触摸屏面板,用于做触点数据采集。外 部 接 口 电 路:I2C,SPI,UART,GPIO,INT,WAKE,/RSTMCU内 核:内 置 一 个8051单片机电路核心EAC:电源,时钟,功耗管理的电路 主机接口图FT5206触摸屏驱动示例芯片介绍04详细芯片手册:FT5x06_DS.pdfFT5206-书签版.pdfFT5206-书签版.pdf
16、设备地址FT5x06 支持 I2C or SPI 接口设备地址:由I2CCON控制器内容决定,A6:4:固定011,其中A3:0 是由当前运行的单片机程序决定,本实验箱使用的FT5X06芯片设备地址是 0X38,(二进制:011 1000),读数据发出的地址字节是0 x71(二进制:0111 0001),写数据发出的地址字节是 0 x70(二进制:0111 0000)。FT5206触摸屏驱动示例芯片介绍04FT5206触摸屏驱动示例芯片介绍04复位芯片芯片上电需要对它进行复位,保证芯片内部逻辑电平是正确的,复位时序很简单,只需要拉低REST引用一段时间,然后重新拉高即可。FT5206触摸屏驱动
17、示例芯片介绍04读取据方法1FT5206触摸屏驱动示例芯片介绍04读取据方法1FT5206触摸屏驱动示例读写序分析04写数据时序主机与触摸屏芯片通信流程:起始信号从机地址+写方向检测应答发送寄存器地址检测应答循环 发送数据检测应答 发送停止信号FT5206触摸屏驱动示例读写序分析04读取数据时序主机与触摸屏芯片通信流程:1.起始信号从机地址+写方向检测应答 发送寄存器地址检测应答 发送停止信号;2.起始信号从机地址+读方向检测应答 循环读取数据地址发送应答 发送停止信号;寄存器说明寄存器名称:工作模式寄存器(0 x00)寄存器作用:该寄存器用于设置FT5206的工作模式。MODE2:0用于控制
18、FT5206的工作模式,一般设置为:000b,表示正常工作模式。FT5206触摸屏驱动示例 重要寄存器04寄存器说明寄存器名称:中断状态控制寄存器(0 xA4)寄存器作用:该寄存器用于设置FT5206的工作模式。MODE2:0用于控制FT5206的工作模式,一般设置为:000b,表示正常工作模式。寄存器说明寄存器名称:有效触摸门限控制寄存器(0X80)寄存器作用:该寄存器用于设置FT5206的有效触摸门限值。该寄存器8位数据都有效,用于设置FT5206有效触摸的门限值,计算公式为:有效触摸门限值=T7:0*4T7:0所设置的值越小,触摸越灵敏,默认状态下T7:0=70。FT5206触摸屏驱动示
19、例 重要寄存器04寄存器说明寄存器名称:激活周期控制寄存器(0X88)寄存器作用:该寄存器用于设置FT5206的激活周期。该寄存器只有低4位有效,用于设置FT5206的激活周期。P3:0的设置范围为:314,不过建议一般不要小于12。寄存器说明寄存器名称:触摸状态寄存器(0X02)寄存器作用:寄存器用于读取FT5206的触摸状态。该寄存器只有低4位有效,TD3:0的取值范围是:15,表示有多少个有效触摸点。我们可以根据这个寄存器的值来判断有效触摸点的个数,然后通过 0X03/0X09/0X0F/0X15和0X1B等寄存器来读取触摸坐标数据。FT5206触摸屏驱动示例 重要寄存器04寄存器说明寄
20、存器名称:触摸数据寄存器(0X030X1E)寄 存 器 作 用:这 里 总 共 包 括 20个 寄 存 器,他 们 是:0X030X06、0X090X0C、0X0F0X12、0X150X18、0X1B0X1E。每4个寄存器为1组,表示一个触摸点的坐标数据,比如0X030X06,则表示触摸点1的坐标数据,其他的以此类推。FT5206触摸屏驱动示例 重要寄存器04Event FLAG:用于表示触摸状态:00按下;01松开;10持续触摸;11保留。一般我们只需要判断该状态为10即可,即持续触摸状态,就可以稳定的读取触摸坐标数据了。Touch ID:触点ID号,裸机中一般用不到,在Linux系统中使用
21、时比较有用,用于实现触点追踪功能。X11:88|X7:0:是X坐标数据,这些数据以12位的形式表示,分两个寄存器存储。Y11:88|Y7:0:是Y坐标数据,这些数据以12位的形式表示,分两个寄存器存储。原理图说明查看 STM32F407物联网开发平台-智能网关原理图.pdf 文档,触摸屏硬件设置原理图如下所示:原理图分析物联网实验箱主控与FT5206之间的通讯接口采用IIC接口模式,FT5206的七位器件地址为0X38(写地址:0X70;读地址:0X71),该驱动IC与STM32的连接仅需要4根线:SDA、SCL、RST和INT,SDA和SCL是IIC通信用的,RST是复位脚(低电平有效),I
22、NT是中断输出信号FT5206触摸屏驱动示例 硬件原理图分析04软件设计思路触摸屏看起来很复杂,但是如果只是想获得当前触摸坐标数值,其实还是很简单的。1.上电复位芯片2.发命令配置芯片:进入正常操作模式3.发命令设置数据读取方式(如设置为查询模式或中断模式)4.发命令设置触摸屏阈值和激活周期(可选择,不配置有默认值)5.检测INT引脚状态,低电平则按时序读取数据触摸屏状态寄存器和数据寄存器6.处理数据:获得触屏状态和坐标数据后,根据需要使用数据,如果控制LED开关.FT5206触摸屏驱动示例 软件设计04引脚初始化FT5206触摸屏驱动示例 软件设计04复位芯片写寄存器函数FT5206触摸屏驱
23、动示例 软件设计04写寄存器函数FT5206触摸屏驱动示例 软件设计04扫描函数FT5206触摸屏驱动示例 软件设计04综合测试函数FT5206触摸屏驱动示例 软件设计04完整工程测试代码请看配套示例代码IIC-驱动FT5206触摸屏实验把示例代码编译下载到信盈达物联网实验箱终控网关上,运行,可以同时按下3个手指在LCD屏上滑动,LCD屏会分别使用红绿蓝三种颜色描绘三个手指的滑动轨迹。0505I2C总线控制与应用作业作业概述作业任务描述作业概述根据本章内容讲解,编写代码,巩固IIC时序的理解及应用。作业任务1.基础作业:使用模拟时序方式编写IIC的发送字节,接收字节函数;2.使用模块时序实现以下AT24C02 字节写时序函数3.提高作业:根据信实验箱硬件原理图,结合LCD显示和LED控制实验,实现在LCD屏上显示开/关灯控制按键,点击触摸屏按键控制LED灯。触摸屏程序见配套示例:IIC-驱动FT5206触摸屏实验I2C总线控制与应用作业0506致谢ACKNOWLEDGEMENTS感谢聆听,如有不足之处敬请指出,欢迎提出您的宝贵建议!致谢