注意的点:1.片选信号CS的使用。2.采集数据的位数,采集的16位数据用8位数据存放,导致一直得不到正确的结果。
1.SPI根据电平空闲时的状态,以及读取第一个数据是在什么时候,一共有4种模式。(具体可以在站内查询,非常详细)
2.和之前的情况一样,SPI通信依靠时钟的上下沿来对数据进行发送和读取,所以我们可以在一个周期内把对一个bit位数据的发送和读取同时完成。
3.我们的单片机是35MHz的,而GD25Q54芯片的spi通信速率最大可以是120MHz,所以我们在写这个函数的时候,可以直接修改引脚电平,不用做时延。
#include "gd25q64.h"
#include "stc8g.h"
sbit CS = P5^4;
sbit MOSI = P4^0;
sbit MISO = P4^1;
sbit SCLK = P4^3;
// 4.在时钟上升沿发送,下降沿接收。
unsigned char SPI_RW(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
SCLK = 0; //这里先构造时钟源低电平
MOSI = (dat&0x80); //把数据准备好
SCLK = 1; //把时钟拉高,出现上升沿,数据发送出去
dat <<= 1;