您的位置:首页 > 其它

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

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

解决问题的办法:任何一方获取发送总线的时候,进行进入行临界区的保护操作,获取总线后再退出临界区,这样就可以避免问题的发生!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: