gpio相关介绍

2023-11-05

GPIO:通用输入输出端口。
gpio的基本输出功能由STM32控制引脚输出高、低电平,实现开关控制。
最基本的输入功能是检测外部输入电平
gpio工作模式:
输入模式:上拉/下拉/浮空。在输入模式中,施密特触发器打开,输出被禁止。数据寄存器每隔1个AHB1时钟周期更新一次,可通过输入数据寄存器GPIOx_IDR读取I/O状态。其中AHB1的时钟默认为180MHz。
输出模式:输出使能,推免模式时双mos管方式工作。输出数据寄存器GPIOx_ODR控制I/O输出高低电平。输出速度可配置,有2/25/50/100MHz。ODR寄存器对应引脚的位为0。
复用功能:输出使能,GPIOx_ODR 无效。输入可用。
模式输入输出:双mos管结构关闭,其他外设通过墨迹通道进行输入输出。

推免:
高电平 P-MOS导通,低电平N-MOS导通
输入电压5v,输出电压3.3v
开漏:
高电平P-MOS不工作,N-MOS管关闭
低电平N-MOS导通,P-MOS管不工作
输入电压5v,输出电压5v
推免电路和推免结构:
推免结构是指两个参数相同的三极管或MOS管分别受两互补信号的控制,总在一个三极管或MOS管导出的时候另一个截至。
推免电路是两个参数相同的三极管或MOSFET,以推免的方式存在于电路中。

相关硬件差异有:
和CPU的连接方式不同。SOC的GPIO controller是通过SOC(片上系统,芯片集成)的总线连接到CPU的。对于嵌入式系统而言,除了SOC的IO port,一些外设(有些key controller芯片,codec或者PMU的芯片,有些专用的IO expander可以扩展16个或32个GPIO)也提供。CPU和IO expander通过I2C连接,访问SOC之外的GPIO需要I2C 的操作,控制SOC上的GPIO只需要写寄存器的操作。
访问方式不同。GPIO controller有的会提供一个寄存器控制输出电平,有的会提供两个。
配置方式不同。在一个系统上配置为输出,在另外上可能配置为输出。
GPIO特性不同(是否能触发中断,该GPIO能否将CPU从sleep状态唤醒,有些有软件可控的上拉或者下拉电阻的)
多功能复用(SOC的某个GPIO除了作为一个普通IO pin脚,还可以时SPI上的clock信号线)
操作GPIO可能导致sleep,同步机制不能采用spinblock(spinlock要求不能sleep)

GPIO controller的相关寄存器
有些硬件逻辑和IO port本身功能设定相关,可称为pin controller。软件通过设定pin controller可以实现引脚功能配置,引脚特性配置(如pull-up/down电阻的设定)。
如果一组GPIO被配置为SPI(串行外设接口),pin脚被连接到了SPI controller,如果配置成GPIO,那么控制引脚的是GPIO controller。通过访问GPIO controller,软件可以配置GPIO的方向,如果是输出可以配置high level或者low level,如果是输入可以获取GPIO引脚上的电平状态。
通过访问GPIO type的中断控制器的寄存器,软件可以中断的enable和disable(mask和unmask),可以触发方式,可以中断状态清除。

新linux kernel的GPIO subsystem则用三个软件模块来对应上面三类硬件功能:pin control subsystem(驱动pin controller硬件的软件子系统),GPIO subsystem(驱动GPIO controller硬件的软件子系统),GPIO interrupt chip driver(模块作为一个interrupt subsystem中的一个底层硬件驱动模块存在。)

底层的pin controller driver是硬件相关的模组,初始化时向pin control core模块注册pin control设备。pin control core模块是一个硬件无关模块,仅仅从用户角度给出了top level的接口函数。

pin controller driver代码分析
主要功能包括:
管理系统中所有可以控制的pin,系统初始化时,枚举所有可以控制的pin并标识。
pin multiplexing(嵌入式处理器提供功能)。管理pin的复用。对于SOC,引脚除了配置成普通的GPIO之外,若干个引脚可以组成一个pin group,形成特定的功能。pin control subsystem要管理所有的pin group。
pin configuration(配置参数包括pull-up/down电阻的设定,tri-state设定,driver-strength的设定)

pin controller相关DTS描述
在pin controller node中定义pin configuration,目的是为了让client device(使用pin controller subsystem提供服务的那些设备)引用。SOC的pin controller的pin configurations包括两类,一类是定义pin bank,另一类时定义功能复用配置。
pin configuration定义
pin configuration是pin controller的child node,描述client device使用的一组pin配置信息。
#gpio-cells属性是一个GPIO controller的属性,描述需要多少个cell描述一个GPIO。
samsung,pin定义了一个pin configuration所设计的引脚定义。
pinctrl-names定义了一个pin state(使用一组pin,同时处于某种状态,始于一个具体的设备功能)。state的定义和电源管理关系密切。state有两种(一种是pinctrl-names定义的字符串列表,一种是ID)。
pinctrl-x是一个句柄(phandle)列表,每个句柄指向一个pin configuration。

