找回密码
 立即注册
查看: 768|回复: 20

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

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

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

    [LV.1]初来乍到

    39

    主题

    204

    回帖

    651

    积分

    高级会员

    积分
    651
    发表于 2023-7-6 15:30:18 | 显示全部楼层 |阅读模式
    各位大佬,小弟看冲哥的硬件SPI视频有疑问,就是单片机使用SPI读取外围FLASH数据时,
    为什么要事先发送一个数据给SPI FLASH

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

    使用道具 举报

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

    [LV.4]偶尔看看III

    16

    主题

    724

    回帖

    2578

    积分

    超级版主

    积分
    2578
    发表于 2023-7-6 17:59:57 | 显示全部楼层
    任何时刻,SPI的读写都是同时进行的
    MOSI输出一个bit,MISO就读取一个bit
    SPDAT = 0xff就是触发SPI主机送出8个CLK,同时读取一个字节回来
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情

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

    [LV.1]初来乍到

    39

    主题

    204

    回帖

    651

    积分

    高级会员

    积分
    651
     楼主| 发表于 2023-7-6 20:01:37 | 显示全部楼层
    zhp 发表于 2023-7-6 17:59
    任何时刻,SPI的读写都是同时进行的
    MOSI输出一个bit,MISO就读取一个bit
    SPDAT = 0xff就是触发SPI主机送出 ...

    任何时刻,SPI的读写既然都是同时进行的,MOSI输出一个bit,MISO就读取一个bit,那两个bit是不是相等的呢?为什么?

    点评

    zhp
    MOSI和MISO是两条数据线, 一条是主输出从输入,另外一条是主输入从输出 一条读数据,一条写数据 两个bit数据是否一样,要看主机和从机各自发送的数据是否相同  详情 回复 发表于 2023-7-6 20:27
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.4]偶尔看看III

    16

    主题

    724

    回帖

    2578

    积分

    超级版主

    积分
    2578
    发表于 2023-7-6 20:27:00 | 显示全部楼层
    980578873 发表于 2023-7-6 20:01
    任何时刻,SPI的读写既然都是同时进行的,MOSI输出一个bit,MISO就读取一个bit,那两个bit是不是相等的呢? ...

    MOSI和MISO是两条数据线,
    一条是主输出从输入,另外一条是主输入从输出
    一条读数据,一条写数据
    两个bit数据是否一样,要看主机和从机各自发送的数据是否相同
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情

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

    [LV.1]初来乍到

    39

    主题

    204

    回帖

    651

    积分

    高级会员

    积分
    651
     楼主| 发表于 2023-7-7 09:49:28 | 显示全部楼层
    zhp 发表于 2023-7-6 20:27
    MOSI和MISO是两条数据线,
    一条是主输出从输入,另外一条是主输入从输出
    一条读数据,一条写数据

    您不是说了么:任何时刻,SPI的读写都是同时进行的,MOSI输出一个bit,MISO就读取一个bit,比如我主机发送一个bit,这个bit是1 给从机,MISO就会读到从机的一个bit数据,请问我怎么知道从机返回给主机的数据位是不是1?也就是如何查看从机发送的数据是否相同?

    点评

    zhp
    主机发送的数据存放在主机的SPDAT寄存器 从机发送的数据存放在从机的SPDAT寄存器  详情 回复 发表于 2023-7-7 10:29
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.4]偶尔看看III

    16

    主题

    724

    回帖

    2578

    积分

    超级版主

    积分
    2578
    发表于 2023-7-7 10:29:33 | 显示全部楼层
    本帖最后由 zhp 于 2023-7-7 11:26 编辑
    980578873 发表于 2023-7-7 09:49
    您不是说了么:任何时刻,SPI的读写都是同时进行的,MOSI输出一个bit,MISO就读取一个bit,比如我主机发送一 ...

    数据发送前
    主机发送的数据存放在主机的SPDAT寄存器
    从机发送的数据存放在从机的SPDAT寄存器

    经过主机发送完成8个SPI时钟后,
    主机发送的数据会移位到从机的SPDAT中
    从机发送的数据会移位到主机的SPDAT中
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情

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

    [LV.1]初来乍到

    39

    主题

    204

    回帖

    651

    积分

    高级会员

    积分
    651
     楼主| 发表于 2023-7-7 13:48:42 | 显示全部楼层
    zhp 发表于 2023-7-7 10:29
    数据发送前
    主机发送的数据存放在主机的SPDAT寄存器
    从机发送的数据存放在从机的SPDAT寄存器

    SPI FLASH做从机你确定有SPDAT寄存器?

    点评

    zhp
    当然有啦,否则从机怎么回数据给主机  详情 回复 发表于 2023-7-7 14:03
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.4]偶尔看看III

    16

    主题

    724

    回帖

    2578

    积分

    超级版主

    积分
    2578
    发表于 2023-7-7 14:03:34 | 显示全部楼层
    本帖最后由 zhp 于 2023-7-7 14:06 编辑
    980578873 发表于 2023-7-7 13:48
    SPI FLASH做从机你确定有SPDAT寄存器?

    当然有啦,否则从机怎么回数据给主机
    只不过SPI FLASH内部只是一个8bit的reg而已


    大哥,从网上再多查查资料,好好研究一下SPI吧
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情

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

    [LV.1]初来乍到

    39

    主题

    204

    回帖

    651

    积分

    高级会员

    积分
    651
     楼主| 发表于 2023-7-7 14:16:14 | 显示全部楼层
    zhp 发表于 2023-7-7 14:03
    当然有啦,否则从机怎么回数据给主机
    只不过SPI FLASH内部只是一个8bit的reg而已

    好的,下面这个问题还没有回复清楚呢?
    任何时刻,SPI的读写都是同时进行的,MOSI输出一个bit,MISO就读取一个bit,比如我主机发送一个bit,这个bit是1 给从机,MISO就会读到从机的一个bit数据,请问我怎么知道从机返回给主机的数据位是不是1?也就是如何查看从机发送的数据是否相同?

    点评

    zhp
    数据发送过程中无法查看 只有等待数据传输完成后, 查看主机的SPDAT寄存器才能知道从机发送的是什么数据  详情 回复 发表于 2023-7-7 15:23
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.4]偶尔看看III

    16

    主题

    724

    回帖

    2578

    积分

    超级版主

    积分
    2578
    发表于 2023-7-7 15:23:00 | 显示全部楼层
    980578873 发表于 2023-7-7 14:16
    好的,下面这个问题还没有回复清楚呢?
    任何时刻,SPI的读写都是同时进行的,MOSI输出一个bit,MISO就读取 ...

    1.png


    数据发送过程中无法查看
    只有等待数据传输完成后,
    查看主机的SPDAT寄存器才能知道从机发送的是什么数据
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-18 16:59 , Processed in 0.083710 second(s), 74 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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