21ic电子技术开发论坛 单片机与嵌入式系统 侃单片机论坛 关于IIC读写周期的问题
发新帖我要提问
返回列表
打印

关于IIC读写周期的问题

[复制链接]
5211|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
因特网用户|  楼主 | 2009-9-27 18:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我看AT24C02的datasheet只规定了最大写周期 大概是5ms,对读周期似乎没有规定啊?是不是也是5ms?
在多任务环境下,用IO口模拟IIC时序,假如正处于写数据阶段,另外一个高优先级的任务就绪了,然后CPU就会切换到高优先级的任务执行,如果高优先级任务执行的时间大于IIC最大写周期,这样是不是就有问题了?
怎么避免这样的情况呢?是不是我的任务优先级划分有问题?
使高优先级任务的执行执行时间尽量短?将高优先级的任务进一步划分成子任务?或者将IIC读写任务的优先级提高?读写前关闭中断?
请大虾说说,在对时序要求比较严格的多任务环境下,驱动程序设计有些什么要注意的?

相关帖子

沙发
ningling_21| | 2009-9-27 19:26 | 只看该作者
写数据之前一般是关闭中断的...

使用特权

评论回复
板凳
wjp2009| | 2009-9-27 20:01 | 只看该作者
既然datasheet没有说,应该就没事

使用特权

评论回复
地板
duojinian| | 2009-9-28 09:26 | 只看该作者
读周期是US级的。可不做考虑。
写周期是ms级的,两次写动作之间至少要10ms,microchip官方推荐16ms。

使用特权

评论回复
5
因特网用户|  楼主 | 2009-9-28 12:08 | 只看该作者
LS没有看清楚我的问题   我是说任务可能被中断  导致读写时间比较长  

请大虾出手啊

使用特权

评论回复
6
因特网用户|  楼主 | 2009-9-29 13:33 | 只看该作者
请xwj 匠人 HWM等大虾出手

使用特权

评论回复
7
HWM| | 2009-9-29 14:37 | 只看该作者
具体时序要求看手册。

给出的建议是(针对模拟IIC):用循环做“基本”时序延时(别听信那些关于循环做延时的评论,只要你的延时相当的短)。“基本”时序延时中关中断,以确保时序的“完整性”。

使用特权

评论回复
8
因特网用户|  楼主 | 2009-9-29 21:25 | 只看该作者

使用特权

评论回复
9
c4fantasy| | 2009-9-30 08:44 | 只看该作者
一般情况下,I2C读不考虑,写的情况下(IO口模拟),一般关中断~我觉得一个项目除了特殊要求一般不会频繁写E2PROM,它也是有寿命的,所以,关那么一小会中断应该可以通过其他途径避免冲突的。至于写程序中的延时,4M下晶振貌似都不用加NOP吧。。

使用特权

评论回复
10
因特网用户|  楼主 | 2009-9-30 12:21 | 只看该作者
恩  顶

使用特权

评论回复
11
因特网用户|  楼主 | 2009-10-9 17:54 | 只看该作者
xwj 过来说话啊

使用特权

评论回复
12
xwj| | 2009-10-9 19:42 | 只看该作者
IIC时序:
每个IIC器件的DataSheet都会显著的标明:支持100kHz、400kHz的CLK时钟(或其他的),这就是最快的总线操作速度了。

而“对读周期似乎没有规定啊?是不是也是5ms?”——读取是非常快的,一读就可以立即得到结果,所以是不需要等待的,也就是所读周期、读速度只取决于时钟CLK速度,而不是5mS等;

而对于“最大写周期”——器件的最大,也就是你必须留个它的最小时间,又或者用查询方式不停的读状态,懂吗?

“如果高优先级任务执行的时间大于IIC最大写周期,这样是不是就有问题了?”——你没有明白“最大写周期”中“最大”的意思,这个是对于器件来说的,是器件的参数值中可能范围,是说器件保证写入时间不会大于“最大写周期”;而不是说外部的写入时序必须小于这个周期!事实上,标准IIC器件都是允许静态操作的,也就是说不管隔多久再接着发送指令, 器件还是会正常执行。


PS:
请搞清楚一个数字到底是参数、还是规定,这完全是两码事!

使用特权

评论回复
13
5880527| | 2009-10-10 09:39 | 只看该作者
我没关中断,会有很多次打断写,也没出过错呀,要不就我的中断程序比较短

使用特权

评论回复
14
因特网用户|  楼主 | 2009-10-10 12:59 | 只看该作者
事实上,标准IIC器件都是允许静态操作的,也就是说不管隔多久再接着发送指令, 器件还是会正常执行。????
是这样吗

使用特权

评论回复
15
hab2000| | 2009-10-10 13:34 | 只看该作者
理解误区:不管延时10ms还是多少,只要你在此期间不要对这个器件进行操作就OK!期间产生中断没有关系,只要你不要再次访问该器件就好!可以自己设一个BUSY标志,到时清除BUSY即可,等待期间想干嘛就干嘛去!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

161

主题

1040

帖子

0

粉丝
关闭 热门推荐
快速回复 在线客服 返回列表 返回顶部