读不到外置flash设备ID,不知道什么原因
u8GD25Q20ETIGR_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();
}
哪个型号的外置spi设备? 是什么型号的单片机?I/O是否有进行初始化?
STC8、STC32系列的单片机,上电后所有I/O都是高阻输入模式
是无法对外输出电平信号的
已经解决,每次在读或者写之后都要进行SPSTAT = SPIF + WCOL; //清0 SPIF和WCOL标志这个动作,不然会出错
页:
[1]