ARM Cortex-A9嵌入式微处理器体系结构与接口技术 课件 第11章 I2C总线协议_第1页
ARM Cortex-A9嵌入式微处理器体系结构与接口技术 课件 第11章 I2C总线协议_第2页
ARM Cortex-A9嵌入式微处理器体系结构与接口技术 课件 第11章 I2C总线协议_第3页
ARM Cortex-A9嵌入式微处理器体系结构与接口技术 课件 第11章 I2C总线协议_第4页
ARM Cortex-A9嵌入式微处理器体系结构与接口技术 课件 第11章 I2C总线协议_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第11章I2C总线协议思维导图2学习目标理解Exynos4412处理器的看门狗工作原理,包括其核心机制(通过递减计数器监控系统运行状态)、定时周期设置方法(如分频器配置与计数值关系),以及看门狗在系统复位或中断触发中的作用。3技能目标41.掌握Exynos4412看门狗寄存器的配置,包括预分频因子、分频器选择、中断/复位使能等参数设置;2.能够通过编程实现看门狗的初始化、喂狗操作及中断处理;3.熟悉看门狗定时器在系统监控中的应用。CONTENTS目录11.1I2C总线协议简介11.2I2C总线协议内容11.3I2C控制器详解11.4I2C控制器操作流程511.5I2C应用实例611.1

I2C总线协议简介I2C(Inter-IntegratedCircuit)总线(也称IIC或I²C)是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备,是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。Exynos4412芯片包含8个通用I2C接口控制器。I2C主要特点:●

只要求两条总线线路:一条串行数据线SDA、一条串行时钟线SCL。●

每个连接到总线的器件都可以通过唯一的地址。●

真正的多主机总线,支持冲突检测和仲裁,防止数据被破坏。●

串行的8位双向数据传输位。●

速率在标准模式下可达100Kbit/s、快速模式下可达400Kbit/s、高速模式下可达3.4Mbit/s。●

片上滤波器可以滤去总线数据线上的毛刺波保证数据完整。●

连接到相同总线的IC数量受到总线最大负载电容(400pF)限制。11.1

I2C总线协议简介811.2

I2C总线协议内容1.I2C总线引脚定义

每个I2C设备有2个引脚供通信连接使用。

I2C的2个引脚是:SDA(I2C数据引脚)SCL(I2C时钟引脚)2.I2C总线物理连接

I2C总线物理连接如图11-1所示,SDA和SCL连接线上连有两个上拉电阻,所有的I2C设备并联在总线上。图11-1I2C总线物理连接3.I2C总线术语术语描述发送器发送数据到总线的器件接收器从总线接收数据的器件主机初始化发送产生时钟信号和终止发送的器件从机被主机寻址的器件多主机同时有多于一个主机尝试控制总线但不破坏报文仲裁是一个在有多个主机同时尝试控制总线但只允许其中一个控制总线并使报文不被破坏的过程同步两个或多个器件同步时钟信号的过程11.2

I2C总线协议内容

4.I2C总线信号类型

I2C总线在数据传输过程中有三种信号,它们分别为:开始信号(S)、结束信号(P)和应答信号(ACK),如图11-2所示。开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。应答信号:接收设备在接收到8bit数据后,在第9个时钟周期,向发送设备发送低电平,表示成功收到数据。11.2

I2C总线协议内容图11-2I2C总线信号

如图11-2所示,当I2C总线是空闲的,SDA和SCL线都是高电平。I2C数据通信由主机发送开始信号(S)起始,到主机发送停止信号(P)结束。在开始信号和结束信号之间以字节为单位传输数据,每个字节后必须跟一个响应位,每次传输可以发送的字节数量不受限制。数据是一位一位地进行传输,先传输高位(MSB),再传输低位(LSB)。5.I2C总线时序11.2

I2C总线协议内容图11-2I2C总线信号发送器作为数据的发送方,接收器作为数据的接收方。根据SCL上的时钟信号进行数据传输同步,保证数据有效传输。SCL时钟为低电平周期时,发送器发送数据,SDA数据线上数据可以发生变化,SCL时钟为高电平周期时接收器接收数据,SDA数据线上数据必须保持稳定,如图11-3所示。5.I2C总线时序11.2

I2C总线协议内容图11-3I2C信号时序为了完成一个字节的发送操作,接收器必须将一个ACK信号发送到发送器。ACK信号在SCL线的第9个时钟周期产生。发送完一个字节后,第9个时钟周期发送器释放对SDA数据线的控制,SDA数据线由于上拉电阻的作用恢复到高电平,如图11-4所示。

