新手上路,作为刚刚步入行业的新人,简单声明本文及之后的文章仅作为个人成长路上的学习笔记,如果各位大佬发现小弟哪里写的不对或者不清晰的地方,欢迎指正,万分感谢!
由于工作的需要,过去的时间里经常接触到SPI总线这个东西,自己也在网上学习了一些基础理论,大概了解了他的工作原理太深的原理不敢恭维,SPI,串行外围设备接口,是高速的全双工的通信总线。顾名思义,它常作为MCU与外设芯片的通信接口,常见的有EEPROM,Flash,AD转换器,其他驱动芯片等等(我在工作中主要是用来主处理器与电磁阀驱动芯片或者传感器芯片通信)。全双工代表其能够同时发送和接收8(16)bit数据。它总共有四个引脚构成:SDI输入、SDO输出、CS片选、SCLK时钟。其中CS通常是低有效,即在数据传输时CS被拉低,完成后恢复高电平,SCLK即为通信的同步时钟信号。通信模式有两种:MOSI(master out slave in)主机输出从机输入和MISO从机输出主机输入。
MPC560P44或者P50芯片的DSPI模块有4个modules,在使用SPI通信时首先要选定使用了哪个module,通过配置相应引脚的PCR寄存器即可,此处要注意引脚复用。接下来就是时钟极性、时钟相位,这两个配置位结合可配置出四种SPI模式。
- CPOL = 0,CPHA = 0:时钟高有效,上升沿采样
- CPOL = 0,CPHA = 1:时钟高有效,下降沿采样
- CPOL = 1,CPHA = 0:时钟低有效,上升沿采样
- CPOL = 1,CPHA = 1:时钟低有效,下降沿采样
然后是传输数据的size,高低位优先级,传输速率传送延迟时间等。当然这些包括前面说到的时钟极性和时钟相位都要参考你要通信的外设来决定,例如,某芯片的手册有以下描述:
要求的数据包长度为32,2 phases 那么就是frame size 为16bits,CS为低有效,SCLK为高有效。而对应的数据结构由OP、RS、D、CR组成,文档中会对各个部分进行详细的描述,例如CR是如何计算得到的,RS有哪几种状态。与本文的主旨没有太大联系,重点就是解读芯片手册,这里就不再赘述了。
继续浏览文档,通常会看到一个芯片通信接口的时序图,如下:
与时序图对应的一个表格中描述了各个参数的含义及范围,如下:
从这里得到了SCLK的频率应该在8MHZ以下, 而各个时间参数t也有了相应的范围描述,含义的话都能理解,而且网上也有好多相关的文章,可以多看看。假如MCU配置完成后时间参数与之相悖,那么通信是无法建立的。下面以560P44L3芯片为例,查找到了以上时间参数所对应的MCU寄存器。
SCLK的频率计算方法:
,Fsys为system clock,DBR、PBR和CPHA还决定了时钟的duty cycle,在手册中有表格与之对应。此处得到的rate值应该在上述表格要求范围之内才行。
Tsucs对应的时间通过CSSCK[0:3]及PCSSCK[0:1]配置实现,计算方法在手册中有描述。
Thcs对应的时间通过ASC[0:3]及PASC[0:1]配置实现,计算方法在手册中有描述。
Thics对应的时间通过DT[0:3]及PDT[0:1]配置实现,计算方法在手册中有描述。
其余还有一些SCLK空闲状态、CS空闲状态等等都要对应配置,才能够保证通信的成功建立。最后附上一张成功通信后的实测波形图,通过对其解读能够得到通信的数据内容。今天的笔记就整理到这里,努力学习ing!