linux内核gpio模拟spi驱动,Linux gpio模拟spi

1.config配置

首先是spidev,要在/dev/下面产生设备文件,需要spidev的支持

CONFIG_SPI_SPIDEV=y

使用的是gpio模拟spi,gpio模拟spi的时序原理是bitbang文件实现的,所以这个也需要打开,如果是在openwrt下动态加载的话就是如下两个配置

CONFIG_PACKAGE_kmod-spi-bitbang=y

+CONFIG_PACKAGE_kmod-spi-gpio=y

如果是直接内核的话是如下两个

CONFIG_SPI_BITBANG=y

CONFIG_SPI_GPIO=y

2.arch层添加device和board_info

跟I2C的arch层一样,主要是devices的添加和board_info的添加,如下

//nfc mfrc522

platform_add_devices(bsp_spi_gpio_devs, ARRAY_SIZE(bsp_spi_gpio_devs));

spi_register_board_info(nfc_spi_gpio_board_info,

ARRAY_SIZE(nfc_spi_gpio_board_info));

对于platform_add_devices,因为是使用spi_gpio,所以name是"spi_gpio"这样才可以与driver里面的spi_gpio相互匹配probe到。

因为SPI是可以一个总线上面挂多个,然后通过片选脚CS进行硬件切换,所以这变有个num_chipselect需要设置,如果有2个设置就设置2,一个设备就设置1,这边设置好之后,后面board_info也要有对应的个数,而且片选引脚需要不同。

I2C是通过每个设备有自己不同的地址,通过地址来进行软件切换。

#include

#include

#define SPI_GPIO_BUS_NUM 1

#define SPI_GPIO_SCK 3 /* set gpio 2 as sck */

#define SPI_GPIO_MOSI 1 /* set gpio 3 as MOSI */

#define SPI_GPIO_MISO 0 /* set gpio 4 as MISO */

#define SPI_GPIO_NUM_CHIPSELECT 1 //2

struct spi_gpio_platform_data spi_gpio_info = {

.sck = SPI_GPIO_SCK,

.mosi = SPI_GPIO_MOSI,

.miso = SPI_GPIO_MISO,

.num_chipselect = SPI_GPIO_NUM_CHIPSELECT,

};

struct pla

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值