7. 内部集成电路总线接口I²C

7.1 I²C结构及寄存器说明

7.2 I²C设计实例

7.2.1   24C32A简介

7.2.2   24C32A程序设计

7.2.3     24C32A程序应用

7.1 I²C结构及寄存器说明

  • 内部集成电路总线接口I²C是通信控制领域广泛采用的一种总线标准,用于连接微控制器和外围设备,连接在总线上的每个设备都有唯一的7/10位地址
  • I²C使用一根双向串行数据线SDA和一根双向串行时钟线SCL实现主/从设备间的多主串行通信
  • SDA和SCL的时序关系

  • 起始条件是在SCL高电平时SDA从高电平变为低电平,停止条件是在SCL高电平时SDA从低电平变为高电平
  • SDA上的数据必须在SCL高电平时保持稳定,低电平时可以改变。发送器发送数据后释放SDA(高电平),接收器接收数据后必须在SCL低电平时将SDA变为低电平,并在SCL高电平时保持稳定,作为对发送器的应答
  • I²C由数据和时钟两部分组成
  • 数据部分包括数据寄存器、数据移位寄存器和数据控制等
  • 时钟部分包括控制状态寄存器、时钟控制寄存器、控制逻辑电路和时钟控制等,控制状态寄存器通过控制逻辑电路等控制时钟的行为

  • I²C使用的GPIO引脚

  • I²C通过9个寄存器进行操作

7.2 I²C设计实例

7.2.1 24C32A简介

  • 24C32A是32Kbit串行EEPROM,内部组织为4KByte*8bit支持32Byte页写,写周期内部定时(小于5ms),2线串行接口,可实现8个器件共用1个接口,工作电压1.7~5.5V
  • 8引脚封装

  • 24C32A的字节读写格式

7.2.2 24C32A程序设计

  • I²C初始化子程序
//I²C初始化子程序void I2c1_Init(void)
{RCC->APB2ENR |= 1<<3;                 //开启GPIOB时钟RCC->APB1ENR |= 1<<21;                //开启I²C1时钟GPIOB->CRL |= 0xff000000;             //PB.06(SCL)和PB.07(SDA)复用开漏输出I2C1->CR2 = 8 ;                     //时钟频率:8MHzI2C1->CCR |= 1<<15;                 //快速模式I2C1->CCR |= 1<<14;                 //占空比9/25I2C1->CCR |= 1 ;                    //分频系数:8MHz/(25*320KHz)=1I2C1->TRISE = 3 ;                   //上升时间:int(300ns*8MHz+1)I2C1->CR1 |= 1 ;                    //允许I²C1
}
  • I²C写子程序
//I²C写子程序(器件地址:000)
//入口参数:addr-数据地址,data-数据void I2c1_Write(short addr,char data)
{short temp = addr>>8;//产生起始条件I2C1->CR1 |= 1<<8;                 //START=1while(!(I2C1->SR1&1));             //等待SB=1//发送控制字节I2C1->DR = 0xa0;                   //7位地址,写操作while(!(I2C1->SR1&2));             //等待ADDR=1I2C1->SR2;                         //清除事件//发送数据地址高4位while(!(I2C1->SR1&1<<7));          //等待TXE=1I2C1->DR = temp;                   //发送数据地址高4位//发送数据地址高8位while(!(I2C1->SR1&1<<7));         //等待TXE=1I2C1->DR = addr;                  //发送数据地址低8位//发送数据字节while(!(I2C1->SR1&1<<7));         //等待TXE=1I2C1->DR = data;                  //发送数据字节while(!(I2C1->SR1&1<<2));         //等待BTF=1//产生停止条件I2C1->CR1 |= 1<<9;                 //STOP=1for(temp=0;temp<<5000;temp++);     //延时约5ms
}
  • I²C读子程序
//I²C读子程序(器件地址:000)
//入口参数:addr-数据地址void I2c1_Read(short addr)
{char temp = addr>>8;//产生起始条件I2C1->CR1 |= 1<<8;             //START=1while(!(I2C1->SR1&1));         //等待SB=1//发送控制字节I2C1->DR = 0xa0;               //7位地址,写操作while(!(I2C1->SR1&2));         //等待ADDR=1I2C1->SR2;                     //清除事件//发送数据地址高4位while(!(I2C1->SR1&1<<7));      //等待TXE=1I2C1->DR = temp;               //发送数据地址高4位for(temp=0;temp<50;temp++);    //延时//发送数据地址高8位while(!(I2C1->SR1&1<<7));      //等待TXE=1I2C1->DR = addr;               //发送数据地址高8位//重新产生起始条件I2C1->CR1 |= 1<<0;             //START=1while(!(I2C1->SR1 & 1));       //等待SB=1//发送控制字节I2C1->DR = 0xa1;               //7位地址,读操作while(!(I2C1->SR1 & 2 ));      //等待ADDR=1I2C1->SR2;                     //清除事件//接收数据字节while(!(I2C1->SR1 & 1<<6));     //等待RxNE=1temp = I2C1->DR;                 //接收数据字节//产生停止条件I2C1->CR1 |= 1<<9;             //STOP=1return temp;                 //返回数据
}

