ADS1298: 指令操作无效,寄存器无法读取

Part Number: ADS1298

我对芯片发送0x11 SDATAC和0x0A STOP之后,DRDY依然在脉冲,把START拉低也是如此,之后读取id寄存器返回为0。尝试将CLK EN开启,示波器测量始终为高电平3.3V。VCAP1 VCAP2 VCAP3电压正常,VCAP4为0v,VREFP为+100mv(尝试开启之后)。

时钟频率为2.5MHz

    ads12Lead_CS_H;
    ads12Lead_START_L;
    ads12Lead_RST_L;
    delay_1ms(1000);
    ads12Lead_RST_H;
    delay_1ms(3000);
    
    ads12Lead_RST_L;
    delay_us(20);
    ads12Lead_RST_H;
    delay_1ms(1000);
    
    ads12Lead_START_L;
    ads12Lead_CS_L;
    delay_us(5);
    SPI_Transport_12Lead(SDATAC);
    delay_us(5);
    SPI_Transport_12Lead(STOP);
    delay_us(5);
    ads12Lead_CS_H;
    delay_1ms(300);
    
    ads12Lead_CS_L;
    delay_us(100);
    
    delay_1ms(1);
    ads12Lead_CS_L;
    delay_us(10);
    a12lead_REG(WREG|CONFIG1,0b10100101);
    a12lead_REG(WREG|CONFIG2,0b00010000);
    a12lead_REG(WREG|CONFIG3,0b11000000);
    ads12Lead_CS_H;
    delay_us(10);
    
    uint8_t did = a12lead_REG(RREG|ID,0x00);
    delay_us(100);
    ads12Lead_CS_H;
    SEGGER_RTT_printf(0, "id=%d\r\n",did);

/**对ADS1292R内部寄存器进行操作 **/
uint8_t a12lead_REG(unsigned char com,unsigned data)
{
	unsigned char i;
	//for(i=0;i<45;i++);
  delay_us(10);
	SPI_Transport_12Lead(com);
	//for(i=0;i<45;i++);
  delay_us(10);
	SPI_Transport_12Lead(0X00);
	//for(i=0;i<45;i++);
  delay_us(10);
	if((com&0x20)==0x20)//判断是否为读寄存器指令
	{	SPI_Transport_12Lead(0X00);
		//for(i=0;i<45;i++);	
    delay_us(10);
	}
	return (SPI_Transport_12Lead(data));

}

/**通过SPI总线与ADS1292R通信**/
unsigned char SPI_Transport_12Lead(unsigned char com)
{
	while (RESET == spi_i2s_flag_get(SPI4, SPI_FLAG_TBE));//检测发送寄存器是否为空,上一个数据发送完成
	spi_i2s_data_transmit(SPI4, com);//发送数据      
	while (RESET == spi_i2s_flag_get(SPI4, SPI_FLAG_RBNE));//检测接收标志是否非空,发送完成  
	return (spi_i2s_data_receive(SPI4));	//返回接收到的数据
}

  • Tian GisTon 您好,

           请问您这段代码是初始化流程,还是中间的部分代码?

          初始化流程,请参考芯片数据手册“Figure 93. Initial Flow at Power Up”.

          SDATAC是和RDATA命令配套使用的。

         STOP是和STAT命令配套使用的

         

         下面链接中“Order & start development->ADS1298ECGFEFW-C5509” 可获得“ADS1298ECGFE-PDK”的示例代码,请参考。
          www.ti.com/.../ADS1298ECGFE-PDK    

  • 经检查,gd32的标准库出现问题,导致cs引脚不受控制,将代码放在另一个函数中执行成功读取