Rockchip Developer Guide RK805
User Manual:
Open the PDF directly: View PDF
.
Page Count: 11
| Download | |
| Open PDF In Browser | View PDF |
RK805
开发指南
发布版本:1.0
作者邮箱:chenjh@rock-chips.com
日期:2018.05
文档密级:公开资料
前言
概述
1
本文档主要介绍RK805的各个子模块,介绍相关概念、功能、dts配置和一些常见问题的分析定位。
产品版本
芯片名称
内核版本
RK805
3.10、 4.4
读者对象
本文档(本指南)主要适用于以下工程师:
技术支持工程师
软件开发工程师
修订记录
日期
版本
作者
修改说明
2017.05.28
V1.0
陈健洪
初稿
RK805
开发指南
1 基础
1.1 概述
1.2 功能
1.3 芯片引脚功能
1.4 重要概念
1.5 上电条件和时序
2 配置
2.1 驱动和menuconfig
3.10内核配置
4.4内核配置
2.2 DTS配置
3.10内核配置
4.4内核配置
2.3 函数接口
3 Debug
3.10内核
4.4内核
1
基础
1.1
概述
RK805 是一款高性能 PMIC,RK805集成4个大电流DCDC、3个LDO、1个RTC、可调上电时序等功能。
系统中各路电源总体分为两种:DCDC和LDO。两种电源的总体特性如下(详细资料请自行搜索):
1. DCDC:输入输出压差大时,效率高,但是存在纹波比较大的问题,成本高,所以大压差,大电流负载时使
用。一般有两种工作模式。PWM模式:纹波瞬态响应好,效率低;PFM模式:效率高,但是负载能力差。
2. LDO:输入输出压差大时,效率低,成本低,为了提高LDO的转换效率,系统上会进行相关优化如:LDO输
出电压为1.1V,为了提高效率,其输入电压可以从VCCIO_3.3V的DCDC给出。所以电路上如果允许尽量将
LDO接到DCDC输出回路,但是要注意上电时序。
1.2
功能
从使用者的角度看,RK805的功能概况起来可以分为4个部分:
1. regulator功能:控制各路DCDC、LDO电源状态;
2. rtc功能:提供时钟计时、定时等功能;
3. gpio功能:out1和out2两个推挽输出引脚(只能output),可当普通gpio使用;
4. pwrkey功能:检测power按键的按下/释放,可以为AP节省一个gpio。
1.3
芯片引脚功能
RK805-pins-list
下面描述中,SLEEP和INT引脚需要重点关注:
RK805-pins-function-1
RK805-pins-function-2
1.4
重要概念
I2C地址
7位从机地址:0x18
PMIC有3种工作模式
1. PMIC normal模式
系统正常运行时PMIC处于normal模式,此时pmic_sleep为低电平。
2. PMIC sleep模式
系统休眠时需要待机功耗尽量低,PMIC会切到sleep模式减低自身功耗,这时候一般会降低某些路的输出电
压,或者直接关闭输出,这可以根据实际产品需求进行配置。系统待机时AP通过I2C指令把pmic_sleep配置成
sleep模式,然后拉高pmic_sleep即可让PMIC进入sleep 状态;当SoC唤醒时pmic_sleep恢复为低电平,
PMIC退出休眠模式。
3. PMIC shutdown模式
当系统进入关机流程的时候,PMIC需要完成整个系统的电源下电操作。AP通过I2C指令把pmic_sleep配置成
shutdown模式,然后拉高pmic_sleep即可让PMIC进入shutdown状态。
pmic_sleep引脚
常态为低电平,PMIC处于normal模式。当引脚拉高的时候会切换到sleep或者shutdown的模式。
pmic_int 引脚
常态为高电平,当有中断产生的时候变为低电平。如果中断没有被处理,则会一直维持低电平。
out1/out2引脚
这两个引脚可以当普通的gpio使用(推挽输出),但是只有gpio输出模式。
pmic_pwron引脚
pwrkey的功能需要硬件上将power按键接到这个引脚,驱动通过这个引脚来判断按下/释放。
各路DCDC的工作模式
DCDC有PWM(也叫 force PWM)、PFM模式,但是PMIC有一种模式会动态切换PWM、PFM,这就是我们
通常所说的AUTO模式。PMIC支持 PWM、AUTO PWM/PFM两种模式,AUTO模式效率高但是纹波瞬态响应
会差。出于系统稳定性考虑,运行时都是设置为 PWM模式,系统进入休眠时会选择切换到AUTO
PWM/PFM。
DCDC3电压调节
DCDC3这路电源比较特殊,不能通过寄存器修改电压,只能通过外部电路的分压电阻进行调节,所以如果需
要修改电压请修改外围硬件,在Rockchip的方案上一般作为VCC_DDR使用。
DCDC和LDO的运行时电压调节范围
1. DCDC电压范围不连续:
电压范围(V)
步进值(mV)
具体档位值(V)
0.7125 ~ 1.45
12.5
0.7125、0.725、0.737.5、 .....、1.45
1.8 ~ 2.2
200
1.8、 2.0、2.2
2.3
无
2.3
2. LDO电压连续:
电压范围(V)
步进值(mV)
具体档位值(V)
0.8 ~ 3.4
100
0.8、 0.9、1.0、1.1、 1.2、 ..... 3.4
上电条件和时序
1.5
1. 上电条件
只要满足下面任意一个条件即可以实现PMIC上电:
EN信号从低电平变高电平触发
EN信号保持高电平,且RTC闹钟中断触发
EN信号保持高电平,按PWRON键触发
2. 上电时序
每款SOC平台对各路电源上电时序要求可能不一样,目前上电时序有如下情况,具体请参考最新的
datasheet:
RK805-power-start-seq
2
配置
2.1
驱动和menuconfig
内核配置
3.10
RK805驱动文件(复用RK816驱动):
1
drivers/mfd/rk816.c
2
drivers/input/misc/rk816‐pwrkey.c
3
drivers/rtc/rtc‐rk816.c
4
drivers/gpio/gpio‐rk816.c
5
drivers/regulator/rk816‐regulator.c
menuconfig里对应的宏配置:
1
CONFIG_MFD_RK816
2
CONFIG_GPIO_RK816
3
CONFIG_RTC_RK816
4
CONFIG_REGULATOR_RK816
5
CONFIG_INPUT_RK816_PWRKEY
内核配置
4.4
RK805驱动文件:
1
drivers/mfd/rk808.c
2
drivers/input/misc/rk8xx‐pwrkey.c
3
drivers/rtc/rtc‐rk808.c
4
drivers/gpio/gpio‐rk8xx.c
5
drivers/regulator/rk818‐regulator.c
6
drivers/clk/clk‐rk808.c
menuconfig里对应的宏配置:
1
CONFIG_MFD_RK808
2
CONFIG_RTC_RK808
3
CONFIG_GPIO_RK8XX
4
CONFIG_REGULATOR_RK818
5
CONFIG_INPUT_RK8XX_PWRKEY
6
CONFIG_COMMON_CLK_RK808
2.2 DTS
配置
内核配置
3.10
DTS的配置包括:I2C挂载、主体、regulator、rtc、poweroff等部分。
1
&i2c1 {
2
rk805: rk805@18 {
3
reg = <0x18>;
4
status = "okay";
5
6
};
};
7
8
#include "../../../arm/boot/dts/rk805.dtsi"
9
&rk805 {
10
gpios = <&gpio2 GPIO_A6 GPIO_ACTIVE_HIGH>, <&gpio2 GPIO_D2 GPIO_ACTIVE_LOW>;
11
rk805,system‐power‐controller;
12
gpio‐controller;
13
#gpio‐cells = <2>;
14
15
rtc {
16
17
status = "disabled";
};
18
19
20
regulators {
rk805_dcdc1_reg: regulator@0 {
21
regulator‐name = "vdd_logic";
22
regulator‐min‐microvolt = <700000>;
23
regulator‐max‐microvolt = <1500000>;
24
regulator‐initial‐mode = <0x1>;
25
regulator‐initial‐state = <3>;
26
regulator‐boot‐on;
27
regulator‐always‐on;
28
regulator‐state‐mem {
29
regulator‐state‐mode = <0x2>;
30
regulator‐state‐enabled;
31
regulator‐state‐uv = <1000000>;
32
};
33
};
34
rk805_dcdc2_reg: regulator@1 {
35
.............
36
};
37
rk805_dcdc3_reg: regulator@2 {
38
39
.............
};
.................................
40
.................................
41
};
42
};
1. I2C挂载
整个完整的rk805节点挂在对应的i2c节点下面,并且配置status = "okay";
2. 主体部分
不可修改部分
1
rk805,system‐power‐controller:声明RK805具备管理系统下电的功能;
2
gpio‐controller:声明RK805具有GPIO的功能;
3
#gpio‐cells:使用者引用RK805的GPIO时需要指定的参数个数;
说明:如果某个节个需要引用RK805的GPIO进行使用,引用格式如下:
gpios = <&rk805 0 GPIO_ACTIVE_LOW>; 第一个参数: &rk805固定,不可改动; 第二个参数: 引用rk805
的哪个gpio,只能是0或者1,其中0:out1, 1:out2; 第三个参数: gpio的极性。
可修改部分
1
gpios:指定pmic_int(第一个)和pmic_sleep(第二个)引脚;
3. regulator部分
regulator-name : 电源名字,建议和硬件图上保持一致,使用regulator_get接口时需要匹配这个名字;
regulator-min-microvolt :运行时可调节的最小电压;
regulator-max-microvolt :运行时可调节的最大电压;
regulator-initial-mode :运行时DCDC工作模式,一般配置为1。 1:force pwm,2:auto pwm/pfm;
regulator-state-mode : 休眠时DCDC工作模式,一般配置为2。1:force pwm, 2:auto pwm/pfm;
regulator-initial-state :suspend时的模式,必须配置成3;
regulator-boot-on :存在这个属性时,在注册regulator的时候就会使能这路电源;
regulator-always-on :存在这个属性时,运行时不允许关闭这路电源且会在注册的时候使能这路电源;
regulator-state-enabled :休眠时保持上电状态,想要关闭该路电源,则改成”regulator-state-disabled”;
regulator-state-uv :休眠不断电情况下的待机电压。
说明:
如果regulator-min-microvolt和regulator-max-microvolt的电压相等,则在注册这个regulator的时候系统框架默
认会把这个电压设置下去并使能这路电源,不需要使用者干预。
如果regulator-boot-on或者regulator-always-on存在,则系统框架在注册这路regulator的时候默认会进行
enable,此时的这路regulator的电压有2种情况:如果regulator-min-microvolt和regulator-max-microvolt的电
压相等,则系统框架会把这路电压设置为当前这个电压值;如果regulator-min-microvolt和regulator-maxmicrovolt的电压不相等,则此时的电压是PMIC的本身的硬件默认上电电压。
4. rtc部分
如果不想使能RTC的功能(如box产品上),则需要像上面那样增加节点,显式指明为status = "disabled"。如果需
要使能的的话则可以把整个RTC节点去掉或者设置状态为status = "okay"即可。
5. poweroff部分
1
gpio_poweroff {
2
compatible = "gpio‐poweroff";
3
gpios = <&gpio2 GPIO_D2 GPIO_ACTIVE_HIGH>;
4
status = "okay";
5
};
因为RK805支持拉高pmic_sleep引脚进行整个PMIC的下电,所以需要在根节点下增加这个节点。其中gpios是可改
部分,用于指明pmic_sleep引脚。
内核配置
4.4
DTS的配置包括:i2c挂载、主体、rtc、pwrkey、gpio、regulator等部分。
1
&pinctrl {
2
pmic {
3
pmic_int_l: pmic‐int‐l {
4
rockchip,pins =
5
<2 6 RK_FUNC_GPIO &pcfg_pull_up>;
6
7
8
/* gpio2_a6 */
};
};
};
9
10
&i2c1 {
11
status = "okay";
12
rk805: rk805@18 {
13
compatible = "rockchip,rk805";
14
status = "okay";
15
reg = <0x18>;
16
interrupt‐parent = <&gpio2>;
17
interrupts = <6 IRQ_TYPE_LEVEL_LOW>;
18
pinctrl‐names = "default";
19
pinctrl‐0 = <&pmic_int_l>;
20
rockchip,system‐power‐controller;
21
wakeup‐source;
22
gpio‐controller;
23
#gpio‐cells = <2>;
24
rtc {
25
status = "disabled";
26
};
27
pwrkey {
28
status = "disabled";
29
};
30
gpio {
31
status = "okay";
32
};
33
regulators {
34
compatible = "rk805‐regulator";
35
status = "okay";
36
#address‐cells = <1>;
37
#size‐cells = <0>;
38
vdd_logic: RK805_DCDC1@0 {
39
regulator‐compatible = "RK805_DCDC1";
regulator‐name = "vdd_logic";
40
regulator‐name = "vdd_logic";
41
regulator‐min‐microvolt = <712500>;
42
regulator‐max‐microvolt = <1450000>;
43
regulator‐initial‐mode = <0x1>;
44
regulator‐ramp‐delay = <12500>;
45
regulator‐boot‐on;
46
regulator‐always‐on;
47
regulator‐state‐mem {
48
regulator‐mode = <0x2>;
49
regulator‐on‐in‐suspend;
50
regulator‐suspend‐microvolt = <1000000>;
51
};
52
};
53
54
vdd_arm: RK805_DCDC2@1 {
55
.................
56
};
57
vcc_ddr: RK805_DCDC3@2 {
58
.................
59
};
60
.............................
61
};
62
63
};
};
1. i2c挂载
整个完整的rk805节点挂在对应的i2c节点下面,并且配置status = "okay";
2. 主体部分
不可修改:
1
compatible = "rockchip,rk805";
2
reg = <0x18>;
3
rockchip,system‐power‐controller;
4
wakeup‐source;
5
gpio‐controller;
6
#gpio‐cells = <2>;
可修改(按照pinctrl规则)
1
interrupt‐parent:pmic_int隶属于哪个gpio;
2
interrupts:pmic_int在interrupt‐parent的gpio上的引脚索引编号和极性;
3
pinctrl‐names:不修改,固定为 "default";
4
pinctrl‐0:引用pinctrl里定义好的pmic_int引脚;
3. rtc、pwrkey、gpio
如果menuconfig选中了这几个模块,但是实际又不需要使能这几个驱动,那么可以在dts里增加rtc、pwrkey、
gpio节点,并且显式指明状态为status = "disabled",这样就不会使能驱动,但是开机信息会有错误log报出,可以
忽略;如果要使能驱动,则可以去掉相应的节点,或者设置状态为status = "okay"。
4. regulator
regulator-compatible :驱动注册时需要匹配的名字,不能改动,否则会加载失败;
regulator-name :电源的名字,建议和硬件图上保持一致,使用regulator_get接口时需要匹配这个名字;
regulator-min-microvolt :运行时可以调节的最小电压;
regulator-max-microvolt :运行时可以调节的最大电压;
regulator-initial-mode :运行时DCDC的工作模式,一般配置为1。 1:force pwm,2:auto pwm/pfm;
regulator-mode :休眠时DCDC的工作模式,一般配置为2。1:force pwm, 2:auto pwm/pfm;
regulator-initial-state :suspend时的模式,必须配置成3;
regulator-boot-on :存在这个属性时,在注册regulator的时候就会使能这路电源;
regulator-always-on :存在这个属性时,表示运行时不允许关闭这路电源且会在注册的时候使能这路电源;
regulator-ramp-delay :DCDC的电压上升时间,固定配置为12500;
regulator-on-in-suspend :休眠时保持上电状态,想要关闭该路电源,则改成”regulator-off-in-suspend”;
regulator-suspend-microvolt :休眠不断电情况下的待机电压。
2.3
函数接口
如下几个接口基本可以满足日常使用,包括regulator开、关、电压设置、电压获取等:
1. 获取regulator:
1
struct regulator *regulator_get(struct device *dev, const char *id)
dev默认填写NULL即可,id对应dts里的regulator-name属性。
2. 释放regulator
1
void regulator_put(struct regulator *regulator)
3. 打开regulator
1
int regulator_enable(struct regulator *regulator)
4. 关闭regulator
1
int regulator_disable(struct regulator *regulator)
5. 获取regulator电压
1
int regulator_get_voltage(struct regulator *regulator)
6. 设置regulator电压
1
int regulator_set_voltage(struct regulator *regulator, int min_uV, int max_uV)
传入的参数时保证 min_uV = max_uV,由调用者保证。
7. 范例
1
struct regulator *rdev_logic;
2
3
rdev_logic = regulator_get(NULL, "vdd_logic");
// 获取vdd_logic
4
regulator_enable(rdev_logic);
// 使能vdd_logic
5
regulator_set_voltage(rdev_logic, 1100000, 1100000);
// 设置电压1.1v
6
regulator_disable(rdev_logic);
// 关闭vdd_logic
7
regulator_put(rdev_logic);
// 释放vdd_logic
3 Debug
3.10
内核
因为PMIC涉及的驱动在使用逻辑上都不复杂,重点都体现在最后的寄存器设置上。所以目前常用的debug方式就
是直接查看rk805的寄存器,通过如下节点:
1
/sys/rk816/rk816_test
读寄存器:
1
echo r [addr]
> /sys/rk816/rk816_test
写寄存器:
1
echo w [addr] [value] > /sys/rk816/rk816_test
范例:
1
echo r 0x2f > /sys/rk816/rk816_test
// 读取0x2f寄存器的值,为0x9b
1
echo w 0x2f 0x9c > /sys/rk816/rk816_test
// 设置0x2f寄存器的值为0x9c
一般写操作执行完之后最好再读一遍确认是否写成功。
内核
4.4
命令格式同3.10内核一样,只是节点路径不同,4.4内核上的debug节点路径是:
1
/sys/rk8xx/rk8xx_dbg
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.4 Linearized : No Creator : Typora Producer : Typora Create Date : 2018:06:26 14:34:43 Modify Date : 2018:06:26 14:34:43 Page Count : 11 Page Mode : UseOutlines Warning : [Minor] Ignored duplicate Info dictionaryEXIF Metadata provided by EXIF.tools