Cypress技术论坛
直播中

陈鹏

7年用户 211经验值
私信 关注
[问答]

I2CHW-SDA线路低,处理器不会启动后复位

你好,
在我们应用我们使用i2chw模块(配置为“主人”)。我们用它来读写EEPROM存储器和I/O扩展。
我们的问题:
有时,由于一个断电,主处理器复位。有时后,I / O扩展或EEPROM保持SDA线低。
现在一个I2C奴隶保持SDA线低,我们主要的处理器不会启动后复位,因为它无法完成一个I2C传输。你怎么判断这样的事情,你如何解决这个问题?
我们的解决方案:
在wiki页面上,我发现:
“有一对夫妇的方式从这种情况下恢复。
方案一:为设备复用SCL / SDA引脚GPIO,最简单的事情就是配置引脚GPIO的操作和切换到奴隶释放SDA SCL。在这一点上你应该能够恢复正常运行。
选项2:许多设备不复用SCL / SDA自I2C I/O细胞通常是特殊的开漏细胞GPIO。一个解决方案已上报工作甚至在这些设备上。通过“免费的数据格式”,然后读一个字节I2C将立即开始发送时钟输入的数据配置I2C(而不是试图发送一个地址)。这可以用来免费巴士。”
来源:http://processors.wiki.ti.com/index.php/i2c_tips
我们的应用程序选项1可能是答案。所以我们写了一个解决方案和应用测试。我们现在这个工作,不给任何问题。
你可以在附件中找到它。
问题是:
你看到的东西怎么可能出错而跑步吗?
有更好的解决方案吗?更快/更干净的代码或…
默温
I2C.C.ZIP
913字节

回帖(5)

杨军

2019-9-6 08:51:14
受到警告
提示: 作者被禁止或删除 内容自动屏蔽
举报

陈鹏

2019-9-6 08:58:19
Dana
I2C Slave的力量不是由主处理器门控。它也不可能做到现在。
函数“I2CHWY1BBWrEnEnter”和“I2CHWY1FRADADYBACK”都不返回值,在那里可以看到是否存在错误。返回一些信息的唯一函数是“I2CHWY1BReADI2cStand”。
你的意思是:“I2C规范没有限制,比如SMBuss。”
在软件中实现计时器意味着以下内容:
-增加一个额外的计时器。需要一些空间/资源在处理器。
-添加代码来处理定时器/中断,并处理可能的错误状态。
现在该解决方案为我们工作。如果I2C从设备仍然给出错误,在处理程序试图解决错误之后,这意味着硬件问题会出错。对我们来说,添加一个定时器和需要的软件来处理这个错误会有什么好处呢?
这个解决方案的另一个优点是,如果我们需要更新一个软件版本,我们替换I2C.C源文件,重新编译这个项目,我们就完成了。
谢谢你的回答,
默温
举报

杨军

2019-9-6 09:11:56
你的意思是:“I2C规范没有限制,比如SMBuss。”
从SMBUS规格有一个极限到Celk拉伸。
问候,Dana。
举报

陈鹏

2019-9-6 09:28:56
Dana
你能告诉我,这是如何与一个I2C奴隶的问题保持SDA线低?
我认为时钟拉伸是I2C从保持低的SCL线在一定的时间内以降低总线速度。
当做,
默温
举报

更多回帖

发帖
×
20
完善资料,
赚取积分