0

我正在写作,因为我试图实现一个读取 2 个(或更多)寄存器并从每个寄存器接收一个字节的 I2C 通信协议。据我所知,写作部分是根据逻辑分析仪正确完成的。问题是我只收到一个重复两次的字节,而不是每个寄存器一个字节。这是我的第一个 LPC/I2C 程序,我想某处一定有一些小错误。我附上了读取功能,主要和逻辑分析仪输出。我想读取寄存器 0x​​28 和 0x29 并接收加速度(LSM9DS0 IMU)。

我正在使用 LPC1549 Xpresso

提前感谢您的帮助和您的时间。

阅读功能:

uint32_t E2PROM_Read(uint8_t slave_address, uint16_t read_address, uint16_t   bytes_to_read, uint8_t * in_buffer)
{
uint8_t out_buffer[2];
out_buffer[0]=0x0000;
out_buffer[1]=0x0000;

//out_buffer[0] high address
//out_buffer[1] low address
I2CM_XFER_T  i2cmXferRec;

out_buffer[0] = (uint8_t)(read_address);
out_buffer[1] = (uint8_t)(read_address + 0x01);


i2cmXferRec.slaveAddr = slave_address;
i2cmXferRec.status    = 0;
i2cmXferRec.txSz      = 2;
i2cmXferRec.txBuff    = out_buffer;
i2cmXferRec.rxSz      = bytes_to_read;
i2cmXferRec.rxBuff    = in_buffer;




//* Test for valid operation */
        if (i2cmXferRec.status == I2CM_STATUS_OK) {
            /* Output acc. */
            DEBUGOUT("acceleration read over I2C is: \n %d \n %d ",
            (int) in_buffer[0], (int) in_buffer[1] );

Chip_I2CM_XferBlocking(LPC_I2C0, &i2cmXferRec);



return i2cmXferRec.status;
// .status = 0 if ok
    }
        else {
                DEBUGOUT("Error %d reading temperature.\r\n", i2cmXferRec.status );
            }
}

调用函数:

uint8_t in_buffer[10];
uint8_t read_address=0x28;
E2PROM_Write(I2C_TEMP_ADDR_7BIT, 0x20, 2, out_buffer1);

E2PROM_Write(I2C_TEMP_ADDR_7BIT, 0x21, 2, out_buffer2);
/* Loop forever, toggle LED on board */
while (1) {

    /* Sleep until a state change occurs in SysTick */
    while (lastState == state) {
        __WFI();
    }


    E2PROM_Read(I2C_TEMP_ADDR_7BIT, read_address, 2, in_buffer);

这是我从逻辑分析仪得到的,我正确写入了两个地址,但是接收到相同的字节而不是两个不同的字节(每个地址一个)。

在此处输入图像描述

4

0 回答 0