搜索
bottom↓
回复: 25

SPI怎么立即应答数据的?

[复制链接]

出0入14汤圆

发表于 2014-8-23 16:11:15 | 显示全部楼层 |阅读模式
突然发现自己想不明白了,对SPI还是没弄懂,请教各位:

问题原因:我现在想做一个SPI的应答机制,主机发送完一包数据之后要等从机应答一个字节表示收到才行,要不然主机重发;
现在问题是:我从机要怎么做,才能做到立即应答;

我现在想了两个办法,感觉都不太好:

方法1、互为主从,1号机(STM32)  2号机(MSP4305438)
    首先1号机作为主机发送一包数据,停clk,工作模式转为从机;然后2号机判断收完,工作转为从机,发送应答数据;

   这里面有2个问题:  2号机接收数据必须启用中断模式,然后还要在中断中切换SPI的工作模式会不会有问题?
                               MSP4305438的中断优先级可不可以设置,我在这里面要用到SPI、AD、定时器,万一中断被打断。。

方法2、1号机(STM32)永远作为主机   2号机(MSP4305438)永远作为从机
    1号机发送一包数据,等一段时间(必须是while占用时间,期间2号机处理完数据,并且把应答字节放在SPI发送缓存里),1号机在发送一个字节的CLK,收到应答字节;

    这个方案的问题,1号机的循环等待时间会占用;

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2014-8-23 16:18:32 | 显示全部楼层
方法2,1号机发送完毕后,不停地while发送一个字节CLK,2号机返回应答字节。判断返回的字节是正确应答字节则跳出循环,不正确则继续while,要有超时退出机制。

出0入14汤圆

 楼主| 发表于 2014-8-23 16:31:29 | 显示全部楼层
dalarang 发表于 2014-8-23 16:18
方法2,1号机发送完毕后,不停地while发送一个字节CLK,2号机返回应答字节。判断返回的字节是正确应答字节 ...

那这样会有两个问题啊:
        1、假设我2号机还没处理完,发送缓冲器里面是空的,那么1号机发送一个字节的CLK,他同时还会收到一个0xff的数据,会不会是认为应答不对?
        2、我1号机还有其他的请求2号机的数据命令可不可以也用这个方式?

出0入14汤圆

 楼主| 发表于 2014-8-23 16:37:47 | 显示全部楼层
一般只用于两个SPI通信的情况下,CS信号用的多吗?还是都一般不用?

出0入0汤圆

发表于 2014-8-23 16:45:55 | 显示全部楼层
isakura 发表于 2014-8-23 16:31
那这样会有两个问题啊:
        1、假设我2号机还没处理完,发送缓冲器里面是空的,那么1号机发送一个字节的CLK ...

你把应答码定义为其它的如0xAA等,直到应答0xAA才正确,其它一律作为未应答处理。

出0入14汤圆

 楼主| 发表于 2014-8-23 17:27:46 | 显示全部楼层
dalarang 发表于 2014-8-23 16:45
你把应答码定义为其它的如0xAA等,直到应答0xAA才正确,其它一律作为未应答处理。 ...

可是我看SD的驱动时好像是没有等待,直接收应答的就是

出400入0汤圆

发表于 2014-8-23 18:21:29 | 显示全部楼层
从机可以加上校验,数据没错立即应答,然后再处理数据,有错再另外处理

出0入14汤圆

 楼主| 发表于 2014-8-23 21:30:49 来自手机 | 显示全部楼层
rainyuoko 发表于 2014-8-23 18:21 从机可以加上校验,数据没错立即应答,然后再处理数据,有错再另外处理

检验我肯定会加,我想知道怎么实现立即应答方便

出10入0汤圆

发表于 2014-8-24 00:29:58 来自手机 | 显示全部楼层
再加一个io口,1号机设输入,2号机设输出。2号机每收到一个字节拉低一下io口。

出0入14汤圆

 楼主| 发表于 2014-8-24 08:50:52 来自手机 | 显示全部楼层
这样不好吧,拉低之后怎么释放呢,还是拉低一会儿就释放?

出0入14汤圆

 楼主| 发表于 2014-8-24 08:51:24 来自手机 | 显示全部楼层
dgtg 发表于 2014-8-24 00:29 再加一个io口,1号机设输入,2号机设输出。2号机每收到一个字节拉低一下io口。 ...

这样不好吧,拉低之后怎么释放呢,还是拉低一会儿就释放?