pin controller driver初始化
1 注册pin control device
reg属性描述pin controller硬件的地址信息,compatible属性用来描述pin controller的programming model。该属性的值是string list,每个string是一个model。这些字符串列表被操作系统用来选择哪一个pin controller driver来驱动该设备。
软件提供一个方案将各种硬件信息(total有多少个可控的pin,多少bank,pin的复用情况以及pin的配置情况)注册到pin control subsystem
2 注册pin controller driver
__init samsung_pinctrl_drv_register
platform_driver_register()
3 probe过程(driver初始化过程)
bus、driver、device。对于platform类型的bus,铁三角数据(platform_bus_type、struct platform_device、struct platform_driver)。将driver注册到系统,剩余交给统一设备模型完成。
每增加一个platform_driver,platform_bus_type都会启动scan过程,让新加入的driver扫描整个platform bus上的device链表,看是否有device让该driver驱动。
各个具体硬件的pin controller可能各不相同,但是可以抽取拥有共同的部分来形成一个HW independent的数据结构,这个数据就是pin controller描述符,在core driver中用struct pinctrl_desc表示。
初始化过程核心是low level的driver定义一个pinctrl_desc,设定pin的相关定义和callback函数,注册到pin control subsystem。用引脚描述符描述一个pin。在pin control subsystem,struct pinctrl_pin_desc(引脚描述符)用来描述一个可以控制的引脚。
struct device基类,struct pinctrl_dev和struct platform_device是派生类。
对于SOC,其引脚除了配置成普通GPIO外,若干个引脚组成pin group。
pin bank的信息只能封装在low level的samsung pin controller driver中。
ctrl -> base表示本pin controller中的pin ID的起始值。
gpiolib_register函数九十八各个bank代表的gpio chip注册到GPIO subsystem。pinctrl_register函数的主要功能是将本pin controller注册到pin controller subsystem。

pin controller描述符包含三类操作函数:pctlops是全局控制函数,pmxops是复用引脚相关的操作函数,confops操作函数是配置引脚的特性(pull-up/down)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gpio相关介绍 的相关文章

  • 【Hadoop】Java API 测试

    目录 一 环境配置 二 eclipse环境设置 三 代码编写 1 引入库 2 Test 3 成功界面 总结 一 环境配置 准备文件 jar包和Windows版本的hadoop2 7 4 复制 Windows版本的hadoop2 7 4文件中
  • 3789 隐藏字符串(枚举 + 递推)

    1 问题描述 给定一个由小写字母构成的字符串 s 我们称字符串 t 隐藏于字符串 s 中 如果它满足 存在一个字符串 s 的子序列 与其一一对应 该子序列的各个元素的下标可以构成一个等差序列 例如 字符串 aab 就隐藏于字符串 aaabb
  • 混淆矩阵,准确率,精确率,召回率,F1值,ROC/AUC曲线的理解

    在机器学习中 对一个模型的学习能力好坏的评估 往往人为判断不容易直接得到结果 这时候就可以根据一些数据指标进行分析评估 对模型 分类器 学习器 的泛化能力进行评估 有衡量模型泛化能力的评价标准 被称为性能度量 性能度量反应了人物需求 在对比

