stm8s的iic做从机时如何判断是读命令还是写命令

stm8s的iic做从机时如何判断是读命令还是写命令,第1张

首先,iic做从机的程序源码网上比较多,我就不发了,说下调试方法。

相信主机部分已经调试通过了,在这个前提下,楼主的思路是没错的,接收非空,读数据。iic属于一个硬件接口,出问题的时候需要借助示波器,监测每个时候每个数据的波形,同时用JTAG在线调试,分析从机相关寄存器的状态,与自己计算的理论值做对比看是否正确,最终会找到一个出错的地方,看着一堆数据确实会枯燥一些,楼主加油,祝成功~

不是,我就试过同样的程序,给ADV7390就没反映,给AT24C1024B,RTC8564都有ACK回应。

每种芯片对时序严格度要求不是完全一样,但大体上说,除非某些时序要求非常严格的芯片,其余大部分芯片都是通用的,因为时序要求几ns的延时一般我们都会给us级,所以不存在这种问题。

没有仔细看你的程序,写不进去通常有几种原因:

1总线时序控制不当或电平不当,我留意到你是用P2口的两只脚来做连接,不知道你有没有接上拉电阻,是否符合时序就靠你自己来详细核对了

224C02的地址译码引脚的连接方式和程序中的IIC命令里的"芯片地址"不匹配

3写动作结束后需要10毫秒等待时间,如果提前去读,则会得不到响应

424C01芯片已坏或者CPU有关引脚失效

我跟你有过同样的问题

曾经困扰了我2周

不过当时我用的是ARM芯片,IIC也是硬件弄好了的,自己只需要写寄存器就能实现时序

就是因为那一小段拉高,有的芯片可以容错

有的芯片不能容错就无应答

我当时用的AT24C1024B就可以,用ad公司的一款视频芯片就不行

后来不用他的硬件接口,用自己单片机实现的IIC时序就可以完成通信了。

为了防止IIC的sda信号异常导致在while的死循环,用i来限定sda跳变为0等待时间,如果sda==0则跳出while循环,如果sda==1,最多等待i的255次增量计数后跳出循环,i++是在while循环体内的。IIC对时序有严格的要求,由于各种原因接口上信号异常是有可能发生的。

器件地址0101是器件的标识,多种IIC器件通信时没有这个标识就乱套了,这与i<255八辈子扯不上关系,i就是一个计时等待的变量。

你的问题补充中对24C08器件地址的理解是错误的,有的还用i <100,有的连i都没有,那又怎么理解呢。

51 单片机的引脚,输出 1 的能力很差。

这时,引脚的电压,取决于外来的信号。

输出 1,就是设置为输入状态。就是准备读取数据。

8次循环后,dat即为 IIC 器件送来的数据。

在目前比较流行的几种串行扩展总线中,IIC总线以其严格的规范和众多带IIC接口的外围器件而获得广泛的应用。 IIC总线是PHILIPS公司推出的芯片间串行传输总线。它以1根串行数据线(SDA)和1根串行时钟线(SCL)实现了全双工的同步数据传输。随着IIC总线研究的深入,它已经广泛应用于视/音频领域、IC卡行业和一些家电产品中,在智能仪器、仪表和工业测控领域也越来越多地得到应用。

1 IIC总线硬件结构

IIC串行总线有两根信号线:一根双向的数据线SDA;另一根是时钟线SCL。所有接到IIC总线上的设备的串行数据都接到总线的SDA线,各设备的时钟线SCL接到总线的SCL。

总线对设备接口电路的制造工艺和电平都没有特殊的要求(NMOS、CMOS都可以兼容)。数据传送率按IIC总线可高达每秒十万位,高速方式可高达每秒四十万位。

总线的运行(数据传输)由主控器控制。主控器启动数据的传送(发出启动信号),发出时钟信号,传送结束时发出停止信号,通常主控器是微处理器。被主控器寻访的设备都称为从机。为了进行通讯,每个接到IIC总线的设备都有一个唯一的地址,以便于主控器寻访。

