Search by Tags

I2C Lib API

 

Compare with Revision




Subscribe for this article updates

I2C Library I2c uses system interrupt #18 The following flags can be set to act as interrupt sources: . More...

Macros

#define I2CLIB_VER_MAJ  4 Main Version of this library. More...
#define I2CLIB_VER_MIN  4 Subversion of this library. More...
#define I2CLIB_VER_BUILD  0 Build Number of this library. More...
#define I2C_OFFSET_NONE  (-1) use this value in the I2CBurstRead/Write functions to avoid sending an offset byte More...

Enumerations

enum   I2CSpeed { I2C_100KBPS, I2C_400KBPS, I2C_UNDEF_KBPS }
Specification of possible i2c data rates. More...

Functions

void  I2cIntGetLibVersion (DWORD *pVerMaj, DWORD *pVerMin, DWORD *pBuild)
void  I2CGetLibVersion (DWORD *pVerMaj, DWORD *pVerMin, DWORD *pBuild)
BOOL  GetI2CLock (DWORD timeout)
BOOL  ReleaseI2CLock ()
BOOL  I2CInitEx (DWORD I2CRegAddr)
BOOL  I2CInit (void)
void  I2CDeInit (void)
void  I2CSetSpeed (I2CSpeed Speed)
BOOL  I2CBurstWrite (unsigned char uSlaveAddress, unsigned char *pBuffer, short ucOffset, unsigned iNumberBytes)
BOOL  I2CBurstRead (unsigned char uSlaveAddress, unsigned char *pBuffer, short ucOffset, unsigned iNumberBytes)

Detailed Description

I2C Library
I2c uses system interrupt #18
The following flags can be set to act as interrupt sources:
.

Author
andy.kiser
Rev
2860
Date
2015-06-26 16:57:15 +0200 (Fr, 26 Jun 2015)
  • ICR:SAD Slave Address Detected
  • ICR:GCAD Global Call Address Detected (interrupt enabled by SADIE flag)
  • ICR:ALD Arbitration Loss Detected while in master mode
  • ICR:SSD Slave Stop Detected while in slave mode
  • ICR:BED Bus Error Detected (NAK received on transmitting a byte in master mode)
  • ICR:IRF IDBR Receive Full
  • ICR:ITE IDBR Transmit Empty
Test:
PXA320, WinCE 5.0
Target Platforms:
PXAxxx, T20

Macro Definition Documentation

#define I2C_OFFSET_NONE   (-1)

use this value in the I2CBurstRead/Write functions to avoid sending an offset byte

#define I2CLIB_VER_BUILD   0

Build Number of this library.

#define I2CLIB_VER_MAJ   4

Main Version of this library.

#define I2CLIB_VER_MIN   4

Subversion of this library.

Enumeration Type Documentation

enum I2CSpeed

Specification of possible i2c data rates.

Enumerator
I2C_100KBPS 
I2C_400KBPS 
I2C_UNDEF_KBPS 

Function Documentation

BOOL GetI2CLock ( DWORD  timeout )

Syncronisation function if I2C bus is used in multiple threads (e.g. RTCSync which is loaded by default)

Parameters
[in] timeout Maximum time [ms] to wait for the I2C Mutex
Return values
TRUE Success
FALSE See GetLastError().
possible Errors: WAIT_FAILED
BOOL I2CBurstRead ( unsigned char  uSlaveAddress,
unsigned char *  pBuffer,
short  ucOffset,
unsigned  iNumberBytes
)

Read data from one or multiple registers of an i2c device.
The function assumes that the i2c protocol defines the first transmitted byte to be the device's register offset.

