【问题标题】:What are the disadvantages of bit banging SPI/I2C in embedded applications嵌入式应用中bit banging SPI/I2C有什么缺点
【发布时间】:2014-01-14 10:32:20
【问题描述】:

我已经明白,对于 GPIO 上的 SPI/I2C,位敲击是一种可怕的做法。为什么会这样?

【问题讨论】:

  • 似乎 CPU 响应能力和资源是主要的权衡;我想知道 bit-banging 是否有任何信号传输质量的缺点?例如,如果我正在推动 I2C/SPI 的信号距离限制,那么 bit-banged 实现的性能会与典型的硬件外设不同吗?

标签: embedded i2c spi


【解决方案1】:

位碰撞在非实时系统中不太可能。如果你把它放在不可中断的内核中,那么你真的必须确保在重新调度用户进程之前你只 bitbang 一定数量的位。

考虑一下:您有一个以 1/1000 秒间隔运行的调度计时器。当它运行时,您检查是否某个进程想要通过 bitbanged 接口发送数据并处理此请求。该请求要求您以 9600 波特率 bitbang 一个字节(例如)。现在你有一个问题:bitbang 一个字节需要 0.8ms。你真的负担不起,因为当调度中断运行时,它必须完成它的工作并加载需要运行然后退出的下一个进程。这通常比 1ms 花费的时间短得多,并且 1ms 主要用于运行用户进程直到下一次中断。但是,如果您开始进行 bitbanging,那么您通常会花费那个 ms 什么都不做。

对此的一种解决方案可能是仅出于 bitbanging 的目的使用定时器外设。这将提供一个相当自主和中断驱动的 bitbanging 代码,它根本不必处于空闲状态 - 但这只是以使用专用计时器为代价。如果你能负担得起一个专用的硬件定时器,那么 bitbanging 可能会很好用。但一般来说,在多任务环境中高速进行可靠的 bitbanging 是非常困难的。

【讨论】:

    【解决方案2】:

    它不会被称为可怕。但是,是的,当我们使用 bit-banging 实现协议时,控制器很可能会错过其他更重要的任务,因为该协议消耗的 CPU 时间可能比专用硬件消耗的多。所以,应该避免在实时环境或时间关键环境中。
    除了这些之外,还有一个关于 bit-banging 的问题,通常在读取和/或写入引脚时,产生的信号通常会有更多的抖动或毛刺,特别是如果控制器在通信时也在执行其他任务。如果在使用 bit-banging 是不可避免的,然后至少尝试将它们与中断一起使用而不是轮询。

    【讨论】:

      【解决方案3】:

      Bit banging 是可移植的,例如,请参阅 Linux 内核驱动程序中的 I2C 代码。您可以快速启动并运行它,并且它可以正常工作。基于硬件的解决方案通常不需要并且需要一段时间才能启动和运行,并且受到硬件实现的限制。并非所有 spi,尤其是 i2c 都符合可以在通用硬件解决方案中实现的标准。您必须始终能够依靠位敲击。

      Bit banging 会消耗更多的处理器资源,这从这方面来说是不可取的。它更便携,或者可能取决于它的编写方式,因此在这方面是可取的。硬件 SPI/I2C 则相反,它减少了一些 cpu 开销,不可移植,并不总是足够灵活以处理所有外围设备。

      作为专业人士,您需要对两者都感到满意,就像您在设计中做出的任何其他嵌入式权衡一样。

      【讨论】:

        【解决方案4】:

        Bit-banging 会带来 软件开销 消耗 CPU 周期,否则您可以将其用于其他目的。这可能会对系统对其他事件的响应产生显着影响,并且在硬实时系统中,可能会显着影响系统满足实时截止日期的能力。

        如果 bit-banged 接口不会对实时性能产生不利影响,那么它必须被赋予低优先级,因此它本身在数据吞吐量和延迟方面是不确定的。

        通过使用硬件接口和 DMA 传输来最大限度地减少软件开销,可以实现最高效的 CPU 传输。 Bit-banging 则与之相反。

        我不会说这是可怕;如果在您的应用程序中您可以实现响应能力和实时约束,并且使用 bit-banging 可能会降低所需部件的成本或允许您使用现有硬件,那么它可能是完全合理的。

        【讨论】:

          【解决方案5】:

          我不知道这是否可怕,但如果您已经有可用的 SPI 或 I2C 外设,那么肯定有一个“不要重新发明轮子”的论点来反对位碰撞,特别是因为您的代码中可能存在错误 - 例如,您可能在 SPI 时钟的错误边沿上进行采样,并且根据所涉及的容差和您测试的硬件,您可能在已经进入之前不会注意到它生产。 wikipedia 文章还指出,您正在使用额外的处理能力,并且您可能会将抖动引入您产生的任何信号中。

          综上所述,如果您的硬件没有内置外围设备,或者它已被其他设备(例如如果内置 SPI 外设被您必须不断与之通信的高带宽设备使用,那么您可能会对另一个不需要在您的应用程序中如此实时的 SPI 设备产生影响。

          【讨论】:

            猜你喜欢
            • 2018-08-17
            • 2017-09-11
            • 1970-01-01
            • 1970-01-01
            • 2014-03-17
            • 2013-07-20
            • 2020-07-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多