虽然之前也研究了先iic同行基本的时序你弄明白了,可是在机子写at24c02驱动的时候由于理解不够透彻出了点问题。

一.写数据

24c02的写入数据,可以看到主从设备iic中写的过程:起始信号->器件地址(7位地址加一个读写位)->等待应答->要操作内存的地址->等待应答->写入数据->等待应答->停止

时序图:

代码:

可是上面的程序中箭头所指的位置可以看出我们在一个write函数中发送了两次起始信号。

第一次起始信号之后我们只是寻址了从设备地址(就像是配对)配对完我们给了要写入数据的地址然后给了一个开始信号。

第二次起始信号后由于我们没有严格按照上面的通信协议(写器件地址)就直接发送数据由于此时我们没有寻址从器件地址(配对)那么我们直接写数据是无法成功的。

那么有人会纳闷了我们之前不是写入地址了吗怎么会无法写入数据了。

答案就是:你太弱了,没有理解24c04读写时序图(在编写iic通信器件驱动是严格按照从设备读写时序写)

在第一次起始信号时虽然我们寻址了器件地址和要写入的内存地址,可是我们在配对完成后有给了一个起始信号,那么相当于我们第一次的配对断开了第一次配对所设置的写数据地址那些不付出在。

在第二个起始信号中我们我们没有写器件地址你肯定的无法再特定内存段写入数据。

那么这个程序我们要怎么改了?

一种方法:去掉第二个起始信号相当于只开启了配对一次从设备。

另一种方法:你不想去掉第二个起始信号那么你就只需要在第二个起始信号后加上从-设备地址和要写内存段的地址就ok(注意两个地址必须加)这样的话相当于但你的第一次配对啥都没做(不提倡)如下图:

二.读数据

24c02中iic协议中读数据的过程:起始信号->器件地址(7+1位写(0))->应答->读取地址->应答->起始信号-.>器件地址(7位+读(1))->应答->读取数据->发送应答->停止信号

时序图:

附带代码:

注:iic——read函数自带应答。

注:在我们写从设备的与主设备通信iic驱动是一定要查看通信的时序(读写时序)而我们的代码其实就是按照时序来写。。

转载请标明原贴出处:https://blog.csdn.net/zj490044512

iic通信的深入理解(主从设备通信)相关推荐

  1. 理解主从设备模式(Master-Slave)

    原文出处:https://www.cnblogs.com/dmego/p/9068734.html 前言 在给定上下文的软件体系结构中,为了解决某些经常出现的问题而形成的通用且可重用的解决方案称之为架 ...

  2. Android与物联网设备通信-自定义报文与字节序

    前几节我们把网络通信中的基础都过了一遍,今天真正开始秀操作了.本节主要讲解如何在应用层上去定义报文的结构体.良好的报文设计会让今后的业务扩展变得轻松.顺带会讲解一下字节序. 可以发现最近的章节都把两个 ...

  3. Android与物联网设备通信 - 字节报文组装与解析

    工作调动.暂时停更了一段时间.续上一篇我们学习了如何去自定义一组报文,今天我们接着解析和组装报文. 前面我们讲过在物联网通信中实际上不论我们使用什么方式作为通信介质,其本质就是字节.所以我再一次对本章 ...

  4. 通俗理解STM32 SPI通信(主从双机SPI通信)

    STM32 SPI通信 高速全双工的通信总线 SPI 通讯使用 3 条总线及片选线,3 条总线分别为 SCK.MOSI.MISO,片选线为NSS(CS) NSS 信号线由高变低 ,是 SPI 通讯的起 ...

  5. C# NModbus4 TCP 主从站通信样例

    文章目录 实现效果 实现代码 主站 从站 Modbus 协议简介 Modbus的功能码 读指令对比(0x04) 写指令对比(0x10) Modbus TCP MBAP Modbus 主从站关系 Mod ...

  6. Windows下的Powerlink主从站通信-(现场总线作业——NJIT)

    Windows下的Powerlink主从站通信-(现场总线作业--NJIT) 一.设计任务(要求) 二.Powerlink工作原理 1.Powerlink简介: 2.Powerlink设备类型及设备模 ...

  7. linux stm32 主从,STM32F407和STM32F051主从I2C通信方法

    STM32F407和STM32F051主从I2C通信方法 作者:华清远见讲师 M4作为主机: int main(void) { HAL_Init(); SystemClock_Config(); MX ...

  8. iic裸机与linux通信,基于IIC协议的Linux操作系统与裸机通信的方法

    主权项: 1.一种基于IIC协议的Linux操作系统与裸机通信的方法,其特征在于,包括如下步骤:步骤S1,对采用Linux系统的多个硬件和裸机同时挂载在总线上,包括:配置一个主机设备和多个从机设备,每 ...

  9. 串口通信与并口通信的浅理解

    在说到通信的时候,一般都会提到窜口通信和并口通信的问题,以前一直都是听别人说,我一点也不明白,毕竟这个概念还是偏硬件了点,但是人还是要往前进的,今天多google了几下,总结了下理解方式,算是一次学习 ...

最新文章

  1. Lua(Codea) 中 table.insert 越界错误原因分析
  2. JDBC executeBatch 抛出异常停止
  3. 处理局域网网速变慢问题的几个思路
  4. 24. PE结构-PE详解之基址重定位详解
  5. 用history api偷换浏览器历史记录
  6. 根据数组中的某个键值大小进行排序,仅支持二维数组
  7. Android RecyclerView(五)封装Holder与Adapter(Android 5.0 新特性)
  8. redis数据类型set总结
  9. 2020年11月 Oracle WebLogic 高危预警:CVE-2020-14750 无需认证攻击
  10. 鸿蒙HI3516-驱动开发(1.1-LTS)
  11. 软件设计师07-程序语言基础知识
  12. matlab struct 结构体
  13. java 排水管网 系统_排水管网数字化管理系统
  14. 服装收银系统 服装收银 服装收银软件 收银软件 收银系统 好用的服装软件
  15. 这可能是目前最好用的p2p外网访问内网软件(免费内网穿透)
  16. c语言实验报告(四) 从键盘输入字符串a和字符串b,并在a串中的最小元素(不含结束符)后面插入字符串b....
  17. php文章下一页,php实现文章上一页下一页的实例
  18. 3、git 暂存区撤销与删除
  19. 2022年2月语音合成(TTS)和语音识别(ASR)论文月报
  20. PS中添加插件 无法加载扩展,未经正确签署的解决方法

热门文章

  1. mysql项目练习_mysql练习项目 - osc_wy5qpqnh的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. Rust 在这个领域要大放异彩:一本新书推荐(附下载)
  3. Xcode打包ipa后或者上传到iTunesConnect后出现的黑屏或者崩溃的问题
  4. coreldraw x8段落_CorelDRAWx8调整字间距的方法
  5. 嵌入式笔试/面试概念
  6. Spark中RDD、DataFrame和DataSet的区别与联系
  7. 校园防疫管理系统功能详解,请查看
  8. python——小例子 及 end=““ 和“t“的用法
  9. 公共基础知识:吴中四士
  10. 使用Jenkins搭建iOS/Android持续集成打包平台