RTOS enabled i2c-driver based on the official i2c-C-api.
Fork of mbed-RtosI2cDriver by
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. | |
bool | stopMaster (void) |
Creates a stop condition on the I2C bus If unsccessful because someone on the bus holds the scl line down it returns "false" after 23µs In normal operation the stop shouldn't take longer than 12µs @ 100kHz and 3-4µs @ 400kHz. | |
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
enum SlaveRxStatus |
Status returned by the receiveSlave() function.
Definition at line 20 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:
-
sda I2C data line pin scl I2C 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 22 of file I2CDriver.cpp.
Member Function Documentation
void addressSlave | ( | int | address ) |
Sets the I2C slave address.
- Parameters:
-
address The 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 118 of file I2CDriver.h.
void frequency | ( | int | hz ) |
Set the frequency of the I2C interface.
- Parameters:
-
hz The bus frequency in hertz
Definition at line 40 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 54 of file I2CDriver.cpp.
int readMaster | ( | int | ack = 1 ) |
Read a single byte from the I2C bus.
- Parameters:
-
ack indicates if the byte is to be acknowledged (1 = acknowledge)
- Returns:
- the byte read
Definition at line 124 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:
-
address 8-bit I2C slave address [ addr | 1 ] data Pointer to the byte-array to read data in to length Number of bytes to read repeated Repeated start, true - don't send stop at end
- Returns:
- 0 on success (ack), non-0 on failure (nack)
Definition at line 107 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:
-
address 8-bit I2C slave address [ addr | 1 ] _register 8-bit regster address data Pointer to the byte-array to read data in to length Number of bytes to read repeated Repeated start, true - don't send stop at end
- Returns:
- 0 on success (ack), non-0 on failure (nack)
Definition at line 115 of file I2CDriver.cpp.
int readSlave | ( | void | ) |
Read a single byte from an I2C master.
- Returns:
- the byte read
Definition at line 186 of file I2CDriver.cpp.
int readSlave | ( | char * | data, |
int | length | ||
) |
Read from an I2C master.
- Parameters:
-
data pointer to the byte array to read data in to length maximum number of bytes to read
- Returns:
- 0 on success, non-0 otherwise ... no! instead it returns number of bytes read minus one ... weird, guess its a bug in the official lib
Definition at line 178 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 170 of file I2CDriver.cpp.
void startMaster | ( | void | ) |
Creates a start condition on the I2C bus.
Definition at line 148 of file I2CDriver.cpp.
bool stopMaster | ( | void | ) |
Creates a stop condition on the I2C bus If unsccessful because someone on the bus holds the scl line down it returns "false" after 23µs In normal operation the stop shouldn't take longer than 12µs @ 100kHz and 3-4µs @ 400kHz.
Definition at line 155 of file I2CDriver.cpp.
void stopSlave | ( | void | ) |
Creates a stop condition on the I2C bus.
Definition at line 163 of file I2CDriver.cpp.
void unlock | ( | ) |
Unlock the driver that has previously been locked by the same thread.
Definition at line 69 of file I2CDriver.cpp.
int writeMaster | ( | int | data ) |
Write single byte out on the I2C bus.
- Parameters:
-
data data to write out on bus
- Returns:
- '1' if an ACK was received, '0' otherwise
Definition at line 140 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:
-
address 8-bit I2C slave address [ addr | 0 ] data Pointer to the byte-array data to send length Number of bytes to send repeated Repeated start, true - do not send stop at end
- Returns:
- 0 on success (ack), non-0 on failure (nack)
Definition at line 132 of file I2CDriver.cpp.
int writeSlave | ( | const char * | data, |
int | length | ||
) |
Write to an I2C master.
- Parameters:
-
data pointer to the byte array to be transmitted length the number of bytes to transmite
- Returns:
- 0 on success, non-0 otherwise
Definition at line 194 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 202 of file I2CDriver.cpp.
Field Documentation
Channel* m_channel [protected] |
to one of the entries in s_channels
Definition at line 230 of file I2CDriver.h.
Generated on Wed Jul 13 2022 17:20:05 by 1.7.2