Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
SPI
SPI驱动写法的问题
发布于 2019-10-24 10:29:31 浏览:1398
订阅该版
* 本帖最后由 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.4k
关于作者
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
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
五分钟玩转RT-Thread新社区
5
国产MCU移植系列教程汇总,欢迎查看!
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
[Vision Board创客营]WDT实践之配置、issue、PR一条龙
2
恩智浦FRDM-MCXN947上的RW007联网实践
3
[Vision Board创客营]学习片上Flash移植FAL
4
MCXN947测评系列(二)串口设备测评
5
NXP MCXN947实践:基于 rt-thread的驱动模块配置PWM
热门标签
RT-Thread Studio
串口
LWIP
Env
SPI
Bootloader
AT
ART-Pi
CAN总线
Hardfault
FinSH
USB
文件系统
DMA
RT-Thread
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
ota在线升级
WIZnet_W5500
I2C_IIC
UART
flash
cubemx
packages_软件包
freemodbus
潘多拉开发板_Pandora
PWM
定时器
ADC
BSP
中断
keil_MDK
编译报错
socket
MicroPython
GD32
msh
Debug
ulog
SDIO总线
SFUD
rt_mq_消息队列_msg_queue
C++_cpp
本月问答贡献
xiaorui
6
个答案
3
次被采纳
sakumisu
4
个答案
3
次被采纳
三世执戟
31
个答案
1
次被采纳
梦笑真美
17
个答案
1
次被采纳
踩姑娘的小蘑菇
14
个答案
1
次被采纳
本月文章贡献
Z_Y
2
篇文章
5
次点赞
Alipay
2
篇文章
2
次点赞
2345vor
2
篇文章
1
次点赞
比特饼干
1
篇文章
6
次点赞
Lu_盼盼
1
篇文章
3
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部