|
楼主 |
发表于 2022-1-14 09:21:38
|
显示全部楼层
用的STC官方例程,时钟极性与相位都是0,选择的是SPI Mode0
void InitSpi()
{
ACC = P_SW1; //切换到第一组SPI
ACC &= ~(SPI_S0 | SPI_S1); //SPI_S0=0 SPI_S1=0
P_SW1 = ACC; //(P1.2/SS, P1.3/MOSI, P1.4/MISO, P1.5/SCLK)
SPSTAT = SPIF | WCOL; //清除SPI状态
SS = 1;
SPCTL = SSIG | SPEN | MSTR; //0xd0 设置SPI为主模式
}
unsigned char SpiShift(BYTE dat) //使用SPI方式与Flash进行数据交换
{
g_fSpiBusy = TRUE;
SPDAT = dat; //触发SPI发送
while (g_fSpiBusy); //等待SPI数据传输完成
return SPDAT;
}
bit FlashCheckID()
{
unsigned char dat1, dat2;
SS = 0;
SpiShift(0x90); //发送读取ID命令 0x90 再发送3个空指令
SpiShift(0x00); //空读3个字节
SpiShift(0x00);
SpiShift(0x00);
dat1 = SpiShift(0x00); //读取制造商ID1
dat2 = SpiShift(0x00); //读取器件ID
SS = 1;
g_fFlashOK = ((dat1 == 0xef) && (dat2 == 0x16));
return g_fFlashOK;
} |
|