SPI接口是一种比较“历史悠久”的接口了,经常用在处理器与外设通信上。它的特点:主从结构,点对点,同步串行,全双工,协议简单,中等速率(小1M~50Mb/s)。由于上述的特点,时至今日SPI仍广泛使用。但SPI有一些“天生缺陷”使得在一些应用场景下需工程师特别注意,例如物理层还是单端信号,同步时钟有严格时序要求,在速率高的传输线长度较长的情况下,信号边沿容易失真,信号传输delay导致时序容易出问题;信号幅值较高,快速的上升下降沿容易出EMC问题。当然针对这些问题IC厂家做了很多优化,工程师应知道了解这些“后手”并快速解决问题,今天的案例也会聊到。今天分享一个之前遇到的SPI传输问题案例。
问题背景:
便携设备,SOC和外设指纹传感器,指纹传感器是图像式指纹传感器,本质上是CMOS+针对指纹识别应用的ASIC,这种指纹图像相对影像图像的数据量不大,要求速率在小几M到几十M这个级别,用SPI也是够的,所以这类传感器很多用SPI。master是SOC,指纹传感器做slave,速率是25Mbit/s。
试产有些样机出现高概率性指纹识别失败,定位到是SOC和指纹传感器间SPI传输概率性出错。
问题排查:
1.排查主从用的SPI模式是否一致。SPI根据时钟极性和时钟相位分四种模式,这几种模式本质上是时钟/数据采样时机不同。一般master都是支持多种模式,可软件配置的,但slave一般是固定一种模式。两者要一致。排查软件模式配置没问题。
2.排查信号质量,时序波形。掏出4根探头,啪啪啪一顿量,然后对着规格书的时序要求逐一对比。波形,时序排查看起来没问题,符合指纹传感器和SOC的要求,但由于SPI速率较高,DIN信号的建立时间裕量相对不是很大。时序要求一般会写在规格书里面例如:
3.是时序问题还是IC本身问题还是其他原因?想办法将好的造错弄成问题的不良,将不良的修好:
将传输正常的机器通过在SCK,DIN上加RC增加delay,减缓边沿让时序变差,正常机器能造出类似的问题;
将不良机器的SCK串阻去掉使得边沿变陡峭,增加时序裕量,部分不良机器问题消失;
这时可以基本判断大概率还是SPI传输时序的问题,可以往这个方向进一步做些验证。
4.因为测出来的时序波形满足要求,但问题还存在,且测量点是在PCB走线上的,会不会在芯片内部的收发器接收到是不满足时序要求的? 因为IC内部有pin delay等问题,也是有可能的。
没有思路时就大胆假设,摇人,上升问题,总不能坐以待毙。问题捅给SOC原厂和传感器原厂,拉着一起看。题外话,这里也要注意这1 种涉及多方的问题容易产生甩锅的情况,一定要将问题疑点引到各家身上他们才会认真看待,论拉人下水的诀窍。。。
5.SOC厂和传感器厂开始掏出自己的小后门:
传感器:我能调整DO脚的驱动能力,还能让DO边沿再抖一点;
SOC:我能独立微调SPI收发器的采样时机;我还能调整它们的驱动能力;我有自己的模型能仿真下接收到的真实波形是否满足我的时序要求;
接下来就是逐一验证收集数据了:将这些措施排列组合一通验证下来,最后有个调整SOC接收端采样时机参数的措施比较有效,全部不良调整后OK,原来OK的也继续OK;理论仿真接收端也满足;可靠性试验也OK。导入,解决!
问题总结:
- SPI通信速率从绝对值看不高,但其物理层还是单端信号,速率高一点>5Mbit/s设计时要特别注意信号质量,时序问题。
- 对于高速信号,由于仪器测量端和IC接收端中间还有一段传输线效应,测量到的信号波形与IC内部真实收到的信号波形不一定是一致的。也就是高速信号经常提到的远端、近端概念。
- 了解器件的一些“隐藏”功能有助于快速解决该类问题。这类时序问题很常见,IC厂家设计此类收发器IP时都会有预留一些时序调整的“功能”,这类功能一般不会写在规格书里面。通过软件配一下寄存器可比改板改堆叠代价小很多!
登录 或 注册 后才可以进行评论哦!
还没有评论,抢个沙发!