GPIO接口简介
什么是GPIO?
GPIO(通用目的输入/输出)是一种灵活的软件控制的数字信号。它们由许多种类型的芯片提供,并且对于使用嵌入式和定制硬件的Linux开发人员来说非常熟悉。每个GPIO代表连接到特定引脚或Ball Grid Array(BGA)封装上的一个位,或者"球"。电路板原理图显示了外部硬件连接到哪些GPIO上。驱动程序可以编写成通用的,以便板级设置代码将这些引脚配置数据传递给驱动程序。
GPIO的功能和用途
GPIO的功能因系统而异,常见的用途包括:
- 输出值可写入(高=1,低=0)。某些芯片还具有关于如何驱动该值的选项,例如只驱动一个值,支持其他值的"或线"和类似方案(特别是"开漏"信号)。
- 输入值同样可读取(1,0)。某些芯片支持读取配置为"输出"的引脚,这在"或线"情况下非常有用(支持双向信号传输)。GPIO控制器可能具有输入去抖动逻辑,有时具有软件控制。
- 输入通常可以用作IRQ信号,通常是边沿触发,但有时是电平触发。这些IRQ可以配置为系统唤醒事件,以从低功耗状态唤醒系统。
- 通常,GPIO可以根据不同的产品板需要配置为输入或输出;也存在单向的GPIO。
- 大多数GPIO可以在持有自旋锁的情况下访问,但通过串行总线访问的GPIO通常不能。某些系统支持两种类型。
在给定的电路板上,每个GPIO用于一个特定的目的,例如监视MMC/SD卡的插入/拔出、检测卡的写保护状态、驱动LED、配置收发器、位操作串行总线、触发硬件看门狗、检测开关等等。
常见GPIO属性
以下是常见的GPIO属性:
- 高活动和低活动:GPIO的信号在到达目的地之前可能会被反转,或者设备可能决定对"活动"的定义有不同的约定。为了让驱动程序只需要关注逻辑信号而不需要关注线路电平上发生的变化,可以将GPIO定义为高活动("1"表示"活动",默认值)或低活动("0"表示"活动")。
- 开漏和开源:有时,共享信号需要使用"开漏"(只有低信号电平实际驱动)或"开源"(只有高信号电平驱动)信号。这些术语适用于CMOS晶体管;TTL使用"开漏"。上拉或下拉电阻引起高或低信号电平。这有时被称为"与线";或者更实际地说,从负逻辑(低=true)的角度来看,这是一个"或线"。
总结
GPIO是一种灵活的软件控制的数字信号,用于连接外部硬件和处理器。它们在嵌入式和定制硬件开发中非常常见,可以用于各种用途,如驱动LED、检测开关、配置收发器等。GPIO具有不同的属性,如高活动/低活动和开漏/开源,这些属性可以根据具体需求进行配置。