最近调试了 S32K144 和公司的一款芯片,两者进行 SPI 通信,来测试 SPI
速率最大能达到多少。
一般 SPI 速率可以通过调整系统时钟和 SPI 配置里面的分频系数来提升或
降低。
此次调试将 S32K144 作为主机 公司芯片作为从机。SPI 时钟由主机这边提供。
先将 S32K144 系统时钟调整为 80Mhz,然后经过两个分频(外设时钟两分频,
SPI 配置里面两分频,已经是最低分频,且不能再低),SPI clock 为 20M。
然后再调整系统时钟来提高 SPI 通信速率。
当调整系统时钟为 160/140M 的时候,SPI clock 可以达到 40/35M,这时候
会发现:主机往外发从机收数据没问题,从机发主机收数据出错。
通过示波器抓波形和硬件工程师分析:
频率太高的话 从机发的数据会有延迟,这个延迟可能是因为从机数据过来要走
一段线(线越短越好,用杜邦线的话速率会大打折扣),并且从机芯片有一定
的反应时间。导致从机发来的数据有一定延迟。所以要设置延迟采样以保证时
钟能等一等从机数据的到来,不然的话会采样到前一位的数据,导致数据错乱。
经过查看 S32K144 的数据手册,发现
Conguration Register 1 (CFGR1)的 SAMPLE 位可以设置为延迟采样。
如下图所示。
然后更改以后发现 SPI CLOCK 可以在 35M 下正常跑了。但是超过 35 的话,
就跑不起来了,通过 debug 发现,主机收数据的时候一直在等待接收 FIFO 满,
SPI 设置的 FrameSize 为 8bit,感觉是接收 bit 位有丢失,导致一直等待。
(个人感觉速率已达到极限了)