RTT学习之SPI设备
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设备的更多相关文章
- RTT学习之RTC设备
RTC: 目前系统内只允许存在一个 RTC 设备,且名称为 "rtc",所以不用查找设备 启用 Soft RTC (软件模拟 RTC),对无硬件RTC 启用 NTP 时间自动同步, ...
- RTT学习之sensor设备
Sensor设备的常用操作: 首先查找传感器设置获取设备句柄.rt_device_find 以轮询.FIFO.中断.任意一种方式打开传感器,中断和FIFO需要设置接收回调函数(释放一个信号量给接收线程 ...
- 【转】 树莓派学习笔记——I2C设备载入和速率设置
原文网址:http://blog.csdn.net/xukai871105/article/details/18234075 1.载入设备 方法1——临时载入设备 sudo modprobe -r i ...
- RT-thread 设备驱动组件之SPI设备
本文主要介绍RT-thread中的SPI设备驱动,涉及到的文件主要有:驱动框架文件(spi_dev.c,spi_core.c,spi.h),底层硬件驱动文件(spi_hard.c,spi_hard.h ...
- 树莓派学习笔记——I2C设备载入和速率设置
原文:http://blog.csdn.net/xukai871105/article/details/18234075 1.载入设备 方法1——临时载入设备 sudo modprobe -r i2c ...
- RT Thread的SPI设备驱动框架的使用以及内部机制分析
注释:这是19年初的博客,写得很一般,理解不到位也不全面.19年末得空时又重新看了RTThread的SPI和GPIO,这次理解得比较深刻.有时间时再整理上传. -------------------- ...
- RT Thread SPI设备 使用
后记: 之前,我把SPI的片选在Cubemx中配置成了SPI_NSS.现在我给它改为了GPIO_OUTPUT. 同时参考了别人的类似的一个操作无线模块(采用SPI设备驱动)的例子程序(清楚了RTT的 ...
- linux spi 设备节点 读写
本文记录spi设备节点的操作方法. SPI总线设备文件名通常为/dev/spidevN.P(N=0.1.2--,P=0.1.2--), 其中N表示第几路SPI总线,而P表示在该路SPI总线中使用哪个C ...
- imx6 生成 spi设备节点
开发板需要使用spi接口,但是spi接口被touch占用,使用event进行操作.所以需要更改配置,生成spi设备节点. 参考链接 https://community.nxp.com/thread/3 ...
随机推荐
- 每天进步一点点------Allegro 群组布线
执行Route->connect命令,设置好控制面板中的内容.然后设置同时走线的GROUP包含哪些网络,有两种方法.第一种方法,如果几个网络是紧邻的,可以直接框选,选中的网络就会被包含在GROU ...
- chrome firefox浏览器屏蔽百度热搜
我是原文 操作 点击拦截元素,然后选择页面元素,添加
- 2019 ICPC南京网络赛 F题 Greedy Sequence(贪心+递推)
计蒜客题目链接:https://nanti.jisuanke.com/t/41303 题目:给你一个序列a,你可以从其中选取元素,构建n个串,每个串的长度为n,构造的si串要满足以下条件, 1. si ...
- JSP中四大作用域详解
四大作用域 为了在页面.请求.和用户之间传递和共享数据,JSP提供了四个不同的作用域:page(页面作用域).request(请求作用域).session(会话作用域).application(应用程 ...
- CDH仅完成 0/3 个步骤。首个失败:主机 node6 (id=2) 上的客户端配置 (id=1) 已使用 1 退出,而预期值为 0。
CDH仅完成 0/3 个步骤.首个失败:主机 node6 (id=2) 上的客户端配置 (id=1) 已使用 1 退出,而预期值为 0 javaHome出现了问题 JAVA_HOME并不是根据环境 ...
- angular 输入框自动绑定值最长为16位,超过16位则会报错
最近发现angular在使用input输入框的ng-model绑定scope变量的时候,发现,输入长串的数字将会出错.代码如下: <html> <head> <meta ...
- Python实验案例
Python 运算符.内置函数 实验目的: 1.熟练运用 Python 运算符. 2.熟练运用 Python 内置函数.实验内容: 1.编写程序,输入任意大的自然数,输出各位数字之和. 2.编写程序, ...
- 【C语言】写一个函数,并调用该函数求两个整数的最大公约数和最小公倍数
程序分析: 在数学中,两个数的最小公倍数=两个数的乘积/两数的最大公约数. 求两个数的最大公约数,运用辗转相除法:已知两个整数M和N,假定M>N,则求M%N. 如果余数为0,则N即为所求:如果余 ...
- C#中的循环:while do...while for
循环:重复将相同或类似规律的代码进行反复执行 减少代码冗余 可维护 可扩展 while(bool) { ...; } 代码块中可以使用break或者continue中断 break:中断整个循环 ...
- 程序员过年必备 -- Auto.js微信自动抢红包
打开微信就不用管了: - 自动打开未读消息 - 自动滑动屏幕检测红包 - 自动跳过无效红包 基于Auto JS,apk版本4.01: - 大多数动作均基于控件 - 极个别点击基于动态抓取的坐标 - 这 ...