【问题标题】:How can I write an SPI driver for Zynq 7000 ARM development board?如何为 Zynq 7000 ARM 开发板编写 SPI 驱动程序?
【发布时间】:2013-05-19 03:16:40
【问题描述】:

我要为 ARM 开发板编写一个 SPI 驱动程序。它不适用于 Linux。

昨天看了Xilinx提供的QSPI驱动,试了成功。但是,我真的很想编写自己的 SPI 驱动程序。

这是我的问题:

  1. QSPI 和 SPI 在用法上有什么区别?
  2. 如果我写一个基于 QSPI 的驱动,它可以工作吗?
  3. 如果我从头开始编写驱动程序,基本程序是什么(READ / WRITE / INITIALIZE)?
  4. 最后,为什么 SPI 必须同时发送和接收?

谢谢大家。

【问题讨论】:

  • 这个需要多多梳理和澄清。但是,处理器中的 QSPI 内核在处于这种模式时往往能够与 SPI 通信,因此首先检查文档和源代码,并确保您已经拥有的驱动程序不能用于普通 SPI。
  • SPI 本质上是位交换,但没有人说在写入期间读取的内容在任何情况下都必须很重要——这取决于外围设备。对于许多人来说,在命令期间读取的那些是没有意义的,然后在读取回复数据时你打卡什么都没关系。但是,也可以制作一个优化总线使用的外围设备,在您提供新命令的同时为您提供旧的或默认/状态响应。

标签: c embedded arm driver spi


【解决方案1】:

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

Why must SPI send and receive at the same time?

简单的答案是它是协议的一部分。当数据在 MOSI 线上从 Master 移出到 Slave 时,Slave 缓冲区中的数据在 MISO 线上转移到 Master。这允许硬件在每个设备中使用单个寄存器来存储正在发送的数据和正在接收的数据。这里有一个很好的过程图:

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 有另外两个没有为 QSPI 设置的标准 SPI 控制器。我强烈建议您阅读此处的技术文档:

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

示例:启动顺序

  1. 重置控制器:断言和取消断言 Ref 和 CPU_1x 重置,请参阅第 17.4.1 节重置。
  2. 编程时钟:编程 SPI_Ref_Clk,请参阅第 17.4.2 节时钟。
  3. Tx/Rx 信号路由:请参阅第 17.5 节 I/O 接口。
  4. 控制器配置:请参阅第 17.3.2 节控制器配置。
  5. 中断配置:配置 ISR 以处理中断条件。最简单的 ISR 从 RxFIFO 读取数据并将内容写入 TxFIFO。 PS中断控制器是 第 7 章,中断中描述。 SPI 控制器的中断机制在 第 17.3.5 节中断服务程序。
  6. 开始数据传输:

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

    从机模式操作,请参阅第 17.3.4 节从机模式数据传输。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 2017-05-04
    • 2023-03-23
    相关资源
    最近更新 更多