找回密码
 立即注册
楼主: 980578873

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

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

39

主题

204

回帖

651

积分

高级会员

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

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

点评

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

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

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

回复 支持 反对

使用道具 举报 送花

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

39

主题

204

回帖

651

积分

高级会员

积分
651
发表于 2023-7-7 16:52:03 | 显示全部楼层
zh*** 发表于 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;
}

点评

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2023-7-7 16:58:55 | 显示全部楼层
本帖最后由 zhp 于 2023-7-7 17:03 编辑
98057*** 发表于 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,还要只读寄存器也是类似


回复 支持 反对

使用道具 举报 送花

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

39

主题

204

回帖

651

积分

高级会员

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

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

使用道具 举报 送花

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

39

主题

204

回帖

651

积分

高级会员

积分
651
发表于 2023-7-11 14:28:56 | 显示全部楼层
98057*** 发表于 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
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

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

1.png

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

回复 支持 反对

使用道具 举报 送花

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

39

主题

204

回帖

651

积分

高级会员

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

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

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

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


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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

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

积分
8058
QQ
发表于 2023-7-12 13:52:51 | 显示全部楼层
98057*** 发表于 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, 2025-5-2 13:16 , Processed in 0.147253 second(s), 113 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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