对于IIC编程来说,以下几点最为重要:

1、SCL和SDA必须用硬件或者软件上拉(也即“位与逻辑”,空闲时为1,只有总线上所有设备均为空闲1,总线才呈现为1,只要有一个设备为忙0,则总线就呈现为0)。

2、接收方总是在SCL为高电平期间采样bit位,等价于:发送方必须在SCL高电平期间保持SDA不变;

3、Ack的本质上就是发送1个bit的数据,它发生在接收完一个字节后(接收方可能是主机也可能是从机),也即第9个SCL的高电平期间。在SCL高电平期间,若SDA为0,就称为ACK,若SDA为1(默认上拉),称为NoAck。一般,在发完/收完第8个bit后,主机会把SCL拉低,此时接收方如果打算ACK的话,此刻就应该把SDA拉低,主机把SCL拉高后,SDA需要保持不变,以供接收方采集(这与上面第2条不谋而合)。也即,对于waitAck的一方,应该在SCL拉高后查询SDA的值。

4、Ack和NoAck都是是由接收方发出的,也即:
若主机在接收数据,那么Ack或者NoAck将由主机发出,典型场景如主机接收到从机传回的字节后;
若从机在接收数据,那么Ack或者NoAck将由从机发出,典型场景如从机接收到主机发起的片选字节后,又如从机接收到主机发起的寄存器选字节后;

实际应用中的IIC从机,只要收到了主机发来的字节,就必须向主机回复Ack,我至今都没见过从机向主机回复NoAck的从机。

而主机,有时会向从机发ACK,有时会向从机发NoAck。

也即:ACK这个概念,对于主机编程来说,涉及到4个函数(或者直接写成代码片段也行):①检查从机发来的是ack吗?②检查从机发来的是NoAck吗?③要向从机发Ack吗?④要向从机发NoAck吗?

5、SCL全程只被主机控制,从机无权控制SCL;

6、IIC器件地址有7bit和10bit之分,最低bit代表读(=1)或写(=0)。读写位会和器件地址合在一起发送。以7bit地址为例:BBBB_BBBX,其中X代表读写位,一般把最低位X设为0,也即相当于把IIC的写地址作为IIC的器件的地址,也即地址为BBBB_BBB0。

举一个24C04的例子:

(大多数IIC从机都是7bit的地址,第8bit指示读/写,主机发送芯片地址,这一过程称为片选)

1、单字节写

主机发出start ---> 主机发出片选字节(写) ---> 主机检测从机是否回复了Ack ---> 主机发送字节地址 --->  主机检测从机是否回复了Ack --> 如果上一步从机Ack了,主机发送一个数据字节 ---> 主机检测从机是否发出了Ack ---> 主机发出stop。

PS:“主机检测从机是否回复了Ack”,这一过程本质上就是:主机把SDA拉高,然后发出一个SCL高脉冲,并检测在高脉冲期间SDA是否被从机给拉低了,如果被拉低了,就意味着从机回复了Ack信号。

2、页内连续写多个字节(24C04不支持跨页写,如果本页写满了,则会返回本页的页首覆盖写)

主机发出start ---> 主机发出片选字节(写) ---> 主机检测从机是否回复了Ack---> 主机发送字节地址 ---> 主机检测从机是否回复了Ack --> 循环{ 主机发送数据字节 -->  主机检测从机是否回复了Ack } ---> 主机发出Stop

3、单字节读

主机发出start ---> 主机发出片选字节(写) ---> 主机检测从机是否发出了Ack---> 主机发送字节地址---> 主机检测从机是否回复了Ack --->  主机发出start ---> 主机发出片选字节(读) ---> 主机检测从机是否回复了Ack ---> 主机接收从机的单字节数据 ---> 主机向从机发出NoAck信号  --->  主机发出Stop

4、连续读出多个字节(24C04支持跨页连读)

主机发出start ---> 主机发出片选字节(写) ---> 主机检测从机是否回复了Ack---> 主机发送字节地址---> 主机检测从机是否回复了Ack --->  主机发出start ---> 主机发出片选字节(读) ---> 主机检测从机是否回复了Ack -> 循环{ 主机读取从机发出的一个字节 ---> 主机向从机回复Ack信号}  ---> 主机读取从机发出的一个字节 ---> 主机向从机回复NoAck信号 ---> 主机发出Stop。