出0入0汤圆

发表于 2014-8-24 12:12:27 来自手机 | 显示全部楼层
就用拉低io的方式,索尼ps2手柄就是这样的,完全没问题

出0入0汤圆

发表于 2014-8-24 12:18:50 来自手机 | 显示全部楼层
不过,检测io拉低是用中断检测的

出0入14汤圆

 楼主| 发表于 2014-8-24 12:48:39 来自手机 | 显示全部楼层
funnybow 发表于 2014-8-24 12:18 不过,检测io拉低是用中断检测的

就算我主机检测到了,我从机该什么时候释放,请教教我

出0入0汤圆

发表于 2014-8-24 13:56:03 | 显示全部楼层
本帖最后由 hzyyl2008 于 2014-8-24 14:00 编辑

不知这样行不
1、主机准备发送命令(如0XAA),从机处于空闲状态时始终准备好应答字节(如0X55)。
2、主机发送命令(0XAA),同时从机返回(0X55)
3、主机收到从机返回的(0X55)后确定从机正确收到指令(0XAA),然后转入监控状态,等待从机执行命令。
4、从机对主机发来的命令(0XAA)执行完毕后,转入主模式发送命令执行状态。
5、主机监控到从机发来的命令执行状态后,完成通讯。
主机处于监控状态时可同时处理其它事务。

编辑原因:改错字

出0入14汤圆

 楼主| 发表于 2014-8-24 16:40:37 来自手机 | 显示全部楼层
hzyyl2008 发表于 2014-8-24 13:56 不知这样行不 1、主机准备发送命令(如0XAA),从机处于空闲状态时始终准备好应答字节(如0X55)。 2、主机发 ...

那你这样是做互为主从了???我担心在spi中断中修改spi的模式会不会不好?发送完还要继续切回从机模式

出0入0汤圆

发表于 2014-8-25 17:02:47 | 显示全部楼层
isakura 发表于 2014-8-24 12:48
就算我主机检测到了,我从机该什么时候释放,请教教我

从机只需要发送一个几微秒的一个低脉冲,大约3-4us,看主机的反应定一个合适的时间

出0入0汤圆

发表于 2014-8-27 07:48:37 | 显示全部楼层
看看i2c是怎么应答的,也许有帮助

出0入0汤圆

发表于 2014-8-27 11:48:15 | 显示全部楼层
SPI是主从机制,双向通信是主机发起。时钟是主机提供。

出0入14汤圆

 楼主| 发表于 2014-8-27 23:13:32 | 显示全部楼层
jiamingz 发表于 2014-8-27 11:48
SPI是主从机制,双向通信是主机发起。时钟是主机提供。

这个我还是知道的

出0入0汤圆

发表于 2014-8-28 10:53:56 | 显示全部楼层
SPI 通讯,是不需要应答的。一般直接传送数据就可以了。

出0入30汤圆

发表于 2014-8-28 11:24:14 | 显示全部楼层
一般就是从机一个IO接到主机的某个中断引脚上,从机要发数据给主机就控制这个引脚给主机一个中断,主机再发时钟来读取从机数据,当然要配合协议来。
也可以配置为互为主从的模式,如果你的MCU支持的话。

出0入0汤圆

发表于 2014-8-28 15:17:08 | 显示全部楼层
isakura 发表于 2014-8-27 23:13
这个我还是知道的

这样1就pass了。
主机直接读写从机数据,额外加中断或周期性读都可以。
从机就开buffer,数据刷新就行了。

出0入14汤圆

 楼主| 发表于 2014-8-28 21:41:33 来自手机 | 显示全部楼层
jiamingz 发表于 2014-8-28 15:17 这样1就pass了。 主机直接读写从机数据,额外加中断或周期性读都可以。 从机就开buffer,数据刷新就行了。 ...

我目前也考虑这样,互为主从太麻烦了

出0入14汤圆

 楼主| 发表于 2014-8-28 21:42:22 来自手机 | 显示全部楼层
lovelywwei 发表于 2014-8-28 11:24 一般就是从机一个IO接到主机的某个中断引脚上,从机要发数据给主机就控制这个引脚给主机一个中断,主机再发 ...

用中断应答我觉得会使得程序更复杂

出0入0汤圆

发表于 2014-8-28 22:15:13 来自手机 | 显示全部楼层
脑子有毛病才这样的一号鸡二号鸡。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 06:36

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表