楼主: longdelu

[已解决] LPC 824 I2C问题

[复制链接]

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24890
最后登录
2025-7-21
发表于 2016-11-11 09:53:06 | 显示全部楼层
longdelu 发表于 2016-11-10 18:25
如果代码没有问题(其实我个人认为是没有问题的),我在官方代码的基础上只是写了一个测试用例而已,如果 ...

楼主你好!
我这边再做一个长时间测试试试,目前已经跑了一个小时没有出问题,不过我这边上拉是2.2K的。
你现在那边如果有条件,跑两个板子,不挂任何测试设备看看是否会死机。
1. 上拉2.2K,400K速率跑
2. 上拉2.2K, 200K速率跑。
引脚都用PIO0_12,PIO0_13.
看看多久会死机。
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

39

帖子

0

注册会员

Rank: 2

积分
103
最后登录
2021-1-27
 楼主| 发表于 2016-11-11 10:16:54 | 显示全部楼层
小恩GG 发表于 2016-11-11 09:53
楼主你好!
我这边再做一个长时间测试试试,目前已经跑了一个小时没有出问题,不过我这边上拉是2.2K的。
...

我想说,你那边的测试现像和我的较为吻合,当初我这边接上拉电阻非常小的时候,试过接了一个1.5K左右的上拉电阻阻值,发现的确是较稳定,很久是没有测到这个问题,想说,为什么接4.7K或10K时速率降到200K左右,发现在DEBUG的时候还是很容易死机,就算我没接任何测试设备,你那边4.7K或10K的时候,没接测试设备可以复现这个问题吗?还有,你觉得我写的这个测试用例的程序是否有问题?PS:方便留个其它联系方式沟通吗?有时候论坛反馈不是很及时,谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24890
最后登录
2025-7-21
发表于 2016-11-11 10:55:21 | 显示全部楼层
本帖最后由 小恩GG 于 2016-11-11 10:56 编辑
longdelu 发表于 2016-11-11 10:16
我想说,你那边的测试现像和我的较为吻合,当初我这边接上拉电阻非常小的时候,试过接了一个1.5K左右的上 ...

我这边情况是这样的,如果不挂外部设备,那么debug和退出仿真都还没出现问题,现在退出仿真一直在运行测试中。
挂上外部设备,意味着总线上面的电容加大,时间值加大,I2C动态特性变差,而且测试速率已经在400K,也就是I2C1的极限值情况下,如果动态特性一旦变差,很容易出现问题。
上拉电阻加大,道理和总线电容加大也是一样,因为时间(tao值)t=RC。
你那边改变为1.5K的时候,测试多久没有问题?
你可以看看datasheet,I2C的动态特性,看看出现问题的时候,各个动态值是否还在范围内?
你说的debug也有问题,那么把上拉改为你之前说的1.5K,不加逻辑分析仪,不加示波器,看看是否出问题?外部设备会加大总线电容。
还有,你降低频率,同样不要加外部测试设备,是否还有问题?

关于支持方式,我们只是支持在线支持,我看到恩智浦内部也有问题帖子:
http://community.nxp.com/thread/438529
这个也是你问的吧?我也接了这个题,所以我们目前可以就在与非网中交流,比较方便。
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

39

帖子

0

注册会员

Rank: 2

积分
103
最后登录
2021-1-27
 楼主| 发表于 2016-11-11 11:35:12 | 显示全部楼层
小恩GG 发表于 2016-11-11 10:55
我这边情况是这样的,如果不挂外部设备,那么debug和退出仿真都还没出现问题,现在退出仿真一直在运行测试 ...

你好,NXP内部的那个帖子的确是我发的,因为我在里面发现一个帖子,他报告的问题和我很类似,他用的时主控为LPC812,不过他当初报告上拉电阻为2.2K也有问题,也许和他写的代码有关系。我从这个帖子里面找不到我想的信息。http://community.nxp.com/thread/421791

