Embedded ADXL345阅读问题

Embedded ADXL345阅读问题,embedded,Embedded,我正在将ADXL345与SAMC21连接以进行SPI通信,并尝试以4 MHZ的频率读取DEVICEID,但它至少需要读取5次数据才能获得正确的输出。为什么不在一次尝试中读取。 若我在下面的代码中并没有包含for循环,它将不会得到DEVICEID 无效SPI读取(uint32地址) { PORT->Group[0].OUTCLR.reg=1SPI.INTFLAG.bit.DRE==0); SERCOM1->SPI.DATA.reg=(0x80 |地址);/*用于读取操作*/ 而(SERCOM1->

我正在将ADXL345与SAMC21连接以进行SPI通信,并尝试以4 MHZ的频率读取DEVICEID,但它至少需要读取5次数据才能获得正确的输出。为什么不在一次尝试中读取。 若我在下面的代码中并没有包含for循环,它将不会得到DEVICEID

无效SPI读取(uint32地址) {

PORT->Group[0].OUTCLR.reg=1SPI.INTFLAG.bit.DRE==0);
SERCOM1->SPI.DATA.reg=(0x80 |地址);/*用于读取操作*/
而(SERCOM1->SPI.INTFLAG.bit.RXC==0);
temp=SERCOM1->SPI.DATA.reg;
}

端口->组[0]。start.reg=1您还阅读了哪些内容?垃圾,零,一?每次都一样吗?您是否总是需要5次尝试才能读取正确的值,或者有时需要更少,有时需要更多?您是否考虑过ADXL345的启动/初始化时间?另外,您应该发布硬件布局,这将有助于识别任何噪声问题。感谢您的回复,每当我读取设备ID时,我都会得到正确的输出,但当尝试背靠背读取两个内存位置时,如果没有for循环,它将不会给出正确的结果,但当我添加for循环时,它将给出正确的输出。ADXL345至少需要5次调试
PORT->Group[0].OUTCLR.reg=1<<CS;
volatile uint32_t temp=0;
for(char i=5;i>0;i--)
{

    while(SERCOM1->SPI.INTFLAG.bit.DRE==0);
    SERCOM1->SPI.DATA.reg=(0x80|address);        /* for read operation*/

    while(SERCOM1->SPI.INTFLAG.bit.RXC==0);

    temp=SERCOM1->SPI.DATA.reg;
}
PORT->Group[0].OUTSET.reg=1<<CS;