2015-02-24 49 views
0

我在想,因为有没有可用的(据我可以告诉)创造我自己的纯-C软件SPI库。软件SPI实现

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

编辑:

我决定写我自己的图书馆由于SPI外设的越野车是STM32。 Especially8 bit mode,但我也有一个lot of problems 16位模式。许多其他问题我甚至不打扰记录。

我现在写的软件实现(这是很容易的),并在作品就好了。

+0

可能有*软件SPI库。 – immibis 2015-02-24 06:53:42

+0

我想可能有人会需要一个,因为所有STM32器件都有丰富的_hardware_ SPI外设选择,每个器件都可以重新映射引脚,具有DMA和中断支持,并且可以以HCLK/2的吞吐量运行。 – 2015-02-26 08:53:28

+0

@AndyBrown增加了我编写我自己的软件实现的理由。 – 2015-02-27 09:54:48

回答

2

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

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

SPI总线是一个事实上的标准。但是,缺乏正式的标准会反映在各种协议选项中。不同的 字号是常见的。每个设备都定义了自己的协议,其中包括是否支持命令。有些设备是 仅传输;其他人只接收。芯片选择有时是 高电平有效而不是低电平有效。一些协议首先发送最少的有效位( )。

所以制作图书馆确实没有意义。您只需为每种特定情况和设备组合编写代码。

0

如果您要求微控制器,那么您可以拥有自己的SPI库。 你需要使用位撞技术。 有可用的软件SPI库。由于每个微控制器都有不同的PORT架构和寄存器,这些都不是通用的,只是针对该控制器而特定的。

例如对于8051架构,您可以找到this

1

虽然其他人回答说its just bitbanging;我认为,有利于写层:

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

虽然确实发送数据通常所有你需要做的就是设置一个寄存器,但更多的时候不是初始化序列很复杂。

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