接收器如果接收数据成功,将SDA数据线置为低电平作为ACK信号。发送器收到ACK信号,继续发送数据;接收器如果接收数据失败,则在第9个时钟周期不动作,SDA数据线一直为高电平。发送器没有接收到ACK信号,就会发出停止信号停止本次通信或发送开始信号,重新发送。6.I2C总线ACK信号11.2

I2C总线协议内容图11-4I2C总线ACK信号

I2C设备用一个7位或10位的数字,唯一标识自己。方便主机寻找自己,建立I2C通信。I2C设备地址由固定部分和可编程部分构成。这样I2C总线就可以支持一个I2C总线上挂载多个同样的器件,而地址不同。I2C地址的可编程部分最大数量就是可以连接到I2C总线上相同器件的数量。

一般可编程部分的值,由特定引脚的电器连接决定。例如,I2C器件用7位地址来标识自己,有4个固定的和3个可编程的地址位,那么相同的总线上共可以连接8个相同的器件。7.I2C总线设备地址11.2

I2C总线协议内容

I2C总线的寻址过程是通常在起始信号后的第一个字节决定了主机选择哪一个从机。例外的情况是可以寻址所有器件的广播地址,使用这个地址时理论上所有器件都会发出一个响应,但是也可以使器件忽略这个地址。第一个字节的头7位组成了从机地址,第8位它决定了数据传输的方向,第一个字节的最低位是0表示主机会写信息到被选中的从机;1表示主机会向从机读信息,如图11-5所示。10位寻址和7位寻址兼容,而且可以结合使用。10位寻址过程是起始信号后的头两个字节,通常决定了主机要寻址哪个从机。10位从机地址由在起始条件信号或重复起始信号后的头两个字节组成。第一个字节的头7位是11110XX的组合,其中最后两位XX是10位地址的两个最高位(MSB)。第一个字节的第8位是R/W位,决定了数据传输的方向,第一个字节的最低位是0,表示主机会写信息到被选中的从机:1表示主机会向从机读信息,如图11-6所示。8.I2C总线寻址11.2

I2C总线协议内容图11-5I2C总线地址图11-6I2C总线10位地址10位寻址7位寻址数据传输方向0:主写从1:主读从1611.3

I2C控制器详解11.3.1I2C总线协议简介Exynos4412可以通过I2C串行总线接口和各种外设进行数据传输。Exynos4412有9个I2C总线控制器,其中8个是通用的I2C控制器,另1个I2C控制器是专门为HDMI提供的。I2C控制器的特性:●9个多主从I2C总线接口(8个通用通道,1个高清多媒体接口(HDMI)专用通道)●7位寻址模式

●串行、8位定向、双向数据传输

●标准模式下支持最高100kbit/s的传输速率

●快速模式下支持最高400kbit/s的传输速率

●支持主设备发送、接收、从设备发送和接收操作

●支持中断或轮询事件

1711.3

I2C控制器详解11.3.1I2C总线协议简介

如图11-7所示,Exynos4412控制器通过读写寄存器来实现I2C通信。I2CCON寄存器和I2CSTAT寄存器用来配置、控制I2C控制器,并显示I2C控制器的状态。I2CDS寄存器是I2C数据移位寄存器,如果要发送数据,就向I2CDS寄存器内写入数值,如果接收数据,就读取I2CDS寄存器。I2CADD寄存器用于Exynos4412作为从机时的地址。图11-7I2C控制器框图I2C总线控制器寄存器:(1)I2C传输配置寄存器(I2CCONn,n=0-7)(2)I2C控制状态寄存器(I2CSTATn,n=0-7)(3)I2C地址寄存器(I2CADDn,n=0-7)(4)I2C接收发送数据寄存器(I2CDSn,n=0-7)(5)I2C总线传输配置寄存器(I2CLCn,n=0-7)11.3

I2C控制器详解11.3.2I2C总线控制器寄存器详解1.I2C传输配置寄存器(I2CCONn,n=0-7)I2CCONn寄存器用来对I2C控制器进行使能和时钟配置,如ACK使能、时钟设置、中断使能、中断标志位等。11.3

I2C控制器详解11.3.2I2C总线控制器寄存器详解2.I2C控制状态寄存器(I2CSTATn,n=0-7)

I2CSTATn寄存器用来对I2C控制器控制,如工作模式、输出使能、开始和停止信号的产生等。同时显示I2C控制器相关状态。11.3

I2C控制器详解11.3.2I2C总线控制器寄存器详解3.I2C地址寄存器(I2CADDn,n=0-7)

寄存器I2CADDn用于设置本机是从机时的7位地址。11.3

I2C控制器详解11.3.2I2C总线控制器寄存器详解4.I2C接收发送数据寄存器(I2CDSn,n=0-7)

寄存器I2CDSn用于I2C总线发送/接收操作的8位数据移位。11.3

