i2cmux5  2.0.0.0
Main Page

I2C MUX 5 click

I2C MUX 5 Click is a compact add-on board with translating I2C and SMBus switch intended for applications with I2C slave address conflicts.

click Product page


Click library

  • Author : Nenad Filipovic
  • Date : Nov 2020.
  • Type : I2C type

Software Support

We provide a library for the I2cMux5 Click as well as a demo application (example), developed using MikroElektronika compilers. The demo can run on all the main MikroElektronika development boards.

Package can be downloaded/installed directly from NECTO Studio Package Manager(recommended way), downloaded from our LibStock™ or found on mikroE github account.

Library Description

> This library contains API for I2cMux5 Click driver.

Standard key functions :

Config Object Initialization function.

void i2cmux5_cfg_setup ( i2cmux5_cfg_t *cfg );

Initialization function.

I2CMUX5_RETVAL i2cmux5_init ( i2cmux5_t *ctx, i2cmux5_cfg_t *cfg );

Click Default Configuration function.

void i2cmux5_default_cfg ( i2cmux5_t *ctx );

Example key functions :

I2C MUX 5 I2C writing function.

err_t i2cmux5_generic_write ( i2cmux5_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len );

I2C MUX 5 I2C reading function.

err_t i2cmux5_generic_read ( i2cmux5_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len );

I2C MUX 5 I2C channel reading function.

uint8_t i2cmux5_channel_read_byte ( i2cmux5_t *ctx, uint8_t sel_ch, uint8_t ch_slave_addr, uint8_t reg );

Examples Description

This app reads "Who am I" and "Status" register of the connected click boards to the I2C MUX 5 click.

The demo application is composed of two sections :

Application Init

Initializes I2C driver, set the default configuration and start to write log.

void application_init ( void ) {
log_cfg_t log_cfg; /**< Logger config object. */
i2cmux5_cfg_t i2cmux5_cfg; /**< Click config object. */
/**
* Logger initialization.
* Default baud rate: 115200
* Default log level: LOG_LEVEL_DEBUG
* @note If USB_UART_RX and USB_UART_TX
* are defined as HAL_PIN_NC, you will
* need to define them manually for log to work.
* See @b LOG_MAP_USB_UART macro definition for detailed explanation.
*/
LOG_MAP_USB_UART( log_cfg );
log_init( &logger, &log_cfg );
log_printf( &logger, "\r\n" );
log_info( &logger, " Application Init " );
// Click initialization.
i2cmux5_cfg_setup( &i2cmux5_cfg );
I2CMUX5_MAP_MIKROBUS( i2cmux5_cfg, MIKROBUS_1 );
err_t init_flag = i2cmux5_init( &i2cmux5, &i2cmux5_cfg );
if ( init_flag == I2C_MASTER_ERROR ) {
log_error( &logger, " Application Init Error. " );
log_info( &logger, " Please, run program again... " );
for ( ; ; );
}
i2cmux5_default_cfg ( &i2cmux5 );
log_info( &logger, " Application Task \r\n" );
Delay_ms( 100 );
log_printf( &logger, "-------------------------------\r\n" );
log_printf( &logger, " I2C MUX 5 click \r\n" );
log_printf( &logger, "-------------------------------\r\n" );
}

Application Task

This is an example that demonstrates the use of the I2C MUX 5 click board. In this example, we read "Who am I" ( or "Status" ) register of the connected click boards to the I2C MUX 5 click. Channel 1 : 6DOF IMU 9 click [slave address: 0x69; reg: 0x75; ID val.: 0xA9], Channel 2 : 6DOF IMU 11 click [slave address: 0x0E; reg: 0x00; ID val.: 0x2D], Channel 3 : RTC 10 click [slave address: 0x68; reg: 0x0F; St val.: 0x88], Channel 4 : Accel 10 click [slave address: 0x18; reg: 0x0F; ID val.: 0x44]. Results are being sent to the Usart Terminal where you can track their changes.

void application_task ( void ) {
rx_data = i2cmux5_channel_read_byte( &i2cmux5, I2CMUX5_CH_1, I2CMUX5_SET_6DOF_IMU_9_ADDR, 0x75 );
Delay_ms( 1000 );
log_printf( &logger, " CH-1 6DOF IMU 9 click : 0x%X \r\n", ( uint16_t )rx_data );
rx_data = i2cmux5_channel_read_byte( &i2cmux5, I2CMUX5_CH_2, I2CMUX5_SET_6DOF_IMU_11_ADDR, 0x00 );
Delay_ms( 1000 );
log_printf( &logger, " CH-2 6DOF IMU 11 click : 0x%X \r\n", ( uint16_t )rx_data );
rx_data = i2cmux5_channel_read_byte( &i2cmux5, I2CMUX5_CH_3, I2CMUX5_SET_RTC_10_ADDR, 0x0F );
Delay_ms( 1000 );
log_printf( &logger, " CH-3 RTC 10 click : 0x%X \r\n", ( uint16_t )rx_data );
rx_data = i2cmux5_channel_read_byte( &i2cmux5, I2CMUX5_CH_4, I2CMUX5_SET_ACCEL_10_ADDR, 0x0F );
Delay_ms( 1000 );
log_printf( &logger, " CH-4 Accel 10 click : 0x%X \r\n", ( uint16_t )rx_data );
log_printf( &logger, "-------------------------------\r\n" );
i2cmux5_hw_reset( &i2cmux5 );
Delay_ms( 2000 );
}

The full application code, and ready to use projects can be installed directly from NECTO Studio Package Manager(recommended way), downloaded from our LibStock™ or found on mikroE github account.

Other mikroE Libraries used in the example:

  • MikroSDK.Board
  • MikroSDK.Log
  • Click.I2cMux5

Additional notes and informations

Depending on the development board you are using, you may need USB UART click, USB UART 2 Click or RS232 Click to connect to your PC, for development systems with no UART to USB interface available on the board. UART terminal is available in all Mikroelektronika compilers.