使用 spi-bitbang 驱动程序

马罗斯·马科

我正在编写一个内核模块来读取和写入 SPI 设备(CC1200)。我的 linux 设备没有本机 SPI,所以我试图对总线进行位爆破。

我发现linux有内置的bitbang代码(linux/spi/spi_bitbang.h),但是我很困惑如何设置它。它需要 spi_device 和 spi_master 结构,每个都需要结构设备,这需要结构作为 kobject 等等,其中大多数我不知道如何处理它们,以及如何需要它们来进行简单的位敲击。

我在网上找了一些例子,但我几乎没有找到。没有一次使用包含的 bitbang 代码,只有一些参考它是“容易”的

我将非常感谢任何帮助,也许 bitbang lib 甚至不是好路径。也许我可以自己写(如何有效地做到这一点?我有 4 个内核,但它在后台运行很多东西)

谢谢

西姆森

由于 SPI 的性质,其中数据由主机计时和读取,主机的位碰撞驱动程序没有任何问题,因为从机不应在稳定的时钟上中继。但是当然这取决于从设备是否可以在实践中工作。

如果您使用的是 linux 内核,则无需实现您自己的 bit-banging 驱动程序,因为已经有一个 spi-gpio.c

我猜测如何启动并运行它是通过定义要GPIO在 中使用的引脚devicetree,然后驱动程序将能够充当任何其他物理层驱动程序。

我快速浏览了drivers/spi/spi-gpio.c源代码,甚至还有一个简短的用户指南,如何在不使用通用 GPIO 层开销的情况下直接访问内联 GPIO 引脚。

/*
 * Because the overhead of going through four GPIO procedure calls
 * per transferred bit can make performance a problem, this code
 * is set up so that you can use it in either of two ways:
 *
 *   - The slow generic way:  set up platform_data to hold the GPIO
 *     numbers used for MISO/MOSI/SCK, and issue procedure calls for
 *     each of them.  This driver can handle several such busses.
 *
 *   - The quicker inlined way:  only helps with platform GPIO code
 *     that inlines operations for constant GPIOs.  This can give
 *     you tight (fast!) inner loops, but each such bus needs a
 *     new driver.  You'll define a new C file, with Makefile and
 *     Kconfig support; the C code can be a total of six lines:
 *
 *    #define DRIVER_NAME  "myboard_spi2"
 *    #define  SPI_MISO_GPIO  119
 *    #define  SPI_MOSI_GPIO  120
 *    #define  SPI_SCK_GPIO   121
 *    #define  SPI_N_CHIPSEL  4
 *    #include "spi-gpio.c"
 */

PS 你确定你的平台没有 spi,我在海思使用的所有 SoC 都有一个。我会先仔细检查一下

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章