From 4e375aa1f536e979a587534df0b6951fa39e8a30 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Tue, 16 Jul 2019 09:30:53 +0100 Subject: Add ARM I2Cv1 support to i2c_master (#6262) * Add ARM I2Cv1 support to i2c_master * Add I2Cv1 docs --- docs/i2c_driver.md | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'docs') diff --git a/docs/i2c_driver.md b/docs/i2c_driver.md index 4a47a92b11..317307e1bf 100644 --- a/docs/i2c_driver.md +++ b/docs/i2c_driver.md @@ -73,7 +73,22 @@ STM32 MCUs allows a variety of pins to be configured as I2C pins depending on th | `I2C1_SDA` | The pin number for the SDA pin (0-9) | `7` | | `I2C1_BANK` (deprecated) | The bank of pins (`GPIOA`, `GPIOB`, `GPIOC`), superceded by `I2C1_SCL_BANK`, `I2C1_SDA_BANK` | `GPIOB` | -STM32 MCUs allow for different timing parameters when configuring I2C. These can be modified using the following parameters, using https://www.st.com/en/embedded-software/stsw-stm32126.html as a reference: +The ChibiOS I2C driver configuration depends on STM32 MCU: + + STM32F1xx, STM32F2xx, STM32F4xx, STM32L0xx and STM32L1xx use I2Cv1; + STM32F0xx, STM32F3xx, STM32F7xx and STM32L4xx use I2Cv2; + +#### I2Cv1 +STM32 MCUs allow for different clock and duty parameters when configuring I2Cv1. These can be modified using the following parameters, using as a reference: + +| Variable | Default | +|--------------------|------------------| +| `I2C1_OPMODE` | `OPMODE_I2C` | +| `I2C1_CLOCK_SPEED` | `100000` | +| `I2C1_DUTY_CYCLE` | `STD_DUTY_CYCLE` | + +#### I2Cv2 +STM32 MCUs allow for different timing parameters when configuring I2Cv2. These can be modified using the following parameters, using as a reference: | Variable | Default | |-----------------------|---------| @@ -83,13 +98,14 @@ STM32 MCUs allow for different timing parameters when configuring I2C. These can | `I2C1_TIMINGR_SCLH` | `15U` | | `I2C1_TIMINGR_SCLL` | `21U` | -STM32 MCUs allow for different "alternate function" modes when configuring GPIO pins. These are required to switch the pins used to I2C mode. See the respective datasheet for the appropriate values for your MCU. +STM32 MCUs allow for different "alternate function" modes when configuring GPIO pins. These are required to switch the pins used to I2Cv2 mode. See the respective datasheet for the appropriate values for your MCU. | Variable | Default | |---------------------|---------| | `I2C1_SCL_PAL_MODE` | `4` | | `I2C1_SDA_PAL_MODE` | `4` | +#### Other You can also overload the `void i2c_init(void)` function, which has a weak attribute. If you do this the configuration variables above will not be used. Please consult the datasheet of your MCU for the available GPIO configurations. The following is an example initialization function: ```C -- cgit v1.2.3