I2C SPI USB CAN eSPI Cable Testing View All Quick Start Guides User Manuals Software Downloads Knowledge Base Videos Case Studies App Notes White Papers Sales Support About Us
Products Blog Sales Support Contact Search
How Do I Improve the Output of SMBus Timing with an I2C Host Adapter?
Rena Ayeras

Engineer working to create the correct timing and duty cycle for SMBus clock Illustration by Geralt

Question from the Customer:

We are using the Aardvark I2C/SPI Host Adapter as a Master for checking the SMBus on one of our development platforms. Here is a high-level overview of our setup:

diagram of master Aardvark host adapter connected to Intel platform

While checking the AC Timing Characteristics of SMBus at 400KHz, we see that the Clock Low time (T-low) is less than what the specification shows: measured time 1.08us vs. specified minimum time 1.3us). Here is a screenshot of our measurement:

scope view of timing and duty cycle of SMBus clock

 

The timings of other signals are within specification.

Our questions:

  • Is there a way to change the clock duty cycle, high time and low time, with the Aardvark adapter?
  • Can you tell us the timing characteristics the Aardvark adapter supports as a Master device? This is to help us compare our results to the specifications.
Response from Technical Support:

Thank you for your questions! There are many factors to consider when using an I2C device to work with SMBus. We will start with adjustments you can apply to the Aardvark adapter, then go over the advantages of using the Promira Serial Platform to more easily interface with your SMBus system.

Maximizing Aardvark I2C/SPI Adapter for SMBus Timing

High capacitance affects timing. Here is an outline of considerations:

  • When there is high capacitance on the bus, it takes a long time for pullups to get the voltage to the high state. Because I2C has clock stretching, the next clock transition will simply wait for the clock to go high before starting. If the clock takes a while to go high, then you get lower throughput on the bus.
  • See if you can reduce bus capacitance: use shorter wires, have fewer parts on the bus, shorter traces – have components physically close together.
  • Enable the 2.2k pullups on the Aardvark adapter, which can speed the rise time of signals. Using a smaller pullup may be an option – however it becomes more difficult for the devices on the bus to cause a proper low state, since they fight against that pullup.

Timing Characteristics and Known Limitations

To achieve the fastest throughput, we recommend sending as many bytes as possible in a single transaction (i.e., a single call to the Aardvark API). For additional information, take a look at the Aardvark SPI Signaling Characteristics. However, there are limitations:

  • There are various overheads and delays that decrease the overall speed of data transfer, such as SS# assertion to first clock (t1, 10 - 20 us), setup time for each byte (td, 7 - 9 us for SPI master), last clock to SS# de-assertion (t2, 5-10 us), and time between start of bytes (tb, min 10 us for SPI slave).
  • The GUI and the OS may add additional delay due to internal overhead. In addition, the Aardvark adapter also has 2ms round-trip latency, which is caused by the full-speed USB link between the computer and the Aardvark adapter. These delays further reduce the overall throughput across multiple transactions.

Alternate Solution for SMBus Timing and Duty Cycles

For your requirement, we recommend using the Promira Serial Platform. With the GPIO pins and Promira Software API I2C/SPI Active, you can create a signal with 50% (or other ratio) duty cycle, which should render good results.

When the duty cycle is required, the setup is 50%: on_time_in_ms = off_time_in_ms. Similarly, the delay time can be manipulated based on the duty cycle required. As described for the Aardvark adapter, there are delays to consider as described below. However, since the switching speed of 100Hz-400Hz is not very high, these delays might not be prominent.

  • The switching speed of the GPIO pins depends on the time taken for line-by-line execution of your script. Additionally, the OS may add delay due to internal overhead.
  • The Promira platform also has latency, which is caused by the Ethernet/USB link between the computer and the Promira platform.

For more details, please refer to Is there a Way to Adjust the Duty Cycle of the I2C Master Clock? Here is additional information about using the Beagle I2C/SPI Protocol Analyzer for monitoring and decoding SMBus data: SMBus and PMBus Using Total Phase I2C Tools.

We hope this answers your questions. Additional resources that you may find helpful include the following:

If you want more information, feel free to contact us with your questions, or request a demo that applies to your application.