随机推荐

  • ry-ui.js

    调用方式 property function 属性 功能 通用js方法封装处理 Copyright c 2019 ruoyi 当前table相关信息 var table config 当前实例配置 options 设置实例配置 set fu
  • 企业通用人工智能时代已经开启,使用 GPT-4、llama2 和 LangChain 构建的应用程序将如何改变一切

    内容 简介 摘要 第一部分 企业 IT 50 年历史 第二部分 企业 AGI 黎明之前 第三部分 2023 年及以后的企业 AGI 之路 第四部分 我可能错的地方以及为什么它不重要 第五部分 你可以做些什么来准备 每个工作职能都会演变或消失
  • 用audition让声音更加好听

    用audition让声音更加好听 用audition让声音更加好听 用audition让声音更加好听 用audition打声音 点击如下图 选择如下 参数均衡器 把曲线弄成 V 字形 就很好听了 记得在导出之前要点击 应用 这样才生效 如下
  • 服务器硬件测试 如何查看系统信息及测试使用工具

    硬件长稳 一 查看硬件信息 sar sar命令 好一个大宝剑 7750783的技术博客 51CTO博客超全 使用 yum install sysstat 命令安装 sar命令来对系统作一个了解 该命令是系统维护的重要工具 主要帮助我们掌握系
  • 【小5聊】Postman设置环境变量之不同的IP或域名切换变量

    1 点击右上角的齿轮 2 添加环境变量 设置一个名称 比如本地环境 3 点击本地环境 进入添加参数变量和值 4 选择本地环境变量 5 点击请求即可 一句话一感想一心情 版本更新 增加测颜值推荐图文 来体验下句子的魅力
  • 李航感知机对偶形式python代码

    author xinxinzhang import numpy as np def loadData 加载数据 X np mat 3 3 4 3 1 1 Y 1 1 1 return X Y def Gram X 计算Gram矩阵 m n
  • Elasticsearch检索分类深入详解—基础篇

    题记 Elasticsearch中当我们设置Mapping 分词器 字段类型 完毕后 就可以按照设定的方式导入数据 有了数据后 我们就需要对数据进行检索操作 根据实际开发需要 往往我们需要支持包含但不限于以下类型的检索 1 精确匹配 类似m
  • apisix攻击面

    0x00 APISIX 运行环境安装编译 openssl openresty configure prefix usr local openresty with pcre jit with ipv6 without http redis2
  • JSONException: syntax error, expect [, actual string, pos 0, fieldName null

    通过接口拿到了json字符串 然后使用下面的方式解析报错 JSONArray parseArray JSON toJSONString data getAuditDetail 明明是符合规范的格式 但是 后来发现问题的根源就是json字符串
  • javascript 去掉小数末尾多余的零

    最近做项目需要对金额进行千分位处理的同时 保留多位小数 但是 小数部分不得为零 let num1 995092130000000 100000000000 let res1 num1 toFixed 12 document write re
  • python 函数的基础操作,看完大家都可以创建函数 ^o^/

    目录 函数简介 函数返回结果的两种方法 形参的三种类型 必选参数 默认参数 不定长参数 函数返回值 return 内置函数 函数简介 在python里什么是函数 函数又被称为方法 是指某一段聚合在一起 做特定的事情的代码 创建一个函数需要哪
  • typora使用picgo配置sftp上传图片

    mdftp 上传到uploadPath这个目录下 host 0 0 0 0 port 22 username root password uploadPath uploads year month fullName 返回的图片链接为 url
  • AcWing 1353. 滑雪场设计

    农夫约翰的农场上有 N 个山丘 每座山的高度都是整数 在冬天 约翰经常在这些山上举办滑雪训练营 不幸的是 从明年开始 国家将实行一个关于滑雪场的新税法 如果滑雪场的最高峰与最低峰的高度差大于17 国家就要收税 为了避免纳税 约翰决定对这些山
  • idea中 git版本回退

    1 版本回退 之 Reset Type 有四种 1 1 soft 移动本地库HEAD指针 意思就是 回滚后 仅仅是把本地库的指针移动了 而暂存区和你本地的代码是没有做任何改变的 而你上次改动已提交committed到本地库的代码显示是绿色即
  • 《数值分析》-- 拉格朗日插值

    文章目录 问题 一 拉格朗日插值基函数 二 拉格朗日插值多项式 三 n次Lagrange插值多项式余项 习题 总结 问题 一 拉格朗日插值基函数 n 1时一次基函数 两点线性插值问题 问题 即已知函数 f x 在点 x 0 x 0
  • 88. 合并两个有序数组 golang

    88 合并两个有序数组 给你两个有序整数数组 nums1 和 nums2 请你将 nums2 合并到 nums1 中 使 nums1 成为一个有序数组 说明 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 你可以假设 nu
  • 驱动接口函数调用过程

    本文就来揭秘一下到底一个驱动的接口函数是如何被调用的 首先我们来反汇编读驱动的程序 跳转到 libc read 发现他把r7赋值给3 3是传过去的参数 然后调用svc指令 进入内核态相应的入口 接下来就已经进入内核态 入口函数中将存入r7中
  • Windows 10 更新后无法安装共享打印机(0x0000011b)

    windows 10 前段时间更新之后突然无法连接共享打印机 出现报错0x0000011b的错误 很多人都是用卸载补丁KB5005569 KB5005573 KB5005568 KB5005566 KB5005565 这确实能暂时解决问题
  • 原生微信小程序 计算属性 wxs

    原生微信小程序 计算属性 wxs WXS官方文档 WXS 不依赖于运行时的基础库版本 可以在所有版本的小程序中运行 WXS 与 JavaScript 是不同的语言 有自己的语法 并不和 JavaScript 一致 WXS 的运行环境和其他
  • gpio相关介绍

    GPIO 通用输入输出端口 gpio的基本输出功能由STM32控制引脚输出高 低电平 实现开关控制 最基本的输入功能是检测外部输入电平 gpio工作模式 输入模式 上拉 下拉 浮空 在输入模式中 施密特触发器打开 输出被禁止 数据寄存器每隔