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.

ADS1248: ADS1248 : I don't know why ADS1248 DRDY Pin always low

Part Number: ADS1248

hello, I have a problem using ADS1248.

The system configuration is used as follows.

1.MISO-> DOUT
2.MOSI-> DIN
3.SCK-> SCLK
4. / DRDY-> User input

I don't know why the DRDY pin is always LOW.
(There is no problem with SPI communication.)

Initialization code
void ads1248_init (void)
{
// ADS1248 Pseudo code
uint8_t ret = 0;

__HAL_RCC_GPIOB_CLK_ENABLE ();

HAL_GPIO_WritePin (GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); // SCK
HAL_GPIO_WritePin (GPIOB, GPIO_PIN_15, GPIO_PIN_RESET); // MOSI
HAL_GPIO_WritePin (CS_GPIO_Port, CS_Pin, GPIO_PIN_SET); // CS
HAL_GPIO_WritePin (GPIOB, GPIO_PIN_14, GPIO_PIN_RESET); // MISO

RST_HIGH;
HAL_Delay 20; // Power up Delay

START_LOW; // Start Pin LOW

// SPI Init
hspi2.Instance = SPI2;
hspi2.Init.Mode = SPI_MODE_MASTER;
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi2.Init.CLKPhase = SPI_PHASE_2EDGE;
hspi2.Init.NSS = SPI_NSS_SOFT;
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi2.Init.CRCPolynomial = 10;
if (HAL_SPI_Init (& hspi2)! = HAL_OK) {
Error_Handler ();
}

RST_LOW;
HAL_Delay (1);
RST_HIGH;
HAL_Delay (1);

// Chip Read Test after Power up
ret = read_Reg (IDAC0);
printf ("ret: 0x% x \ r \ n", ret); // 0x90 always.
}

adc test code
void ads_1248_test (void)
{
uint8_t ret = 0;

// Enable START 0to allow writing to registers.
START_HIGH;

// Set MUX1 => REFP0 & REFP1 reference input selected, Normal Operation, PGA GAIN 5-> set by SYS0 register: x000_0000
write_Reg (MUX1, 0x00);

// Set MUX0 => AIN4 (AINp) AIN5 (AINn): 0010_0101
write_Reg (MUX0, 0x25);

// Set VBIAS => AIN2, AIN3, AIN5, AIN6, AIN7 (AVDD + AVSS) / 2: 1110_1100 DMY Pin Connect to VBIAS
write_Reg (VBIAS, 0xEC);

// Set SYS0 => PGA 1 (GAIN), DATA Rate: 5 SPS (SAMPLE Rate)
write_Reg (SYS0, 0x00);

ret = read_Reg (MUX0);
printf ("[0x% 2X]: 0x% X \ r \ n", MUX0, ret);
ret = read_Reg (VBIAS);
printf ("[0x% 2X]: 0x% X \ r \ n", VBIAS, ret);
ret = read_Reg (MUX1);
printf ("[0x% 2X]: 0x% X \ r \ n", MUX1, ret);
ret = read_Reg (SYS0);
printf ("[0x% 2X]: 0x% X \ r \ n", SYS0, ret);

START_LOW;
HAL_Delay (1);

start_single ();

=> always DRDY PIN is LOW!! I can't not proceed next step. Please Help me!!!

}

void start_single(void)
{
START_HIGH;
HAL_Delay(2);
START_LOW;
}

  • additionally, I Test WAKE UP CMD.

    => also, always DRDY PIN LOW... 

    Is this a SPI communication problem?

    If I enter clock 8,
    Doesn't it wake up?

    this is Test code..

    void ads1248_init(void)
    {
    //ADS1248 Pseudo code
    uint8_t ret = 0;

    __HAL_RCC_GPIOB_CLK_ENABLE();

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); //SCK
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET); //MOSI
    HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET); //CS
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET); //MISO

    RST_HIGH;
    HAL_Delay(20); //Power up Delay

    START_LOW; //Start Pin LOW, device power down mode.

    //SPI Init
    hspi2.Instance = SPI2;
    hspi2.Init.Mode = SPI_MODE_MASTER;
    hspi2.Init.Direction = SPI_DIRECTION_2LINES;
    hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
    hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
    hspi2.Init.CLKPhase = SPI_PHASE_2EDGE;
    hspi2.Init.NSS = SPI_NSS_SOFT;
    hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
    hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
    hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
    hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
    hspi2.Init.CRCPolynomial = 10;
    if (HAL_SPI_Init(&hspi2) != HAL_OK) {
    Error_Handler();
    }

    write_Cmd(WAKEUP); //I executed WAKE UP CMD, but always DRDY PIN LOW..
    while(1);
    //Chip Read Test after Power up
    ret = read_Reg(IDAC0);
    printf("ret : 0x%x\r\n", ret);

    }

    int write_Cmd(uint8_t cmd)
    {
    uint8_t nop = 0xff;

    CS_LOW;
    HAL_Delay(1);

    if(HAL_SPI_TransmitReceive(&hspi2, &cmd, &nop, 1, 100))
    {
    goto err;
    }

    HAL_Delay(1);
    CS_HIGH;

    return 1;
    err:
    printf("Write CMD Err\r\n");
    CS_HIGH;
    return -1;
    }

  • Hi DONG JIN SEO,

    Thanks for your post and welcome to the forum! 

    It doesn't look like Chips Select is being held low for the entire communication.

    Please see section 9.5.1.1 Chip Select (CS) in the datasheet. 

    Providing a scope analyzer picture showing CS, MOSI, MISO, and DRDY may help if this does not solve the issue.