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

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-25 15:38:27

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;
}
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:58
  • 最近打卡:2025-06-17 09:13:13

26

主题

1037

回帖

3970

积分

超级版主

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-25 15:38:27

39

主题

204

回帖

651

积分

高级会员

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

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

点评

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:58
  • 最近打卡:2025-06-17 09:13:13

26

主题

1037

回帖

3970

积分

超级版主

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

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-25 15:38:27

39

主题

204

回帖

651

积分

高级会员

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

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

点评

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:58
  • 最近打卡:2025-06-17 09:13:13

26

主题

1037

回帖

3970

积分

超级版主

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

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

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-25 15:38:27

39

主题

204

回帖

651

积分

高级会员

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

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

点评

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:58
  • 最近打卡:2025-06-17 09:13:13

26

主题

1037

回帖

3970

积分

超级版主

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

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


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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-25 15:38:27

39

主题

204

回帖

651

积分

高级会员

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

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

点评

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:58
  • 最近打卡:2025-06-17 09:13:13

26

主题

1037

回帖

3970

积分

超级版主

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

1.png


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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 13:00 , Processed in 0.129557 second(s), 106 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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