I2C控制器详解11.3.2I2C总线控制器寄存器详解5.I2C总线传输配置寄存器(I2CLCn,n=0-7)

寄存器I2CLCn用于使能I2C总线滤波和选择SDA数据线延时长度。11.3

I2C控制器详解11.3.2I2C总线控制器寄存器详解Exynos4412微处理器中I2C控制器的操作:4种不同的工作模式(主机发送器、主机接收器、从机发送器、从机接收器)。结合I2C控制器寄存器详解,逐步操作即可。

如图11-8所示,为Exynos4412的I2C控制器的主机发送器工作模式,以其为例详细说明操作流程。其他工作模式操作方式类似。11.4

I2C控制器操作流程(1)配置主机发送模式设置对应的I2C引脚的功能为SDA和SCL。设置I2CCON[6]配置I2C发送时钟和中断使能。设置I2C发送使能,I2CSTAT[4]=0b1。(2)将要通信的I2C从机的地址和读写位写入I2CDS寄存器。(3)将0xF0写入I2CSTAT寄存器。I2CSTAT[7:6]=0b11设置主机发送模式I2CSTAT[5]=0b1写1,发送开始信号I2CSTAT[4]=0b1使能I2C串口发送(4)I2C控制器发出开始信号后,在第(2)步骤中写入的I2CDS寄存器地址自动发送到SDA总线上,用来寻找从机。(5)在ACK周期后,I2C控制器发生中断,I2CCON[4]被自动置1,I2C传输暂停。(6)I2C数据通信是否结束,结束跳转到(10),没有结束跳转到(7)。

11.4

I2C控制器操作流程(7)将要传输的数据写入I2CDS寄存器准备发送。(8)清除中断标志位,通过向I2CCON[4]中写0实现。(9)清除中断标志位后,I2CDS寄存器内的数据就开始发送到SDA总线上。发送完成后,跳转到(5)。(10)将0xD0写入I2CSTAT寄存器。

I2CSTAT[7:6]=0b11设置主机发送模式 I2CSTAT[5]=0b0写0,发送停止信号 I2CSTAT[4]=0b1,使能I2C发送和接收(11)清除中断标志位,通过向I2CCON[4]中写0实现。(12)延时等待一段时间,使得停止信号生效,I2C通信结束。11.4

I2C控制器操作流程2711.5

I2C应用实例11.5.1I2C实验1.I2C实验目的掌握I2C串行数据通信协议的使用方法;掌握EEPROM器件的读写访问方法;掌握Exynos4412处理器的I2C控制器的使用。2811.5

I2C应用实例11.5.1I2C实验2.I2C实验原理结合I2C理论基础,用I2C来操作三轴加速度传感器/陀螺仪芯片MPU6060。主要有以下特性:

带有可编程全量程范围的数字输出三轴加速度计,范围可设为±2g、±4g、±8g及±16g

内置的16位模数转换器允许同时采样加速度计数据,无需外部多路复用器

加速度计正常工作电流为500微安

低功耗模式,加速度计电流消耗为:1.25Hz时10微安,5Hz时20微安,20Hz时60微安,40Hz时110微安

具备方向检测与信号输出功能

支持触摸检测功能

用户可编程中断功能

高G值中断功能

用户自测功能2911.5

I2C应用实例11.5.1I2C实验如图11-9所示为MPU6050系列的器件地址组成方式。ADDRESSAD0=0AD0=1

11010001101001

图11-9MPU6050系列的器件地址组成方式

其中,AD0是MPU6050的第9引脚。如果AD0接地,地址为:1101000,如果拉高,地址为:1101001。如图11-10所示为MPU6050的电路原理图。可以看到SDA/SCL被接到了Exynos4412的I2C控制器上。图11-10MPU6050

原理图3011.5

I2C应用实例11.5.1I2C实验(2)随机地址读时序(RANDOMREAD)如图11-12所示。

字节读时序依次要发送器件地址(包括R/W用于读/写,此时为0,表示写方向)、器件片内数据要读出数据的地址、停止信号、再次写入开始信号、器件地址(包括R/W用于读/写,此时为1,表示读方向)、读出8位目标数据。图11-11MPU6050字节读时序3111.5

I2C应用实例11.5.2程序设计与代码详解编写程序,实现对重力感应芯片MPU6050的Z轴坐标读操作。1.寄存器设置(1)配置GPIO为I2C模式;(2)写I2C设备地址;(3)写I2C页地址;(4)读/写I2C芯片MPU6050的Z轴寄存器寄存器数据。3211.5

