8514|11

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

I2C从初始化到稳定接收数据要多少时间 [复制链接]

                                 I2C和DMA从初始化到稳定接收数据要多少时间?跟系统时钟的关系如何?比如我的系统时钟是36M和72M有什么区别么?找不到具体资料,哪位有这方面的知识告诉在下,不胜感激!
此帖出自stm32/stm8论坛

最新回复

                                 多谢解答,我们想了其他办法解决了,我在接收一部分数据的时候需要初始化DMA的时候还会等待一定的时间,在这个时间内看有没有后续的数据过来,如果没有数据过来后才初始化DMA,初始化I2C是由于我遇到了一种情况,就是主机发数据过来,但是从机的I2C端口不接收数据了,有点像吊死的情况!所以初始化DMA的时候连I2C一块初始化了。   详情 回复 发表于 2009-2-3 22:02
点赞 关注
 

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

lz是说用DMA的方式进行I2C的接收吧

如果是作为I2C主设备,初始化后,自己发送了从设备地址得到应答后开始接收收据;

如果是作为I2C从设备,也要等到总线上的地址和自己匹配了,才开始接收数据。

没有特定的一个时间间隔吧。毕竟不像有些外设,初始化好立马开始数据传输,也许需要初始化后等一下;I2C还有一个起始位+地址+应答的阶段啊。
此帖出自stm32/stm8论坛
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

STM32的I2C结束初始化后立刻即可以稳定地进行数据传输(收或

                                 所有STM32的内置外设在初始化后都不需要任何稳定时间,立刻就可以开始正常的操作。只有振荡器和PLL在启动之后需要一定的稳定时间。
此帖出自stm32/stm8论坛
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 

好像STM32的can要等一下哎

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

5
 

DMA+I2C作为从设备

您的意思是这个间隔取决于主机的时序咯?初始化之后,如果主机发送了起始位+地址,从机接收应答后就可以收数据了么?这种情况从机可不可以接收到数据呢:
在主机发送了起始位+地址,从机接收应答后接收了一部分数据后,紧接着从机初始化DMA和I2C,那主机后续发的数据和结束位从机还能不能收到呢?
此帖出自stm32/stm8论坛
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

6
 

I2C从设备利用DMA方式接收

首先,主机发送起始位+地址,随后对这个地址的应答是丛机发的,不是“从机接收应答后就可以收数据了”

丛机先收了一部分收据,然后“紧接着从机初始化DMA和I2C”是什么意思呢?是要改变DMA的destination,还是buffersize之类的?I2C为什么又要重新初始化呢。能把这个应用环境说一下么?
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

7
 

I2C的应用环境

                                 I2C的应用环境一时也说不清楚,楼上的可不可以留下个QQ或者电话之类的,可以和您私下聊!
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

8
 

LZ如果对I2C的工作过程有疑问,最好去看看I2C的协议

如果对如何使用STM32的I2C模块有疑问,可以具体地提出来,我们一起讨论;你还可以下载发表过的例子和函数库,通过程序的实现,更好地理解如何使用STM32。
相关链接:https://bbs.eeworld.com.cn/club/bbs/showEssence.asp?id=10188&page=1
此帖出自stm32/stm8论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

9
 

还有个疑问

                                 I2C的协议是看了的,关键不是对I2C协议的不理解,是对stm32的实现机制有一些疑问而已,我现在想问个问题就是:DMA_GetCurrDataCounter在I2C使用DMA方式的时候作为从机是判断停止位后它的数值才会变,还是在主机发送起始位+地址后发再数据,从机的DMA一接收到数据DMA_GetCurrDataCounter的值就会变而不等停止位呢?简而言之,GetCurrDataCounter在I2C的数据传输过程中什么情况下才会变化?
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

10
 

在每个RxNE事件后,DMA数据计数寄存器将被递减

                                 请看STM32参考手册中有关的片断:
此帖出自stm32/stm8论坛
 
 
 

回复

45

帖子

0

TA的资源

禁止发言

11
 

RxNE事件后,硬件自动会按DMA配置的那样

1.
把I2C的DR中的内容放到预先指定的内存区域;同时CNDTR自减一次。

比如利用DMA接收10个数据,每收到一个数据,CNDTR自减一次,跟stop位有什么关系,stop位要10个数据接收完后才出现在总线上啊。

2.
使用DMA方式进行从设备的接收,有个通信长度的问题。

最简单的就是从设备本来就知道一次通信有几个数据要接收,于是在DMA初始化时便可以设定好。

如果从设备并不知道每次通信有几个数据,只能把DMA的BufferSize放到最大,好像是64K,但是需要打开ITEVTEN中断,来监测stop位,以便及时停止DMA。

3.
从lz5楼的问题“从机接收应答后接收了一部分数据后,紧接着从机初始化DMA和I2C,那主机后续发的数据和结束位从机还能不能收到呢”

比如先收了10个数据,然后从设备只是重新配置DMA,比如改变内存中的目的地址,或者做其它一些比较耗时的处理。在这个处理的过程中,master继续发送第11个数据,从设备硬件把11th放在DR中,同时置位RxNE标志;如果从设备还在处理自己的事情,master又发送第12个数据了,从设备硬件把12th放在移位寄存器中,同时置位BTF标志。然后这个从设备就可以按照I2C协议说的那样,把时钟线拉底,并保持。这样master就不会再发了。直到从设备处理完自己的事情,然后11th和12th数据后,master才会继续发送。

但是如果收了一部分数据后,STM32重新配置自己的I2C,(不知道lz为什么会有这种要求),后续还会再接收数据么,是怎样的,没有试过。
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

12
 

多谢解答

                                 多谢解答,我们想了其他办法解决了,我在接收一部分数据的时候需要初始化DMA的时候还会等待一定的时间,在这个时间内看有没有后续的数据过来,如果没有数据过来后才初始化DMA,初始化I2C是由于我遇到了一种情况,就是主机发数据过来,但是从机的I2C端口不接收数据了,有点像吊死的情况!所以初始化DMA的时候连I2C一块初始化了。
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表