SPI 主从通信的总线控制方法

做一个SPI主从之间的通信协议,实现半双工的传输通信。



SPI通信:包含SPI通信的4跟线。

M_TX_PIN:表示如果SPI主机给从机发送数据前,需要把它拉高,表示目前只在发送,平时空闲为低

S_TX_PIN:表示如果SPI从机给主机发送数据前,需要把它拉高,表示目前只在发送,平时空闲为低


SPI主机给从机发送数据:

1.1.首先读取S_TX_PIN IO口,如果为高,代表SPI从机 目前只在给SPI主机发送数据,忙,则此时不能给从机发送数据。

1.2.首先读取S_TX_PIN IO口,如果为低,代表可给从机发送数据,立刻把主机M_TX_PIN IO口拉高,延时一会,再次读取S_TX_PIN IO口.

1.2.1. 如果 S_TX_PIN IO口为低电平,表示抢得 主机给从机 发送数据的权限,接下来主机可以给从机发送数据了。发送完成以后,主机把M_TX_PIN拉高。

1.2.2.如果 S_TX_PIN IO口为高电平,表示刚才同一时刻,主从同时进行发送数据的总线请求,同时检查到对方空闲,并同时拉高自身发送的IO口,这样造成了互抢 了临界资源,所以此时主机把M_TX_PIN拉低,释放发送总线。


SPI从机给主机发送数据:(原理跟上面一样,不在详细说明)


在应用程序上了FreeRTOS操作系统以后,存在应用程序判断完对方空闲以后,没有拉高自身的发送控制总线,因需要运行其他更高优先级的任务,立刻切到另一个任务运行,当再次回到当前任务时,在另一个任务运行期间,对方也检查到了主机这边空闲,也进行了发送控制操作,导致两方互相发送数据。

解决问题的办法:任何一方获取发送总线的时候,进行进入行临界区的保护操作,获取总线后再退出临界区,这样就可以避免问题的发生!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值