目前串口屏驱动通讯一般分为IIC和SPI,其中SPI又分为三线SPI和四线SPI。

三线包含SCLK(时钟),CS(片选),和SDIO(双向输出信号)

四线SPI则与三线有着相同的SCLK(时钟)和CS(片选),而它的输入发送分为两根线,MOSI(主机发送从机接受)和MISO(从机发送主机接受)。

在学习使用SPI驱动屏幕之前,我们还要了解一下SPI的通讯协议。

以四线SPI为例讲为例,其接线方式如下

    其中,SCLK(时钟信号),与MOSI(主发从收)、MISO(主收从发)三线SPI没有MISO这个引脚,从机只能接收数据,为所有从机与主机公用接线,而片选信号CS则是从每一个从机各引出一个引脚单独接在主机上,所以相对于其他通信,SPI通讯在多从机的情况下比较浪费引脚资源。

    除了引脚接线还有一个需要了解的是SPI的通信时序及其数据发送方法,其中SPI数据收发共有四种模式,由CPOL和CPHA共同决定:
CPOL(时钟极性)=0:表示在空闲状态,时钟默认处于低电平(0)状态;

CPOL(时钟极性)=1:表示在空闲状态,时钟默认处于高电平(1)状态;

CPHA(时钟相位)=0:表示在SCLK第一个边沿时数据移入,在第二个边沿时数据移除。

CPHA(时钟相位)=1:表示在SCLK第一个边沿时数据移出,在第二个边沿时数据移入。

    由这两个寄存器共同能够组成SPI的四种通讯模式。

    例如模式0的时序图,首先SS/CS选中需要发送数据的从机,将电平拉低。SCLK/SCK开始出现时钟信号,因为模式0状态下SCLK默认为低电平,所以它的第一个边沿为上升沿,在上升沿时采集MOSI引脚上的电平信号作为一个字节的最高位数据,然后在SCLK第二个边沿(下降沿)时,MOSI同时将次高位数据放在通讯线上,在第二次时钟上升沿时采集信号。如此循环八次将一个数据从高位到低位发送出去。

模式1整体状态与模式0相同,唯一区别是在SCK上升沿时将数据放在信号线上,下降沿将信号发送给从机。

时序图源:江协科技

                而SPI的数据具体是怎么发送和接受的,我们可以在下面这个描述移位寄存器的图片中了解到,首先主机要发送的数据和从机要发送的数据都被存在其各自的移位寄存器中,如下            

    其中波特率发生器可以认为是SCLK引脚,在引脚出现上升沿或者下降沿时(取决于CPHA寄存器的状态),主从机各自的高位数据被放在信号线上。

在SCLK的第二个边沿时数据被移动到各自要接受数据的寄存器中,其中数据移动顺序又高位开始向低位依次移动,最后将8位数据发送。

移位寄存器图源:江协科技

而SPI串口屏与正常SPI通讯相比又多了几个引脚,其引脚定义如下。 除了正常的三线spi引脚之外还额外新增了三个引脚,DC-用于选择是给芯片发送数据还是命令,RST--复位引脚,为了保证多芯片通用,我一般会选择拉低之后延时10ms,BUSY--此引脚可以用一个通用IO口设置为上拉输出,在芯片忙碌时此引脚为高电平,空闲为低电平,上拉输入时可以使用hal库的readpin函数来读取引脚状态来确定芯片是否忙碌。这里可以用一个while循环一直读取BUSY引脚状态,直到低电平退出循环。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