1.3.2.4.2 I2C_BB_Read Function

C

bool I2C_BB_Read(uint16_t address, uint8_t *pdata, size_t length)

Summary

Reads data from the slave.

Description

This function reads the data from a slave on the bus. The function will attempt to read length number of bytes into pdata buffer from a slave whose address is specified as address. The I2C Master generates a Start condition, reads the data and then generates a Stop Condition. If the slave NAKs the request, the transfer is terminated. The application can call I2C_BB_ErrorGet() function to know the cause of the error.

The function is non-blocking. It initiates bus activity and returns immediately. The transfer is completed in the timer peripheral interrupt. A transfer request cannot be placed when another transfer is in progress. Calling the read function when another function is already in progress will cause the function to return false.

The library will call the registered callback function when the transfer has terminated if callback is registered.

Precondition

I2C_BB_Initialize must have been called for the associated I2C instance.

Parameters

ParamDescription
address7-bit / 10-bit slave address.
pdatapointer to destination data buffer where the received data should be stored.
lengthlength of data buffer in number of bytes. Also the number of bytes to be read.

Returns

true - The request was placed successfully and the bus activity was initiated.

false - The request fails,if there was already a transfer in progress when this function was called.

Example

uint8_t myData [NUM_BYTES];

void MyI2CCallback(uintptr_t context)
{
    // This function will be called when the transfer completes. Note
    // that this function executes in the context of the timer peripheral
    // interrupt.
}

I2C_BB_Initialize();

I2C_BB_CallbackRegister(MyI2CCallback, NULL);

if(I2C_BB_Read( SLAVE_ADDR, &myData[0], NUM_BYTES ) == false)
{
    // error handling
}

Remarks

None.