项目背景
在开发美标汽车充电功能时,会使用到PLC(power line carrier)PHY芯片,我们使用的是联发科的MSE102x芯片,依靠SPI与该芯片通信,但发现一个比较奇怪的现象,当我使用官方手测定义的MME进行通信的时候总会出现读取到的数据错误的问题,我使用的是TC377,但使用逻辑分析仪去对数据位解析出来的数据却没有问题。本文就解决此问题做一下记录
问题分析
1、硬件问题
当我使用官方的开发板MT5440-S1V1-P4的时候,用同一套PHY芯片驱动没有出现相关的问题,第一反应就是难道硬件有什么不同的导致读取的数据会有时延?但在经过与原厂讨论,更改了PCB布线,并且使用逻辑分析仪观察了CLK信号波形很好,但仍然存在相关问题,基本可以排除硬件问题。
2、软件问题
硬件问题排除后,结合逻辑分析仪得到的结果是正确的,分析我们发送的请求应该问题不大,主要问题应该是出现在采样上,我尝试去查了iLLD库的函数接口以查看是否有更改采样频率或者采样点的相关配置,可惜并没有找到,最终去看了英飞凌的官方用户使用手册,发现其实在TC377中是有对CLK的占空比和采样点配置的寄存器,具体我贴了下图:
大概意思就是说使用ECONz(z=0~7)寄存器的A B C三个寄存器位将一个CLK周期均分成A+B+C份,A:(B+C)是占空比,B与C之间的位置为采样点,比较坑的是官方例程和接口都没有对这几个寄存器进行配置而是在初始化配置函数里默认配了
问题解决
知道了有以上寄存器配置我debug看了一下默认的寄存器配置,A:B+C =1:1(50%占空比,这里没什么问题),问题出在了A=1,B=0,C=1,这就造成了采样点刚好就在CLK的沿上,但凡MSE102x的回复报文有一些延时就可能会采错,我初始化的时候通过直接修改存器B和C的值,将比例改为1:1之后问题得到了完美的解决。