|
u8 GD25Q20ETIGR_ID, GD25Q20ETIGR_ID1, GD25Q20ETIGR_ID2;
void SPI_Init(void)
{
SPCTL |= (1 << 7); //忽略 SS 引脚功能,使用 MSTR 确定器件是主机还是从机
SPCTL |= (1 << 6); //使能 SPI 功能
SPCTL &= ~(1 << 5); //先发送/接收数据的高位( MSB)
SPCTL |= (1 << 4); //设置主机模式
SPCTL &= ~(1 << 3); //SCLK 空闲时为低电平,SCLK 的前时钟沿为上升沿,后时钟沿为下降沿
SPCTL &= ~(1 << 2); //数据 SS 管脚为低电平驱动第一位数据并在 SCLK 的后时钟沿改变数据
SPCTL = (SPCTL & ~3) | 0; //SPI 时钟频率选择, 0: 4T, 1: 8T, 2: 16T, 3: 32T
P_SW1 = (P_SW1 & ~(3<<2)) | (1<<2); //IO口切换. 0: P1.2/P5.4 P1.3 P1.4 P1.5, 1: P2.2 P2.3 P2.4 P2.5, 2: P5.4 P4.0 P4.1 P4.3, 3: P3.5 P3.4 P3.3 P3.2
SPI_CLK = 0; // set clock to low initial state
SPI_SI = 1;
SPSTAT = SPIF + WCOL; //清0 SPIF和WCOL标志
}
void FlashCheckID(void)
{
SPI_CS = 0;
send_byte(0x90); //发送读取ID命令
send_byte(0x00); //空读3个字节
send_byte(0x00);
send_byte(0x00);
GD25Q20ETIGR_ID1 = receive_byte(); //读取制造商ID1
GD25Q20ETIGR_ID = receive_byte(); //读取设备ID
GD25Q20ETIGR_ID2 = receive_byte(); //读取制造商ID2
SPI_CS = 1;
if(GD25Q20ETIGR_ID1 == 0xC8 ||GD25Q20ETIGR_ID == 0xC8||GD25Q20ETIGR_ID2 == 0xC8)
printf("read success..\n");
}
void main() {
// 初始化SPI
SPI_Init();
FlashCheckID();
FlashCheckID();
}
|
|