I2C应用实例11.5.2程序设计与代码详解2.程序编写#include"exynos_4412.h"#include"uart.h"#define SMPLRT_DIV 0x19 #define CONFIG 0x1A #define GYRO_CONFIG 0x1B #define ACCEL_CONFIG 0x1C #define ACCEL_XOUT_H 0x3B#define ACCEL_XOUT_L 0x3C#define ACCEL_YOUT_H 0x3D#define ACCEL_YOUT_L 0x3E#define ACCEL_ZOUT_H 0x3F#define ACCEL_ZOUT_L 0x40#define TEMP_OUT_H 0x41#define TEMP_OUT_L 0x42#define GYRO_XOUT_H 0x43#define GYRO_XOUT_L 0x44#define GYRO_YOUT_H 0x45#define GYRO_YOUT_L 0x46#define GYRO_ZOUT_H 0x47#define GYRO_ZOUT_L 0x48#define PWR_MGMT_1 0x6B #define WHO_AM_I 0x75 #define SlaveAddress 0xD0 /*****************iicwriteabyteprogrambody***************/voidiic_write(unsignedcharslave_addr,unsignedcharaddr,unsignedchardata){ I2C5.I2CDS=slave_addr; I2C5.I2CCON|=(1<<7)|(1<<6)|(1<<5);/*ENABLEACKBIT,PRESCALER:512,,ENABLERX/TX*/ I2C5.I2CSTAT|=(0x3<<6)|(1<<5)|(1<<4);/*MasterTransmode,START,ENABLERX/TX,*/ while(!(I2C5.I2CCON&(1<<4))); I2C5.I2CDS=addr; I2C5.I2CCON&=~(1<<4); //Clearpendingbittoresume. while(!(I2C5.I2CCON&(1<<4))); I2C5.I2CDS=data; //Data I2C5.I2CCON&=~(1<<4); //Clearpendingbittoresume. while(!(I2C5.I2CCON&(1<<4))); I2C5.I2CSTAT=0xD0;//stop I2C5.I2CCON&=~(1<<4); mydelay_ms(10);}3311.5

I2C应用实例11.5.2程序设计与代码详解2.程序编写/*****************iicreadabyteprogrambody*****************/voidiic_read(unsignedcharslave_addr,unsignedcharaddr,unsignedchar*data){ I2C5.I2CDS=slave_addr; I2C5.I2CCON|=(1<<7)|(1<<6)|(1<<5);/*ENABLEACKBIT,PRESCALER:512,,ENABLERX/TX*/ I2C5.I2CSTAT|=(0x3<<6)|(1<<5)|(1<<4);/*MasterTransmode,START,ENABLERX/TX,*/ while(!(I2C5.I2CCON&(1<<4))); I2C5.I2CDS=addr; I2C5.I2CCON&=~(1<<4); //Clearpendingbittoresume. while(!(I2C5.I2CCON&(1<<4))); I2C5.I2CSTAT=0xD0;//stop I2C5.I2CDS=slave_addr|0x01; //Read I2C5.I2CCON|=(1<<7)|(1<<6)|(1<<5);/*ENABLEACKBIT,PRESCALER:512,,ENABLERX/TX*/ I2C5.I2CSTAT|=(2<<6)|(1<<5)|(1<<4);/*Masterreceivemode,START,ENABLERX/TX,*/ while(!(I2C5.I2CCON&(1<<4))); I2C5.I2CCON&=(~(1<<7))|(~(1<<4));/*Resumetheoperation&noack*/ while(!(I2C5.I2CCON&(1<<4))); I2C5.I2CSTAT=0x90; I2C5.I2CCON&=~(1<<4); /*cleaninterruptpendingbit*/ *data=I2C5.I2CDS; mydelay_ms(10);}3411.5

I2C应用实例11.5.2程序设计与代码详解2.程序编写/********************MPU6050_Initprogrambody****************/voidMPU6050_Init(){ iic_write(SlaveAddress,PWR_MGMT_1,0x00); iic_write(SlaveAddress,SMPLRT_DIV,0x07); iic_write(SlaveAddress,CONFIG,0x06); iic_write(SlaveAddress,GYRO_CONFIG,0x18); iic_write(SlaveAddress,ACCEL_CONFIG,0x01);}/***************getMPU6050dataprogrambody*************/intget_data(unsignedcharaddr){ chardata_h,data_l; iic_read(SlaveAddress,addr,&data_h); iic_read(SlaveAddress,addr+1,&data_l); return(data_h<<8)|data_l;}3511.5

I2C应用实例11.5.2程序设计与代码详解2.程序编写/*---------------------------------MAINFUNCTION------------------------------*/intmain(void){ intdata; unsignedcharzvalue; GPX2.CON=0x1<<28; GPB.CON=(GPB.CON&~(0xF<<12))|0x3<<12;//GPBCON[3],I2C_5_SCL GPB.CON=(GPB.CON&~

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论