IIC总线常见调试故障分析

一、问题的提出

在某项目研发过程,软件与FPGA联合调试xx芯片IIC总线过程中,遇到故障现象:软件发起一次IIC操作后,未收到ACK应答响应。通过查询FPGA内部寄存器,可获知以下信息:软件当前发起的IIC写操作发送字节数为4,FPGA已发送的字节数为1,因此FPGA未向软件上报ACK应答响应;但通过读取数据寄存器确认软件已将4个字节数据正确下发给FPGA。经过以上分析,当前IIC总线通信失败的基本原因已定位到FPGA仅成功发送了一个字节,其余三个字节未发送。下面主要描述一下具体原因的定位过程及解决方法。

二、解决思路及实践情况

FPGA与xx芯片IIC总线接口管脚为SCL以及SDA。通过示波器观测SCL与SDA信号,时序波形如图1所示,IIC总线状态从开始(START)状态跳转到发送延迟状态,再跳转到发送状态,经过8个SCL时钟周期将第一个字节数据(D0)发送完成,第9个时钟周期收到从设备(xx芯片)反馈回的ACK应答响应,之后跳转到结束延迟状态,最后跳转到结束状态。因此,当前故障现象为:FPGA成功发送了第一个字节,并且总线上也得到了从设备的ACK应答响应,但是FPGA并没有继续发送后续字节。

图片

图1

首先分析到的原因是FPGA是否检测到从设备反馈回的ACK应答响应。通过走查代码,发现代码编写过程中对SDA管脚做了如下处理:assign PPC_SDA_7 = sda[6]。问题出于此,SDA管脚应该为双向管脚,上述处理导致FPGA仅发送数据给xx芯片,但不接收xx芯片发送的数据,因此xx芯片反馈回的ACK信号FPGA并未检测到,因此不再发送后续3个字节。经过修改代码,重新测试IIC总线,验证通过,正确的IIC总线时序如图2所示。

图片

图2

硬件电子工程师

一名技术爱好者,我的宗旨是:互相吹捧,共同进步!

31篇原创内容

公众号

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值