1.前言

对于大多数工程师而言,I2C永远是一个头疼的问题。相比UART和SPI而言,I2C的时序要复杂一些,I2C组合变化也丰富一些。在这里以AT24C04为例说明I2C使用过程中的一些注意点。

2.AT24C04操作示意图

图 AT24C04操作示意图
示意图说明:示意图分阐述了4种不同的操作方式,例如写单个存储单元,写多个存储单元,读单个存储单元和写单个存储单元。对于单个操作而言,上部为MCU通过I2C输出的相关指令,下部为I2C设备的响应。例如写单个存储单元操作时,MCU发出I2C启动,设备地址,写标志位等,而I2C设备输出多个ACK。

3.若干说明

3.1 基本操作方式

I2C设备的操作可分为写单个存储字节,写多个存储字节,读单个存储字节和读多个存储字节。相对于AT24C04而言,这些读写动作相对于内部的存储单元而言,对于其他的具备I2C接口的AD或传感器而言,存储单元变成了寄存器单元。虽然存在概念上的差别,但是其操作原理确实一样的。

3.2 无应答

在以上4种情况中,无应答为MCU发出,无应答意为MCU不需要从机输出数据,MCU将会停止本次I2C操作。需要说明的是,无应答并不是一种异常情况。

3.3 I2C设备并不只有一个设备地址

这一点往往被忽略,一般情况下认为在I2C启动信号之后的字节为I2C从机地址(7位)。对于AT24C04而言,内部具有4Kb存储位,合计512字节。若需要访问512字节内容,总共需要9根地址线(8位宽度),那么上图中的存储地址(8位长度)显然还差了一位,那么就需要从设备地址中“借”1位,这就使得AT24C04具有两个I2C地址,例如0x50和0x51。

3.4 存储地址

相对于AT24C04而言,存储地址占1个字节。若换成其他I2C设备,例如ADXL345,存储地址被寄存器地址替代即可,其他操作方式相似。但是像AT24C32或AT24C64这样的大容量EEPROM,则存储地址需要2字节描述,也就意味着需要连续发送两个字节地址信息且高字节在前。其他像BH1750这样的光照芯片,存储地址被具体的操作命令替代,使用I2C设备时需要因地制宜,切不可照搬教条。

3.5 连续读和连续写限制

AT24C04中存在页的概念,一页的大小为8字节,若果在单页的范围内,存储地址累加,若超过该页的最大地址,存储地址回到页开始处。所以对于连续读和连续写而言,最大的操作字节数为8。若需要操作的字节内容超过8字节,则需要进行翻页操作,即写入下一页的起始存储地址。

4 总结

I2C设备有很多种,若掌握基本原理,便可见招拆招,那是I2C总线就不那么难了。

5.参考资料

【维基百科I2C】

