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