SPI分为主、从、设备;具体又分标准SPI/DUAL SPI/QUAD SPI(用80字节的RAMrt_err_t rt_spi_take_bus(struct rt_spi_device *device);代替收发寄存器)

从设备的操作:在多线程通讯中,从机需要先获得SPI总线、CS使能;使用完后再分别释放,从而使其它获得控制权。

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);

void rt_spi_message_append(struct rt_spi_message *list, struct rt_spi_message *message);//单链表发送一条消息

二 主设备的操作:

2.1 先挂载已经注册好的SPI设备,

rt_err_t rt_spi_bus_attach_device(struct rt_spi_device *device, const char *name, const char *bus_name, void *user_data)

rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char *device_name, GPIO_TypeDef* cs_gpiox, uint16_t cs_gpio_pin);//STM32的BSP操作

2.2然后利用配置结构体进行SPI设备的配置

rt_err_t rt_spi_configure(struct rt_spi_device *device, struct rt_spi_configuration *cfg)

rt_err_t rt_qspi_configure(struct rt_qspi_device *device, struct rt_qspi_configuration *cfg);//QSPI配置有专门的结构体。

2.3SPI设备的读写操作:

  struct rt_spi_message {

  const void *send_buf; /* 发送缓冲区指针 */

  void *recv_buf; /* 接收缓冲区指针 */

  rt_size_t length; /* 发送 / 接收 数据字节数 */

  struct rt_spi_message *next; /* 指向继续发送的下一条消息的指针 */

  unsigned cs_take : 1; /* 片选选中 */

  unsigned cs_release : 1; /* 释放片选 */

};

函数 描述
rt_device_t rt_device_find(const char* name); 根据 SPI 设备名称查找设备获取设备句柄
struct rt_spi_message *rt_spi_transfer_message(struct rt_spi_device *device,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); 接受一次数据
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_size_t rt_qspi_transfer_message(struct rt_qspi_device *device, struct rt_qspi_message *message);//QSPI操作

rt_err_t rt_qspi_send_then_recv(struct rt_qspi_device *device, const void *send_buf, rt_size_t send_length, void *recv_buf, rt_size_t recv_length);//QSPI操作

rt_err_t rt_qspi_send(struct rt_qspi_device *device, const void *send_buf, rt_size_t length);//QSPI操作

SPI 设备管理模块还提供 rt_spi_sendrecv8() 和 rt_spi_sendrecv16() 函数,这两个函数都是对原函数的封装

RTT学习之SPI设备的更多相关文章

  1. RTT学习之RTC设备

    RTC: 目前系统内只允许存在一个 RTC 设备,且名称为 "rtc",所以不用查找设备 启用 Soft RTC (软件模拟 RTC),对无硬件RTC 启用 NTP 时间自动同步, ...

  2. RTT学习之sensor设备

    Sensor设备的常用操作: 首先查找传感器设置获取设备句柄.rt_device_find 以轮询.FIFO.中断.任意一种方式打开传感器,中断和FIFO需要设置接收回调函数(释放一个信号量给接收线程 ...

  3. 【转】 树莓派学习笔记——I2C设备载入和速率设置

    原文网址:http://blog.csdn.net/xukai871105/article/details/18234075 1.载入设备 方法1——临时载入设备 sudo modprobe -r i ...

  4. RT-thread 设备驱动组件之SPI设备

    本文主要介绍RT-thread中的SPI设备驱动,涉及到的文件主要有:驱动框架文件(spi_dev.c,spi_core.c,spi.h),底层硬件驱动文件(spi_hard.c,spi_hard.h ...

  5. 树莓派学习笔记——I2C设备载入和速率设置

    原文:http://blog.csdn.net/xukai871105/article/details/18234075 1.载入设备 方法1——临时载入设备 sudo modprobe -r i2c ...

  6. RT Thread的SPI设备驱动框架的使用以及内部机制分析

    注释:这是19年初的博客,写得很一般,理解不到位也不全面.19年末得空时又重新看了RTThread的SPI和GPIO,这次理解得比较深刻.有时间时再整理上传. -------------------- ...

  7. RT Thread SPI设备 使用

    后记: 之前,我把SPI的片选在Cubemx中配置成了SPI_NSS.现在我给它改为了GPIO_OUTPUT.  同时参考了别人的类似的一个操作无线模块(采用SPI设备驱动)的例子程序(清楚了RTT的 ...

  8. linux spi 设备节点 读写

    本文记录spi设备节点的操作方法. SPI总线设备文件名通常为/dev/spidevN.P(N=0.1.2--,P=0.1.2--), 其中N表示第几路SPI总线,而P表示在该路SPI总线中使用哪个C ...

  9. imx6 生成 spi设备节点

    开发板需要使用spi接口,但是spi接口被touch占用,使用event进行操作.所以需要更改配置,生成spi设备节点. 参考链接 https://community.nxp.com/thread/3 ...

随机推荐

  1. 使用spring中遇到"java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor"问题

    项目中缺少aopalliance的jar包,下载一个相应的jar加入项目中就可以解决问题. 下载链接:http://www.java2s.com/Code/Jar/a/Downloadaopallia ...

  2. Service Worker,Web Worker,WebSocket的对比

    Service Worker 处理网络请求的后台服务.适用于离线和后台同步数据或推送信息.不能直接和dom交互.通过postMessage方法交互. Web Worker 模拟多线程,允许复杂计算功能 ...

  3. Bugku-CTF之sql注入2 (全都tm过滤了绝望吗?)

    Day  38 sql注入2 200 http://123.206.87.240:8007/web2/ 全都tm过滤了绝望吗? 提示 !,!=,=,+,-,^,%

  4. next.config.js

    const configs = { // 编译文件的输出目录 distDir: 'dest', // 是否给每个路由生成Etag generateEtags: true, // 页面内容缓存配置 on ...

  5. [lua]紫猫lua教程-命令宝典-L1-01-04. 字符串数据

    L1[字符串]01. 单引号与双引号 没什么说得 字符串:以双引号包含 或者单引号包含 或者[[]]包含 L1[字符串]02. 长文本内容 小知识:如果用[[]]包含字符串内容 但是字符串内容里面 包 ...

  6. go之二进制协议gob和msgpack

    文章引用自 二进制协议gob和msgpack介绍 本文主要介绍二进制协议gob及msgpack的基本使用. 最近在写一个gin框架的session服务时遇到了一个问题,Go语言中的json包在序列化空 ...

  7. shell 参数与逻辑结构语句

    shell参数 如同ls 命令可以接受目录等作为它的参数一样,在shell编程时同样可以使用参数.Shell有位置参数和内部参数. 1. 位置参数 由系统提供的参数称为位置参数.位置参数的值可以用$N ...

  8. 对于使用secureFX上传文件到centos7 的时候,以及不同的用户解压文件,对于文件操作权限的实验

    本以为以一个用户胡如root登录了SecureFx,之后选择了root的家目录下的一个software目录,之后上传 以root用户远程登录LINUX系统 查看文件 之后再验证普通用户zhaijh登录 ...

  9. Wx-小程序-图片预览、保存

    点击图片预览 长按图片保存 点击按钮保存到手机相册 view: <!--wxml--> <text>点击图片预览.长按保存图片.点击按钮保存到系统相册</text> ...

  10. Bugku-CTF加密篇之zip伪加密(flag.zip)

    zip伪加密