I2C通信问题

枫叶会再红吗 2017-08-04 07:47:55
今天客户说 开机读取TP一些信息时,开始能读取成功,然后就失败了,就是例如开始要读5个tp info ,第一个读取成功了,第二个就失败了,无语死了。请问下,这开始能读到数据,说明i2c是通的,但是后面通信失败,我想到的点有i2c通信速率问题,i2c通信失败那tp掉电了,同一总线下还有其他的设备也在工作,求助大家还有什么原因会这样了?
...全文
872 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly 100% 2017-08-24
  • 打赏
  • 举报
回复
降速 增大两次读写间隔 检查上拉
YuZhuQue 2017-08-23
  • 打赏
  • 举报
回复
对 i2c的速率会直接影响到SCL的建立时间,进而影响读取SDA.
liebecl 2017-08-22
  • 打赏
  • 举报
回复
速率很重要啊
枫叶会再红吗 2017-08-11
  • 打赏
  • 举报
回复
问题找到了 i2c速率降到100K就通信正常了 坑爹的客户 开始就跟他说了叫他降速率 他说降了 结果没有成功 用la抓的波形scl老是很奇怪,通信失败那就一直高,没正常高低电平,通信好的那有时会拉好长的,读到的数据不正确,ack响应时间也过长了,对比客户以前用过的是好的tp的i2c波形 才又怀疑到通信速率,la看下了我曹还是400k,压根没改过来
small_person 2017-08-10
  • 打赏
  • 举报
回复
连续下两个command 可以收到数据,下第三个就不能读取数据了。把这三个命令发送的数据写出来。
枫叶会再红吗 2017-08-07
  • 打赏
  • 举报
回复
引用 7 楼 jklinux 的回复:
[quote=引用 6 楼 zxc18076752045 的回复:] [quote=引用 5 楼 jklinux 的回复:] [quote=引用 4 楼 zxc18076752045 的回复:] [quote=引用 2 楼 jklinux 的回复:] 这个问题有可能是i2c控制器结束一次数据传输后需要一定的延时有关。 建议把每次的i2c_transfer函数调用后,加上延时10ms试看看
这个有设置延时的是5ms[/quote] 驱动代码是自己写的?i2c控制器的速率设置是多少? 现在的SOC都有好几个i2c控制器了, 用不着多个设备接在同一控制器上[/quote] 代码是公司写的,速率是400k,让客户改低试了也没用,也跟客户说过让它一个总线上只挂tp试下,现在就等客户抓波形了 想不出什么其他的办法了,,[/quote] 什么样的SOC方案? 公司写的驱动确定工作正常啊, 电容屏的都需要在中断处理函数里关闭中断,接收完数据后再重新打开中断的。中断处理需要分成顶半部和底半部来处理[/quote] 没有问是哪个平台的,忘记了,,公司的code试验过好多平台了,跑过很多次了,这肯定又是客户他的平台上有什么鬼因素,, code都没有跑到中断哪,刚进probe读tp_info 失败了就直接退出probe了
jklinux 2017-08-07
  • 打赏
  • 举报
回复
引用 6 楼 zxc18076752045 的回复:
[quote=引用 5 楼 jklinux 的回复:] [quote=引用 4 楼 zxc18076752045 的回复:] [quote=引用 2 楼 jklinux 的回复:] 这个问题有可能是i2c控制器结束一次数据传输后需要一定的延时有关。 建议把每次的i2c_transfer函数调用后,加上延时10ms试看看
这个有设置延时的是5ms[/quote] 驱动代码是自己写的?i2c控制器的速率设置是多少? 现在的SOC都有好几个i2c控制器了, 用不着多个设备接在同一控制器上[/quote] 代码是公司写的,速率是400k,让客户改低试了也没用,也跟客户说过让它一个总线上只挂tp试下,现在就等客户抓波形了 想不出什么其他的办法了,,[/quote] 什么样的SOC方案? 公司写的驱动确定工作正常啊, 电容屏的都需要在中断处理函数里关闭中断,接收完数据后再重新打开中断的。中断处理需要分成顶半部和底半部来处理
枫叶会再红吗 2017-08-07
  • 打赏
  • 举报
回复
引用 5 楼 jklinux 的回复:
[quote=引用 4 楼 zxc18076752045 的回复:] [quote=引用 2 楼 jklinux 的回复:] 这个问题有可能是i2c控制器结束一次数据传输后需要一定的延时有关。 建议把每次的i2c_transfer函数调用后,加上延时10ms试看看
这个有设置延时的是5ms[/quote] 驱动代码是自己写的?i2c控制器的速率设置是多少? 现在的SOC都有好几个i2c控制器了, 用不着多个设备接在同一控制器上[/quote] 代码是公司写的,速率是400k,让客户改低试了也没用,也跟客户说过让它一个总线上只挂tp试下,现在就等客户抓波形了 想不出什么其他的办法了,,
jklinux 2017-08-05
  • 打赏
  • 举报
回复
这个问题有可能是i2c控制器结束一次数据传输后需要一定的延时有关。 建议把每次的i2c_transfer函数调用后,加上延时10ms试看看
of123 2017-08-05
  • 打赏
  • 举报
回复
用示波器抓一下就清楚了。 如果每次都是只能接收到一个字节,那很可能是接收方没有在 ACK 位上给出 ACK 回应(低电平)。因此发送方认为传输结束了。
jklinux 2017-08-05
  • 打赏
  • 举报
回复
引用 4 楼 zxc18076752045 的回复:
[quote=引用 2 楼 jklinux 的回复:] 这个问题有可能是i2c控制器结束一次数据传输后需要一定的延时有关。 建议把每次的i2c_transfer函数调用后,加上延时10ms试看看
这个有设置延时的是5ms[/quote] 驱动代码是自己写的?i2c控制器的速率设置是多少? 现在的SOC都有好几个i2c控制器了, 用不着多个设备接在同一控制器上
枫叶会再红吗 2017-08-05
  • 打赏
  • 举报
回复
引用 2 楼 jklinux 的回复:
这个问题有可能是i2c控制器结束一次数据传输后需要一定的延时有关。 建议把每次的i2c_transfer函数调用后,加上延时10ms试看看
这个有设置延时的是5ms
枫叶会再红吗 2017-08-05
  • 打赏
  • 举报
回复
引用 1 楼 of123 的回复:
用示波器抓一下就清楚了。 如果每次都是只能接收到一个字节,那很可能是接收方没有在 ACK 位上给出 ACK 回应(低电平)。因此发送方认为传输结束了。
我也想看下波形最直接, 可以一次读多个字节,我这情况是开机时,会先下command 然后读几个byte的info,然后在下command,再读几个byte的info,第三次再下command读info时 i2c就通信失败了

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