i2cmux2 2.2.0
i2cmux2


I2C MUX 2 Click

I2C MUX 2 Click demo application is developed using the NECTO Studio, ensuring compatibility with mikroSDK's open-source libraries and tools. Designed for plug-and-play implementation and testing, the demo is fully compatible with all development, starter, and mikromedia boards featuring a mikroBUS™ socket.


Click Library

  • Author : MikroE Team
  • Date : Feb 2020.
  • Type : I2C type

Software Support

Example Description

This example demonstrates the use of the I2C MUX 2 Click board.

Example Libraries

  • MikroSDK.Board
  • MikroSDK.Log
  • Click.I2cMux2

Example Key Functions

  • i2cmux2_cfg_setup Config Object Initialization function.
    void i2cmux2_cfg_setup(i2cmux2_cfg_t *cfg)
    Config Object Initialization function.
    Click configuration structure definition.
    Definition i2cmux2.h:143
  • i2cmux2_init Initialization function.
    err_t i2cmux2_init ( i2cmux2_t *ctx, i2cmux2_cfg_t *cfg );
    err_t i2cmux2_init(i2cmux2_t *ctx, i2cmux2_cfg_t *cfg)
    Initialization function.
    Click ctx object definition.
    Definition i2cmux2.h:124
  • i2cmux2_hw_reset This function resets I2C MUX 2 Click board by clearing the RST pin for 100ms.
    void i2cmux2_hw_reset(i2cmux2_t *ctx)
    Hardware reset function.
  • i2cmux2_set_channel Function sets channel of the I2C MUX 2 Click board.
    void i2cmux2_set_channel ( i2cmux2_t *ctx, uint8_t channel, uint8_t ch_slave_address );
    void i2cmux2_set_channel(i2cmux2_t *ctx, uint8_t channel, uint8_t ch_slave_address)
    Set channel function.
  • i2cmux2_generic_read This function reads data from the desired register.
    void i2cmux2_generic_read ( i2cmux2_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
    void i2cmux2_generic_read(i2cmux2_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
    Generic read function.

Application Init

Initializes the driver, performs the device reset, and makes an initial log.

void application_init ( void )
{
log_cfg_t log_cfg;
LOG_MAP_USB_UART( log_cfg );
log_init( &logger, &log_cfg );
log_info( &logger, "---- Application Init ----" );
// Click initialization.
I2CMUX2_MAP_MIKROBUS( cfg, MIKROBUS_1 );
i2cmux2_init( &i2cmux2, &cfg );
Delay_ms ( 100 );
log_printf( &logger, "I2C MUX 2 Click driver init\r\n");
log_printf( &logger, "---------------------------------------\r\n");
Delay_ms ( 100 );
i2cmux2_hw_reset( &i2cmux2 );
log_printf( &logger, "I2C MUX 2 Click HW reset\r\n");
log_printf( &logger, "---------------------------------------\r\n");
Delay_ms ( 100 );
}
#define I2CMUX2_MAP_MIKROBUS(cfg, mikrobus)
Definition i2cmux2.h:67
void application_init(void)
Definition main.c:96

Application Task

In this example, we read the device ID register of the connected Click boards. Channel 0 : 6DOF IMU 11 Click [slave address: 0x0E; reg: 0x00; id val.: 0x2D], Channel 1 : Altitude Click [slave address: 0x60; reg: 0x0C; id val.: 0xC4], Channel 2 : 6DOF IMU 9 Click [slave address: 0x69; reg: 0x75; id val.: 0xA9], Channel 3 : Compass 3 Click [slave address: 0x30; reg: 0x2F; id val.: 0x0C]. All data logs write on USB UART changes every 2 sec.

void application_task ( void )
{
log_printf( &logger, " CH | ID | INT \r\n" );
log_printf( &logger, "----------------------\r\n" );
#ifdef ENABLE_CHANNEL_0
// SET CHANNEL 0: 6DOF IMU 11 Click
Delay_ms ( 100 );
i2cmux2_generic_read( &i2cmux2, 0x00, &rx_data, 1 );
#endif
#ifdef ENABLE_CHANNEL_1
// SET CHANNEL 1: Altitude Click
Delay_ms ( 100 );
i2cmux2_generic_read( &i2cmux2, 0x0C, &rx_data, 1 );
#endif
#ifdef ENABLE_CHANNEL_2
// SET CHANNEL 2: 6DOF IMU 9 Click
Delay_ms ( 100 );
i2cmux2_generic_read( &i2cmux2, 0x75, &rx_data, 1 );
#endif
#ifdef ENABLE_CHANNEL_3
// SET CHANNEL 3: Compass 3 Click
Delay_ms ( 100 );
i2cmux2_generic_read( &i2cmux2, 0x2F, &rx_data, 1 );
#endif
log_printf( &logger, "----------------------\r\n" );
Delay_ms ( 1000 );
Delay_ms ( 1000 );
}
#define I2CMUX2_CMD_SET_CH_1
Definition i2cmux2.h:95
#define I2CMUX2_CMD_SET_CH_3
Definition i2cmux2.h:97
#define I2CMUX2_CMD_SET_CH_0
Definition i2cmux2.h:94
#define I2CMUX2_CMD_SET_CH_2
Definition i2cmux2.h:96
void application_task(void)
Definition main.c:130
void display_log(uint8_t sel_ch)
Definition main.c:48

Note

Disable all unconnected channels from the example using ENABLE_CHANNEL_x macros below to prevent the I2C bus from blocking waiting for a device response.

Application Output

This Click board can be interfaced and monitored in two ways:

  • Application Output - Use the "Application Output" window in Debug mode for real-time data monitoring. Set it up properly by following this tutorial.
  • UART Terminal - Monitor data via the UART Terminal using a USB to UART converter. For detailed instructions, check out this tutorial.

Additional Notes and Information

The complete application code and a ready-to-use project are available through the NECTO Studio Package Manager for direct installation in the NECTO Studio. The application code can also be found on the MIKROE GitHub account.