打印

C8051F单片机 SPI问题

[复制链接]
1838|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jxwhf2007|  楼主 | 2017-1-31 22:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问大侠们,C0851F330单片机 在使用SPI从机功能时,当从机收到主机发来命令字节后,此时从机的SPI0DAT寄存器还保存着主机发来的命令字节,但这时从机需要准备发送给主机的数据 即写SPI0DAT,主机读取时,第一个字节总是主机发来的命令字节,第二个字节才是正真要发的数据,怎么回事,怎么**这个现象!!!

相关帖子

沙发
xyz549040622| | 2017-2-1 19:43 | 只看该作者
在从机发送之前,SPI0DAT中的数据变为需要写入的数据。先写数据,再发送。

使用特权

评论回复
板凳
青蓝pisces| | 2017-2-8 00:15 | 只看该作者
本帖最后由 青蓝pisces 于 2017-2-8 00:20 编辑

首先楼主要明白,SPI总线从结构上可以看出不是一个对等的总线,也就是说从设备不能主动给主设备发送数据
那么为了协调两边的数据传输,所有的工作都需要主设备进行管理。

这里楼主出现的问题是:没有进行流控制,完全靠默契
在主设备发出读命令后马上又将数据读走,这时可能从设备还没有将数据写入SPI0DAT寄存器,
所以读回去的还是原来的数据。

一般来说有两种方案:

1、全部由主设备负责,通过定义通信协议主设备可以在从设备中读出状态标志位,
当从设备接到数据后将标志位置为有效,主设备读到发送结束标志后进行读回操作。
这个方案需要定义一套通信协议,至少要能区分几个位置,区分命令和读写操作。

给出一个简单例子:从设备端做一个简单的状态机,在等待状态下接到主设备的命令则执行命令,
接到主设备的读写命令时进入读写状态,主设备在下一个字节中说明是读还是写,另给出地址,随后完成动作。


2、使用intel风格的古董级硬件流控制方法,接两根状态线用来握手,通过握手过程完成流控制。
例如定义一条线线为从机已准备好,在从机收到读命令后首先将数据写入SPI0DAT寄存器,
确认主机可以读后,将该线置为有效,进行握手请求。
随后主机发送时钟信号,读走数据,将另一根线置高,代表操作完成(ACK),这时完成一次传送操作。

希望楼主给个好评!

使用特权

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

本版积分规则

19

主题

37

帖子

0

粉丝