我对芯片发送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)); //返回接收到的数据
}
