SPI协议和OLED

一个芯片下面可以接很多个SPI设备,比如说SPI FLASH,SPI OLED,它们直接通过三条先来传输数据。第一条线是时钟线,然后是DO线,就是date output就是芯片给外设发数据

然后读数据的话就是DI, 芯片上有很多个SPI设备,但是我们怎么区分要访问哪一个设备呢,所以就会有一个CS0,片选引脚。在硬件上,都是通过SCK,DI,DO来传输数据,都是通过CS来片选。那数据是怎么传的呢,我们可以看看数据格式,SPI协议和OLED_第1张图片

看这里,在第一个时钟周期里面传输一位,在第二个时钟中期里面传输第二位,先传输最高位,bit0是最后传输的。读的时候也是一样的,每发一个时钟读一位。

先讲一个简单的例子,我想把0x56发出去,怎么发呢,56的二进制是0b01010110,我想把这8位数据发送出去,我先发送给SPI flash,首先让片选引脚变成有效,CS0编程低电平,在整个传输过程中要保持低电平,然后我们SPICLK就发出一个脉冲,在这个脉冲期间,我先传输最高位,所以在MOSI的第一个脉冲就要保持低电平,然后SPI FLASH会在时钟的上升沿会把这个MOSI上的引脚读进去,以此类推。

在我们210上给出了4种SPI的图形,这四种图形的差别在哪里呢,我们先来看看前面两种

SPI协议和OLED_第2张图片

第一种是Format A,第二种是Format B,他们的差别在于MISO这条线上数据格式有点不一样,当我这个SPI设备提供完8位数据给我们的芯片的时候,在下一个时钟周期没到来之前,这SPI设备是把什么数据放到这个线上,FORMAT A放的是上一次接收的这一字节里面的最高位。FROMAT B是放得下一个字节的最低位。

  SPI协议和OLED_第3张图片\

然后在看看这个,CPOL是极性的意思,CPHA是相位的意思。极性就是在没有开始传输数据之前,你这个SPICLK是什么电平,如上图,有的是高,有的是低。

但是你这里要注意看是上升沿还是下降沿获取数据。上图就是CPOL CPHA就是下降沿获取数据。

你可能感兴趣的:(linux学习之路)