Modified version of the official mbed lib providing a RTOS enabled i2c-driver based on the official i2c-C-api.

Dependencies:   mbed-rtos mbed-src

Embed: (wiki syntax)

« Back to documentation index

I2CDriver Class Reference

I2C driver based on mbed RTOS and I2C-C-API. More...

#include <I2CDriver.h>

Public Types

enum  SlaveRxStatus
 

Status returned by the receiveSlave() function.

More...

Public Member Functions

 I2CDriver (PinName sda, PinName scl, int hz=100000, int slaveAdr=0)
 Create an I2C Master interface, connected to the specified pins.
void frequency (int hz)
 Set the frequency of the I2C interface.
int readMaster (int address, char *data, int length, bool repeated=false)
 Read from an I2C slave.
int readMaster (int address, uint8_t _register, char *data, int length, bool repeated=false)
 Read from a given I2C slave register.
int readMaster (int ack=1)
 Read a single byte from the I2C bus.
int writeMaster (int address, const char *data, int length, bool repeated=false)
 Write to an I2C slave.
int writeMaster (int data)
 Write single byte out on the I2C bus.
void addressSlave (int address)
 Sets the I2C slave address.
int receiveSlave (uint32_t timeout_ms=osWaitForever)
 Checks to see if this I2C Slave has been addressed.
int readSlave (char *data, int length)
 Read from an I2C master.
int readSlave (void)
 Read a single byte from an I2C master.
int writeSlave (const char *data, int length)
 Write to an I2C master.
int writeSlave (int data)
 Write a single byte to an I2C master.
void startMaster (void)
 Creates a start condition on the I2C bus.
void stopSlave (void)
 Creates a stop condition on the I2C bus.
void stopMaster (void)
 Creates a stop condition on the I2C bus.
void lock ()
 Wait until the i2c driver becomes available.
void unlock ()
 Unlock the driver that has previously been locked by the same thread.

Protected Attributes

Channel * m_channel
 to one of the entries in s_channels

Detailed Description

I2C driver based on mbed RTOS and I2C-C-API.

Supports Master and Slave mode

Definition at line 15 of file I2CDriver.h.


Member Enumeration Documentation

Status returned by the receiveSlave() function.

Definition at line 19 of file I2CDriver.h.


Constructor & Destructor Documentation

I2CDriver ( PinName  sda,
PinName  scl,
int  hz = 100000,
int  slaveAdr = 0 
)

Create an I2C Master interface, connected to the specified pins.

Parameters:
sdaI2C data line pin
sclI2C clock line pin
Note:
Has to be created in a thread context, i.e. within the main or some other function. A global delaration does not work

Definition at line 41 of file I2CDriver.cpp.


Member Function Documentation

void addressSlave ( int  address )

Sets the I2C slave address.

Parameters:
addressThe address to set for the slave (ignoring the least signifcant bit). If set to 0, the slave will only respond to the general call address.

Definition at line 117 of file I2CDriver.h.

void frequency ( int  hz )

Set the frequency of the I2C interface.

Parameters:
hzThe bus frequency in hertz

Definition at line 39 of file I2CDriver.h.

void lock (  )

Wait until the i2c driver becomes available.

Useful if you want to run a sequence of command without interrution by another thread. There's no need to call this function for running single request, because all driver functions will lock the device for exclusive access automatically.

Definition at line 153 of file I2CDriver.cpp.

int readMaster ( int  ack = 1 )

Read a single byte from the I2C bus.

Parameters:
ackindicates if the byte is to be acknowledged (1 = acknowledge)
Returns:
the byte read

Definition at line 206 of file I2CDriver.cpp.

int readMaster ( int  address,
char *  data,
int  length,
bool  repeated = false 
)

Read from an I2C slave.

Performs a complete read transaction. The bottom bit of the address is forced to 1 to indicate a read.

Parameters:
address8-bit I2C slave address [ addr | 1 ]
dataPointer to the byte-array to read data in to
lengthNumber of bytes to read
repeatedRepeated start, true - don't send stop at end
Returns:
0 on success (ack), non-0 on failure (nack)

Definition at line 181 of file I2CDriver.cpp.

int readMaster ( int  address,
uint8_t  _register,
char *  data,
int  length,
bool  repeated = false 
)

Read from a given I2C slave register.

Performs a complete write-register-read-data-transaction. The bottom bit of the address is forced to 1 to indicate a read.

Parameters:
address8-bit I2C slave address [ addr | 1 ]
_register8-bit regster address
dataPointer to the byte-array to read data in to
lengthNumber of bytes to read
repeatedRepeated start, true - don't send stop at end
Returns:
0 on success (ack), non-0 on failure (nack)

Definition at line 193 of file I2CDriver.cpp.

int readSlave ( char *  data,
int  length 
)

Read from an I2C master.

Parameters:
datapointer to the byte array to read data in to
lengthmaximum number of bytes to read
Returns:
0 on success, non-0 otherwise

Definition at line 271 of file I2CDriver.cpp.

int readSlave ( void   )

Read a single byte from an I2C master.

Returns:
the byte read

Definition at line 282 of file I2CDriver.cpp.

int receiveSlave ( uint32_t  timeout_ms = osWaitForever )

Checks to see if this I2C Slave has been addressed.

Returns:
A status indicating if the device has been addressed, and how
  • NoData - the slave has not been addressed
  • ReadAddressed - the master has requested a read from this slave
  • WriteAddressed - the master is writing to this slave
  • WriteGeneral - the master is writing to all slave

Definition at line 261 of file I2CDriver.cpp.

void startMaster ( void   )

Creates a start condition on the I2C bus.

Definition at line 236 of file I2CDriver.cpp.

void stopMaster ( void   )

Creates a stop condition on the I2C bus.

Definition at line 244 of file I2CDriver.cpp.

void stopSlave ( void   )

Creates a stop condition on the I2C bus.

Definition at line 252 of file I2CDriver.cpp.

void unlock (  )

Unlock the driver that has previously been locked by the same thread.

Definition at line 163 of file I2CDriver.cpp.

int writeMaster ( int  address,
const char *  data,
int  length,
bool  repeated = false 
)

Write to an I2C slave.

Performs a complete write transaction. The bottom bit of the address is forced to 0 to indicate a write.

Parameters:
address8-bit I2C slave address [ addr | 0 ]
dataPointer to the byte-array data to send
lengthNumber of bytes to send
repeatedRepeated start, true - do not send stop at end
Returns:
0 on success (ack), non-0 on failure (nack)

Definition at line 215 of file I2CDriver.cpp.

int writeMaster ( int  data )

Write single byte out on the I2C bus.

Parameters:
datadata to write out on bus
Returns:
'1' if an ACK was received, '0' otherwise

Definition at line 227 of file I2CDriver.cpp.

int writeSlave ( int  data )

Write a single byte to an I2C master.

the byte to write

Returns:
'1' if an ACK was received, '0' otherwise

Definition at line 303 of file I2CDriver.cpp.

int writeSlave ( const char *  data,
int  length 
)

Write to an I2C master.

Parameters:
datapointer to the byte array to be transmitted
lengththe number of bytes to transmite
Returns:
0 on success, non-0 otherwise

Definition at line 292 of file I2CDriver.cpp.


Field Documentation

Channel* m_channel [protected]

to one of the entries in s_channels

Definition at line 250 of file I2CDriver.h.