Silabs efm8bb3 очень медленно работает на основных передачах smbus/i2c
Работая с Simplicity Studio и Silabs EFM8BB3 (SoC на базе 8051), я наблюдаю очень медленную скорость передачи с огромной паузой (до 60 мс) между каждой передачей байтов, а также (до 160 мс) между полными сообщениями по протоколу i2c через главный интерфейс smbus.
Почему скорость передачи так низка, и я могу что-то сделать, чтобы решить ее?
1 ответ
Проблема решается путем активации другого таймера, отвечающего только за распознавание задержки / тайм-аута SCL (будьте осторожны, это не так ясно объяснено в таблице данных). на чипсете Silabs EFM8BB3 таймер T2 призван обеспечить модуляцию передачи потока данных i2c. Таймер T3 выполняет роль тайм-аута i2c SCL. чтобы уменьшить паузу между байтами, необходимо включить T3. Т3 должен быть настроен в two timers, 8-bit auto reload
режим с включенным прерыванием по младшему байту. Низкая частота переполнения байта T3 должна быть установлена на 50000 (reload value is 215)
в случае скорости передачи i2c 400 кГц. упрощенный обработчик прерываний (просто чтобы сбросить флаг прерывания) должен быть реализован. Частота переполнения старшего байта T3 может быть установлена на самую низкую из доступных 8000 (reload value is 1)
, объект интерфейса SMBUS требует Enable SMBus SCL Timeout Detection
активируется.