嵌入式应用开发之spi及linux函数累积

​ 弄Linux也有半年多的时间了,自己选择的这条路是相对曲折的,有时真的是没有时间来搞。有时则是自己过分关注一些细节,整的自己的实际项目没有什么进展。实际上是打击了自己学习的积极性。还是要推进些自己有用的项目,而不是依学习进度。
要准确判断出自己的进度,不要低估了自己,也不要高估了自己,及时调整自己的策略。

spi基础准备

spi的驱动框架

主要分为了三个层次,用户空间,内核空间和硬件。
用户空间:spi设备的具体的功能。包括具体的协议控制和数据传输工作。
内核空间:也分为了三部分;
spi控制器驱动层:对应于内核的spidev.c的spi标准驱动;适用于特定spi总线控制器的读写方法,并注册到linux内核的spi架构。此层对应的就是内核空间的设备驱动程序。
spi通用接口封装层:提供核心的api接口。对应于驱动中的spi.c文件,是内核中的原生文件。
spi控制器驱动:对应于驱动中的spi-suxi.c文件。

主要的传数据的接口,官方手册中指定的接口函数

spi_message_init();//初始化一个 SPI message 结构

spi_message_add_tail();//向 SPI message 中添加一个 transfer

spi_sync();//启动、并等待 SPI 总线处理完指定的 SPI message

linux官网中的接口函数

  • 简易函数

    /**
     * SPI同步写
     * @spi: 写哪个设备
     * @buf: 数据buffer
     * @len: 长度
     * 这个函数可以休眠
     *
     * 返回值: 0-成功, 负数-失败码
     */
    static inline int
    spi_write(struct spi_device *spi, const void *buf, size_t len);
    
    /**
     * SPI同步读
     * @spi: 读哪个设备
     * @buf: 数据buffer
     * @len: 长度
     * 这个函数可以休眠
     *
     * 返回值: 0-成功, 负数-失败码
     */
    static inline int
    spi_read(struct spi_device *spi, void *buf, size_t len);
    
    
    /**
     * spi_write_then_read : 先写再读, 这是一个同步函数
     * @spi: 读写哪个设备
     * @txbuf: 发送buffer
     * @n_tx: 发送多少字节
     * @rxbuf: 接收buffer
     * @n_rx: 接收多少字节
     * 这个函数可以休眠
     * 
     * 这个函数执行的是半双工的操作: 先发送txbuf中的数据,在读数据,读到的数据存入rxbuf
     *
     * 这个函数用来传输少量数据(建议不要操作32字节), 它的效率不高
     * 如果想进行高效的SPI传输,请使用spi_{async,sync}(这些函数使用DMA buffer)
     *
     * 返回值: 0-成功, 负数-失败码
     */
    extern int spi_write_then_read(struct spi_device *spi,
    		const void *txbuf, unsigned n_tx,
    		void *rxbuf, unsigned n_rx);
    
    /**
     * spi_w8r8 - 同步函数,先写8位数据,再读8位数据
     * @spi: 读写哪个设备
     * @cmd: 要写的数据
     * 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guangod

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值