找回密码
 立即注册
楼主: 9805***

单片机SPI读取FLASH数据时,为什么要事先发送数据

[复制链接]
  • TA的每日心情

    2023-12-25 15:38
  • 签到天数: 1 天

    [LV.1]初来乍到

    39

    主题

    204

    回帖

    651

    积分

    高级会员

    积分
    651
     楼主| 发表于 2023-7-7 15:38:52 | 显示全部楼层
    zhp 发表于 2023-7-7 15:23
    数据发送过程中无法查看
    只有等待数据传输完成后,
    查看主机的SPDAT寄存器才能知道从机发送的是什么数 ...

    好的,您认为return SPDAT返回的数据是不是0xFF呢?

    点评

    zhp
    不一定是0xff 如果从机送出的数据0x5a,SPDAT的值就是0x5A  详情 回复 发表于 2023-7-7 16:04
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.4]偶尔看看III

    16

    主题

    724

    回帖

    2578

    积分

    超级版主

    积分
    2578
    发表于 2023-7-7 16:04:33 | 显示全部楼层
    980578873 发表于 2023-7-7 15:38
    好的,您认为return SPDAT返回的数据是不是0xFF呢?

    不一定是0xff
    如果从机送出的数据0x5a,SPDAT的值就是0x5a
    如果从机送出的数据0xff,SPDAT的值就是0xff

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情

    2023-12-25 15:38
  • 签到天数: 1 天

    [LV.1]初来乍到

    39

    主题

    204

    回帖

    651

    积分

    高级会员

    积分
    651
     楼主| 发表于 2023-7-7 16:52:03 | 显示全部楼层
    zhp 发表于 2023-7-7 16:04
    不一定是0xff
    如果从机送出的数据0x5a,SPDAT的值就是0x5a
    如果从机送出的数据0xff,SPDAT的值就是0xff

    读取字节前不是给SPDAT=0XFF;了吗?为什么return SPDAT不是0xFF呢?
    u8 SPI_ReadByte(void)   //读取一个字节
    {
       SPDAT = 0XFF;
       while(SPIF == 0);
       SPIF = 1;
       WCOL = 1;  
       return SPDAT;
    }

    点评

    zhp
    SPI的SPDAT寄存器和串口的SBUF类似 读和写在芯片内部是两个不同的reg ps:单片机的寄存器(reg)和存储器(ram)不能画等号 对于存储器,写入的值和读出的值必须是一样的 但寄存器reg就不一定了,reg是软件和硬件直  详情 回复 发表于 2023-7-7 16:58
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.4]偶尔看看III

    16

    主题

    724

    回帖

    2578

    积分

    超级版主

    积分
    2578
    发表于 2023-7-7 16:58:55 | 显示全部楼层
    本帖最后由 zhp 于 2023-7-7 17:03 编辑
    980578873 发表于 2023-7-7 16:52
    读取字节前不是给SPDAT=0XFF;了吗?为什么return SPDAT不是0xFF呢?
    u8 SPI_ReadByte(void)   //读取一 ...

    SPI的SPDAT寄存器和串口的SBUF类似
    读和写在芯片内部是两个不同的内部reg


    1.png

    ps:单片机的寄存器(reg)和存储器(ram)不能画等号
    对于存储器,写入的值和读出的值必须是一样的
    但寄存器reg就不一定了,reg是软件和硬件之间的媒介

    比如只写寄存器,无论你写什么值,读取永远是0,还要只读寄存器也是类似


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情

    2023-12-25 15:38
  • 签到天数: 1 天

    [LV.1]初来乍到

    39

    主题

    204

    回帖

    651

    积分

    高级会员

    积分
    651
     楼主| 发表于 2023-7-10 18:02:16 | 显示全部楼层
    zhp 发表于 2023-7-7 16:58
    SPI的SPDAT寄存器和串口的SBUF类似
    读和写在芯片内部是两个不同的内部reg

    看这个读数据的程序,主机读从机的寄存器并没有指定读哪个地址的寄存器里面数据,请问主机获取从机寄存器是不是随机读取某一个寄存器地址里面的数据的呢?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情

    2023-12-25 15:38
  • 签到天数: 1 天

    [LV.1]初来乍到

    39

    主题

    204

    回帖

    651

    积分

    高级会员

    积分
    651
     楼主| 发表于 2023-7-11 14:28:56 | 显示全部楼层
    980578873 发表于 2023-7-10 18:02
    看这个读数据的程序,主机读从机的寄存器并没有指定读哪个地址的寄存器里面数据,请问主机获取从机寄存器 ...

    zhp在吗,帮忙回复一下问题吧,谢谢!

    点评

    你知道啥叫礼尚往来吗? u8 SPI_ReadByte(void) //读取一个字节 { SPDAT = 0XFF; //读取数据前为什么要发送一个数据0xFF给FLASH while(SPIF == 0); SPIF = 1; WCOL = 1; return SPDAT; } 这里SPD  详情 回复 发表于 2023-7-12 13:52
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9496

    回帖

    1万

    积分

    管理员

    积分
    14067
    发表于 2023-7-11 16:22:09 | 显示全部楼层
    单片机SPI读取FLASH数据时,为什么要事先发送数据====用仿真先学习下
    1.png

    1.png

    深圳国芯人工智能有限公司-教学视频 (stcai.com)

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情

    2023-12-25 15:38
  • 签到天数: 1 天

    [LV.1]初来乍到

    39

    主题

    204

    回帖

    651

    积分

    高级会员

    积分
    651
     楼主| 发表于 2023-7-11 19:22:09 | 显示全部楼层
    神农鼎 发表于 2023-7-11 16:22
    单片机SPI读取FLASH数据时,为什么要事先发送数据====用仿真先学习下

    姚总,最好用通俗易懂的文字表达一下,谢谢!
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9496

    回帖

    1万

    积分

    管理员

    积分
    14067
    发表于 2023-7-11 19:51:51 | 显示全部楼层
    看看冲哥的视频,冲哥讲 SPI 讲了 90分钟,要写出来也得2个小时,看看实战专家的视频 !
    我不做具体的技术15年了,只是监管,具体技术都忘了,我已不是年轻的技术支持人员。

    冲哥的视频讲的很好,值得学习


    我估计发无效的FFH数据, 是为了发出读数据的时钟, 具体看冲哥视频讲解为准
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 07:59
  • 签到天数: 101 天

    [LV.6]常住居民II

    41

    主题

    1016

    回帖

    6971

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6971
    QQ
    发表于 2023-7-12 13:52:51 | 显示全部楼层
    980578873 发表于 2023-7-11 14:28
    zhp在吗,帮忙回复一下问题吧,谢谢!

    你知道啥叫礼尚往来吗?


    u8 SPI_ReadByte(void)   //读取一个字节
    {
      SPDAT = 0XFF;  //读取数据前为什么要发送一个数据0xFF给FLASH
      while(SPIF == 0);
      SPIF = 1;
      WCOL = 1;  
      return SPDAT;
    }


    这里SPDAT 就可以理解为你的双手,虽然这里SPDAT = 0XFF;你送出去的礼物是0xff,但是人家要回礼,回礼你是不是还是要用你的双手(SPDAT )去接收,所以送完礼之后你这个SPDAT 寄存器里的数据不一定还是你送出去的礼物l,是你收到的回礼,只是这个回礼还是得用双手去接的,用的同一个寄存器(同一双手)而已。

    点评

    同理,你不先送礼,人家也不会给你回礼。  详情 回复 发表于 2023-7-12 13:53
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-18 20:14 , Processed in 0.081117 second(s), 73 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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