Linux下SPI 设备驱动编写流程:SPI 设备数据收发处理流程

SPI设备驱动:数据收发流程、示例及ICM20608应用

一. 简介

前面一篇文章学习了SPI设备驱动数据收发过程中,涉及的结构体与函数,文章如下:

SPI 设备驱动编写流程:SPI 设备数据收发处理流程中涉及的结构体与函数-优快云博客

本文学习SPI设备驱动中数据收发处理过程。

二.  SPI 设备驱动编写流程:SPI 设备数据收发处理流程

1.  SPI设备数据收发处理流程

经过上一篇文章的学习,总结 SPI数据传输过程如下:

(1) 首先,申请并初始化 spi_transfer结构体,设置 spi_transfer 的 tx_buf 成员变量,然后设置 rx_buf 成员变量最后设置 len 成员变量,,tx_buf 为要发送的数据,rx_buf 保存着接收到的数据。len为要进行数据通信的长度。

(2) 其次,调用 spi_message_init函数对spi_message进行初始化。

(3) 其次,使用spi_message_add_tail函数,将 spi_transfer结构体添加到 spi_message队列中。

(4) 最后,使用 spi_sync 函数完成 SPI 数据同步传输。

2.  SPI设备数据传输示例代码

通过 SPI 进行 n 个字节的数据发送和接收的示例代码如下所示:


/*SPI进行多字节发送*/
static int spi_send(struct spi_device* spi_dev, u8* buf, int len)
{
    int ret = 0;
    struct spi_message spi_msg;
    struct spi_transfer spi_t = {
        .tx_buf = buf,
        .len = len,
    };
    
    spi_message_init(&spi_msg); //初始化spi_message
    spi_message_add_tail(&spi_t, &spi_msg); //将spi_tranfer添加到spi_message队列中
    ret = spi_sync(spi_dev, &spi_msg); //同步传输
    return ret;
}

/*SPI进行多字节接收*/
static int spi_recv(struct spi_device* spi_dev, u8* buf, int len)
{
    int ret = 0;
    struct spi_message spi_msg;
    
    struct spi_transfer spi_t = {
        .rx_buf = buf,
        .len = len,
    };

    spi_message_init(&spi_msg); //初始化spi_mesage
    spi_message_add_tail(&spi_t, &spi_t); //将spi_transfer添加到spi_message队列中
    ret = spi_sync(spi_dev, &spi_msg); //同步传输
    return ret;
}

以上就实现了SPI传输多个字节数据的功能。

接下来进行 ALPHA开发板上的 ICM20608的SPI设备驱动实验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值