SPI全双工设备的操作分为主设备和从设备(可以多个,多线程下从设备访问主设备要先获得总线控制权)

rt_device_t rt_device_find(const char* name);查找设备
struct rt_spi_message *rt_spi_transfer_message(struct rt_spi_device  *device,struct rt_spi_message *message);发送消息,以单向链表形式
void rt_spi_message_append(struct rt_spi_message *list,struct rt_spi_message *message);向链表中增加一条待传输的消息。
传输一次:
rt_size_t rt_spi_transfer(struct rt_spi_device *device,
const void *send_buf,
void *recv_buf,
rt_size_t length);

发送一次:
rt_size_t rt_spi_send(struct rt_spi_device *device,
const void *send_buf,
rt_size_t length)
接收一次
rt_size_t rt_spi_recv(struct rt_spi_device *device,
void *recv_buf,
rt_size_t length);
发送2次
rt_err_t rt_spi_send_then_send(struct rt_spi_device *device,
const void *send_buf1,
rt_size_t send_length1,
const void *send_buf2,
rt_size_t send_length2);
先发后收
rt_err_t rt_spi_send_then_recv(struct rt_spi_device *device,
const void *send_buf,
rt_size_t send_length,
void *recv_buf,
rt_size_t recv_length);

多线程下使用总线需要下面个函数:
rt_err_t rt_spi_take_bus(struct rt_spi_device *device);
获取总线
rt_err_t rt_spi_take(struct rt_spi_device *device);选中片选
rt_err_t rt_spi_release(struct rt_spi_device *device);取消片选
rt_err_t rt_spi_release_bus(struct rt_spi_device *device)释放总线

特殊使用场景

在一些特殊的使用场景,某个设备希望独占总线一段时间,且期间要保持片选一直有效,期间数据传输可能是间断的,则可以按照如所示步骤使用相关接口。传输数据函数必须使用 rt_spi_transfer_message(),并且此函数每个待传输消息的片选控制域 cs_take 和 cs_release 都要设置为 0 值,因为片选已经使用了其他接口控制,不需要在数据传输的时候控制
 

RTT设备与驱动之SPI的更多相关文章

  1. RTT设备与驱动之PIN设备

    单片机的PIN有2个基本功能:GPIO和AFIO,其中gpio的常用功能: 1 输入:上拉.下拉.模拟.浮动 2 输出:上拉.下拉.推挽.开漏 3 中断:上升沿.下降沿.双沿.高电平.低电平触发 RT ...

  2. RTT设备与驱动之I2C:

    I2C主从结构(可以有多个主机,但同一时间只能有一个):I2C有两种地址结构7位/10位 总线空闲时,SDA 和 SCL 都处于高电平状态. 开始信号: SCL 为高电平时,主机将 SDA 拉低 结束 ...

  3. RTT设备与驱动之硬件定时器

    硬件定时器可以对外部时钟进行计数,利用内部时钟进行定时. 函数 描述 rt_device_t rt_device_find(const char* name); 查找定时器设备 rt_err_t rt ...

  4. RTT设备与驱动之PWM

    这里将PWM当成一个设备:PWM简介 上图是一个简单的 PWM 原理示意图,假定定时器工作模式为向上计数,当计数值小于阈值时,则输出一种电平状态,比如高电平,当计数值大于阈值时则输出相反的电平状态,比 ...

  5. RTT设备与驱动之串口

    有一般收发.中断方式.DMA方式: rt_device_t rt_device_find(const char* name); rt_err_t rt_device_open(rt_device_t ...

  6. SPI设备的驱动

    主要包括两个SPI设备步骤:register_chrdevspi_register_driver关键点1:spi_board_info可以去已经运行的板子下面找例子:/sys/bus/spi/driv ...

  7. i2c总线,设备,驱动之间的关系

    ------ 总线上先添加好所有具体驱动,i2c.c遍历i2c_boardinfo链表,依次建立i2c_client, 并对每一个i2c_client与所有这个线上的驱动匹配,匹配上,就调用这个驱动的 ...

  8. Linux下platform设备以及platform设备和驱动注册的先后顺序

    platform是Linux系统提供的一种管理设备的手段,所有SOC系统中集成的独立的外设控制器.挂接在SOC内存空间的外设等都属Platform设备.如ARM S3C6410处理器中,把内部集成的I ...

  9. Linux驱动 - SPI驱动 之三 SPI控制器驱动

    通过第一篇文章,我们已经知道,整个SPI驱动架构可以分为协议驱动.通用接口层和控制器驱动三大部分.其中,控制器驱动负责最底层的数据收发工作,为了完成数据的收发工作,控制器驱动需要完成以下这些功能:1. ...

随机推荐

  1. 安装Maven及Eclipse中配置Maven

    下载maven版本: 1.进入官网:http://maven.apache.org/download.cgi   ,下载编译后的maven版本:如图下: 2.创建一个目录,把下载的maven压缩包,进 ...

  2. PyTorch入门教程

    https://www.zhihu.com/question/55720139 Deep Learning with PyTorch: A 60 Minute Blitz Author: Soumit ...

  3. 2013年第四届蓝桥杯国赛 九宫重排(HashMap+双BFS优化)

    九宫重排     时间限制:1.0s   内存限制:256.0MB 问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干 ...

  4. 访问其他电脑的c盘

    访问其他电脑的c盘 \\192.168.0.1\C$

  5. P1579 哥德巴赫猜想(升级版)

    程序是人类的财富!!11 ------------------------------------------- 题目链接:MIKU OK,Let's gi; -------------------- ...

  6. 区块链中的密码学(二)-RSA算法分析和实现

    密码学领域中,加密算法主要分为对称加密和非对称加密,随着信息时代安全性要求越来越高,对称加密因为其易被破解的原因逐渐被舍弃.而RSA算法是目前密码学世界中比较流行的非对称加密算法,命名是根据其发明者R ...

  7. CentOS下安装配置SVN服务器并自动同步到web目录

    一.安装 yum install subversion测试是否安装成功 /usr/bin/svnserve --version如提示以下内容,说明已安装成功 svnserve,版本 1.6.11 (r ...

  8. flink学习笔记-各种Time

    说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...

  9. P3345 [ZJOI2015]幻想乡战略游戏 动态点分治

    \(\color{#0066ff}{ 题目描述 }\) 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越 ...

  10. 重装iTunes 错误代码42401 解决办法

    昨晚手贱点击从iTunes 11升级到iTunes12,之后发现iTunes 12各种卡,简直不能忍,然后直接拉iTunes 12到AppClear,然后安装iTunes 11,安装完成之后打开iTu ...