Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何为Zynq 7000 ARM开发板编写SPI驱动程序?_C_Embedded_Arm_Driver_Spi - Fatal编程技术网

C 如何为Zynq 7000 ARM开发板编写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

我将为ARM开发板编写一个SPI驱动程序。它不与Linux一起使用

昨天,我阅读了Xilinx提供的QSPI驱动程序,并成功地进行了尝试。然而,我真的很想编写自己的SPI驱动程序

以下是我的问题:

  • QSPI和SPI在使用上有什么区别
  • 如果我写一个基于QSPI的驱动程序,它会工作吗
  • 如果我从头开始编写驱动程序,基本过程是什么(读/写/初始化)
  • 最后,为什么SPI必须同时发送和接收

  • 谢谢大家。

    我想先从最后一个问题开始可能会更容易

    为什么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启动顺序

    示例:启动顺序

  • 重置控制器:断言和反断言Ref和CPU_1x重置,参考第17.4.1节重置
  • 编程时钟:编程SPI参考时钟,参考第17.4.2节时钟
  • Tx/Rx信号路由:参考第17.5节I/O接口
  • 控制器配置:参考第17.3.2节控制器配置
  • 中断配置:配置ISR以处理中断条件。最简单的ISR 从RxFIFO读取数据并将内容写入TxFIFO。PS中断控制器是 如第7章“中断”所述。SPI控制器的中断机制如中所述 第17.3.5节中断服务程序
  • 启动数据传输:

    主模式操作选择:手动/自动启动和SS,参考第17.3.3节主模式数据传输

    从属模式操作,参考第17.3.4节从属模式数据传输


  • 我希望这有帮助

    我想先从你的最后一个问题开始可能会更容易些

    为什么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控制器。除此之外