Support Question of the Week: How to Communicate via 10-bit I2C Address Mode to an Aardvark Host Adapter Slave

Q: I am using an Aardvark I2C/SPI Host Adapter and the Control Center Software. I am trying to sent one byte data 0x55 from my board (Master) to the 10-bit slave address (0x3FF). Doing this, I saw ACK was missing after the first byte of the address from the host adapter slave (Aardvark adapter) with the address(0x3FF) configured to Slave Address blank. The picture below shows the results on an oscilloscope.

Viewing Customer Results with 10-bit I2C Address Mode via Oscilloscope Figure 1: Customer Results with 10-bit I2C Address Mode via Oscilloscope

However, when I configured the slave address to 0x7B, the data 0xFF and 0x55 were recognized by the slave device. These results are shown by the oscilloscope image below.

Viewing Customer Results with 7-bit I2C Address Mode via Oscilloscope Figure 2: Customer Results with 7-bit I2C Address Mode via Oscilloscope

The screen shot below shows more information about our results.

 Viewing Customer Results with 7-bit I2C Address Mode via Control Center Figure 3: Customer Results of 7-bit I2C Address Mode via Control Center

How can I make the master and the slave devices communicate with 10-bit addresses?

A: Thanks for your question! The I2C slave address mode of the Aardvark host adapter follows the standard 7-bit I2C convention, which can result in this known limitation:

  • A master Aardvark host adapter can be configured for a 7-bit address or a 10-bit address.
  • The slave Aardvark adapter can also be configured for a 7-bit address, but it cannot be configured for a 10-bit address.

In this case, the 10-bit addressing mode of an I2C bus device is transparent to slaves with 7-bit addresses. The master sends the 10-bit addresses as two bytes instead of one byte. However, as this limitation is known, we have a workaround so you can use the 10-bit I2C address mode with the Aardvark adapter slave mode:

  1. Set the Aardvark adapter's slave address to the first 7-bits, which is sent by the master.
    • The first address byte consists of the extended addressing code (0b11110) plus the two most significant bits of the device address and the read/!write bit.
    • The second byte contains the 8 least significant address bits.
  2. The Aardvark adapter slave will then respond to 10-bit addressing if its slave address is set to the first 7 bits sent by the master.

For example, to send a write command to a slave with address 0x355,  the Aardvark adapter's slave address is set to 0b1111011 (0x7B). To do so, the master sends the following to the Aardvark adapter slave:

  1. Byte 1: 0b11110110 (5-bit extended addressing code + two most significant address bits + one !write bit).
  2. Byte 2: 0b01010101 (eight lower bits of  the 10-bit address).
  3. Byte 3 and beyond: Write the data.

Note that the first data byte the Aardvark adapter sees is not actually data; it is the second address byte sent by the master.

For additional information about this process, please refer to the Knowledge Base article 7-bit, 8-bit, and 10-bit I2C Slave Addressing, which provides information about communicating with 7-bit and 10-bit addresses, as well as 8-bit addresses.

For information about our other products, you can view our Products Page.

We hope this answers your question. If you have other questions about our host adapters, software tools or other Total Phase products, feel free to email us at sales@totalphase.com or support@totalphase.com.

Leave a Reply