Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
SPI+DMA
硬件电路设计
100
长期经过验证的程序在两块AD7616配置上出现错误,求助
发布于 2023-02-28 17:22:09 浏览:687
订阅该版
[tocm] ## 硬件描述 CPU使用STM32F429,分别通过`SPI2`和`SPI3`挂载了两片AD7616,记为`MAIN_ADC`和`BKUP_ADC`,采集32路模拟信号。 电路板经过了一年左右的内外部测试,`MAIN_ADC`一直使用正常,但近期两批电路板上,`MAIN_ADC`工作不正常。 ## 问题描述 近期开了两批电路板,嘉立创焊好了芯片。 - `MAIN_ADC`时而正常、时而不正常;不正常的情况占99%,具体表现为16个通道信号只有两路能正常采集和输出。 - `BKUP_ADC`一切正常。 程序中,使用RT-Thread的SPI接口,做了自定义修改,支持DMA,通过程序向AD7616写`0x20~0x3F寄存器、0x02寄存器`,控制工作模式和序列堆栈寄存器。 ### MAIN_ADC输出log日志 ```c [5909] D/ad7616_device: Read: AD7616 register (0x20) = 0x0008 [5909] D/ad7616_device: Read: AD7616 register (0x21) = 0x0008 [5909] D/ad7616_device: Read: AD7616 register (0x22) = 0x0008 [5909] D/ad7616_device: Read: AD7616 register (0x23) = 0x0008 [5909] D/ad7616_device: Read: AD7616 register (0x24) = 0x0008 [5910] D/ad7616_device: Read: AD7616 register (0x25) = 0x0008 [5910] D/ad7616_device: Read: AD7616 register (0x26) = 0x0008 [5910] D/ad7616_device: Read: AD7616 register (0x27) = 0x0008 [5912] D/ad7616_device: ADC7616 Enable Sequence stack and burst mode. [5912] D/ad7616_device: Read: AD7616 register (0x02) = 0x0008 [5912] D/ad7616_device: Read: AD7616 register (0x03) = 0x0008 [5912] D/ad7616_device: Read: AD7616 register (0x04) = 0x0008 [5912] D/ad7616_device: Read: AD7616 register (0x05) = 0x0008 [5912] D/ad7616_device: Read: AD7616 register (0x06) = 0x0008 [5912] D/ad7616_device: Read: AD7616 register (0x07) = 0x0008 ``` > AD7616的[0x02]寄存器被配置成了0x0008,表示`没有启用Sequence模式、没有启用Burst模式`。因此,MAIN_ADC只采集了默认的A0和B0通道,能解释硬件上只有两路信号输出。 ### BKUP_ADC输出log日志: ```c [5909] D/ad7616_device: Read: AD7616 register (0x20) = 0x0000 [5909] D/ad7616_device: Read: AD7616 register (0x21) = 0x0011 [5909] D/ad7616_device: Read: AD7616 register (0x22) = 0x0022 [5909] D/ad7616_device: Read: AD7616 register (0x23) = 0x0033 [5909] D/ad7616_device: Read: AD7616 register (0x24) = 0x0044 [5910] D/ad7616_device: Read: AD7616 register (0x25) = 0x0055 [5910] D/ad7616_device: Read: AD7616 register (0x26) = 0x0066 [5910] D/ad7616_device: Read: AD7616 register (0x27) = 0x0177 [5912] D/ad7616_device: ADC7616 Enable Sequence stack and burst mode. [5912] D/ad7616_device: Read: AD7616 register (0x02) = 0x0078 [5912] D/ad7616_device: Read: AD7616 register (0x03) = 0x0000 [5913] D/ad7616_device: Read: AD7616 register (0x04) = 0x00aa [5913] D/ad7616_device: Read: AD7616 register (0x05) = 0x00aa [5913] D/ad7616_device: Read: AD7616 register (0x06) = 0x00aa [5913] D/ad7616_device: Read: AD7616 register (0x07) = 0x00aa ``` > AD7616的[0x02]寄存器被配置成0x0078,表示启用Seqeunce模式,启用Burst模式,且按照[0x20]~[0x27]寄存器的配置,使用一个Convst信号,就可以完成A0/B0 ~ A7/B7合计16个通道的数据。 > > 配置正常,数据采集正常。 ## 疑惑 在程序中,将`MAIN_ADC`修改成`BKUP_ADC`,只需要改一个字符串即可,可以排除程序不同的原因。 **虽然没有用逻辑分析仪,但是,可以确定A0/B0通道采集的数据波形正确**,表明`MAIN_ADC`的SPI在传输采样结果时一切正常。 1. 为什么MAIN_ADC配置过程数据错误,采集过程数据正确呢? 2. 有什么好的排查手段吗?我计划让学生先把MAIN_ADC吹下来,再焊上测试。 虚心求教,希望能得到大家的帮助,谢谢!
查看更多
xiaorui
认证专家
2023-02-28
小睿手办 https://item.taobao.com/item.htm?id=674889867009
先大胆假设下:也许就是 刚好那边的 AD7616 都坏了。或工作在临界状态,比如SPI时钟过高了?或供电不稳甚至电压不对?甚至工作温度变了都有可能受影响。 不然就是替换法,逐个修改其中1个变量,进行列表对比。
4
个回答
默认排序
按发布时间排序
lchnu
2023-03-02
Witness, Understand, Skill
我的AD7616的初始化过程: 1. GPIO操作,Reset AD7616 2. 配置SPI接口 3. 通过SPI写寄存器,设置AD7616的采样电压范围 4. 通过SPI写寄存器,设置AD7616的OSR 5. 通过SPI写寄存器,设置AD7616的序列堆栈、突发模式采样模式 6. 配置PWM,Convst引脚上产生PWM波 调试了一天,逐步排查相关可能性,得到了如下结论: 在上述过程第2步配置SPI接口之前,若将Convst引脚的工作模式改为GPIO Output,拉高/拉低,可以正常配置所有寄存器。但是,**奇怪的事情发生,Convst引脚在后续步骤中,配置成PWM的CH失败,没法转换**。哪怕我在重新设置PWM之前,将Convst引脚Deinit也不行。 继续深入查找软件/硬件原因。今天早上安排学生查看GPIO的寄存器,上完课后再回来看看。
zzydj
2023-03-01
这家伙很懒,什么也没写!
我去年也遇到过同样的问题,后来在嘉立创新开了一块板子,焊了新的AD7616上去,问题就解决了。🙈
张世争
2023-03-01
学以致用
(1)排查是否同一批料 AD7616,工作正常的与工作异常的交叉焊接验证,排除 AD7616 的干扰 (2)如果硬件没有改动,软件逻辑理论上没有问题 (3)嘉立创的质量,主要看电路板是否过于精密(或者很烂的PCB设计)
撰写答案
登录
注册新账号
关注者
0
被浏览
687
关于作者
lchnu
Witness, Understand, Skill
提问
1
回答
229
被采纳
88
关注TA
发私信
相关问题
1
正点原子战舰V3+ENC28J60+SPI,开启SPI DMA后,卡死
2
SPI4设置DMA RX 错误
3
spi DMA 发送数据失败
4
spi dma 中断接收的问题
5
关于spi和dma的问题
6
RT Studio中F407芯片SPI的DMA怎么开启?
7
RT Studio中SPI+DMA如何使用?
8
rt-thread 互斥信号量BUG
9
我现在可以使用SPI正常收发数据了,但是怎样使用SPI的DMA模式进行数据的收发
10
SPI DMA 缓冲区
推荐文章
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
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
7
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部