TN256 Demo模组移植到Xilinx平台调试记录--I2C配置模块

背景

        小马哥发布Altera平台的TN256热成像模块Demo代码后,有网友想移植到Zynq开发板上,但是遇到了模组数据输出全是0的现象。根据前期调试的经验看,这种情况一般是I2C配置没有成功导致的。

调试过程

        想要解决问题,首先要尝试复现问题,排除假情况、确认真问题。

        问题复现很容易,找一块正点原子领航者Zynq开发板,将代码移植过去,用ILA把TN256模组输出的数据抓出来,果然现象和网友描述的一样,I2C配置后模组有VS和HS输出,但是数据全0(夹杂着极少量的其他数据)。

        经过调试发现,该问题是跟编译相关的,有时候能编译出好的版本来,探测器输出一些有响应的正常数据,因此我在代码中加了些断言代码,只要I2C配置期间出现了NACK那么debug信号就会拉高,最终实验现象是,只要是编译出的版本有问题,I2C配置期间就一定会有NACK,这也就意味着问题可以确定是I2C配置模块导致的。

解决过程

        因为问题和编译相关,有时候编译结果是好的,有时候不行,这种情况根据经验十有八九是时序问题,但是I2C的SCLK时钟频率只有100KHz,如此低的频率有时序问题似乎难以理解。因为Xilinx平台直接用ILA抓I2C的双向数据不方便,没辙了只能返回Altera平台用Signaltap抓一抓I2C的配置波形(外部的逻辑分析仪用起来没有Signaltap方便)。

        抓波形果然抓出了点问题,如下图所示是I2C的Start条件,可以看出起始条件后产生SCLK低电平发生后SDA立即拉高了,这里可能误触发停止条件,所以这里SCLK拉低时机应该提前一点,时序问题应该就出在这里。

        好在虽然代码是很多年前写的烂代码,但毕竟自己写的,在哪里改很清楚,于是只修改了一行代码,得到如下图所示的正常的I2C起始条件波形。

        代码修改位置:在I2C.v文件的Line146增加下图绿框中的代码即可,代码修改后I2C配置稳定,不再出现不同编译结果I2C配置不生效的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小马哥FPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值