单片机SPI读取FLASH数据时,为什么要事先发送数据
各位大佬,小弟看冲哥的硬件SPI视频有疑问,就是单片机使用SPI读取外围FLASH数据时,为什么要事先发送一个数据给SPI FLASH
u8 SPI_ReadByte(void) //读取一个字节
{
SPDAT = 0XFF;//读取数据前为什么要发送一个数据0xFF给FLASH
while(SPIF == 0);
SPIF = 1;
WCOL = 1;
return SPDAT;
}
任何时刻,SPI的读写都是同时进行的
MOSI输出一个bit,MISO就读取一个bit
SPDAT = 0xff就是触发SPI主机送出8个CLK,同时读取一个字节回来 zhp 发表于 2023-7-6 17:59
任何时刻,SPI的读写都是同时进行的
MOSI输出一个bit,MISO就读取一个bit
SPDAT = 0xff就是触发SPI主机送出 ...
任何时刻,SPI的读写既然都是同时进行的,MOSI输出一个bit,MISO就读取一个bit,那两个bit是不是相等的呢?为什么? 980578873 发表于 2023-7-6 20:01
任何时刻,SPI的读写既然都是同时进行的,MOSI输出一个bit,MISO就读取一个bit,那两个bit是不是相等的呢? ...
MOSI和MISO是两条数据线,
一条是主输出从输入,另外一条是主输入从输出
一条读数据,一条写数据
两个bit数据是否一样,要看主机和从机各自发送的数据是否相同
zhp 发表于 2023-7-6 20:27
MOSI和MISO是两条数据线,
一条是主输出从输入,另外一条是主输入从输出
一条读数据,一条写数据
您不是说了么:任何时刻,SPI的读写都是同时进行的,MOSI输出一个bit,MISO就读取一个bit,比如我主机发送一个bit,这个bit是1 给从机,MISO就会读到从机的一个bit数据,请问我怎么知道从机返回给主机的数据位是不是1?也就是如何查看从机发送的数据是否相同? 本帖最后由 zhp 于 2023-7-7 11:26 编辑
980578873 发表于 2023-7-7 09:49
您不是说了么:任何时刻,SPI的读写都是同时进行的,MOSI输出一个bit,MISO就读取一个bit,比如我主机发送一 ...
数据发送前
主机发送的数据存放在主机的SPDAT寄存器
从机发送的数据存放在从机的SPDAT寄存器
经过主机发送完成8个SPI时钟后,
主机发送的数据会移位到从机的SPDAT中
从机发送的数据会移位到主机的SPDAT中
zhp 发表于 2023-7-7 10:29
数据发送前
主机发送的数据存放在主机的SPDAT寄存器
从机发送的数据存放在从机的SPDAT寄存器
SPI FLASH做从机你确定有SPDAT寄存器? 本帖最后由 zhp 于 2023-7-7 14:06 编辑
980578873 发表于 2023-7-7 13:48
SPI FLASH做从机你确定有SPDAT寄存器?
当然有啦,否则从机怎么回数据给主机
只不过SPI FLASH内部只是一个8bit的reg而已
大哥,从网上再多查查资料,好好研究一下SPI吧
zhp 发表于 2023-7-7 14:03
当然有啦,否则从机怎么回数据给主机
只不过SPI FLASH内部只是一个8bit的reg而已
好的,下面这个问题还没有回复清楚呢?
任何时刻,SPI的读写都是同时进行的,MOSI输出一个bit,MISO就读取一个bit,比如我主机发送一个bit,这个bit是1 给从机,MISO就会读到从机的一个bit数据,请问我怎么知道从机返回给主机的数据位是不是1?也就是如何查看从机发送的数据是否相同? 980578873 发表于 2023-7-7 14:16
好的,下面这个问题还没有回复清楚呢?
任何时刻,SPI的读写都是同时进行的,MOSI输出一个bit,MISO就读取 ...
数据发送过程中无法查看
只有等待数据传输完成后,
查看主机的SPDAT寄存器才能知道从机发送的是什么数据