打印

关于IO口模拟IIC的疑惑

[复制链接]
2416|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lyj317|  楼主 | 2014-4-10 17:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用普通IO口模拟IIC来对24C04进行读写操作,比如我先向sda线上发送地址 0000 0011,一般程序是用for循环来写这个值的,比如我写到了第二位(将sda置高),与此同时来了一个中断,那么这个时候会进入中断isr,那么sda口上始终是保持高电平的,24c04接收到的也是高电平信号,也就是说24c04接受到的地址信号可能是1111 1111,也可能是其他数,那么这样还能确保读到的数据的正确性吗?

相关帖子

沙发
lyj317|  楼主 | 2014-4-10 17:29 | 只看该作者
小弟用逻辑分析仪看了一下波形,得到一下启发:
1.中断不能太过频繁(给主程序预留一些时间)
2.中断程序执行的时间也不要太长
这样的话模拟iic读写是不太可能出现时序混乱的,不过理论上来说是有可能发生错乱的

使用特权

评论回复
板凳
joyme| | 2014-4-10 17:59 | 只看该作者
同步通信是不会有问题,最多就是通信速度慢了,对异步通信就有问题

使用特权

评论回复
地板
lyj317|  楼主 | 2014-4-10 18:38 | 只看该作者
che180 发表于 2014-4-10 17:55
模拟I2C 的SDA SCL,当SCL为高电平时读取SDA数据,理论上SCL一个脉冲高电平读取SDA一位数据,当在发送 ...

谢谢解惑

使用特权

评论回复
5
ayb_ice| | 2014-4-10 19:14 | 只看该作者
LZ还没有搞清楚基本的东西
数据是在时钟边沿被锁存的

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
lyj317 + 1 很给力!
6
ningling_21| | 2014-4-10 19:16 | 只看该作者
读写IIC期间关闭总中断的...

使用特权

评论回复
7
lirunze| | 2014-4-10 19:53 | 只看该作者
同意楼上

使用特权

评论回复
8
coody| | 2014-4-10 23:13 | 只看该作者
I2C通讯中途被中断多久都无所谓,不会引起错误。

使用特权

评论回复
9
ayb_ice| | 2014-4-11 06:42 | 只看该作者
ningling_21 发表于 2014-4-10 19:16
读写IIC期间关闭总中断的...

别误导人家了

使用特权

评论回复
10
witant| | 2014-4-11 09:10 | 只看该作者
同意三楼的说法,IIC通讯属于同步通讯,由于读写数据位的速度是由SCL引脚控制,被中断是不会出现问题的
可以网上搜一些IIC通讯时序参考一下(比如24LC02的IIC时序图)
最后再同意10楼一下

使用特权

评论回复
11
每天都要吃肉肉| | 2020-9-27 16:07 | 只看该作者
我能不能问一下,怎么往sda线上发送00000011,我都被这个问题难到几个星期了

使用特权

评论回复
12
xyz549040622| | 2020-9-27 22:17 | 只看该作者
每天都要吃肉肉 发表于 2020-9-27 16:07
我能不能问一下,怎么往sda线上发送00000011,我都被这个问题难到几个星期了 ...

网上搜一搜模拟I2C的视频就知道了,在SCL的配合下,依次在SDA引脚输出对应的高低电平就好了。

使用特权

评论回复
13
每天都要吃肉肉| | 2020-9-28 09:09 | 只看该作者
xyz549040622 发表于 2020-9-27 22:17
网上搜一搜模拟I2C的视频就知道了,在SCL的配合下,依次在SDA引脚输出对应的高低电平就好了。
...

好的,谢谢

使用特权

评论回复
14
masterqqq| | 2020-9-28 10:52 | 只看该作者
时钟和校验都可以保证

使用特权

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

本版积分规则

5

主题

17

帖子

0

粉丝