2017-12-18 149 views
0

雖然與簡單Studio和Silabs公司EFM8BB3(8051基於SoC)的工作,我觀察到一個巨大的暫停(最多到60毫秒)一個非常低的傳輸速率之間每個字節傳輸以及i2c協議上的完整信息(通過smbus主接口)之間(最多160毫秒)。Silabs公司efm8bb3是對的SMBus/I2C主機傳輸速度很慢

爲什麼傳輸速度這麼慢,是有什麼我可以做些什麼來解決這個問題?

回答

1

問題通過激活只負責SCL延遲/超時識別(注意,這不是很清楚的數據表中說明)另一個計時器被解決。上Silabs公司EFM8BB3芯片組定時器T2有一定的作用,以提供I2C數據流傳輸調製。 定時器T3有提供i2c SCL超時處理的作用。爲了能夠減少字節間的暫停,必須啓用T3。必須在啓用低字節中斷的情況下,在two timers, 8-bit auto reload模式下配置T3。如果是400KHz i2c傳輸速率,T3低字節溢出頻率必須設置爲50000 (reload value is 215)。簡化的中斷處理程序(只需放下中斷標誌)必須實現。 T3高字節溢出頻率可以設置爲最低可用的8000 (reload value is 1)。 SMBUS接口實體需要激活Enable SMBus SCL Timeout Detection

+1

提防,SILABS發佈的「2017年的聖誕禮物」蟲失去正確的定時器3系統時鐘的配置,並迫使EXTCLK來代替。使用以下post-init配置將Timer3反轉爲使用內部CLK。 'SFRPAGE = 0x00; \t CKCON0 = CKCON0_SCA__SYSCLK_DIV_12 | CKCON0_T0M__PRESCALE \t \t \t | CKCON0_T2MH__SYSCLK | CKCON0_T2ML__SYSCLK \t \t \t | CKCON0_T3MH__EXTERNAL_CLOCK | CKCON0_T3ML__SYSCLK \t \t \t | CKCON0_T1M__SYSCLK;' –