Silabs efm8bb3 is very slow on smbus/i2c master transfers

195 Views Asked by At

While working with Simplicity Studio and Silabs EFM8BB3 (8051 based SoC), I'm observing a very slow transfer rate with a huge pause (up-to 60 ms) in between each byte transfer, as well as (up-to 160 ms) between complete messages on i2c protocol over smbus master interface.

Why is the transfer rate so slow, and is there anything I can do to resolve it?

1

There are 1 best solutions below

1
On

the problem being resolved by activating another timer responsible only for SCL delay/timeout recognition (beware, it's not so clear explained in the datasheet). on Silabs EFM8BB3 chipset the timer T2 has a role to provide i2c data stream transfer modulation. the timer T3 has a role to provide i2c SCL timeout handling. to be able to decrease pause in between bytes, T3 has to be enabled. T3 must be configured in two timers, 8-bit auto reload mode with low byte interrupt enabled. T3 low byte overflow frequency has to be set to 50000 (reload value is 215) in case of 400KHz i2c transfer rate. simplified interrupt handler (just to drop the interrupt flag) has to be implemented. T3 high byte overflow frequency could be set to the lowest available 8000 (reload value is 1). the SMBUS interface entity require Enable SMBus SCL Timeout Detection activated.