IIC协议编程要点,24C04为例相关推荐

  1. 常用通信协议——IIC协议编程实现

    一.IIC连接实物示意图 二.IIC协议程序编写的要点: 1.空闲状态 2.开始信号 3.停止信号 4.应答信号 5.数据的有效位 6.数据传输 三.IIC驱动编写 1.硬件准备 此处使用正点原子Mi ...

  2. IIC协议的软件模拟实现程序

    项目场景:基于STM32F407实现GPIO软件模拟IIC驱动EEPROM 背景:工作中用到了EEPROM用于存储配置信息,需要对EEPROM进行读.写功能的实现. 硬件:使用的EEPROM型号为 B ...

  3. IIC协议与OLED

    1.认识OLED 1.OLED概述: OLED(Organic Light-Emitting Diode,有机发光二极管)是一种显示技术,利用有机材料的发光特性来产生光. OLED显示器由一系列有机材 ...

  4. IIC协议驱动EEPROM的Verilog实现与竞争冒险与下降沿触发、多重驱动

    文章目录 一.前言 二.软硬件平台 软件平台 硬件平台 三.IIC与EEPROM IIC简介 1. 写操作大致步骤 2. 读操作大致步骤 3. IIC总线有以下几种状态 1. 空闲状态 2. 起始信号 ...

  5. 异常处理、socke基于TCP协议编程

    一.异常处理 1.错误和异常 1.程序中难免出现错误,而错误分成两种 (1)语法错误(这种错误过不了Python解释器的语法检测,必须在程序执行前改正) #语法错误示范一 if#语法错误示范二 def ...

  6. 通信协议之IIC协议(eeprom)_通俗易懂篇!

    1.IIC(Inter-Integrated Circuit),是IICBus简称,是一种串行通信总线. 2.IIC协议:遵循主机master和从机slave的主从关系机制,区别于SPI通信协议,II ...

  7. Verilog实现IIC协议读写EEPROM

    在FPGA设计中,IIC协议是一个十分常见的协议,因为几乎所有的EEPROM都是用这个协议进行读写的,此外,一些特殊场合,也会用到此协议.这里我首先给出IIC协议的中文标准文档的下载链接(不要积分), ...

  8. STM32 IIC协议 读写EEPROM

    EEPROM.MCU6050和OLED显示屏外设都是通过IIC协议[半双工]进行通信. 除此之外,另一个广泛地使用在系统内多个集成电路间的通讯协议:SPI. 目录 一.IIC物理层: 二.IIC协议层 ...

  9. cmos逻辑门传输延迟时间_用DSLogic 逻辑分析仪 解析出来的IIC协议太完美了!

    1. 协议基础 1.1. 协议简介 IIC-BUS(Inter-IntegratedCircuit Bus)最早是由PHilip半导体(现在被NXP收购)于1982年开发.主要是用来方便微控制器与外围 ...

最新文章

  1. es查询大文本效率_es之路由:进一步提高Elasticsearch的检索效率(适用大规模数据集)...
  2. js webapp://_Project Student:维护Webapp(只读)
  3. 英语四级真题作文 计算机,2019年6月大学英语四级作文范文50例:电脑
  4. 小程序按钮调用扫一扫_他在一个小程序“按钮”上动了个手脚,生意大火,赢得美人归!...
  5. 数据库中主键与索引的区别
  6. python优点和特点-Python的优点和缺点有哪些?Python语言的特点
  7. 如何在cad中模块计算机,AutoCAD如何创建块 CAD模块创建方式一览
  8. Contrastive Clustering
  9. 是谁在觊觎娱乐圈站点?揭秘神秘黑客组织-黑界
  10. 【游戏设计图形学】模拟自然界火焰的方法
  11. 如何给拍好的短视频配音?最简单的方法推荐!
  12. Android安全攻防战,反编译与混淆技术完全解析(上)
  13. [电脑组装]记录第一次组装电脑+win10激活
  14. 关于 CVE-2021-44228 Log4j2 漏洞的相关应对汇总说明(包含中英文客户公告)
  15. HTML新年贺卡源代码,春节贺卡源代码、新春贺卡
  16. GoSword 开源前后端分离后台管理框架
  17. 线性回归、logistic回归、一般线性模型回归
  18. 关于mcu启动中内存数据搬运的总结
  19. 【软件工程】几种常见的软件开发模型:(瀑布模型,快速原型模型,增量模型,螺旋模型,喷泉模型)模型的概念特点优点缺点和不同。
  20. Certbot 生成 ssl 证书

热门文章

  1. 【论文分享】异构图神经网络域名检测方法GAMD:Attributed Heterogeneous Graph Neural Network for Malicious Domain Detection
  2. 每周分享第 13 期:周刊为什么只谈技术?
  3. html电商app小图标素材,20套购物网站专用的图标素材包
  4. Hackrf_One_Lesson3
  5. UCC21755QDWRQ1引脚图TPS92667QPHPRQ1汽车级驱动芯片
  6. 下载安装Tomcat9.0.44,并解决控制台乱码问题
  7. 14- 决策树算法 (有监督学习) (算法)
  8. 2022 团体程序设计天梯赛 模拟赛 L2-1 盲盒包装流水线 (25 分)
  9. 微信商城开源版二次开发(二)
  10. android h5 离线缓存,H5 应用程序缓存(离线缓存)