Как рассчитать время i2c для stm32l0 - PullRequest
0 голосов
/ 28 мая 2018

У меня есть процессор серии stm32l0, и я не знаю, как рассчитать время i2c.Я хочу работать с датчиком Bosh bme680 / bme280.Я нахожу только инструмент настройки Timming для stm32F0 / f3.Кто-нибудь знает, как рассчитать это?

1 Ответ

0 голосов
/ 06 июля 2018

TLDR : RM0377 Справочное руководство «32-разрядные микроконтроллеры на базе Arm® со сверхнизким энергопотреблением STM32L0x1», стр. 614 , содержит примеры.


Примечание: на самом деле я еще не работал с I2C.Все последующее основано на документации.

  1. Руководство пользователя UM1749 «Описание драйверов HAL и нижнего уровня STM32L0» (стр. 233):

    uint32_t I2C_InitTypeDef :: Timing Указывает значение I2C_TIMINGR_register.Этот параметр рассчитывается в соответствии с разделом инициализации I2C в Справочном руководстве

  2. RM0377 Справочное руководство «32-разрядные микроконтроллеры на базе Arm® со сверхнизким энергопотреблением на базе STM32L0x1» (стр.641):

    Регистр синхронизации (I2C_TIMINGR)

    (...)

    PRESC [3: 0] : Предварительный пересчет времени

    Это поле используется для предварительного масштабирования I2CCLK, чтобы сгенерировать тактовый период t_PRESC, используемый для установки данных и счетчиков удержания (см. Значения времени I2C на стр. 587) и для счетчиков высокого и низкого уровня SCL(см. инициализацию мастера I2C на стр. 602).

    t_PRESC = (PRESC+1) x t_I2CCLK

    SCLDEL [3: 0] : время настройки данных Это поле используется для генерации задержкиt_SCLDEL между фронтом SDA и фронтом SCL.В режиме master и в режиме slave с NOSTRETCH = 0 линия SCL растягивается низко в течение t_SCLDEL.

    t_SCLDEL = (SCLDEL+1) x t_PRESC

    Примечание: t_SCLDEL используется для генерации синхронизации t_SU: DAT.

    SDADEL [3: 0] : время удержания данных. Это поле используется для генерации задержки t_SDADEL между задним фронтом SCL и фронтом SDA.В режиме master и в режиме slave с NOSTRETCH = 0 линия SCL растягивается на низком уровне во время t_SDADEL.

    t_SDADEL = SDADEL x t_PRESC

    Примечание: SDADEL используется для генерации синхронизации t_HD: DAT.

    SCLH [7: 0] : высокий период SCL (основной режим) Это поле используется для генерации высокого периода SCL в основном режиме.

    t_SCLH = (SCLH+1) x t_PRESC

    Примечание: SCLH также используется для генерации синхронизации t_SU: STO и t_HD: STA.

    SCLL [7: 0] : Низкий период SCL (основной режим) Это поле используется для генерации низкого периода SCL в основном режиме.

    t_SCLL = (SCLL+1) x t_PRESC

    Примечание: SCLL также используется для генерации t_BUF иt_SU: тайминги STA.

    Более подробную информацию о предварительных скейлерах можно найти в параграфах о таймерах (стр. 433).

  3. RM0377 (стр.581):

    Интерфейс подключен к шине I2C через вывод данных (SDA) и тактовый вывод (SCL).К нему можно подключить стандартную (до 100 кГц), быструю (до 400 кГц) или быструю (плюс 1 МГц) шину I2C.

    Итак, для связичасы I2C должны иметь соответствующую частоту.

  4. RM0377 (стр. 583):

    Этот независимый источник синхронизации может быть выбран из следующих трех часовисточники:

    • PCLK1: часы APB1 (значение по умолчанию)
    • HSI16: внутренний 16-МГц RC-генератор
    • SYSCLK: системные часы См. Раздел 7: Сброс и часыуправление (RCC) для более подробной информации.
  5. RM0377 (стр. 604): I2C-SMBUS specification clock timings

  6. RM0377 (стр. 602):

    t_SCL = t_SYNC1 + t_SYNC2 + {[(SCLH+1) + (SCLL+1)] x (PRESC+1) x t_I2CCLK}

    Продолжительность t_SYNC1 зависит от следующих параметров:

    • SCL падающий наклон
    • Когда включено, задержка на входе индуцируется аналоговым фильтром.
    • Когда включена, задержка на входе индуцируется цифровым фильтром: DNF x t_I2CCLK
    • Задержка из-за синхронизации SCLnization с тактовыми импульсами I2CCLK (от 2 до 3 периодов I2CCLK)

    Длительность t_SYNC2 зависит от следующих параметров:

    • SCL нарастающий наклон
    • Когда включено,задержка на входе, вызванная аналоговым фильтром.
    • Если эта опция включена, задержка на входе, вызванная цифровым фильтром: DNF x t_I2CCLK
    • Задержка из-за синхронизации SCL с тактовым сигналом I2CCLK (от 2 до 3 периодов I2CCLK)
  7. BME280 Лист данных (стр. 30):

    Поддерживаются все режимы (стандартный, быстрый, высокоскоростной).


Сбор всего этого : Исходя из тактовой частоты I2C и скорости, которую вы хотите использовать, вам нужно выбрать такие значения PRESC, SCLDEL, SDADEL, SCLH, SCLL, которые соответствуют I2C-SMBUS specification clock timingsиспользуя формулу t_SCL = t_SYNC1 + t_SYNC2 + {[(SCLH+1) + (SCLL+1)] x (PRESC+1) x t_I2CCLK}

В RM0377 есть также некоторые I2C_TIMINGR register configuration examples на странице 614.

...