SPI协议,主机如何知道从机没有数据

fkeujjpdc 2014-02-11 05:42:54
SPI是在主机写数据的时候也会同时的读数据。那如果我从机没有数据,那还是会读到数据,那我如何知道什么时候从从机读过来的数据是有效的。
...全文
3770 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dceacho 2014-02-14
  • 打赏
  • 举报
回复
引用 5 楼 fkeujjpdc 的回复:
[quote=引用 4 楼 wangfan027 的回复:] [quote=引用 3 楼 fkeujjpdc 的回复:] [quote=引用 1 楼 u013635492 的回复:] 1 既然从机没有数据,那么读过来的数据就是无效的,不用管。 2 数据的读取是在发送读取命令后,后面跟着的就是有效数据,注意,只有连续发送空数据,从机才能返回数据。
那全双工通信好像没什么意义哦,我看了些关于SPI的应用好像都是当作单端通信用的。比如常用的spi flash ,spi lcd[/quote] 一般都是主机发个命令下去,从机发个数据回来,所以用到完全双工不多[/quote]有没有完全双工的协议,难道要两边各使用一个主机,然后把MISO的线不接(CS,SCK1,MOSI1,SCK2,MOSI2),实现真正的全双工通信?[/quote] 那就用两根线的UART那个双方都可以随时发
uklili 2014-02-14
  • 打赏
  • 举报
回复
引用 5 楼 fkeujjpdc 的回复:
[quote=引用 4 楼 wangfan027 的回复:] [quote=引用 3 楼 fkeujjpdc 的回复:] [quote=引用 1 楼 u013635492 的回复:] 1 既然从机没有数据,那么读过来的数据就是无效的,不用管。 2 数据的读取是在发送读取命令后,后面跟着的就是有效数据,注意,只有连续发送空数据,从机才能返回数据。
那全双工通信好像没什么意义哦,我看了些关于SPI的应用好像都是当作单端通信用的。比如常用的spi flash ,spi lcd[/quote] 一般都是主机发个命令下去,从机发个数据回来,所以用到完全双工不多[/quote]有没有完全双工的协议,难道要两边各使用一个主机,然后把MISO的线不接(CS,SCK1,MOSI1,SCK2,MOSI2),实现真正的全双工通信?[/quote] 如果使用了SPI的四根线,那么SPI本就是工作在全双工模式。只是SPI的工作方式就是主从式的,从机都是被动响应数据。所以你要从机能主动发数据?这似乎有点困难。猜想你要通过SPI把两MCU连接起来?如果这样,是不是可以设定个主机来定时查询?或者改用串口实现?
fkeujjpdc 2014-02-14
  • 打赏
  • 举报
回复
引用 4 楼 wangfan027 的回复:
[quote=引用 3 楼 fkeujjpdc 的回复:] [quote=引用 1 楼 u013635492 的回复:] 1 既然从机没有数据,那么读过来的数据就是无效的,不用管。 2 数据的读取是在发送读取命令后,后面跟着的就是有效数据,注意,只有连续发送空数据,从机才能返回数据。
那全双工通信好像没什么意义哦,我看了些关于SPI的应用好像都是当作单端通信用的。比如常用的spi flash ,spi lcd[/quote] 一般都是主机发个命令下去,从机发个数据回来,所以用到完全双工不多[/quote]有没有完全双工的协议,难道要两边各使用一个主机,然后把MISO的线不接(CS,SCK1,MOSI1,SCK2,MOSI2),实现真正的全双工通信?
of123 2014-02-14
  • 打赏
  • 举报
回复
当然,还可以使用更复杂的硬件协议,例如增加一条 GPIO 忙信号线,主机端是输入,从机端是输出。 主机发送命令后,就检测忙信号线,直至变为忙无效,再开始接收。 从机端则要在接收命令后,立即使忙信号生效,直至它准备好发送。 在我的实际应用中,这条信号线是两用的。在从机空闲进入低功耗状态时,这条信号线是从机端的外部中断线,用来唤醒从机。进入数据传输后,将双方切换为 GPIO 忙信号线了。
of123 2014-02-14
  • 打赏
  • 举报
回复
SPI 仅有物理层和数据链路层协议。而你说的涉及到应用层协议了。 最简单的方法,主机在发送最后一个有效数据字节后,再发送一个 NULL 标志字节,例如 0x00. 当主机在从从机读取时,也发送这个 NULL 标志字节来驱动时钟。 从机在发送有效数据前,先发送一个不同于 NULL 标志的起始标志字节,例如 0xFF. 这样,当从机没有对 SPI 移位寄存器写入数据的情况下,主机收到的始终是 NULL 字节,看作从机忙。当收到起始字节时,就知道后面是有效数据了。
dceacho 2014-02-13
  • 打赏
  • 举报
回复
引用 3 楼 fkeujjpdc 的回复:
[quote=引用 1 楼 u013635492 的回复:] 1 既然从机没有数据,那么读过来的数据就是无效的,不用管。 2 数据的读取是在发送读取命令后,后面跟着的就是有效数据,注意,只有连续发送空数据,从机才能返回数据。
那全双工通信好像没什么意义哦,我看了些关于SPI的应用好像都是当作单端通信用的。比如常用的spi flash ,spi lcd[/quote] 一般都是主机发个命令下去,从机发个数据回来,所以用到完全双工不多
色郎中 2014-02-12
  • 打赏
  • 举报
回复
主机不发时钟,从机就无数据 详细的还要看器件的DATASHEET...
uklili 2014-02-12
  • 打赏
  • 举报
回复
1 既然从机没有数据,那么读过来的数据就是无效的,不用管。 2 数据的读取是在发送读取命令后,后面跟着的就是有效数据,注意,只有连续发送空数据,从机才能返回数据。
fkeujjpdc 2014-02-12
  • 打赏
  • 举报
回复
引用 1 楼 u013635492 的回复:
1 既然从机没有数据,那么读过来的数据就是无效的,不用管。 2 数据的读取是在发送读取命令后,后面跟着的就是有效数据,注意,只有连续发送空数据,从机才能返回数据。
那全双工通信好像没什么意义哦,我看了些关于SPI的应用好像都是当作单端通信用的。比如常用的spi flash ,spi lcd

27,372

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