野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13322|回复: 2

关于f429中I2C读写EEPROM一点问题与发现

[复制链接]
发表于 2016-7-21 17:44:49 | 显示全部楼层 |阅读模式
今天一下午全纠结在这了,还有上午。。下面这个是等待EEPROM 完成内部时序的函数,经过调试,这个函数运行结束起始位发送标志SB为1。在这函数之后就是判断总线是否空闲,开始发送起始信号。。。这时候SB位是1,,
不过不影响实验结果,结果显示很好。纠结一下午也没有把这个SB位在等待函数中清除掉。。
QQ图片20160721171447.png
第二点是读数据函数中有下面这句话,可以省略,因为不论是ADDR,还是起始信号发送位SB,都经过软件序列清零了,
QQ图片20160721171540.png
第三个就是问题了,在读最后一个数据的时候,按照代码顺序在发送数据之前就产生停止信号了,
我猜想是因为没有发送数据,所以不能产生非应答位,所以不能产生停止信号,直到代码下面的最后一个数据发送完成,再产生停止信号。。。
AT24C02:The sequential read operation is terminated when the
microcontroller does not respond with a “0” but does generate a following stop condition

大神,是这样么???
先产生停止信号不会影响时序什么的吗?(我不懂,瞎说的,不要喷。。)
QQ图片20160721171553.png


我觉得把产生停止信号放在循环外面,先关闭应答,再发送最后一位数据,最后停止信号,这样便于理解一点。。。。。
回复

使用道具 举报

发表于 2016-7-21 18:04:54 | 显示全部楼层
按照iic协议是NACK及stop位都是在收到一个字节之后的,所以这样配置是预配置,当stm32收到eeprom一个字节后,才产生这些信号。

回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-21 18:40:55 | 显示全部楼层
随风 发表于 2016-7-21 18:04
按照iic协议是NACK及stop位都是在收到一个字节之后的,所以这样配置是预配置,当stm32收到eeprom一个字节后 ...

有预配置的说法在里面,,,非常感谢你的解答!
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 02:26 , Processed in 0.028418 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表