单片机 I2C操作笔记——以 AT24C04为例相关推荐

  1. linux at24c 前几个字节错误,I2C操作笔记——以 AT24C04为例

    Centos7系统下修改主机名操作笔记 习惯了在Centos6系统下修改主机名的操作,但是Centos7下修改主机名的操作却大不相同!操作笔记如下: 在CentOS中,有三种定义的主机名:静态的(st ...

  2. I2C操作笔记——以 AT24C04为例

    1.前言 对于大多数工程师而言,I2C永远是一个头疼的问题.相比UART和SPI而言,I2C的时序要复杂一些,I2C组合变化也丰富一些.在这里以AT24C04为例说明I2C使用过程中的一些注意点. 2 ...

  3. 单片机I2C总线AT24C02读写、扩展keil工程多个实例及Proteus仿真

    1.对I2C总线上挂接多个AT24C02的读写操作源代码如下: //对I2C总线上的2个AT24C02(U2和U3)的读写/*I2C总线系统中器件地址包括固定部分和可编程部分. 可编程部分必须根据A0 ...

  4. **决战2021年单片机蓝桥杯笔记(1)**IIC PCF8591 AT24C02

    **决战2021年单片机蓝桥杯笔记(1)**IIC PCF8591 AT24C02 I2C作为一种多用于板内同步串行通信方式,有一根SCL时钟线负责收发双方的时钟节拍,和一根SDA数据线负责传输数据, ...

  5. Spark+hadoop+mllib及相关概念与操作笔记

    Spark+hadoop+mllib及相关概念与操作笔记 作者: lw 版本: 0.1 时间: 2016-07-18 1.调研相关注意事项 a) 理解调研 调研的意义在于了解当前情况,挖掘潜在的问题, ...

  6. 单片机c语言程序设计实训报告,(整理)单片机C语言程序设计实训100例.doc

    (整理)单片机C语言程序设计实训100例.doc .单片机C语言程序设计实训100例基于8051Proteus仿真案例第 01 篇 基础程序设计01闪烁的LED/* 名称闪烁的LED说明LED按设定的 ...

  7. 【Tools】python环境操作笔记

    python环境操作笔记 1.安装Python虚拟环境 2.python pip 添加清华镜像 3.Ubuntu卸载python后出现系统崩溃以及各种问题的解决方法 4.Python下关于 tkint ...

  8. sybase 设置默认值_[转]SYBASE 数据库操作笔记

    SYBASE 数据库操作笔记(转自MaYong) 数据库表名.列名(执行严格的大小写) 数据库表名.列名识别大小写区分(即表名是大写 查询时小写就错误) 大小写敏感的问题是因为字符集影响的,改为UTF ...

  9. MSP430F5438 I2C学习笔记——AT24C02

    0.前言 对于大多数单片机来说,I2C成了一个老大难问题.从51时代开始,软件模拟I2C成了主流,甚至到ARMCortex M3大行其道的今天,软件模拟I2C依然是使用最广的方法.虽然软件模拟可以解决 ...

最新文章

  1. Android 获取SD卡路径和判断SD卡是否存在.
  2. openapi_MicroProfile OpenAPI上的Swagger UI
  3. webserver之mysql模块
  4. iOS开发技巧:使用Objective-C创建UUID
  5. 数据库:PostgreSQL:客户端安装
  6. linux zip文件无法解压,无法解压zip文件在linux centos
  7. Spring Boot 项目集成Windows域账户认证
  8. 计算机会计信息系统中凭证日期应该是,《电算化会计》期中考试试题.doc
  9. Nginx配置多个域名指向不同的端口
  10. 看透SpringMVC源码-网站架构演变1-3
  11. [渝粤教育] 南京信息职业技术学院 模拟电子技术 参考 资料
  12. C#网络TCP客户端的实现
  13. GK110和GK104
  14. 下载配置安装MySql---超详细教程
  15. 计算机丢失libdelogo.dll,电脑图标打开就出错,用联机解决说计算机中丢失Duilib.dll 是怎么回事...
  16. 沙特认证_所有的沙特机器人去哪儿了
  17. 金丝雀发布、滚动更新、蓝绿发布到底有啥区别
  18. 线性恒流芯片:X5131G可替代SM2082
  19. 蓝牙(bluetooth)攻击与防护(四)
  20. 前端面试——走楼梯问题

热门文章

  1. RPG游戏-道具系统
  2. 易语言制作计算机按键指令,关于易语言编写计算器的问题(完整代码!!!!!!!)
  3. php给易语言发消息,易语言实现自动发送QQ信息的代码
  4. 程序员客栈:程序员的经纪人_对于程序员:如何处理干扰和打扰
  5. python在地图上标注点_怎样用python画地图上的标注线
  6. 善用EFI系统分区ESP
  7. Android性能优化方法论
  8. 前端实现语音播报功能
  9. HCIA——TCP及其三次握手,问题
  10. EduCoder-程序设计技术R(第四部分循环结构程序设计1)- 第1关:小球自由落体运动