RT5350 OpenWrt下 I2C 问题
RT5350 OpenWrt下 I2C 问题
何凯峰 发表于2年前
RT5350 OpenWrt下 I2C 问题
  • 发表于 2年前
  • 阅读 62
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: 在RT5350下挂了一个I2C接口的OLED用作显示,但是发现在刷屏的时候,系统会复位。问题到现在还没完全解决,记录过程如下。 硬件上,I2C总线上还挂了一个PCF8574T,用作IO扩展。 最近在调试CC3200的I2C接口的时候,虽然没有用此OLED,但是遇到了一个I2C总线被外设锁住的问题(可能由于master读写不正确)。 因此联想,会不会是给oled刷屏的时候,一直占用总线,导致系统(硬件或者软件)某些模块检测认为总线被死锁而主动复位。

发现在挂入oled液晶时候,在刷屏时候,出现系统重启(非看门狗复位),好像是系统主动进行软重启。

怀疑是硬件问题,故移除了PCF8574T以及对应的主板上的4.7K上拉电阻(OLED上也有4.7K上拉电阻)。

且,OLED都用3.3V供电。

但问题依旧。

应该不是应用层的问题,因为移除write函数部分,系统正常。

网上发现一个文章使用ioctl来控制的。

http://blog.csdn.net/zhoufeng037521/article/details/6654539

改为ioctl问题依旧.

现在把单词发送的数据包,改为16+1字节,没有重启。推断是I2C单次数据包过大的问题。

但问题依旧存在。

之前使用write后sleep,现在ioctl后也sleep了才不会重启

因此推断为,进入驱动内核后,ioctl只是拷贝了ioctl的数据,但是二级指针的数据,估计是在每个数据包每次发送前拷贝的,此时如果应用层已经free内存了,就会出问题。

把内存换位静态的变量,也会出现问题,不得其解。暂时只能靠添加延时解决问题。


标签: RT5350 I2C 总线锁住
共有 人打赏支持
粉丝 2
博文 12
码字总数 3798
×
何凯峰
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: