Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
SPI+DMA
硬件电路设计
100
长期经过验证的程序在两块AD7616配置上出现错误,求助
发布于 2023-02-28 17:22:09 浏览:825
订阅该版
[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
被浏览
825
关于作者
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
ART-Pi2移植CMSIS-DAP(基于CherryUSB协议栈)
2
RT-thred的stm32h723对应bsp包CubeMX添加其他外设报错
3
RT-Thread中的time溢出问题,时间戳溢出,解决方法
4
ART-PI使用env驱动ETH网卡,pc和板子可以ping通
5
SystemView线程名字不显示
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
9
个答案
2
次被采纳
xiaorui
3
个答案
2
次被采纳
winfeng
2
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
本月文章贡献
catcatbing
2
篇文章
5
次点赞
swet123
1
篇文章
4
次点赞
lizimu
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部