当前位置: 首页 > news >正文

Linux学习笔记--Pinctrl子系统示例

Pinctrl:Pin Controller,顾名思义,就是用来控制引脚的:

  • 引脚枚举与命名(Enumerating and naming)

  • 引脚复用(Multiplexing):比如用作GPIO、I2C或其他功能

  • 引脚配置(Configuration):比如上拉、下来、open drain、驱动强度等

Pinctrl驱动由芯片厂家的BSP工程师提供,一般的驱动工程师只需要在设备树里:

  • 指明使用那些引脚

  • 复用为哪些功能

  • 配置为哪些状态

针对 i.MX6ULL 处理器的设备树节点,用于配置 IOMUXC(输入输出多路复用控制器)

&iomuxc {pinctrl-names = "default";pinctrl-0 = <&BOARD_InitPins>;imx6ull-board {i2c1_pins: i2c1_pins {                /*!< Function assigned for the core: Cortex-A7[ca7] */fsl,pins = <MX6UL_PAD_UART4_RX_DATA__I2C1_SDA          0x000018B0MX6UL_PAD_UART4_TX_DATA__I2C1_SCL          0x000018B0>;};};
};解释

1. 外层节点

&iomuxc {pinctrl-names = "default";pinctrl-0 = <&BOARD_InitPins>;
  • &iomuxc:引用 iomuxc 节点进行覆盖/扩展

  • pinctrl-names:定义引脚控制状态名称,这里只有"default"状态

  • pinctrl-0:引用 BOARD_InitPins 节点作为默认引脚配置

2. 板级特定配置节点

imx6ull-board {i2c1_pins: i2c1_pins {fsl,pins = <MX6UL_PAD_UART4_RX_DATA__I2C1_SDA 0x000018B0MX6UL_PAD_UART4_TX_DATA__I2C1_SCL 0x000018B0>;};
};

引脚功能复用

  • MX6UL_PAD_UART4_RX_DATA__I2C1_SDA:将 UART4_RX_DATA 引脚复用为 I2C1_SDA 功能

  • MX6UL_PAD_UART4_TX_DATA__I2C1_SCL:将 UART4_TX_DATA 引脚复用为 I2C1_SCL 功能

配置值 0x000018B0 解析

这个32位配置值控制引脚的电气特性:

位域功能说明
SRE0压摆率:慢速压摆率
DSE0x3 (011)驱动强度:R0/3 (约40欧姆)
SPEED0x2 (10)速度:中速(100MHz)
ODE0开漏输出:禁用
PKE1引脚保持器:启用
PUE1上拉/下拉选择:上拉
PUS0x2 (10)上拉/下拉强度:22K欧姆上拉
HYS1滞回器:启用

这个配置:

  1. 复用 UART4 引脚为 I2C1 功能

  2. 配置适当的电气特性用于 I2C 通信

  3. 启用上拉电阻(I2C 总线需要上拉)

  4. 设置中速驱动适合 I2C 通信速度

完整的 i2c1 节点配置

&i2c1 {clock-frequency = <100000>;              /* I2C 时钟频率:100kHz */pinctrl-names = "default";               /* 引脚控制状态名称 */pinctrl-0 = <&i2c1_pins>;                /* 使用之前定义的 i2c1_pins 引脚配置 */status = "okay";                         /* 启用该控制器 *//* 可选的 I2C 设备子节点 */eeprom: eeprom@50 {compatible = "atmel,24c02";reg = <0x50>;pagesize = <16>;};touchscreen: touch@38 {compatible = "edt,edt-ft5406";reg = <0x38>;interrupt-parent = <&gpio1>;interrupts = <9 IRQ_TYPE_EDGE_FALLING>;};
};

属性详解

1. clock-frequency = <100000>
  • 作用:设置 I2C 总线时钟频率

  • :100,000 Hz = 100 kHz

  • 说明:这是 I2C 标准模式的速度,常见值还有:

    • 100000 = 100 kHz(标准模式)

    • 400000 = 400 kHz(快速模式)

    • 1000000 = 1 MHz(高速模式)

2. pinctrl-names = "default"
  • 作用:定义引脚控制状态名称

  • :只有 "default" 状态

  • 说明:表示这个引脚配置用于默认状态

3. pinctrl-0 = <&i2c1_pins>
  • 作用:引用具体的引脚配置

  • :指向之前定义的 i2c1_pins 节点

  • 说明:将物理引脚与 I2C1 功能关联起来

4. status = "okay"
  • 作用:启用该外设控制器

    • "okay" 或 "ok":启用

    • "disabled":禁用

  • 说明:必须设置为 "okay" 才能使用 I2C1 控制器

eeprom@50 {compatible = "atmel,24c02";reg = <0x50>;pagesize = <16>;           /* 页大小 */size = <256>;              /* 总大小 */address-width = <8>;       /* 地址宽度 */
};
节点名称:eeprom@50
  • eeprom:设备类型标识

  • @50:I2C 设备地址(16进制),表示设备地址为 0x50

compatible = "atmel,24c02"
  • 作用:用于设备驱动匹配

    • "atmel,24c02":指定设备兼容 Atmel 的 24C02 EEPROM

    • 内核会根据这个字符串找到对应的驱动程序

reg = <0x50>
  • 作用:设备的 I2C 从地址

  • 0x50(7位地址)

  • 说明:在 I2C 总线中,这个地址用于寻址该设备

http://www.dtcms.com/a/491927.html

相关文章:

  • 安徽网站建设seo优化如何用asp做网站的登录界面
  • wordpress网站页脚网站进行中英文转换怎么做
  • RFSOC27DR+VU13P 6U VPX板卡
  • 多门店同城配送上新!Tigshop 开源商城系统JAVA5.4.0版本正式发布!
  • 域名访问过程会不会影响网站访问国外 设计师 网站
  • 温州外贸网站设计wordpress简介怎么改
  • css`text-wrap:pretty`
  • RHCA作业
  • 网站建设申请前端网站效果有哪些
  • 小林coding|计算机网络
  • 2025年--Lc193-139. 单词拆分(动态规划在字符串的应用)--Java版
  • 做网站公重庆永川网站建设
  • 高端网站建设公司名字北京页面设计制作
  • 获取hive/impala表下表所有分区
  • C语言中static const extern volatile inline关键字
  • SQL入门:CET-简化复杂查询的利器
  • 零基础网站建设教学培训wordpress弹窗通知插件
  • 北京网络科技有限公司官网吴忠seo
  • 静态代理和动态代理
  • 深度学习论文: Pixel-Perfect Depth with Semantics-Prompted Diffusion Transformers
  • uni-app学习笔记(二)
  • 中国网站设计师广州最专业的网站建设
  • 怎么查看网站的ftp地址wordpress 文章引用
  • 基于JETSON+FPGA+GMSL相机 vs 传统工业相机:高动态范围与低延迟如何重塑机器感知视觉?
  • 物联网开发学习总结(5)—— 深入对比 TDengine、InfluxDB 和 TimescaleDB 三大主流时序数据库的性能表现
  • 网站pv统计方法深圳logo设计公司哪家好
  • 软件测试— 测试分类
  • 三井物产商品预测竞赛思路
  • 各省住房和城乡建设厅网站南宁公司做seo
  • 网站如何建数据库淘宝建设网站的理由