
在单片机等通讯系统中,SPI也是十分重要的。上次课程中我们使用瑞萨完成了UART功能的分析,与UART相比,SPI是同步全双工的数据传输模式,而UART则是异步传输模式,意味着SPI比UART多了一根时钟线,这个时钟线使得主机与从机成功的通讯,而UART则需要收发器之间需要固定的相同的波特率。SPI还有一根片选信号线CS,用于选择与主机通讯的从机。
本次使用的芯片依旧是13年和15年国赛指定的型号为RL78G13100lea芯片,瑞萨中的SPI即为CSI,建议读者先对瑞萨MCU的Datasheet进行一次阅读,以及包括配套板子的原理图。阅读本文前建议将上期文章阅读一次,以利于有更好的了解。
接下来主要分析spi协议以及瑞萨spi程序的编写
Spi在一般的应用中主要有4根线,分别是MOSI,MISO,SCLK和SS,这四根线在瑞萨中被称为SI,SO,SCK,CS,其各自代表的功能如下图:

通常主机与从机是这样子连线的:

其传输模式有四种,这是根据时钟极性CPOL与时钟相位CPHA组合而来的。打开瑞萨自带的SPI例程,在代码生成器的serial的csi选项中可以观察的到有这样的四种模式:

从这个图中我们可以看到Type1和Type3的时钟线SCK在空闲时候是高电平的,也就代表着时钟极性CPOL=1的情况。其余两个则相反。
我们还可以看到Type1跟Type2的数据都在第二个跳变沿开始传送,这代表的是时钟相位CPHA=1的情况,其余则是数据在时钟的第一个跳变沿开始传送,即CPHA=0。由此组合的四种模式。本次例程选择了默认的CPOL=1以及CPHA=1的方式。
本次例程使用的是CSI00的功能,我们可以看到,系统默认的协议是单发送模式,八个字长,低位在前。

在光盘自带的例程中,main.c中定义了一系列的变量,其中SET_CS和CLR_CS显然是用于设置片选信号,其他一系列的宏定义则表示则对外围器件不同的指令代码,比如对外围器件要进行写入操作,则将WRITE所代表的数据从瑞萨主机传输至外围从机。定义的tx_buf[]和rx_buf[]则分别表示发送和接收缓存,tx_len表示发送字节长度,cnt表示延时时间。

这个例子中是针对某个器件而编写的,首先设置PM5.4=0代表P5.4引脚是对外输出的,从而引用SET_CS才能产生片选信号。调用SPI启动函数,调用发送函数发送一个对器件写入使能的指令WREN,延时一定时间后再调用发送函数将写入的数据0x00和0xAA写入器件,延时后再调用发送函数读出数据。

接下来使用逻辑分析仪软件模拟SPI波形并分析
打开逻辑分析仪软件,选择四个通道,添加SPI协议,同时注意选取CPOL=1以及CPHA=1的方式。

下图是模拟所采样的波形,从波形上看,当时钟信号为高电平时系统不传输数据,红色矩形框的标示代表着数据是在时钟信号的第二个跳变沿,也就是上升沿开始传输数据,黄色椭圆圈表示是八位字长,完全符合我们的设定:

接下来使用逻辑分析仪观察程序的SPI信号及分析
这是瑞萨mcu板的原理图,由该原理图我们可知,应当将本次程序所使用的CSI00中的SCK00,SI00,SO00以及P54连接到相应的通道上,它们的引脚分别为46,45,44,37我们将其与相应的通道连接起来,即分别连接的是CH2,CH1,CH0以及CH3。

这是实物连接示意图。在逻辑分析仪软件中,时钟线要设置触发条件,下降沿触发。同样,当两条USB线插入到电脑后,我们将程序烧写下载到板子上,启动同时选择运行程序。可以观察到这样的波形。我们可以观察的到,这个分析与我们之前的分析是一致的。


最后,芯片之家祝大家 平安夜快乐!
长按左侧二维码,识别关注