7. 内部集成电路总线接口I²C相关推荐

  1. 三种IP核总线接口比较分析

    三种IP核总线接口比较分析 (2018-01-13 09:26:44) 转载▼ 标签: 三种IP核总线接口比较分析   原文地址:三种IP核总线接口比较分析作者:Stephen 作者:王智鸣  田金文 ...

  2. 总线接口与计算机通信

    微机中总线一般有内部总线.系统总线和外部总线. 内部总线是微机内部各外围芯片与处理器之间的总线,用于芯片一级的互连: 系统总线是微机中各插件板与系统板之间的总线,用于插件板一级的互连: 外部总线则是微 ...

  3. Cortex-M3 I-Code,D-Code,系统总线及其他总线接口

    Cortex-M3 的总线接口 下图是Cortex-M3的连接方式样板图,大家可以根据需求自行更改, CM3 处理器的总线接口是基于 AHB-Lite 和 APB 协议.下图中总线复用器的作用是,让指 ...

  4. HCS12X微控制器的外部总线接口介绍

    翻译的资料是公开的,在这里下载https://www.nxp.com/products/microcontrollers-and-processors/additional-processors-an ...

  5. 基于PCI9054和LTC4240的CPCI总线接口设计

    CPCI总线简介 CPCI总线是一个开放式.国际性技术标准,由PCI总线工业计算机制造商组织PICMG(PCI Industrial Computer Manufacturer Group)负责制定和 ...

  6. linux嵌入式 控制io口,基于ARM9嵌入式的RS485总线接口设计,自动控制IO口实现通信方向控制...

    描述 随着ARM处理器应用的范围的不断深入,根据需求的不同ARM提供的外设也越来越丰富,常用的通信接口有RS232.RS485.CAN.以太网等.RS485总线凭其传输距离远.抗干扰能力强.价格低廉等 ...

  7. SPI协议、MCP2515裸机驱动详解----主流SPI总线接口原理

    最近看到一个介绍SPI接口原理的帖子,看完觉得甚好.特来分析给大家一起学习. SPI概述 Serial Peripheral interface 通用串行外围设备接口 是Motorola首先在其MC6 ...

  8. 集成电路总线(Inter-Integrated Circuit, I2C)

    目录 1. 半双工 串行 同步 波特率 2. 一主多从传输 START 与 STOP Byte format 与 Acknowledge 7bit寻址传输协议 10bit寻址传输协议 通用广播传输协议 ...

  9. CAN总线接口芯片SIT1050Q和TJA1050有什么关系?能相互替代吗?

    有客户问:"你们东沃电子代理的SIT1050Q高速CAN总线收发器能够pin to pin替代NXP品牌TJA1050芯片吗?"回答这个问题之前,我们先来了解下CAN芯片SIT10 ...

最新文章

  1. k8s aws 部署_如何在短短30分钟内使用CircleCI设置到AWS S3的持续部署
  2. python异常处理语句编程题_一篇文章让你掌握Python异常处理所有知识点,记得收藏...
  3. OpenStack Neutron浅析(二)
  4. hdu4784 不错的搜索( 买卖盐,要求整钱最多)
  5. Java常用类之【八种基本数据类型】
  6. windows启动minio bat脚本编写示例
  7. 外媒:为何说中国对美国科技行业的影响与日俱增
  8. Ant Design Pro 2.0/umijs站点配置到非站点根目录下处理
  9. 深度学习第五课-训练注意事项与框架使用
  10. 蓝牙扫描_无线扫描枪常见的传输模式及其区别
  11. python标准库之socket
  12. Android 内存泄漏分析与解决方法
  13. socket()编程简介
  14. plsql本机不安装数据库连接远程数据库
  15. 30天自制操作系统 定时器
  16. 2019运输科技领域最新SCI期刊影响因子正式发布,附三年IF变化趋势!
  17. Python的seek函数
  18. 人行各地中支征信服务“再升级”
  19. D-028 DDR3硬件电路设计
  20. 网络接口 FE GE 10GE SFP

热门文章

  1. 尚硅谷 java基础第二个项目之客户关系管理系统
  2. Windows 11 即将发布,微软欲“强推” Edge 浏览器?
  3. Java搭建订单状态机模型
  4. pytorch c++混编报错 Error checking compiler version for cl: [WinError 2] 系统找 不到指定的文件。
  5. html卡死手机,手机页面加载地图,双手操作放大,APP卡死
  6. CMakeLists学习二、链接库搜索路径与ld
  7. WIN7系统36887事件解决方案
  8. Retrofit使用教程(一)
  9. 为什么properties中没有load方法_为什么游戏戒不掉?或许你没有找对正确方法
  10. 重磅炸弹 诺基亚N71简体中文版全国抢先预览