This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

ADS1255: DOUT始终无输出

Part Number: ADS1255

程序初始化后主控每10ms向ADS1255发送一次读寄存器指令,从示波器可观测到正确发送了波形,同时ADS1255的DRDY引脚可以正常观察到30KHZ的信号,但DOUT引脚始终无输出(无论输入什么指令)。

最初的问题是发现无源晶振无法正常起振,多次更换晶振型号和起振电容无果后,改为飞线接入7.68MHz有源晶振,可观测到正确晶振波形。

随后发现DOUT始终无应答。下附各SPI引脚工作情况:

从图像可得出信息:主控可以正确的控制SCLK(500KHz)、MOSI(已经校对过指令)、CS引脚发送信号,DOUT始终无输出。

随后尝试取下DOUT与主控之间100Ω电阻,直接测量ADS1255各个引脚,结果发现其他SPI引脚均收到了取信号,但DOUT仍然无输出。

打值测量ADS1255各引脚供电均符合预期,AGND与DGND共地良好,AGND上电后与主控最远的DGND(USB金属外壳)之间有0.06V~0.01V间变化的压差,但应该不至于产生严重影响。

下附原理图与周边pcb布局:

目前XTAL1已更改为7.68MHz有源晶振输入,XTAL2无连接;

C20已更改为10uF。

软件SPI相关代码如下:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include"ADS1255_NRF_DRV.h"
//SPIÇý¶¯³ÌÐòʵÀýID,IDºÍÍâÉè±àºÅ¶ÔÓ¦£¬0:SPI0 1:SPI1 2:SPI2
#define SPI_INSTANCE 0
static const nrf_drv_spi_t SPI0 = NRF_DRV_SPI_INSTANCE(SPI_INSTANCE);
//SPI
static volatile bool spi_xfer_done;
static uint8_t spi_tx_buf[6];
static uint8_t spi_rx_buf[6];
#define NRF_ADS1255_SPI0_CFG \
{ \
.sck_pin = NRF_GPIO_PIN_MAP(0,19), \
.mosi_pin = NRF_GPIO_PIN_MAP(0,17), \
.miso_pin = NRF_GPIO_PIN_MAP(0,15), \
.ss_pin = NRF_GPIO_PIN_MAP(1,21), \
.irq_priority = SPI_DEFAULT_CONFIG_IRQ_PRIORITY, \
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

(很抱歉没有注释,中文从keil复制过来全是乱码,我不得不把他们删掉)

主函数:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main(void)
{
uint8_t cr;
gpio_output_voltage_setup_3v3();
log_init();
uart_config();
SPI0_Init();
printf("SPI0\n");
ADS1255_Init();
while(true)
{
// while (app_uart_get(&cr) != NRF_SUCCESS);
// while (app_uart_put(cr) != NRF_SUCCESS);
//printf("%c",cr);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

目前怀疑:

1、驱动代码有问题。

2、芯片坏了/焊接问题。但目前焊接了3块,症状均相同,概率很小。

3、pcb布局问题,但感觉布局的瑕疵不至于对数字信号产生致命影响。