OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2220|回复: 2

战舰版例程中IIC stop函数时序问题

[复制链接]

41

主题

226

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
480
金钱
480
注册时间
2017-7-29
在线时间
233 小时
发表于 2023-7-14 11:36:51 | 显示全部楼层 |阅读模式
10金钱
在旧版本战舰版V3的库函数例程和探索者等一些板子的模拟IIC中,IIC_STOP这个函数的时序有点疑问。原程序中对于EEPROM测试时是没有影响的,但是单独把这部分IIC时序拿出来,调整到其他IO口,即不接任何IIC设备,我这边通过逻辑分析仪测试,发现会在波形的第一个bit位中被拉高。原例程之所以没
实际更改时序后对于EEPROM的测试也是正常的。具体的分析和区别如下:
原例程的时序:
1.png
更改后的时序(这部分是抄潘多拉开发板的IIC时序):
2.png
两者的区别在于,更改后的时序是“在SCL的高电平期间,SDA跳转后,SCL需要再次置低才能结束STOP“(原时序没有SCL置低的过程)
在EEPROM的官方手册中,stop信号的时序确实没有SCL的置低过程。
我的理解是这样的,对于模拟IIC来说,Star信号一开始是SCL为高,而Stop信号结束如果不将SCL置低,则有可能使得信号传输无法分清结束标志位,导致后续的时序混乱。不知道是不是这样

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

446

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4133
金钱
4133
注册时间
2018-5-14
在线时间
902 小时
发表于 2023-7-14 15:24:12 | 显示全部楼层
第一次看到IIC stop需要把SCL拉低的,你哪一份手册看到IIC的停止信号是这样的,你这个代码使IIC总线没有成功Stop,然后EEPROM不进行固化操作后省去了2.5-5ms的放电时间,故而连续写入貌似正常了。实际根本没有写入吗,只存放在EEPROM的8Byte缓存区域。EEPROM在STOP后不响应是因为它存数据有一个放电时间,这个时间在手册中写的很清楚需要2.5-5ms,你连续写入不加这个延时就会出现第二次以后操作不成功。
修复办法也很简单,改回STOP函数,每次写入增加5ms延迟。或者8Byte页写方式,每次页写完添加5ms延时。
回复

使用道具 举报

41

主题

226

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
480
金钱
480
注册时间
2017-7-29
在线时间
233 小时
 楼主| 发表于 2023-7-18 16:39:11 | 显示全部楼层
姚先起 发表于 2023-7-14 15:24
第一次看到IIC stop需要把SCL拉低的,你哪一份手册看到IIC的停止信号是这样的,你这个代码使IIC总线没有成 ...

不是,我说的是EEPROM改和没改都能成功,我是用其他IIC的传感器测试,原战舰板的IIC时序就不成功,但是潘多拉开发板的IIC时序就成功
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 04:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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