一、SPI只有主模式和从模式之分
没有读和写的说法,因为实质上每次SPI是主从设备在交换数据。也就是说,你发一个数据必然会收到一个数据。
你要收一个数据必须也要先发一个数据。
二、SPI的相位和极性
CPOL和CPHA,分别都可以是0或时1,对应的四种组合就是:
Mode 0 CPOL=0, CPHA=0
Mode 1 CPOL=0, CPHA=1
Mode 2 CPOL=1, CPHA=0
Mode 3 CPOL=1, CPHA=1
其中,关于时钟的极性(Clock Polarity=IDLE state of SCK,就是当SCLK在数发送8个bit比特数据之前和之后的状态)和相位:
CPOL=0表示空闲时时钟线为低电平(导致一个时钟周期的第一个跳变沿是上升沿)
CPOL=1表示空闲时时钟线为高电平(导致一个时钟周期的第一个跳变沿是下降沿)
CPHA=0表示在一个时钟周期的第一个跳变沿
CPHA=1表示在一个时钟周期的第二个跳变沿
三、软件中如何设置SPI的相位和极性
1、SPI分主设备和从设备,两者通过SPI协议通讯。
2、关于设置SPI的模式,实际上是从设备的模式,决定了主设备的模式。所以要先去搞懂从设备的SPI是何种模式,
然后再将主设备的SPI的模式,设置和从设备相同的模式,即可正常通讯。
3、对于从设备的SPI是什么模式,有两种:
(1)固定的,有SPI从设备硬件决定的
SPI从设备,具体是什么模式,相关的datasheet中会有描述,需要自己去datasheet中找到相关的描述,即:
关于SPI从设备,在空闲的时候,是高电平还是低电平,即决定了CPOL是0还是1;
然后再找到关于设备是在上升沿还是下降沿去采样数据,这样就是,在定了CPOL的值的前提下,对应着可以
推算出CPHA是0还是1了。
(2)可配置的,由软件自己设定
从设备也是一个SPI控制器,4种模式都支持,此时只要自己设置为某种模式即可。
然后知道了从设备的模式后,再去将SPI主设备的模式,设置为和从设备模式一样,即可。
对于如何配置SPI的CPOL和CPHA的话,不多细说,多数都是直接去写对应的SPI控制器中对应寄存器中的CPOL和CPHA
那两位,写0或写1即可。
四、SPI NOR实例————W25Q128
1.容量:
16MB(65536个page,每个page 256字节)
2.写入特性,写入单位page():
(注意:写入单位是page,并不是说,一次一定要写256字节,而是一次最多可以写256字节。比如你只需要写10个字
节,你先计算好你写入地址在哪个page,以及page内部偏移值,然后,给flash发送写page命令,然后把要写入的地
址发给flash,最后把要写入的数据按字节发给FLASH就行了)
3.擦除特性,擦除单位sector/32KB-block/64KB-block/整片擦除:
(1)4KB大小sector擦除:一次擦除16个page(4KB sector)
(2)32KB大小block擦除:一次擦除128个page(32KB block)
(3)64KB大小block擦除:一次擦除256个page(64KB block)
(4)整片擦除
4.写入之前最好先擦除一下,让被写入单元值为0xFF