SPI从机双工通信实现-基于Zenq 7000

本文介绍了Zenq 7000系列芯片在SPI从机模式下实现双工通信的方法。通过设置FIFO的water flow值,实现数据的自动收发,并设计了一种通信协议,包括Set和Get两类命令,每个命令由两个byte block组成,用于数据设置和获取。通信流程包括配置SPI外设、注册中断和服务函数、启动设备以及进行7字节传输。
摘要由CSDN通过智能技术生成

大门牙原创,欢迎随意转载,修改,吐槽

1. 准备工作

Zenq 7000系列SPI外设支持master和slave工作模式。其中,master模式应用比较好理解。但是作为slave模式工作时,如何与master进行双工通信,是一个问题。

Zenq 7000使用了两块FIFO进行时钟域的同步(CPU时钟和SPI时钟)。当作为slave模式工作时,当master的SCLK信号产生时,SPI控制器会自动将接收数据存入RxFIFO,同时将TxFIFO中的数据在MISO线上发送出去。

在这个逻辑流程中,RxFIFO和TxFIFO可以分别设置一个water flow值(水位值)。当数据满足某种条件时,会触发驱动提醒用户程序FIFO的状态变化。具体如下图所示:

zenq7000-spi-dev

其中,RxFIFO可以设置一个Threshold寄存器,当RxFIFO中的数据数大于这个值时,产生“RxFIFO非空”中断,通知程序处理接收数据。当接收到的数据数小于这个值时,认为Rx为空。

TxFIFO类似也有一个Threshold寄存器,当TxFIFO中的数据小于这个值时,产生一个“TxFIFO水位过低”中断,通知程序TxFIFO中剩余的数据不多,需要尽快添加数据到TxFIFO中。

2. 双工通信方案

对于从机而言,无法在当前byte返回指定的信息,故设计通讯协议如下图所示:

spi-comm

主机通过spi对从机进行两种类型的通信:Set类和Get类命令。顾名思义,Set类是将某种数据设置到从机,Get类命令是向从机索取某种数据。
每一个通信

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值