如何设置通过PMU的linux gpio子系统来唤醒系统

linux内核中的GPIO系统之(1):软件框架
作为一个工作多年的系统工程师,免不了做两件事情:培训新员工和给新员工分配任务。对于那些刚刚从学校出来的学生,一般在开始的时候总是分配一些非常简单的任务,例如GPIO driver、LED driver。往往CPU datasheet的关于GPIO或者IO ports的章节都是比较简单的,非常适合刚入行的工程师。虽然GPIO子系统相关的硬件比较简单,没有复杂的协议,不过,对于软件抽象而言,其分层次的软件思想是每个嵌入式软件工程师需要掌握的内容。
我更倾向使用GPIO系统这个名字来代替GPIO driver这个名字,GPIO driver仅仅包含了pin signal状态控制和读取的内容,而GPIO系统包括了pin multiplexing、pin configuration、GPIO control、GPIO interrupt control等内容。本文主要是以3.14内核作为例子,讲述linux kernel中GPIO系统的软件框架。
二、GPIO相关硬件有哪些差异
嵌入式工程师总是要处理各种各样的target board,每个target board上的GPIO总是存在不同,例如:
1、和CPU的连接方式不同
对于ARM的嵌入式硬件平台,SOC本身可以提供大量的IO port,SOC上的GPIO controller是通过SOC的总线(AMBA)连接到CPU的。对于嵌入式系统而言,除了SOC的IO port,一些外设芯片也可能会提供IO port,例如:
(1)有些key controller芯片、codec或者PMU的芯片会提供I/O port
(2)有些专用的IO expander芯片可以扩展16个或者32个GPIO
从硬件角度看,这些IO和SOC提供的那些IO完全不同,CPU和IO expander是通过I2C(也有可能是SPI等其他类型的bus)连接的,在这种情况下,访问这些SOC之外的GPIO需要I2C的操作,而控制SOC上的GPIO只需要写寄存器的操作。不要小看这个不同,写一个SOC memory map的寄存器非常快,但是通过I2C来操作IO就不是那么快了,甚至,如果总线繁忙有可能阻塞当前进程,这种情况下,内核同步机制必须有所区别(如果操作GPIO可能导致sleep,那么同步机制不能采用spinlock)。
2、访问方式不同
SOC片内的GPIO controller和SOC片外的IO expander的访问当然不一样,不过,即便都是SOC片内的GPIO controller,不同的ARM芯片,其访问方式也不完全相同,例如:有些SOC的GPIO controller会提供一个寄存器来控制输出电平。向寄存器写1就是set high,向寄存器写0就是set low。但是有些SOC的GPIO controller会提供两个寄存器来控制输出电平。向其中一个寄存器写一就是set high,向另外一个寄存器写一就是set low。
3、配置方式不同
即便是使用了同样的硬件(例如都使用同样的某款SOC),不同硬件系统上GPIO的配置不同。在一个系统上配置为输入,在另外的系统上可能配置为输出。
4、GPIO特性不同。这些特性包括:
(1)是否能触发中断。对一个SOC而言,并非所有的IO port都支持中断功能,可能某些处理器只有一两组GPIO有中断功能。
(2)如果能够触发中断,那么该GPIO是否能够将CPU从sleep状态唤醒
(3)有些有软件可控的上拉或者下拉电阻的特性,有的GPIO不支持这种特性。在设定为输入的时候,有的GPIO可以设定debouce的算法,有的则不可以。
5、多功能复用
有的GPIO就是单纯的作为一个GPIO出现,有些GPIO有其他的复用的功能。例如IO expander上的GPIO只能是GPIO,但是SOC上的某个GPIO除了做普通的IO pin脚,还可以是SPI上clock信号线。
三、硬件功能分类
ARM based SOC的datasheet中总有一个章节叫做GPIO controller(或者I/O ports)的章节来描述如何配置、使用SOC的引脚。虽然GPIO controller的硬件描述中充满了大量的寄存器的描述,但是这些寄存器的功能大概分成下面三个类别:
1、有些硬件逻辑是和IO port本身的功能设定相关的,我们称这个HW block为pin controller。软件通过设定pin controller这个硬件单元的寄存器可以实现:
(1)引脚功能配置。例如该I/O pin是一个普通的GPIO还是一些特殊功能引脚(例如memeory bank上CS信号)。
(2)引脚特性配置。例如pull-up/down电阻的设定,drive-strength的设定等。
2、如果一组GPIO被配置成SPI,那么这些pin脚被连接到了SPI controller,如果配置成GPIO,那么控制这些引脚的就是GPIO controller。通过访问GPIO controller的寄存器,软件可以:
(1)配置GPIO的方向
(2)如果是输出,可以配置high level或者low level
(3)如果是输入,可以获取GPIO引脚上的电平状态
3、如果一组gpio有中断控制器的功能,虽然控制寄存器在datasheet中的I/O ports章节描述,但是实际上这些GPIO已经被组织成了一个interrupt controller的硬件block,它更像是一个GPIO type的中断控制器,通过访问GPIO type的中断控制器的寄存器,软件可以:
(1)中断的enable和disable(mask和unmask)
(2)触发方式
(3)中断状态清除
四、如何通过软件抽象来掩盖硬件差异
传统的GPIO driver是负责上面三大类的控制,而新的linux kernel中的GPIO subsystem则用三个软件模块来对应上面三类硬件功能:
(1)pin control subsystem。驱动pin controller硬件的软件子系统。
(2)GPIO subsystem。驱动GPIO controller硬件的软件子系统。
(3)GPIO interrupt chip driver。这个模块是作为一个interrupt subsystem中的一个底层硬件驱动模块存在的。本文主要描述前两个软件模块,具体GPIO interrupt chip driver以及interrupt subsystem请参考本站其他相关文档。
1、pin control subsystem block diagram
下图描述了pin control subsystem的模块图:
底层的pin controller driver是硬件相关的模组,初始化的时候会向pin control core模块注册pin control设备(通过pinctrl_register这个bootom level interface)。pin control core模块是一个硬件无关模块,它抽象了所有pin controller的硬件特性,仅仅从用户(各个driver就是pin control subsystem的用户)角度给出了top level的接口函数,这样,各个driver不需要关注pin controller的底层硬件相关的内容。
2、GPIO subsystem block diagram
下图描述了GPIO subsystem的模块图:
基本上这个软件框架图和pin control subsystem是一样的,其软件抽象的思想也是一样的,当然其内部具体的实现不一样,我们会在后续的文章中描述。
原创文章,转发请注明出处。蜗窝科技。19422人阅读
PMU(power management unit)
电源管理单元。PMIC
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 什么是PMU(PMIC)
&&&&&& PMU(power management unit)就是电源管理单元,一种高集成的、针对便携式应用的电源管理方案,即将传统分立的若干类电源管理芯片,如低压差线性稳压器(LDO)、直流直流转换器(DC/DC),但现在它们都被集成到手机的电源管理单元(PMU)中,这样可实现更高的电源转换效率和更低功耗,及更少的组件数以适应缩小的板级空间,成本更低。
PMU作为消费电子(手机、MP4、GPS、PDA等)特定主芯片配套的电源管理集成单元,能提供主芯片所需要的、所有的、多档次而各不相同电压的电源,同电压的能源供给不同的手机工作单元,像处理器、射频器件、相机模块等,使这些单元能够正常工作。按主芯片需要而集成了电源管理,充电控制,开关机控制电路。包括自适应的USB-Compatible的PWM充电器,多路直流直流转换器(BuckDC-DCconverter),多路线性稳压器(LDO),Charge Pump,RTC电路,马达驱动电路,LCD背光灯驱动电路,键盘背光灯驱动电路,键盘控制器,电压/电流/温度等多路12-BitADC,以及多路可配置的GPIO。此外还整合了过/欠压(OVP/UVP)、过温(OTP)、过流(OCP)等保护电路。高级的PMU可以在USB以及外部交流适配器、锂和应用系统负载之间安全透明的分配电能。动态电源路径管理
(DPPM) 在系统和电池充电之间共享交流适配器电流,并在系统负载上升时自动减少充电电流。调整充电电流和系统电流分配关系,最大程度保证系统的正常工作,当通过 USB 端口充电时,如果输入电压降至防止 USB 端口崩溃的阈值以下,则基于输入电压的动态理 (IDPM) 便减少输入电流。当适配器无法提供峰值系统电流时,电源路径架构还允许电池补偿这类系统电流要求。
&&&&&& LDO是利用较低的工作压差,通过负反馈调整输出电压使之保持不变的稳压器件。压差小的话用LDO,带可关断功能便于电源管理。压差大的还是用DC-DC效率高。
按照系统需要能提供多种电压的电源,这些电压是电压调整所需的,另外这些电源还可以与功能同步开、关这些供电电压,以支持电压域切换。
PMU一般是和主芯片绑定定制的。因为它要配合CPU的上电时序。某些电压的上电顺序和之间的时间间隔有先后关系和时间要求。这个是掩模好的。PMU其实是带有掩模程序的专用电源控制器。要32.768KHZ的晶体和19.2M的晶体.待机状态是32.768KHZ的晶体工作,正常工作是19.2M的主晶体工作。
&&&&&& 靠上电池后PMIC进入待机状态,PMU由32.768KHZ的晶体提供时钟,按POWER按键触发开机后,安装定制的开机顺序将对应的LDO,DC-DC打开,19.2M的主时钟工作,CPU电源正常后,输出设置给CPU,输出复位信号给CPU,释放复位信号,CPU开始启动。CPU输出PS_HOLD信号将PMIC的状态处于工作状态。(关机的时候CPU将PS_HOLD拉低电,PMIC关闭进入关机状态)
CPU工作正常后,可以通过I2C接口对PMIC的各个模块进行控制。比如系统变频的时候,不同的工作频率要调整core电压到对应的电压。RTC时间的设置和ALARM的时钟。同时PMIC可以将异常事件产生中断信号给CPU,CPU再进行中断处理。
PMIC的电源越多,对系统的模块供电就越细,各个模块的电源受牵连就小,所以就越省电。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1581724次
积分:15857
积分:15857
排名:第625名
原创:270篇
转载:23篇
评论:155条
(1)(1)(1)(1)(7)(5)(6)(2)(1)(3)(2)(12)(1)(1)(2)(5)(13)(3)(1)(8)(1)(4)(6)(3)(5)(8)(1)(13)(4)(2)(27)(5)(5)(28)(6)(8)(3)(2)(19)(3)(7)(11)(13)(11)(15)(6)(2)个人导航设备的电源管理子系统设计
> 个人导航设备的电源管理子系统设计
个人导航设备的电源管理子系统设计
最近两年,个人导航设备(PND Personal Navigation Device)被越来越多的消费者所接受;PND的功能也日趋多样化,从单一具有导航功能发展到附加如多媒体应用的更多功能,比如通过蓝牙实现免提功能。整个PND系统由此变得越来越复杂,给设计者带来一系列新的挑战,包括如何优化系统的功耗,如何简化整个系统的设计以及如何加快产品的上市时间等。而选用合适的电源管理单元(PMU)有助于设计师解决这些问题。本文引用地址:首先采用PMU可以简化设计,节省成本。因为要优化PND的功耗必须对各个功能模块的供电进行单独控制。如果采用分立器件则需较多的GPIO来分别控制他们,而采用PMU则可以通过I2C或其他简单串行方式来控制各路电源的开关。另外很多处理器对上电时序有严格要求,这样通常需要一个小的MCU去控制各分立器件来实现上电时序;而大部分PMU可提供处理器所需的上电时序,无需再额外增加MCU。借助于PMU的这些特点,使用PMU在简化设计的同时还可节省成本。当然,这样做的好处还可以节省PCB空间,简化PCB设计。在PND系统中采用PMU还能够方便设计者进行功耗优化设计和热设计,延长电池的使用时间和防止PND内部温度过高而损坏PND。一些PMU的电源输出电压可以通过软件进行动态调整,设计者可以根据不同的应用来调整电源的输出电压。例如,在播放MP3时,可以将处理器的核电压设定为1.2V,而在计算导航路径时将核电压设定为1.35V。如果采用分立器件则核电压必须统一设定为1.35V或更高。那么在播放MP3时,处理器的核将会多消耗高达30%~50%的功耗。通常PMU还会提供一些系统的监控功能,比如监控电池的电压、PMU自身的温度等。这将进一步帮助设计者优化功耗设计和热设计。比如,PND检测到芯片温度过高则可以自动终止某些不必要的应用,如停止MP3播放或调低充电电流。除了以上提到的,在PND系统中采用PMU还可以加快产品的上市时间。由于PMU的每一路电源输出的电压和开关都可以由软件来控制,电池的充电电流的大小也可以通过软件来进行设定,同一个PMU可以用于不同的产品,软件也可以相互兼容。设计者可以节省测试,验证新器件和重写软件的时间,同时也可以避免选用新器件带来的一些风险。这些都有助于缩短产品的上市时间。PMU还呈现出一些新的发展动向,最典型的就是将一些处理功能集成进PMU当中。如何在不增加成本和不牺牲性能的情况下将电源器件与处理器件集成在同一个芯片上,对PMU的设计者存在一定的设计挑战,需要PMU的设计者同时具有丰富的电源器件设计经验和音频器件设计经验,因为电源器件特别是的噪声会显著降低音频性能。而奥地利微电子公司的AS3*、AS3658芯片就很好得解决了这些问题。在为PND选择PMU时要注意以下几点。首先,要选择一个能够满足未来1~2年应用需求的PMU。主要考虑的因素有:各电源输出电压范围和负载能力,充电器是否能支持更大容量的电池,音频的编解码器(CODEC)能否满足未来1-2年的可能的主流应用。其次,要考虑PMU是否提供一些必要的系统监控功能,比如监控电池电压、充电器输入电压、PMU芯片的温度等。第三,要考虑PMU的供应商的设计和生产能力。PMU特别是集成了音频CODEC的PMU是一个非常复杂的模拟器件,PMU供应商如果没有多年的PMU设计经验,用户将会面临很大的风险。PMU供应商是否有自己的芯片生产工厂也是一个重要的考虑因数,因为模拟器件的设计于生产工艺是密切相关的。奥地利微电子公司有多款PMU可供选择,可以满足从入门级的个人导航设备应用到高端的个人导航设备的应用。其中刚发布的AS3658就非常适合中高端PND的应用。AS3658(图1)可以满足PND中绝大部分的电源需求(包括上电时序要求)和音频处理要求,大大降低了系统的复杂度。图1:AS3658的典型应用框图。AS3658主要集成了:1. 3个500mA输出的降压型。其中一个通过外加MOSFET可以将输出电流扩展到1.6A,并支持动态电源管理功能(DVM Dynamic Voltage Management)。这三路可以分别给I/O,存储器和内核供电。2. 4个数字LDO。他们可以用来给内核,锁相环回路等供电。3.3个射频LDO。他们可以给GPS的射频、蓝牙的射频、FM收发器等供电。4. 1个5V/100mA的充电泵,可以用作LCD的5V偏压。5. 2个升压型DC/DC。其中一个与耐高压的电流源组合在一起可以用作LCD的背光电源。另外一个可以用来给驱动扬声器的功放供电或者用来提供LCD所需的正负偏压。6. 一个充电电流可达880mA的USB充电器。7. 一个输入电压可达15V的DC/DC型的充电器,该充电器也可以配置成线性的充电器,充电电流可达1A。AS3658还集成了:1. 一个高性能的音频CODEC。2. 一个双向的复位电路,复位引脚可以复位外部器件如处理器等,也可以作为AS3658复位的输入引脚来复位AS3658。3. 一个触摸屏控制器。4. 一个实时时钟(RTC)及其备份电池的充电器。实时时钟可以每秒或每分钟产生一个中断。AS3658处于关机状态下也可以用此实时时钟来使AS3658开机。另外,RTC也支持定时开机功能。5. 一些系统监控功能,如电池电压、充电器输入电压、芯片温度、看门狗、中断控制器等。6. 8组预先定义的上电时序,其中包括了目前市场上主流处理器要求的上电时序。7. 一个标准I2C接口。处理器可以通过他来实现对AS3658的控制。其中AS3658独具特色的DC/DC充电器具有较宽的输入电压范围(5~15V)。通常需要一个适配器将汽车电池的电压从12V降到5V来给PND的电池充电。而通过增加一些额外的MOSFET,AS3658充电电路的最高输入电压可以由15V提升到50V甚至更高,这样可使消费者将PND直接连到汽车(包括卡车)的点烟器电源上而不需要外部的适配器。相比线性充电器,DC/DC型的充电器还可以减少充电器的自身的功耗从而减少发热。另外,线性充电器自身的功耗绝大部分是消耗在内部的一个晶体管上,因此该晶体管的温度会非常高从而可能缩短充电器的使用寿命,也会造成PND内部局部温度过高;而DC/DC型的充电器自身的功耗是分散在几个不同的外部元器件上,所以充电器自身温升会很小。DC/DC型充电器还能够进行精确的电池剩余容量检测,充电器内部的FUEL GAUGE模块会实时监测流进或流出电池的电量,用户可以据此来精确计算电池的剩余容量。其还具备完善的充电保护和充电指示功能,包括电池过温保护和对是否有充电器插入和电池是否充满的指示功能。总结起来,与线性的充电器相比,DC/DC型充电器至少可以给设计者和用户带来三大好处。其一,能够以更大的电流来对电池充电从而缩短充电时间;其二,能够显著降低PND内部的温升,从而可以简化PND的热设计,提高PND的可靠性;其三,能够降低整个PND的成本。而AS3658高性能的CODEC(图2)则具有以下特点:1. 每一路模拟音频输入或输出的左右声道的音量多可以分别调节(32级可调)。2. 18位94dB的音频DAC。3. 14位82dB的音频ADC。模拟音频的输入可以是麦克风输入或线输入或混音器的输出。4. 多个I2S/PCM接口。I2S所需的主时钟可以由内部的PLL产生,也可以从处理器输入。同时I2S1还可以作为I2S的主设备。PCM接口可以方便地实现蓝牙免提功能。5. 混音器可以实现多种音频输入到音频输出的路径,可以实现多种应用场景。6. 5波段的音效处理模块可以有效降低对处理器性能的要求,降低播放MP3等时的功耗。图2:高性能的音频CODEC。此外,AS3658还具备完善的系统监控功能和独特的待机模式。AS3658提供丰富的系统监控功能,与中断控制器配合可以方便地实现处理器对系统的监控。其可监控充电器的状态,可监控充电器电源是否?插入或拔出,充电器是处于涓流充电,是恒流充电还是恒压充电状态,电池是否充满,电池是否过温等。其还可监控各路电源的输出是否欠压,麦克风是否连接,是否有线控按键被按下(AS3658的麦克风可实现线控功能)。还可监控AS3658芯片的结温并在过温的情况下提供必要的保护。设计者也可以通过内部的ADC实时读取芯片的结温度来实现对整个负载的动态管理。另外还可监控引起系统复位的原因。而PND可以根据不同的复位原因来决定采取什么动作。比如,在PND处于关机的状态下插入充电器电源时会使PMU上电复位从而使PND开机;但处理器可以知道是充电器插入引起的上电复位,那么处理器只需设定好充电器然后将PND置于一种低功耗模式,然后等电池充满后再将PND关机。这样,用户感觉PND还是一直处于关机状态。又比如,如果处理器发现是看门狗引起的复位(其具有看门狗功能,如果系统软件跑飞的话,看门狗可以协助恢复系统。看门狗可以通过软件的方式来触发也可以通过一个GPIO输入来触发。)那么,PND可以采取特殊的处理方法来恢复系统以减少对用户数据的破坏。现在绝大部分的PND在开机时先将代码从NAND FLASH拷贝到SDRAM然后从SDRAM中执行代码。将代码从FLASH拷贝到SDRAM需要一定的时间,通常给用户的体验是开机时间过长。AS3658提供一种功能就是可以在PND关机后关断其他的电源而保持SDRAM的电源。这样在下次开机时可以直接从SDRAM开始执行代码。当然要实现此功能还需借助AS3658的另一功能。AS3658提供一个8位的SRAM给用户使用,SRAM的内容在处于待机模式或完全关机的状态下也会保持。设计者可以用此SRAM来标记SDRAM中是否有正确的代码从而决定采用哪种启动模式:是从FLASH启动还是直接从SDRAM启动。当退出该模式时,AS3658会执行一次上电复位过程但给SDRAM供电的电源会一直保持。按开机键或插入充电器电源或任一中断发生后会使AS3658退出此待机模式。越来越多的PND设计者已经认识到PMU给他们带来的价值并开始在他们的设计中尝试使用PMU。奥地利微电子公司一直专注于为客户提供适合PND使用的PMU。除了现有产品,其还将于2008年再推出1~2款适合中低端PND应用的PMU。
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一

我要回帖

更多关于 gpiolib子系统 的文章

 

随机推荐