Parameters
[in] uSlaveAddress The device's i2c address (0..127) if uSlaveAddress=0xff, no slaveAddress byte will be transmitted.
[in] pBuffer Pointer to the data bytes to Receive
[in] ucOffset The device's register address (offset). This is one byte transmitted after the slave address.
Set to any negative value if no offset byte should be transmitted
[in] iNumberBytes Number of Bytes to Receive
Return values
TRUE success
FALSE Error during Transmission See GetLastError(). Possible error codes:
ERROR_BUSY
ERROR_INVALID_PARAMETER
ERROR_TIMEOUT
ERROR_IO_DEVICE
ERROR_INVALID_ADDRESS
ERROR_OPERATION_ABORTED
BOOL I2CBurstWrite ( unsigned char  uSlaveAddress,
unsigned char *  pBuffer,
short  ucOffset,
unsigned  iNumberBytes
)

Write data to one or multiple registers of an i2c device.
The function assumes that the i2c protocol defines the first transmitted byte to be the device's register offset.

Parameters
[in] uSlaveAddress The device's i2c address (0..127) On Tegra T20 and T30 modules: if uSlaveAddress > 0x7f, then uSlaveAddress - 0x80 is used, and no stop bit is sent.
[in] pBuffer Pointer to the data bytes to Transmit
[in] ucOffset The device's register address (offset). This is one byte transmitted after the slave address.
Set to any negative value if no offset byte should be transmitted
[in] iNumberBytes Number of Bytes to Transmit
Return values
TRUE success
FALSE See GetLastError(). Possible error codes:
ERROR_BUSY
ERROR_INVALID_PARAMETER
ERROR_TIMEOUT
ERROR_IO_DEVICE
ERROR_INVALID_ADDRESS
ERROR_OPERATION_ABORTED
On Tegra 3, a byte not acknowledged will be reported with a Timeout Error rather than
an Operation Aborted Error
void I2CDeInit ( void  )

DeInit I2C bus
Release I2C interrupt, unmap I2C registers and deinit Clock

void I2CGetLibVersion ( DWORD *  pVerMaj,
DWORD *  pVerMin,
DWORD *  pBuild
)

Returns the library Version - for compatibility

Parameters
[out] pVerMaj Returns the major version number. Set this parameter to NULL if not required.
[out] pVerMin Returns the minor version number. Set this parameter to NULL if not required.
[out] pBuild Returns the build number. Set this parameter to NULL if not required.
BOOL I2CInit ( void  )

Initialization to use I2C bus
Enable Clock, configure GPIOs, map registers, setup I2C interrupt

Return values
TRUE success
FALSE See GetLastError(). Possible error codes:
ERROR_INVALID_PARAMETER
ERROR_NO_SYSTEM_RESOURCES
ERROR_INVALID_COMPUTERNAME
BOOL I2CInitEx ( DWORD  I2CRegAddr )

Initialization to use I2C bus
Use this function instead of I2CInit() if you need to use another i2c bus than the default bus.

Parameters
[in] I2CRegAddr Base address of the CPU's i2c controller.
Return values
TRUE Success
FALSE Unspecified Error. See GetLastError().
void I2cIntGetLibVersion ( DWORD *  pVerMaj,
DWORD *  pVerMin,
DWORD *  pBuild
)

Returns the library Version.

Parameters
[out] pVerMaj Returns the major version number. Set this parameter to NULL if not required.
[out] pVerMin Returns the minor version number. Set this parameter to NULL if not required.
[out] pBuild Returns the build number. Set this parameter to NULL if not required.
void I2CSetSpeed ( I2CSpeed Speed )

Set I2C bus speed.
Attention:

If the same i2c bus is used by multiple processes, the speed is preserved for each process individually. This is handled by the GetI2CLock() and ReleaseI2CLock() functions.
However if multiple threads within the same process use the same i2c bus, they all share a global speed setting.

Parameters
[in] Speed I2C_100KBPS or I2C_400KBPS
BOOL ReleaseI2CLock ( )

Release I2C bus for other threads (e.g. RTCSync which is loaded by default)

Return values
TRUE Success
FALSE Unspecified Error. See GetLastError().