| # Copyright (c) 2020-2023 Gerson Fernando Budke <nandojve@gmail.com> |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| description: | |
| Atmel SAM4L Family I2C (TWIM) node |
| |
| The Atmel Two-wire Master Interface (TWIM) interconnects components on a |
| unique two-wire bus, made up of one clock line and one data line with speeds |
| of up to 3.4 Mbit/s, based on a byte-oriented transfer format. The TWIM is |
| always a bus master and can transfer sequential or single bytes. Multiple |
| master capability is supported. Arbitration of the bus is performed |
| internally and relinquishes the bus automatically if the bus arbitration is |
| lost. |
| |
| When using speeds above standard mode, user may need adjust clock and data |
| lines slew and strength parameters. In general, slew 0 and minimal strength |
| is enougth for short buses and light loads. As reference, the below |
| is the lowest power configuration: |
| |
| std-clk-slew-lim = <0>; |
| std-clk-strength-low = "0.5"; |
| std-data-slew-lim = <0>; |
| std-data-strength-low = "0.5"; |
| |
| hs-clk-slew-lim = <0>; |
| hs-clk-strength-high = "0.5"; |
| hs-clk-strength-low = "0.5"; |
| hs-data-slew-lim = <0>; |
| hs-data-strength-low = "0.5"; |
| |
| For best performances, user can tune the slope curves using an osciloscope. |
| The tuning should be performed by groups defined <mode>-<line>. The prefix |
| std-<line> configures fast/fast-plus mode speeds and hs-<line> selects the |
| high speed mode. The tune should be performed for both clock and data lines |
| on both speed modes. |
| |
| |
| compatible: "atmel,sam-i2c-twim" |
| |
| include: |
| - name: i2c-controller.yaml |
| - name: pinctrl-device.yaml |
| |
| properties: |
| reg: |
| required: true |
| |
| interrupts: |
| required: true |
| |
| clocks: |
| required: true |
| |
| std-clk-slew-lim: |
| type: int |
| required: true |
| description: | |
| Slew limit of the TWCK output buffer. This should be adjusted with |
| std-clk-strength-low to fine tune the TWCK slope. |
| enum: |
| - 0 |
| - 1 |
| - 2 |
| - 3 |
| |
| std-clk-strength-low: |
| type: string |
| required: true |
| description: | |
| Pull-down drive strength of the TWCK output buffer in fast/fast plus |
| mode. This should be adjusted to provide proper TWCK line fall time. |
| The value represents the port output current in mA when signal on |
| low level. |
| enum: |
| - "0.5" |
| - "1.0" |
| - "1.6" |
| - "3.1" |
| - "6.2" |
| - "9.3" |
| - "15.5" |
| - "21.8" |
| |
| std-data-slew-lim: |
| type: int |
| required: true |
| description: | |
| Slew limit of the TWD output buffer. This should be adjusted with |
| std-data-strength-low to fine tune the TWD slope. |
| enum: |
| - 0 |
| - 1 |
| - 2 |
| - 3 |
| |
| std-data-strength-low: |
| type: string |
| required: true |
| description: | |
| Pull-down drive strength of the TWD output buffer in fast/fast plus |
| mode. This should be adjusted to provide proper TWD line fall time. |
| The value represents the port output current in mA when signal on |
| low level. |
| enum: |
| - "0.5" |
| - "1.0" |
| - "1.6" |
| - "3.1" |
| - "6.2" |
| - "9.3" |
| - "15.5" |
| - "21.8" |
| |
| hs-clk-slew-lim: |
| type: int |
| required: true |
| description: | |
| Slew limit of the TWCK output buffer in high speed mode. This |
| should be adjusted with both hs-clk-strength-high and |
| hs-clk-strength-low to fine tune the TWCK slope. |
| enum: |
| - 0 |
| - 1 |
| - 2 |
| - 3 |
| |
| hs-clk-strength-high: |
| type: string |
| required: true |
| description: | |
| Pull-up drive strength of the TWCK output buffer in high speed |
| mode. This should be adjusted to provide proper TWCK line rise time. |
| The value represents the port output current in mA when signal on |
| high level. |
| enum: |
| - "0.5" |
| - "1.0" |
| - "1.5" |
| - "3.0" |
| |
| hs-clk-strength-low: |
| type: string |
| required: true |
| description: | |
| Pull-down drive strength of the TWCK output buffer in high speed |
| mode. This should be adjusted to provide proper TWCK line fall time. |
| The value represents the port output current in mA when signal on |
| low level. |
| enum: |
| - "0.5" |
| - "1.0" |
| - "1.6" |
| - "3.1" |
| - "6.2" |
| - "9.3" |
| - "15.5" |
| - "21.8" |
| |
| hs-data-slew-lim: |
| type: int |
| required: true |
| description: | |
| Slew limit of the TWD output buffer in high speed mode. This |
| should be adjusted with hs-data-strength-low to fine tune the TWD |
| slope. |
| enum: |
| - 0 |
| - 1 |
| - 2 |
| - 3 |
| |
| hs-data-strength-low: |
| type: string |
| description: | |
| Pull-down drive strength of the TWD output buffer in high speed |
| mode. This should be adjusted to provide proper TWD line fall time. |
| The value represents the port output current in mA when signal on |
| low level. |
| enum: |
| - "0.5" |
| - "1.0" |
| - "1.6" |
| - "3.1" |
| - "6.2" |
| - "9.3" |
| - "15.5" |
| - "21.8" |
| |
| hs-master-code: |
| type: int |
| required: true |
| description: | |
| 3-bit code to be prefixed with 0b00001 to form a unique |
| 8-bit HS-mode master code (0000 1XXX) |
| enum: |
| - 0 # 000 |
| - 1 # 001 |
| - 2 # 010 |
| - 3 # 011 |
| - 4 # 100 |
| - 5 # 101 |
| - 6 # 110 |
| - 7 # 111 |