Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
SPI
SPI驱动写法的问题
发布于 2019-10-24 10:29:31 浏览:1634
订阅该版
* 本帖最后由 bevis 于 2019-10-24 10:31 编辑 * 根据文档SPI读写方式有几种,在实际应用中使用rt_spi_send_then_recv更容易失败 ,使用 rt_spi_transfer_message反而更容易成功,文档说两者都是一样的关系。以下是我写的两套写法,自认为读写流程都是一样的。结果使用rt_spi_transfer_message成功,前者接口却是失败的。 难道这两套流程不一样吗???函数名: ```uint8_t spiTxRx(const uint8_t *txData, uint8_t *rxData, uint16_t length)``` 第一段使用rt_spi_send_then_recv -- 执行结果失败, 我说的失败,不是SPI驱动失败,而是SPI设备读写初始化运行失败 ``` if((NULL == txData) && (NULL == rxData)) { return i; } if(length > 128) { return i; } if(txData != NULL) { memcpy(tx_buff, txData, length); if(rxData != NULL) { rt_spi_send_then_recv(spi_dev_st25r, tx_buff, length, rx_buff, length); memcpy(rxData, rx_buff, length); } else // RX NULL, 输入缓冲不能为空 { rt_spi_send_then_recv(spi_dev_st25r, txData, length, RT_NULL, 0); } } else // TX NULL { if(rxData != NULL) { rt_spi_send_then_recv(spi_dev_st25r, RT_NULL, 0, rx_buff, length); memcpy(rxData, rx_buff, length); } } rt_thread_mdelay(5); return i;``` 第二段rt_spi_transfer_message -- 成功 ``` uint8_t i=0; if((NULL == txData) && (NULL == rxData)) { return i; } if(length > 128) { return i; } struct rt_spi_message msg1, msg2; if(txData != NULL) { if(rxData != NULL) // RX 非空 { msg1.send_buf = txData; // 发送缓存 msg1.recv_buf = rx_buff;// 接收缓存 msg1.length = length; msg1.cs_take = 1; msg1.cs_release = 0; msg1.next = &msg2; msg2.send_buf = RT_NULL; msg2.recv_buf = RT_NULL; msg2.length = 0; msg2.cs_take = 0; msg2.cs_release = 1; msg2.next = RT_NULL; rt_spi_transfer_message(spi_dev_st25r, &msg1); memcpy(rxData, rx_buff, length); } else // RX NULL { msg1.send_buf = txData; // 发送缓存 msg1.recv_buf = RT_NULL; msg1.length = length; // 发送长度 msg1.cs_take = 1; msg1.cs_release = 0; msg1.next = &msg2; msg2.send_buf = RT_NULL; msg2.recv_buf = RT_NULL; msg2.length = 0; msg2.cs_take = 0; msg2.cs_release = 1; msg2.next = RT_NULL; rt_spi_transfer_message(spi_dev_st25r, &msg1); } } else // TX NULL { if(rxData != NULL) // RX 非空 { msg1.send_buf = RT_NULL; msg1.recv_buf = RT_NULL; msg1.length = 0; msg1.cs_take = 1; msg1.cs_release = 0; msg1.next = &msg2; msg2.send_buf = RT_NULL; msg2.recv_buf = rx_buff; // 接收缓存 msg2.length = length; msg2.cs_take = 0; msg2.cs_release = 1; msg2.next = RT_NULL; rt_spi_transfer_message(spi_dev_st25r, &msg1); memcpy(rxData, rx_buff, length); } } rt_thread_mdelay(5); return i;```
查看更多
2
个回答
默认排序
按发布时间排序
aozima
2019-10-24
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
[i=s] 本帖最后由 aozima 于 2019-10-24 14:29 编辑 [/i] 逻辑分析仪解君愁。 另外, 只发不收是 rt_spi_send, 只收不发是 rt_spi_recv. 先发再收是 rt_spi_send_then_recv rt_spi_send_then_send 和 rt_spi_send 是一样的,但是方便使用,他们底层都是通过 rt_spi_transfer 和 msg 搭配来实现的。
james_s
2021-04-14
这家伙很懒,什么也没写!
代码上看不出来啥问题, 使用逻辑分析仪截图出来看看
撰写答案
登录
注册新账号
关注者
1
被浏览
1.6k
关于作者
bevis
这家伙很懒,什么也没写!
提问
79
回答
266
被采纳
0
关注TA
发私信
相关问题
1
BBB的SPI驱动
2
求个SPI上挂两个或多个设备的使用例子
3
SPI设备有个bug
4
spi flash 的fatfs使用一段时间后读写文件出现故障
5
SPI驱动
6
请教rt_spi_configure函数理解
7
SPI FLASH挂载的问题
8
SPI-FLASH 文件系统 SPIFFS
9
求助一个完整的 spi flash 驱动
10
关于同时使用文件系统与SPI FLASH的问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
freemodbus主机在freertos的适配,参考rtthread例程
2
开源共生 商业共赢 | RT-Thread 2024开发者大会议程正式发布!
3
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
4
RT-Thread EtherKit开源以太网硬件正式发布
5
还在担心bsp不好维护吗?快使用yml管理主线bsp
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
a1012112796
20
个答案
3
次被采纳
张世争
12
个答案
3
次被采纳
踩姑娘的小蘑菇
7
个答案
3
次被采纳
rv666
9
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
7
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部