这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 软件与操作系统 » 学习嵌入式小白基于4412修改电源管理芯片8767电压输出

共3条 1/1 1 跳转至

学习嵌入式小白基于4412修改电源管理芯片8767电压输出

助工
2019-12-31 14:33:05     打赏

这周技术支持的时候遇到一个小伙伴,想把底板上2.8v的输出修改为3.3v,但是不知道要从哪入手,所以,法师推文的素材就又有了~~~这位小伙伴看到记得给点个赞呐~

S5M8767电源管理芯片是三星专门针对4412研发的,S5M8767提供9路BUCK和28路LDO输出,每路电压的大小可以通过软件进行设置。这里我们以迅为-4412精英底板VDD28_AF,VDD28_CAM这俩路为例。

原理图分析

在底板原理图中找到camera扩展端子,camera摄像头驱动中将这俩路电压设置为2.8v 的电压。所以在后面我们修改这俩路电压的时候要先去掉摄像的驱动。


1.jpg


通过核心板原理图可知,VDD28_AF和VDD28_CAM分别对应电源芯片 S5M8767A 的VLDO20和VLDO21。如下图所示:

2.jpg

然后我们打开8767的datasheet,找到对这俩路的描述,下图最上面的红框中,表示输出的电流是150mA,最低输出电压是0.8v,最大电压是3.95v。最下面的红框中,介绍的是默认输出电压,可以看到LDO20和LDO21,默认输出的是3.0v。如下图所示:

3.jpg

软件分析


     确定完硬件原理之后,我们知道这俩路的电压范围是0.8v到3.95v。然后我们打开内核源码里面的平台文件。


平台文件位置:


rch/arm/mach-exynos/mach-itop4412.c

然后我们找到对应ldo20和ldo21的代码,如下图所示:

4.jpg

 我们将红框的中的代码2800000修改为3950000,红框函数中的第一个参数表示8767电源芯片的第20路,第三个参数表示输出最低电压,第四个参数表示输出最高电压。


     最后我们还要在menuconfig里面将5640的驱动去掉。这样我们软件的配置就完成了。


测试


     测试代码如下:


#include <linux/init.h>

#include <linux/module.h>

#include <linux/i2c.h>

#include <linux/platform_device.h>

#include <linux/delay.h>

#include <linux/regulator/consumer.h>

#include <mach/gpio.h>

#include <plat/gpio-cfg.h>

#include <mach/regs-gpio.h>

#include <mach/regs-clock.h>

#include <linux/fs.h>

#include <linux/err.h>

struct regulator *ov_vddaf_cam_regulator = NULL;

struct regulator *ov_vdd5m_cam_regulator = NULL;

struct regulator *ov_vdd18_cam_regulator = NULL;

struct regulator *ov_vdd28_cam_regulator = NULL;

MODULE_LICENSE("Dual BSD/GPL");

MODULE_AUTHOR("iTOPEET_dz");

static int power(int flag)

{

if(1 == flag){regulator_enable(ov_vdd18_cam_regulator);

udelay(10);

regulator_enable(ov_vdd28_cam_regulator);

udelay(10);

regulator_enable(ov_vdd5m_cam_regulator); //DOVDD DVDD 1.8v

udelay(10);

regulator_enable(ov_vddaf_cam_regulator); //AVDD 2.8v

udelay(10);

}

else if(0 == flag){

regulator_disable(ov_vdd18_cam_regulator);

udelay(10);

regulator_disable(ov_vdd28_cam_regulator);

udelay(10);regulator_disable(ov_vdd5m_cam_regulator);

udelay(10);regulator_disable(ov_vddaf_cam_regulator);

udelay(10);

}

return 0 ;

}

static void power_init(void)

{

int ret;

ov_vdd18_cam_regulator = regulator_get(NULL, "vdd18_cam");

if (IS_ERR(ov_vdd18_cam_regulator)) {

printk("%s: failed to get %s\n", __func__, "vdd18_cam");

ret = -ENODEV;

goto err_regulator;}ov_vdd28_cam_regulator = regulator_get(NULL, "vdda28_2m");

if (IS_ERR(ov_vdd28_cam_regulator)) {

printk("%s: failed to get %s\n", __func__, "vdda28_2m");

ret = -ENODEV;

goto err_regulator;

}

ov_vddaf_cam_regulator = regulator_get(NULL, "vdd28_af");

if (IS_ERR(ov_vddaf_cam_regulator)) {

printk("%s: failed to get %s\n", __func__, "vdd28_af");

ret = -ENODEV;goto err_regulator;

}

ov_vdd5m_cam_regulator = regulator_get(NULL, "vdd28_cam");

if (IS_ERR(ov_vdd5m_cam_regulator)) {

printk("%s: failed to get %s\n", __func__, "vdd28_cam");

ret = -ENODEV;goto err_regulator;

}

err_regulator:

regulator_put(ov_vddaf_cam_regulator);

regulator_put(ov_vdd5m_cam_regulator);

regulator_put(ov_vdd18_cam_regulator);

regulator_put(ov_vdd28_cam_regulator);

}

static int hello_init(void)

{

power_init();

power(1);

printk(KERN_EMERG "Hello World enter!\n");

return 0;

}

static void hello_exit(void)

{

power(0);

printk(KERN_EMERG "Hello world exit!\n");

}

module_init(hello_init);

module_exit(hello_exit);

 

Makefile如下所示。

#!/bin/bash

obj-m += power_s5m8767a_test.o

KDIR := /home/topeet/android4.0/iTop4412_Kernel_3.0

PWD ?= $(shell pwd)

all:

make -C $(KDIR) M=$(PWD) modules

clean:

rm -rf *.o modules.order *.ko *mod.c Module.symvers

我们加载驱动之后,测量电压大约为3V左右,有压降,卸载驱动之后,电压为0。说明驱动运行成功,如果在自己的项目中,假如需要用到电源控制,也可以参考本例程来实现。

————————————————

版权声明:本文为CSDN博主「mucheni」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/mucheni/article/details/103781756




高工
2019-12-31 22:25:51     打赏
2楼

多谢分享的经验贴


助工
2020-01-03 10:46:50     打赏
3楼
iTOP4412开发板介绍https://www.bilibili.com/video/av74453392
iTOP4412开发板系统编程前言https://www.bilibili.com/video/av75754003
iTOP4412-fastboot烧写Androidhttps://www.bilibili.com/video/av76115803
iTOP4412-安装虚拟机软件https://www.bilibili.com/video/av75881580
iTOP4412-创建和配置虚拟机https://www.bilibili.com/video/av75881653
iTOP4412-获取并安装ubuntu操作系统https://www.bilibili.com/video/av75881774
iTOP-4412驱动教程一https://www.bilibili.com/video/av74131033
iTOP-4412驱动教程二https://www.bilibili.com/video/av74131033?p=2
iTOP-4412驱动教程三https://www.bilibili.com/video/av74131033?p=3
iTOP-4412开发板之如何扩展不同规格LCD屏幕https://www.bilibili.com/video/av75870604
itop4412-编译4412对应的uboothttps://www.bilibili.com/video/av76737204
项目实战-GPS定位简介https://www.bilibili.com/video/av78601887
项目实战-迅为实战教程介绍https://www.bilibili.com/video/av78601813
项目实战-机车导航-机车导航项目演示https://www.bilibili.com/video/av78601986
项目实战-机车导航-定制内核显示logohttps://www.bilibili.com/video/av78729131
项目实战-机车导航-修改安卓开机启动动画https://www.bilibili.com/video/av78972262
项目实战-智能家居-简介https://www.bilibili.com/video/av80835403



共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]