Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
SPI只能读取16位数据的后8位
发布于 2020-03-29 20:52:21 浏览:1558
订阅该版
使用 rt-thread SPI 架构读取 adis16475 六轴传感器的数据,传感器SPI时序及配置如下 ![1_adis.png](/uploads/202003/29/204520akgo3ktazagjh6n4.png) ![2_adis.png](/uploads/202003/29/204929r06ua5wc055q9pp5.png) 代码配置如下 ``` { struct rt_spi_configuration cfg; cfg.data_width = 16; cfg.mode = RT_SPI_MODE_3 |RT_SPI_MASTER| RT_SPI_MSB; /* SPI Compatible: Mode 0 and Mode 3 */ // cfg.max_hz = 1 * 1000 * 1000; /* 1M */ cfg.max_hz = 1000 * 1000; rt_spi_configure(spi_dev_adis16475, &cfg); } rt_uint8_t res = RT_EOK; rt_uint16_t adis16475_read_id = 0x7200; rt_uint16_t msc_ctrl_reg = 0x6000; rt_uint16_t up_scale_reg = 0x6200; rt_uint16_t null_cfg_reg = 0x6600; // rt_uint8_t adis16475_read_id[2] = {0x72, 0}; rt_uint8_t id[16] = {0}; /* 方式1:使用 rt_spi_send_then_recv()发送命令读取ID */ res = rt_spi_send_then_recv(spi_dev_adis16475, &adis16475_read_id, 2, id, 4); if (res != RT_EOK) rt_kprintf("adis16475_read_id failed!"); res = rt_spi_send_then_recv(spi_dev_adis16475, &msc_ctrl_reg, 2, &id[4], 4); if (res != RT_EOK) rt_kprintf("msc_ctrl_reg failed!"); res = rt_spi_send_then_recv(spi_dev_adis16475, &up_scale_reg, 2, &id[8], 4); if (res != RT_EOK) rt_kprintf("up_scale_reg failed!"); res = rt_spi_send_then_recv(spi_dev_adis16475, &null_cfg_reg, 2, &id[12], 4); if (res != RT_EOK) rt_kprintf("null_cfg_reg failed!"); rt_kprintf("
use rt_spi_send_then_recv() read adis16475 ID is: 0x%08x, msc_ctrl: 0x%08x, up_scal: 0x%08x , null_cfg: 0x%08x, reg: 0x%04x
", * (rt_uint32_t *)id, * (rt_uint32_t *)&id[4], * (rt_uint32_t *)&id[8], * (rt_uint32_t *)&id[12], * (rt_uint16_t *)&adis16475_read_id); // /* 方式2:使用 rt_spi_transfer_message()发送命令读取ID */ struct rt_spi_message msg1, msg2; rt_uint8_t adis16475_id_reg[2] = {0, 0x72}; rt_uint8_t id2[4] = {0}; rt_uint8_t id4[4] = {0}; msg1.send_buf = adis16475_id_reg; msg1.recv_buf = id4; msg1.length = 2; msg1.cs_take = 1; msg1.cs_release = 0; msg1.next = &msg2; msg2.send_buf = RT_NULL; msg2.recv_buf = id2; msg2.length = 4; msg2.cs_take = 0; msg2.cs_release = 1; msg2.next = RT_NULL; rt_spi_transfer_message(spi_dev_adis16475, &msg1); rt_kprintf("use rt_spi_transfer_message() read adis16475 ID is: 0x%08x, 0x%08x
", * (rt_uint32_t *)id2, * (rt_uint32_t *)id4); rt_uint16_t get_id = rt_spi_sendrecv16(spi_dev_adis16475, 0x72); rt_kprintf("use rt_spi_sendrecv16 read adis16475 ID is: 0x%04x
", get_id); rt_uint8_t id3[5] = {0}; rt_spi_send(spi_dev_adis16475, adis16475_id_reg, 2); rt_spi_recv(spi_dev_adis16475, id3, 2); rt_kprintf("use rt_spi_send read adis16475 ID is: 0x%08x
", * (rt_uint32_t *)id3);```读取的ID 位0x005b, 正常的应该为0x405b, 前面的0x40 数据丢失,其他的寄存器数据也类似; 如上面的代码所示,使用了多种读取方式, ![3.png](/uploads/202003/29/204941gnsa7zz4pq57a4qp.png)![3.png](/uploads/202003/29/204941gnsa7zz4pq57a4qp.png) 请问下有人遇到过类似的情况吗?
查看更多
1
个回答
默认排序
按发布时间排序
keguo
2020-03-30
这家伙很懒,什么也没写!
已经解决,在中间增加一个16us 的延时 ``` rt_spi_send(spi_dev_adis16475, adis16475_id_reg, 2); rt_hw_us_delay(16); rt_spi_recv(spi_dev_adis16475, id3, 2); ```
撰写答案
登录
注册新账号
关注者
0
被浏览
1.6k
关于作者
keguo
这家伙很懒,什么也没写!
提问
20
回答
19
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
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
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
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
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部