C 如何为Zynq 7000 ARM开发板编写SPI驱动程序?
我将为ARM开发板编写一个SPI驱动程序。它不与Linux一起使用 昨天,我阅读了Xilinx提供的QSPI驱动程序,并成功地进行了尝试。然而,我真的很想编写自己的SPI驱动程序 以下是我的问题:C 如何为Zynq 7000 ARM开发板编写SPI驱动程序?,c,embedded,arm,driver,spi,C,Embedded,Arm,Driver,Spi,我将为ARM开发板编写一个SPI驱动程序。它不与Linux一起使用 昨天,我阅读了Xilinx提供的QSPI驱动程序,并成功地进行了尝试。然而,我真的很想编写自己的SPI驱动程序 以下是我的问题: QSPI和SPI在使用上有什么区别 如果我写一个基于QSPI的驱动程序,它会工作吗 如果我从头开始编写驱动程序,基本过程是什么(读/写/初始化) 最后,为什么SPI必须同时发送和接收 谢谢大家。我想先从最后一个问题开始可能会更容易 为什么SPI必须同时发送和接收? 简单的答案是,它是协议的一部分。当M
谢谢大家。我想先从最后一个问题开始可能会更容易
为什么SPI必须同时发送和接收?
简单的答案是,它是协议的一部分。当MOSI线路上的数据从主设备转移到从设备时,从设备缓冲区中的数据转移到MISO线路上的主设备。这允许硬件在每个设备中为发送和接收的数据使用单个寄存器。这里有一个很好的流程图:
不那么简单的答案是SPI不是一个定义良好的标准。根据您使用的设备,有不同类型的实现。甚至还有一种变体,其中MOSI和MISO线路以双向方式组合和使用(3线SPI)。然而,我处理的大多数实现都是通过两条不同的线路发送和接收,这往往是标准的方法
QSPI和SPI在使用上有什么区别?
QSPI或Quad SPI实际上不遵守标准方法,打破了同时发送和接收的概念。它利用四条双向I/O线来发送和接收数据,通常用于内存应用程序(因为它比SPI更快)。使用QSPI,您不会同时发送和接收
如果我基于QSPI编写驱动程序,它会工作吗?
当然可以!您只需熟悉所使用的硬件即可。同样,SPI与Quad SPI非常不同,您经常可以找到使QSPI非常容易使用的硬件实现。例如,您的Zynq 7000有一个QSPI控制器,该控制器具有许多简化编码过程的功能。它还将在“传统模式”下运行,作为普通SPI控制器。除此之外,Zynq 7000还有另外两个标准SPI控制器,未针对QSPI进行设置。我强烈建议您阅读以下技术文档:
如果我从头开始编写驱动程序,基本过程是什么?
这非常依赖于硬件。我对您的硬件做了一个快速的概述,但是在这里详细说明这些步骤将花费太长的时间。然而,您设备的技术手册似乎有关于配置和使用QSPI和SPI控制器的详细说明。以下是SPI部分的一个示例:
17.3.1启动顺序
示例:启动顺序
我希望这有帮助 我想先从你的最后一个问题开始可能会更容易些
为什么SPI必须同时发送和接收?
简单的答案是,它是协议的一部分。当MOSI线路上的数据从主设备转移到从设备时,从设备缓冲区中的数据转移到MISO线路上的主设备。这允许硬件在每个设备中为发送和接收的数据使用单个寄存器。这里有一个很好的流程图:
不那么简单的答案是SPI不是一个定义良好的标准。根据您使用的设备,有不同类型的实现。甚至还有一种变体,其中MOSI和MISO线路以双向方式组合和使用(3线SPI)。然而,我处理的大多数实现都是通过两条不同的线路发送和接收,这往往是标准的方法
QSPI和SPI在使用上有什么区别?
QSPI或Quad SPI实际上不遵守标准方法,打破了同时发送和接收的概念。它利用四条双向I/O线来发送和接收数据,通常用于内存应用程序(因为它比SPI更快)。使用QSPI,您不会同时发送和接收
如果我基于QSPI编写驱动程序,它会工作吗?
当然可以!您只需熟悉所使用的硬件即可。同样,SPI与Quad SPI非常不同,您经常可以找到使QSPI非常容易使用的硬件实现。例如,您的Zynq 7000有一个QSPI控制器,该控制器具有许多简化编码过程的功能。它还将在“传统模式”下运行,作为普通SPI控制器。除此之外