至于,你说时I2C动态特性问题,上拉电阻为10K,4.7K的时候,速率为400K,当初我用示波器测量估算了其SCL的上升沿时间为180ns~220ns,对于那种高低电平的保持时间,当初呼略没有注意到。用上拉电阻为1.5K的时候,我的确是没有测试到那个问题,测试最长时间约为一天。不过在10K或4.7K的时候,我把速率降到100K,它在DEBUG仿真是还是很容易死,不过此时我是把引换到PIO016,PIO18上面测而已。也许这跟外围硬件的确关系较长。想说,为什么用大一点电阻,速率快一点为什么都不行。感觉在LPC824上面对这些要求较其他MCU苛刻
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24890
最后登录
2025-7-21
发表于 2016-11-11 12:56:53 | 显示全部楼层
本帖最后由 小恩GG 于 2016-11-11 13:11 编辑
longdelu 发表于 2016-11-11 11:35
你好,NXP内部的那个帖子的确是我发的,因为我在里面发现一个帖子,他报告的问题和我很类似,他用的时主 ...

测试使用1.5K之前没有遇到问题的情况,在debug下测试,看看你那边会不会有问题,千万不要加外部的测试设备。
因为其实如果用普通IO口,不是快速的IO口,它不是真开漏,内部还是有些电路的,所以如果外部的电阻大,会造成动态特性差。
我这边在debug的时候,如果不挂外部设备,还是不会出现问题。我认为挂外部设备导致问题,还是和我之前说的一样,电路外部环境变差了,导致I2C的动态特性差,容易引起问题。
速率快,其实是400K不仅达到了主机的最大值,400K也是你从机的极限值,两个都在极限值下,如果出现一些小的情况,可能就会引起总线通信问题。
另外,debug其实也是一个外部设备。
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24890
最后登录
2025-7-21
发表于 2016-11-11 13:28:40 | 显示全部楼层
longdelu 发表于 2016-11-11 11:35
你好,NXP内部的那个帖子的确是我发的,因为我在里面发现一个帖子,他报告的问题和我很类似,他用的时主 ...

你说的:不过在10K或4.7K的时候,我把速率降到100K,它在DEBUG仿真是还是很容易死
有没有加外部测试器件?
你如果条件允许,不加任何测试,不加debug,1.2K上拉,400K, 然后一直跑测试看看是不是有问题。
还有,关于你的代码,如果你是项目使用,强烈不建议你使用查询方法,查询方法也容易让程序死机。建议你改用中断方式。
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

39

帖子

0

注册会员

Rank: 2

积分
103
最后登录
2021-1-27
 楼主| 发表于 2016-11-11 13:39:54 | 显示全部楼层
小恩GG 发表于 2016-11-11 13:28
你说的:不过在10K或4.7K的时候,我把速率降到100K,它在DEBUG仿真是还是很容易死
有没有加外部测试器件 ...

10K或4.7K的时候,我没有外接测试设备,它在DEBUG下还是死机了
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

39

帖子

0

注册会员

Rank: 2

积分
103
最后登录
2021-1-27
 楼主| 发表于 2016-11-11 13:44:39 | 显示全部楼层
小恩GG 发表于 2016-11-11 13:28
你说的:不过在10K或4.7K的时候,我把速率降到100K,它在DEBUG仿真是还是很容易死
有没有加外部测试器件 ...

想说,产生这种的现像的原因多是由硬件方面引起的对吗?或者说使用较小的电阻可以避免这个问题产生?
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24890
最后登录
2025-7-21
发表于 2016-11-11 13:55:28 | 显示全部楼层
longdelu 发表于 2016-11-11 13:39
10K或4.7K的时候,我没有外接测试设备,它在DEBUG下还是死机了

外部上拉变为1.2K,原则上加1K以上是可以的。
但是具体情况要视电路动态特性来,上拉越大,动态特性越差。
然后再测试试试。
还有,你的外部EEPROM的芯片是不是正品呢?
不要外部器件质量差,跑一段时间就出问题,如果可以的话,你可以那边同样用824做从机跑跑看。
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24890
最后登录
2025-7-21
发表于 2016-11-11 13:57:55 | 显示全部楼层
longdelu 发表于 2016-11-11 13:44
想说,产生这种的现像的原因多是由硬件方面引起的对吗?或者说使用较小的电阻可以避免这个问题产生? ...

另外,你的代码,如果是产品使用,强烈建议你换为中断。
这种代码都是while的,产品中使用是很容易死机的。
不知道你的PIO0_10,PIO0_11,如果这两个引脚没有做其他的I2C使用,还是建议你使用真正的I2C引脚比较保险些。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-21 16:14 , Processed in 0.104887 second(s), 29 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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