软件SPI实现

时间:2015-02-24 06:48:40

标签: c stm32 spi

我正在考虑创建自己的纯C软件SPI库,因为没有可用的(据我所知)。

这也让我担心 - 为什么没有有任何软件SPI库?是否存在一些我不考虑的硬件限制?

编辑:

我决定编写自己的库,因为SPI外设在STM32中存在多大问题。 Especially中的8 bit mode,但我还拥有16位模式的lot of problems。许多其他问题我甚至都不打算记录。

我现在已经编写了软件实现(非常简单)并且工作正常。

3 个答案:

答案 0 :(得分:2)

  

为什么没有任何软件SPI库?

因为WriteByte和ReadByte函数大约有10行代码,而且大多数是特定于处理器的寄存器。更高级别的协议取决于连接到SPI的设备。这是关于主题的what wikipedia has to say

  

SPI总线是事实上的标准。但是,缺乏正式的   标准反映在各种协议选项中。不同   字大小很常见。每个设备都定义了自己的协议,   包括它是否支持命令。有些设备是   发送仅;其他人只收到。芯片选择有时候   高电平有效而非低电平有效。有些协议发送最少   重要的是先。

因此制作图书馆真的没有意义。您只需为每种特定情况和设备组合编写代码。

答案 1 :(得分:1)

虽然其他人回答了its just bitbanging;我认为编写层有好处:

  • 如果您不使用HAL或标准库(如我自己),您可以编写一个层来处理初始化,这可以按照芯片的初始化顺序执行。
  • 您可以使用回调机制
  • 映射此层中特定外围设备的所有中断向量
  • 在应用程序和系统域之间创建分离,这是模块化设计的核心原则
  • 利用函数指针和通用接口等技术提高代码的可重用性
  • 在设置/参数上添加输入验证,否则如果未使用任何层,则会导致代码重复。例如,在初始化时确保stm32f429上的HCLK不超过180MHz。

虽然发送数据通常只需要设置一个寄存器,但更常见的是初始化序列并不复杂。

随着微控制器的功率和容量以及项目规模的增加,实现平衡设计选择以提高可扩展性和可维护性非常重要 - 尤其是在商业项目中。

答案 2 :(得分:0)

如果您要求微控制器,那么您可以拥有自己的SPI库。 你需要使用bit-banging技术。 有软件SPI库可用。 由于每个微控制器都有不同的PORT架构和寄存器,因此它们不是通用的,它们仅适用于该控制器。

e.g。对于8051架构,您可以找到this