Data Structures | Typedefs | Variables
I2CCC26XX.h File Reference

Detailed Description

I2C driver implementation for a CC26XX I2C controller.


Driver Include

The I2C header file should be included in an application as follows:

Refer to I2C.h for a complete description of APIs.

Overview

The general I2C API is normally used in application code, e.g. I2C_open() is used instead of I2CCC26XX_open(). The board file will define the device specific config, and casting in the general API will ensure that the correct device specific functions are called. This is also reflected in the example code in Use Cases.

General Behavior

Before using the I2C in CC26XX:

The following is true for receive operation:

The following apply for transmit operation:

After I2C operation has ended:

Known Issue

Warning
The I2C may transmit a single data byte in the event that the I2C slave address is not acknowledged (NACK'd). This is due to a known hardware bug.

Error handling

If an error occurs during operation:

Power Management

The I2CCC26XX driver sets a power constraint during transactions to keep the device out of standby; so when all tasks are blocked, the device will enter idle mode instead of standby. When the transactions have finished, the power constraint to prohibit standby is released. The following statements are valid:

Supported Functions

Generic API Function API Function Description
I2C_init() I2CCC26XX_init() Initialize I2C driver
I2C_open() I2CCC26XX_open() Initialize I2C HW and set system dependencies
I2C_close() I2CCC26XX_close() Disable I2C HW and release system dependencies
I2C_transfer() I2CCC26XX_transfer() Start I2C transfer
Note
All calls should go through the generic API.

Supported Bit Rates

Unsupported Functionality

The CC26XX I2C driver currently does not support:

Use Cases

Basic Receive

Receive 10 bytes over I2C in I2C_MODE_BLOCKING.

// Locals
I2C_Handle handle;
I2C_Params params;
I2C_Transaction i2cTrans;
uint8_t rxBuf[32]; // Receive buffer
uint8_t txBuf[32]; // Transmit buffer
// Configure I2C parameters.
I2C_Params_init(&params);
// Initialize master I2C transaction structure
i2cTrans.writeCount = 0;
i2cTrans.writeBuf = txBuf;
i2cTrans.readCount = 10;
i2cTrans.readBuf = rxBuf;
i2cTrans.slaveAddress = 0x3C;
// Open I2C
handle = I2C_open(CONFIG_I2C, &params);
// Do I2C transfer receive
I2C_transfer(handle, &i2cTrans);

Basic Transmit

Transmit 16 bytes over I2C in I2C_MODE_CALLBACK.

uint8_t rxBuffer[32]; // Receive buffer
uint8_t txBuffer[32]; // Transmit buffer
bool transferDone = false;
static void transferCallback(I2C_Handle handle, I2C_Transaction *transac, bool result)
{
// Set length bytes
if (result) {
transferDone = true;
} else {
// Transaction failed, act accordingly...
.
.
}
}
static void taskFxn(uintptr_t a0, uintptr_t a1)
{
// Locals
I2C_Handle handle;
I2C_Params params;
I2C_Transaction i2cTrans;
// Configure I2C parameters.
I2C_Params_init(&params);
params.transferCallbackFxn = transferCallback;
// Prepare data to send, send 0x00, 0x01, 0x02, ...0xFF, 0x00, 0x01...
for(uint32_t i = 0; i < numTxBytes; i++)
txBuffer[i] = (uint8_t) i;
// Initialize master I2C transaction structure
i2cTrans.writeCount = 16;
i2cTrans.writeBuf = txBuffer;
i2cTrans.readCount = 0;
i2cTrans.readBuf = rxBuffer;
i2cTrans.slaveAddress = 0x3C;
// Open I2C
handle = I2C_open(CONFIG_I2C, &params);
// Do I2C transfer (in callback mode)
I2C_transfer(handle, &i2cTrans);
// Do other stuff while I2C is handling the transfer
.
.
// Do something if I2C transfer is finished
if(transferDone) {
.
.
}
// Continue...
.
.
}

Chained Transactions

Transmit 10 bytes and then 32 bytes over I2C in I2C_MODE_CALLBACK.

uint8_t rxBuffer[32]; // Receive buffer
uint8_t txBuffer[32]; // Transmit buffer
uint8_t rxBuffer2[64]; // Receive buffer 2
uint8_t txBuffer2[64]; // Transmit buffer 2
bool transferDone = false;
static void writeCallbackDefault(I2C_Handle handle, I2C_Transaction *transac, bool result)
{
// Set length bytes
if (result) {
transferDone = true;
} else {
// Transaction failed, act accordingly...
.
.
}
}
static void taskFxn(uintptr_t a0, uintptr_t a1)
{
// Locals
I2C_Handle handle;
I2C_Params params;
I2C_Transaction i2cTrans;
I2C_Transaction i2cTrans2;
// Configure I2C parameters.
I2C_Params_init(&params);
params.transferCallbackFxn = writeCallbackDefault;
// Prepare data to send, send 0x00, 0x01, 0x02, ...0xFF, 0x00, 0x01...
for(uint32_t i = 0; i < numTxBytes; i++)
txBuffer[i] = (uint8_t) i;
// Initialize first master I2C transaction structure
i2cTrans.writeCount = 10;
i2cTrans.writeBuf = txBuffer;
i2cTrans.readCount = 0;
i2cTrans.readBuf = rxBuffer;
i2cTrans.slaveAddress = 0x3C;
// Second transaction
i2cTrans2.writeCount = 32;
i2cTrans2.writeBuf = txBuffer2;
i2cTrans2.readCount = 0;
i2cTrans2.readBuf = rxBuffer2;
i2cTrans2.slaveAddress = 0x2E;
// Open I2C
handle = I2C_open(CONFIG_I2C, &params);
// Do chained I2C transfers (in callback mode).
I2C_transfer(handle, &i2cTrans);
I2C_transfer(handle, &i2cTrans2);
// Do other stuff while I2C is handling the transfers
.
.
// Do something if I2C transfers are finished
if(transferDone) {
.
.
}
// Continue...
.
.
}

Instrumentation

The I2C driver interface produces log statements if instrumentation is enabled.

Diagnostics Mask Log details
Diags_USER1 basic I2C operations performed
Diags_USER2 detailed I2C operations performed
#include <stdint.h>
#include <stdbool.h>
#include <ti/drivers/I2C.h>
#include <ti/drivers/pin/PINCC26XX.h>
#include <ti/drivers/Power.h>
#include <ti/drivers/dpl/HwiP.h>
#include <ti/drivers/dpl/SwiP.h>
#include <ti/drivers/dpl/SemaphoreP.h>
Include dependency graph for I2CCC26XX.h:

Go to the source code of this file.

Data Structures

struct  I2CCC26XX_I2CPinCfg
 I2CCC26XX Pin Configuration. More...
 
struct  I2CCC26XX_HWAttrsV1
 I2CCC26XX Hardware attributes. More...
 

Typedefs

typedef unsigned long I2CBaseAddrType
 

Variables

const I2C_FxnTable I2CCC26XX_fxnTable
 

Typedef Documentation

§ I2CBaseAddrType

typedef unsigned long I2CBaseAddrType

I2C Base Address type.

Variable Documentation

§ I2CCC26XX_fxnTable

const I2C_FxnTable I2CCC26XX_fxnTable
© Copyright 1995-2019, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale