SPI Flash数据移位

背景

C6678外挂了一片SPI接口的Nor Flash,型号为Micron N25Q128A13BSF404F,其容量为128Mbit,由于电平匹配问题中间使用了一片EPLD作电平转换,将6678的1.8V电平逻辑转换为3.3V。

问题描述

开发和调试很顺利,在完成软件概要设计后约一周内就完成了所有编码和部分测试工作。但是在测试过程中发现当SPI的时钟配高一些(50MHz)的时候,就会出现Flash初始化不通过,具体现象是读取ID不正确,与正确的ID总是移位1个比特。当把SPI时钟调低到20MHz后又恢复正常,而在30~40MHz左右时又总是一会儿正常一会儿错误。

分析排查

这时先怀疑芯片不支持这么高时钟速率,然而查手册发现其中明确提到最高支持时钟速率为108MHz。然后又询问硬件设计人员物料来源,得知通过正常途径采购,芯片本身应该没有什么问题。最后问题应该还是归结到软件问题上。

先查SPI驱动中对分频的配置,仔细对比手册没有找到问题。然后用示波器测量时钟引脚频率,仍然正常。测量读ID时主机发送的命令信号,依然正常。再测量不同频率下6678的接收引脚信号,在频率逐渐提高过程中时钟采样沿居然逐渐接近了数据波形的边沿处!最终40MHz时完全采在了前一个bit的后部,结果当然会移位1个比特。

根据这个测量结果仔细分析,终于找到了其中的原因。原来是中间的EPLD在捣鬼,信号经过它时除了电平转换,还会有一定的时延效应,正是这个时延导致了数据错误。详细分析如下。

理论分析

SPI总线由SPICS、SPICLK、SPISIMO和SPISOMI组成,其中前三根由6678驱动,后一根由N

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值