打印
[其他ST产品]

为什么SPI在写的时候最后要去判断接收缓冲区呢?

[复制链接]
1317|35
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
如图所示:
1:为什么SPI在写的时候最后要去判断接收缓冲区呢?

2:同样,接收数据的时候要往发送缓冲区写入0xFF

使用特权

评论回复
沙发
香水城| | 2024-1-5 11:26 | 只看该作者
不知代码是哪里来的?也没啥基本交代。
一般来讲,SPI工作在全双工模式,收发同时进行;不论收发,时钟都得用主来发;

第一个问题,发送的同时做了个接收,没有什么错,具体用途要看用户的意图。

第二个问题,读的同时先做发送,如果是主机,必须通过发送产生时钟并同时实现接收【读取】。

使用特权

评论回复
板凳
probedog| | 2024-1-5 15:21 | 只看该作者
为了确认数据是否已经被正确接收

使用特权

评论回复
地板
qiufengsd| | 2024-1-6 16:55 | 只看该作者
在SPI通信中,通常需要同时进行数据的发送和接收。

使用特权

评论回复
5
plsbackup| | 2024-1-6 18:43 | 只看该作者
主机可以通过检查接收缓冲区的数据来确定从机是否成功接收了数据。对于某些从机,即使它不需要返回有效数据,也可能返回一个确认位或其他固定值作为回应。

使用特权

评论回复
6
janewood| | 2024-1-6 20:43 | 只看该作者
如果接收缓冲区中没有接收到数据,SPI设备可能会重新发送数据,以确保数据被正确传输。如果接收缓冲区中接收到数据,SPI设备可以处理接收到的数据,并进行进一步的操作

使用特权

评论回复
7
loutin| | 2024-1-6 21:59 | 只看该作者
对于某些SPI外设,例如STM32中的SPI外设,其状态寄存器中的RXNE位表示接收缓冲区是否非空。在进行数据传输时,需要不断检查该位,以便在接收缓冲区非空时读取数据。这是因为在全双工通信模式下,发送和接收是同时进行的,即使只接收数据,也需要向从设备发送数据以触发SCK时钟的运行,这样从设备才能向主机发送数据。

使用特权

评论回复
8
albertaabbot| | 2024-1-7 22:53 | 只看该作者
SPI在写的时候最后要去判断接收缓冲区,这是因为接收缓冲区的数据是来自于外设的反馈。

使用特权

评论回复
9
burgessmaggie| | 2024-1-8 16:13 | 只看该作者
虽然在很多情况下,SPI通信是全双工的,即数据可以在同一时钟周期内同时在两个方向上传输,但实际应用中并不总是需要双向传输。

使用特权

评论回复
10
jcky001| | 2024-1-9 10:27 | 只看该作者
SPI在写的时候最后要去判断接收缓冲区是为了确保数据的完整性和正确性,提高系统的可靠性和稳定性。

使用特权

评论回复
11
abotomson| | 2024-1-9 20:38 | 只看该作者
当发送数据后,SPI设备会将接收到的数据放入接收缓冲区内。因此,为了确认数据是否成功传输,需要检查接收缓冲区的状态。例如,当接收缓冲区满时,接收中断函数会被触发。

使用特权

评论回复
12
timfordlare| | 2024-1-9 22:19 | 只看该作者
SPI通信有时会采用特定的握手协议,要求主机在写操作后验证从机返回的确认信号,这通常包含在接收缓冲区的数据中。

使用特权

评论回复
13
minzisc| | 2024-1-10 10:48 | 只看该作者
断接收缓冲区是否有数据是 SPI通信正确进行的关键步骤。

使用特权

评论回复
14
10299823| | 2024-1-10 19:20 | 只看该作者
确保数据传输的可靠性和准确性。              

使用特权

评论回复
15
mattlincoln| | 2024-1-10 20:28 | 只看该作者
有一个标志位或者状态寄存器来指示接收缓冲区是否有数据

使用特权

评论回复
16
benjaminka| | 2024-1-10 20:44 | 只看该作者
在SPI写操作时判断接收缓冲区,是为了确保能够及时读取从设备发送的数据,避免数据丢失

使用特权

评论回复
17
mikewalpole| | 2024-1-11 12:35 | 只看该作者
当SPI设备发送数据时,它会把数据放入发送缓冲区并启动传输。然而,由于各种原因(如通信错误、线路问题或接收设备的问题),发送的数据可能没有被正确接收。因此,在发送完数据后,SPI设备会检查接收缓冲区,以确认数据是否已经被正确接收。

使用特权

评论回复
18
gygp| | 2024-1-11 14:16 | 只看该作者
当SPI以主设备模式进行写操作时,主机向从机发送数据,并期望从机响应或至少采样这些数据。这时主机端SPI控制器内部的接收缓冲区也会接收到数据。

使用特权

评论回复
19
dspmana| | 2024-1-11 22:05 | 只看该作者
SPI在写的时候最后要去判断接收缓冲区的原因是为了确认数据是否已经被正确接收。通过检查接收缓冲区,可以确定是否需要重新发送数据或者处理接收到的数据。

使用特权

评论回复
20
yorkbarney| | 2024-1-11 22:14 | 只看该作者
STM32的芯片手册指出数据寄存器对应了发送/接收缓冲区并且共用一块寄存器。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

513

主题

1978

帖子

5

粉丝