我要为ARM开发板编写SPI驱动程序。它不适用于Linux。
昨天,我阅读了赛灵思提供的QSPI驱动程序,并成功尝试了。但是,我真的想编写自己的SPI驱动程序。
以下是我的问题:
谢谢大家。
答案 0 :(得分:1)
我认为从最后一个问题开始可能更容易。
Why must SPI send and receive at the same time?
简单的答案是它是协议的一部分。当数据在MOSI线上从主机移出到从机时,从机缓冲区中的数据将转移到MISO线上的主机。这允许硬件在每个设备中使用单个寄存器来发送数据和接收数据。这里有一个很好的流程图:
http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus
不那么简单的答案是SPI不是一个定义明确的标准。根据您使用的设备,有不同类型的实现。甚至有一种变体,其中MOSI和MISO线组合并以双向方式使用(3线SPI)。但是,我处理的大多数实现都是通过两条不同的行发送和接收,而这往往是标准的方法。
What is the difference between QSPI and SPI on usage?
QSPI或Quad SPI实际上并不遵循标准方法,同时打破了发送和接收的概念。它利用四条双向I / O线来发送和接收数据,通常用于存储器应用(因为它比SPI快)。使用QSPI,您不会同时发送和接收。
If I write a driver based on QSPI, will it work?
当然!您只需要熟悉您正在使用的硬件。同样,SPI与Quad SPI非常不同,您经常可以找到使QSPI易于使用的硬件实现。例如,您的Zynq 7000具有QSPI控制器,该控制器具有许多简化编码过程的功能。它还将以“传统模式”运行,充当普通的SPI控制器。最重要的是,Zynq 7000还有另外两个标准SPI控制器,它们没有为QSPI设置。我强烈建议您阅读这里的技术文档:
http://www.xilinx.com/support/documentation/user_guides/ug585-Zynq-7000-TRM.pdf
If I write a driver from scratch, what is the basic procedure?
这非常依赖于硬件。我快速概述了您的硬件,但详细说明这里的步骤需要太长时间。但是,设备的技术手册似乎有关于配置和使用QSPI和SPI控制器的详细分步说明。以下是SPI部分的示例:
17.3.1启动顺序
示例:启动顺序
开始数据传输:
主模式操作选择:手动/自动启动和SS,参见17.3.3主模式数据传输。
从模式操作,请参见17.3.4从模式数据传输。
我希望有所帮助!