找回密码
 立即注册
查看: 391|回复: 3

读不到外置flash设备ID,不知道什么原因

[复制链接]

该用户从未签到

6

主题

16

回帖

148

积分

注册会员

积分
148
发表于 2023-6-29 10:41:47 | 显示全部楼层 |阅读模式
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();
}

回复 送花

使用道具 举报

  • TA的每日心情
    奋斗
    8 小时前
  • 签到天数: 133 天

    [LV.7]常住居民III

    8

    主题

    79

    回帖

    1088

    积分

    金牌会员

    机长

    积分
    1088
    发表于 2023-6-29 14:44:27 | 显示全部楼层
    哪个型号的外置spi设备?
    业余撸代码,专业开飞机
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    6 天前
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    16

    主题

    724

    回帖

    2578

    积分

    超级版主

    积分
    2578
    发表于 2023-6-29 16:20:38 | 显示全部楼层
    是什么型号的单片机?I/O是否有进行初始化?
    STC8、STC32系列的单片机,上电后所有I/O都是高阻输入模式
    是无法对外输出电平信号的
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    6

    主题

    16

    回帖

    148

    积分

    注册会员

    积分
    148
     楼主| 发表于 2023-6-29 19:43:02 | 显示全部楼层
    已经解决,每次在读或者写之后都要进行  SPSTAT = SPIF + WCOL;   //清0 SPIF和WCOL标志  这个动作,不然会出错
    回复 支持 1 反对 0 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-17 20:05 , Processed in 0.073660 second(s), 41 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表