2 IIC总线时序

在IIC总线传输过程中,将两种特定的情况定义为开始和停止条件(如图1):当SCL保持“高”,SDA由“高”变为“低”时为开始条件;SCL保持“高”,SDA由“低”变为“高”是为停止条件。开始和停止条件由主控器产生。使用硬件接口可以很容易地检测开始和停止条件,没有这种接口的微机必须以每时钟周期至少两次对SDA取样以检测这种变化。

图1   总线开始/停止

SDA线上的数据在时钟“高”期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变。

输出到SDA线上的每个字节必须是8位,每次传输的字节不受限制,每个字节必须有一个应答为ACK。如果一接收器件在完成其他功能(如一内部中断)前不能接收另一数据的完整字节时,它可以保持时钟线SCL为低,以促使发送器进入等待状态,当接收器械准备好接受数据的其它字节并释放时钟SCL后,数据传输继续进行。IIC数据总线传送时序如图2。

图2 总线数据传送时序

数据传送具有应答是必须的。与应答对应的时钟脉冲由主控器产生,发送器在应答期间必须下拉SDA线。当寻址的被控器件不能应答时,数据保持为高,接着主控器产生停止条件终止传输。在传输的过程中,当用到主控接收器的情况下,主控接收器必须发出一数据结束信号给被控发送器,被控发送器必须释放数据线,以允许主控器产生停止条件。合法的数据传输格式如图3所示:

超始位 被控接收器地址 R/W 应答位 数据 应答位 、、、、 停止位

图3

IIC总线在开始条件后的首字节决定哪个被控器将被主控器选择,例外的是“通用访问”地址,它可以寻址所有期间。当主控器输出一地址时,系统中的每一器件都将开始条件后的前七位地址和自己地址比较。如果相同,该器件认为自己被主控器寻址,而作为被控接收器或被控发送器则取决于R/W位。

3 IIC总线特点

由上面的介绍可以看出IIC总线的特点主要表现在以下几个方面: (1) 硬件结构上具有相同的硬件接口界面。IIC总线系统中,任何一个IIC总线接口的外围器件,不论其功能差别有多大,都是通过串行数据线(SDA)和串行时钟线(SCL)连接到IIC总线上。这一特点给用户在设计应用系统中带来了极大的便利性。用户不必理解每个IIC总线接口器件的功能如何,只要将器件的SDA和SCL引脚连到IIC总线上,然后对该器件模块进行独立的电路设计,从而简化了系统设计的复杂性,提高了系统抗干扰的能力,符合EMC (Electromagnetic Compatibility)设计原则。 (2) 总线接口器件地址具有很大的独立性。在单主系统中,每个IIC接口芯片具有惟一的器件地址,由于不能发出串行时钟信号而只能作为从器件使用。各器件之间互不干扰,相互之间不能进行通信,各个器件可以单独供电。FPGA与IIC器件之间的通信是通过独一无二的器件地址来实现的。 (3) 软件 *** 作的一致性。由于任何器件通过IIC总线与DSP进行数据传送的方式是基本一样的,这就决定了IIC总线软件编写的一致性。 (4) PHILIPS公司在推出IIC总线的同时,也为IIC总线制订了严格的规范,如:接口的电气特性、信号时序、信号传输的定义等。规范的严密性,结构的独立性和硬、软件接口界面的一致性,极大地方便了IIC总线设计的模块化和规范化。

本文来自CSDN博客,转载请标明出处:>

以上就是关于stm8s的iic做从机时如何判断是读命令还是写命令全部的内容,包括:stm8s的iic做从机时如何判断是读命令还是写命令、是不是所有的IIC时序程序对所有的IIC器件都通用啊、IIC总线51编程,程序写出来不行啊,问题在哪里啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9878610.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存