980578873
发表于 2023-7-7 15:38:52
zhp 发表于 2023-7-7 15:23
数据发送过程中无法查看
只有等待数据传输完成后,
查看主机的SPDAT寄存器才能知道从机发送的是什么数 ...
好的,您认为return SPDAT返回的数据是不是0xFF呢?
zhp
发表于 2023-7-7 16:04:33
980578873 发表于 2023-7-7 15:38
好的,您认为return SPDAT返回的数据是不是0xFF呢?
不一定是0xff
如果从机送出的数据0x5a,SPDAT的值就是0x5a
如果从机送出的数据0xff,SPDAT的值就是0xff
980578873
发表于 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
发表于 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
ps:单片机的寄存器(reg)和存储器(ram)不能画等号
对于存储器,写入的值和读出的值必须是一样的
但寄存器reg就不一定了,reg是软件和硬件之间的媒介
比如只写寄存器,无论你写什么值,读取永远是0,还要只读寄存器也是类似
980578873
发表于 2023-7-10 18:02:16
zhp 发表于 2023-7-7 16:58
SPI的SPDAT寄存器和串口的SBUF类似
读和写在芯片内部是两个不同的内部reg
看这个读数据的程序,主机读从机的寄存器并没有指定读哪个地址的寄存器里面数据,请问主机获取从机寄存器是不是随机读取某一个寄存器地址里面的数据的呢?
980578873
发表于 2023-7-11 14:28:56
980578873 发表于 2023-7-10 18:02
看这个读数据的程序,主机读从机的寄存器并没有指定读哪个地址的寄存器里面数据,请问主机获取从机寄存器 ...
zhp在吗,帮忙回复一下问题吧,谢谢!
神农鼎
发表于 2023-7-11 16:22:09
单片机SPI读取FLASH数据时,为什么要事先发送数据====用仿真先学习下
深圳国芯人工智能有限公司-教学视频 (stcai.com)
980578873
发表于 2023-7-11 19:22:09
神农鼎 发表于 2023-7-11 16:22
单片机SPI读取FLASH数据时,为什么要事先发送数据====用仿真先学习下
姚总,最好用通俗易懂的文字表达一下,谢谢!
神农鼎
发表于 2023-7-11 19:51:51
看看冲哥的视频,冲哥讲 SPI 讲了 90分钟,要写出来也得2个小时,看看实战专家的视频 !
我不做具体的技术15年了,只是监管,具体技术都忘了,我已不是年轻的技术支持人员。
冲哥的视频讲的很好,值得学习
我估计发无效的FFH数据, 是为了发出读数据的时钟, 具体看冲哥视频讲解为准
电子DIY小家
发表于 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,是你收到的回礼,只是这个回礼还是得用双手去接的,用的同一个寄存器(同一双手)而已。