自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

嵌入式技术博客

寻找那些遗失的记忆

  • 博客(39)
  • 收藏
  • 关注

原创 xilinx zynq-7000 基本知识

Zynq-7000 采用可扩展式处理平台架构(Extensible Processing Platform、EPP),是 Xilinx 用 28nm HKMG工艺制成的低功耗,高性能,高扩展性的新型芯片,这款新品里面集成了 ARM CORTEX-A9 MPSOC 硬核以及相应的SOC系统。 PS: 处理系统(Processing System),就是与FPGA无关的ARM的SOC的

2015-09-01 19:12:08 22003 2

原创 h.264 基本知识

H.264是新一代的编码标准,理论依据:参照一段时间内图像的统计结果表明,在相邻几幅图像画面中,一般有差别的像素只有10%以内的点,亮度差值变化不超过2%,而色度差值的变化只有1%以内。所以对于一段变化不大图像画面,我们可以先编码出一个完整的图像帧A,随后的B帧就不编码全部图像,只写入与A帧的差别,这样B帧的大小就只有完整帧的1/10或更小。B帧之后的C帧如果变化不大,我们可以继续以参考B的方式编

2015-09-01 18:51:06 1371

原创 android 优化策略

kernel 部分:1、iRom 升级为 V2.1,支持 usb 下载、Readretry 功能,修正了 uboot0 备份的问题,如果用于 x15 需要在 TF 卡外置上拉电阻2、PMU RICOH618 + x9,bootst 用于判断启动模式(PMU\RTC 寄存器)3、item 子系统标准化,参数都在 platform_data 里面初始化,其余地方不再调用 item 接口

2015-09-01 18:45:15 1222

原创 fax 简介

一、传真机组成台式传真机由两部分组成:用于发送和接收数据的设备 — 数据终端设备(DTE),以及连接 DTE 和数据通信信道的设备 — 数据通信设备(DCE)。软件传真类似台式传真机,其组成部分分别为传真通信软件和传真调制解调器,即 DTE 为一台计算机,而 DCE 则为一个调制解调器(modem)。DCE 是在 DTE 和PSTN(公共电话网络) 之间提供传真通信的设备,其服务包括物理层

2014-04-09 19:25:52 4721

原创 ids & hdmi 原理

IDS 学习笔记1、Overlay Controller图像数据格式和4窗口融合由叠加控制器处理。叠加控制器可以根据窗口的中断生成一个窗口时隙,用户可以根据时隙中断更新帧缓冲的数据,比如:播放视频的时候。通常,视频的解码速度为 30 fps,LCD 的刷新率为 60-70 Hz,叠加控制器采用两路 PWM 定时器中断来避免潜在的风险。同步的过程如下图所示: 时隙中断同步于 PW

2014-03-11 16:44:27 11199 3

原创 ic 电源管理单元

芯片里面的电源管理电源主要功能描述如下:* 复位* 锁相环和分频器* HWCFG[2:0] 引脚信号识别和解码* 睡眠模式* 单模块电源管理* 顶层控制寄存器一、复位复位的信号源有以下几种:1、PIN_RESETN(低有效):PIN_RESETN 将会把整个芯片都恢复到默认状态2、PIN_A11STRST(低有效):PIN_A11STRST 通常连接

2013-12-05 17:48:21 3823

原创 dvfs 解析

DVFS(Dynamic Voltage and Frequency Scaling)动态电压频率调节,是一种实时的电压和频率调节技术。在 CMOS 电路中功率消耗主要可以分为动态功率消耗和静态功率消耗,公式如下: 其中 C 代表负载电容的容值,V 是工作电压,α 是当前频率下的翻转率,f为工作频率,I_dq 代表静态电流。公式的前部分代表的是动态功率消耗,后部分则代表的是静态功率消耗。从公式中可以看出,想要降低动态功率消耗可以从C、V、α、f 着手,对于软件来讲常用的调节方式只涉及到 V、f 两

2013-11-29 17:49:48 17459 1

原创 sd 协议解析

一、SD 卡特性介绍1、存储容量    a、标准容量SD存储卡(SDSC): 不大于2GB    b、大容量SD存储卡(SDHC): 大于2GB、不大于32GB    c、超大容量SD存储卡(SDXC):大于32GB、不大于2TB2、电压范围    高电压SD存储卡,电压范围为:2.7 ~ 3.6 V3、SD 存储卡可以用密码保护(CMD42

2013-11-19 19:12:29 23920 4

原创 mipi 调试经验

MIPI(moblie industry processor interface)是 2003 年由 ARM、Nokia、ST、TI 等公司成立的一个联盟(www.mipi.org)。联盟的目的是制定一套用于移动设备和消费类电子产品的接口标准,使这些设备的接口既能增加带宽、提高性能,同时又能降低成本、复杂度、功耗和EMI。MIPI主要针对下列系统部分:图像子系统(摄像头和显示器)、存储子系统、无线

2013-11-19 19:11:38 96687 28

原创 usb 接口触摸屏驱动

以前写的 USB 接口的触摸屏驱动,那段时间简单的看了下 USB 协议的一些东西,主要是 HID 相关的,代码留着作为记录:/* Created by_fire 2012.2.13*/#include #include #include #include #include #include #include #include #include #include #in

2013-11-19 19:10:38 7695 1

原创 sqlite 命令与编程

用户设置多个闹钟然后关机,闹钟在之前的实现下会响动一次,这时如果用户选择关机,则后面的闹钟都不会响动了。由此需要在关机闹钟的代码中读取当前用户设置的闹钟,并在用户选择关机时再次设置。众所周知,android 中的用户数据大都储存于 SQLite 数据库中,因此要完成此功能就需要用 c 语言去读取数据库里面信息。在刚开始学习 linux 的时候接触过 SQLite,不过一直都没有仔细用过,这次因此好

2013-11-19 19:08:13 5284

原创 uboot 命令分析(二)

1、setenv 命令用于设置环境变量,用法介绍如下# setenvsetenv - set environment variablesUsage:setenv name value ... - set environment variable 'name' to 'value ...'setenv name - delete environment variab

2013-11-19 19:07:42 18207 2

原创 看淡世间繁华...倾听心的声音...

生活和人是相对的...你怎么对待生活...生活就怎么对待你...活得精彩的人...他的心也是充满了能量的...这座城市的繁华不断的透过车窗映入脑海...心里似乎充满了向往...却不得不面对心里的声音...你不属于这里...每当纠结于此...不竟迷茫...人生路究竟如何...风轻云淡...看淡这世间的繁华...找寻属于自己心灵的东西...人生路漫漫...我们应该看向远方...

2013-10-20 22:50:57 2062 1

原创 genalloc — 通用内存分配器

genalloc 是 linux 内核提供的通用内存分配器,源码位于 lib/genalloc.c。这个分配器为独立于内核以外的内存块提供分配方法,采用的是最先适配原则,android 最新的ION 内存管理器对ION_HEAP_TYPE_CARVEOUT 类型的内存就是采用的这个分配器。1、基础数据结构首先看下分配器用到的几个数据结构,struct gen_pool 用来描述一个内存

2013-02-02 16:09:50 7098

原创 android 关机闹钟

新项目的手机需要实现关机状态下的闹钟,早在刚开始接触 android 的时候都在想为什么 android 不支持关机状态下的一些功能呢?像充电或者闹钟什么的,虽然每个平台的驱动不一样但上层应用是可以提供统一接口的呀,果然在 4.0 的时候支持关机充电了,关机闹钟仍然不在默认支持中。市场上的很多品牌手机也都不支持这个功能,让很多用惯了 Feature Phone 以及担心辐射的用户都不习惯。这次做关

2013-01-15 12:16:17 16284 11

原创 uboot 命令分析(一) — bootm

bootm 用于将内核镜像加载到内存的指定地址处,如果有需要还要解压镜像,然后根据操作系统和体系结构的不同给内核传递不同的启动参数,最后启动内核。一、arm 架构处理器对 linux 内核启动之前环境的五点需求1、cpu 寄存器设置    * R0 = 0    * R1 = 板级 id    * R2 = 启动参数在内存中的起始地址2、cpu 模式    * 禁止所有

2013-01-04 17:52:35 21109 2

原创 uboot 启动流程分析(二) — 第二阶段

在 uboot 第一阶段启动完成后将会调用 start_armboot 开始第二阶段的启动流程,这个阶段的代码由 c 语言编写,分析如下:一、基础数据结构第二阶段主要用到了两个数据结构即 gd_t 和 bd_t,其定义如下:/* 全局数据结构 */typedef struct global_data { bd_t *bd; /* 指向板级

2013-01-04 17:51:52 10995 5

原创 android gralloc 流程分析

Android 中 lcd 是一个帧缓冲设备,驱动程序通过处理器的 lcd 控制器将物理内存的一段区域设置为显存,如果向这段内存区域写入数据就会马上在 lcd 上显示出来。Android 在 HAL 中提供了gralloc 模块,封装了用户层对帧缓冲设备的所有操作接口,并通过 SurfaceFlinger 服务向应用提供显示支持。在启动过程中系统会加载 gralloc 模块,然后打开帧缓冲设备,获

2013-01-04 17:50:49 16842 2

原创 memory 子系统

内核对一致和非一致内存访问使用相同的数据结构。首先,内存划分为结点:每个结点关联到系统中的一个处理器,在内核中用pg_data_t 表示。各个结点又划分为内存域,一个结点最多由3个内存域组成,用3个常量来表示:ZONE_DMA、ZONE_NORMAL、ZONE_HIGHMEM,此外内核还定义了一个伪内存域 ZONE_MOVABLE 用于防止物理内存碎片,ZONE_NR_ZONES 为结束标记。

2013-01-04 17:50:14 2933 1

原创 camera 模组驱动优化

因为项目比较多,平台支持的 camera 模组已经有 10 多个了,代码比较繁杂,就把 camera 模组端的驱动架构优化了一下。总的思路就是将公共的接口统一起来,减少代码的耦合度,建立新的公共接口文件 cam_core.c 和 cam_core.h。一、基础数据结构新建立的数据结构如下:struct cam_info { struct i2c_client *i2c_dev

2012-12-22 14:58:02 4015 2

原创 v4l2 编程接口(二) — driver

V4L2 驱动随着硬件的变化也越来越复杂,现在大部分设备有里面包含了多个IC, 在/dev目录下不仅要建立 V4L2 的节点,而且还需要建立如:DVB、ALSA、FB、I2C、input等设备节点。事实上 V4L2 驱动需要支持音频/视频的混音/编码/解码等IC所以比其他驱动都要复杂很多,通常这些IC通过 i2c 总线连接到主板,这些设备都统称为sub-devices。在很长的一段时间里 V4L2

2012-11-23 15:31:10 15439 1

原创 v4l2 编程接口(一) — ioctl

在应用程序获取视频数据的流程中,都是通过 ioctl 命令与驱动程序进行交互,常见的 ioctl 命令有:VIDIOC_QUERYCAP /* 获取设备支持的操作 */VIDIOC_G_FMT /* 获取设置支持的视频格式 */VIDIOC_S_FMT /* 设置捕获视频的格式 */VIDIOC_REQBUFS /* 向驱动提出申请内存的请求

2012-11-23 15:30:23 46993 3

原创 camera 应用

前段时间写了一个测试 camera 的应用程序,很简单的实现了在平台上拍照和录像的功能,bmp文件头暂时只支持固定分辨率 640 x 480:#include #include #include #include #include #include #include #include #include #include #include #include #inc

2012-11-23 15:29:51 3183 1

原创 camera 原理

1、Color Filter Array — CFA随着数码相机、手机的普及,CCD/CMOS 图像传感器近年来得到广泛的关注和应用。 图像传感器一般都采用一定的模式来采集图像数据,常用的有 BGR 模式和 CFA 模式。BGR 模式是一种可直接进行显示和压缩等处理的图像数据模式,它由 R( 红)、G( 绿) 、B( 蓝) 三原色值来共同确定 1 个像素点,例如富士数码相机采用的 SUPER

2012-11-23 15:29:22 17587

原创 i2c - gpio

处理器只支持3个i2c通道,常常会不够用,最近写了一个gpio模拟i2c的driver,把模拟的i2c通道加入了i2c-core中,作为第 4 通道,调用接口与标准i2c一致,代码如下:#define DELAY 2#define SCL_GPIO GPIO_I2C_SCL#define SDA_GPIO GPIO_I2C_SDAstatic inline void i2c

2012-11-23 15:28:14 2660 4

原创 memory 编程接口

在Linux系统中,一般有32位(4GB)的地址空间,进程的4GB内存空间被分为两个部分 — 用户空间与内核空间,用户空间地址一般分布为0 ~ 3GB(即PAGE_OFFSET,一般等于0xc0000000),剩下的3 ~ 4GB则为内核空间。进程与内核不各自使用4GB的空间,好处就是进程进入内核不需要切换页表,降低了进出内核的消耗。内核空间从低地址到高地址又分为:物理内存映射区、vmalloc

2012-10-25 09:36:42 2609

原创 notifier chain — 内核通知链

大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣。为了满足这个需求,也即是让某个子系统在发生某个事件时通知其它的子系统,Linux内核提供了通知链的机制。通知链表只能够在内核的子系统之间使用,而不能够在内核与用户空间之间进行事件的通知。通知链表是一个函数链表,链表上的每一个节点都注册了一个函数。当某个事情发生时,链表上所有节点对应的函数就会被执行。所以对于通知链表来说

2012-10-17 17:53:26 11072 1

原创 i2c 编程接口

1、通信接口i2c发送或者接收一次数据都以数据包 struct i2c_msg 封装struct i2c_msg { __u16 addr; // 从机地址 __u16 flags; // 标志#define I2C_M_TEN 0x0010 // 十位地址标志#define I2C_M_RD 0x0001 // 接收数据标志 __u16 len;

2012-10-17 14:04:43 27281 1

原创 i2c 协议解析

1、基本概念      主机            初始化发送,产生时钟信号和终止发送的器件      从机            被主机寻址的器件      发送器        发送数据到总线的器件      接收器        从总线接收数据的器件      多主机        同时有多于一个主机尝试控制总线 但不破坏报文      仲裁           是一

2012-10-17 10:48:22 89534 1

原创 getevent/sendevent 使用说明

这两天准备写一下input子系统的分析,过程中发现了两个好工具,呵呵,就是本文介绍的主角:getevent用于获取当前系统input设备的一些参数和实时事件的数据;sendevent用于发送input事件,这样在调试的时候遇到有的样机按键坏了或者触摸屏坏了就方便了,工具的源码位于Android SDK的system/core/toolbox下面。一、getevent首先看一下命令的用法说明

2012-09-21 14:22:24 26274 5

原创 android 休眠唤醒机制分析(三) — suspend

前面我们分析了休眠的第一个阶段即浅度休眠,现在我们继续看休眠的第二个阶段 — 深度休眠。在深度休眠的过程中系统会首先冻结所有可以冻结的进程,然后依次挂起所有设备的电源,挂起顺序与设备注册的顺序相反,这样保证了设备之间电源的依赖性;直至最后进入省电模式,等待用户或者RTC唤醒;在唤醒过程中则会按照设备注册的顺序依次恢复每个设备的电源进入正常工作状态,解冻相关的进程,然后再进行浅度休眠的唤醒流程。

2012-09-17 16:41:42 14325

原创 android 休眠唤醒机制分析(二) — early_suspend

early_suspend是Android休眠流程的第一阶段即浅度休眠,不会受到wake_lock的阻止,一般用于关闭lcd、tp等设备为运行的应用节约电能。Android的PowerManagerService会根据用户的操作情况调整电源状态,如果需要休眠则会调用到HAL层的set_screen_state()接口,在set_screen_state()中会向/sys/power/state节点

2012-09-15 14:51:12 16604 1

原创 android 休眠唤醒机制分析(一) — wake_lock

Android的休眠唤醒主要基于wake_lock机制,只要系统中存在任一有效的wake_lock,系统就不能进入深度休眠,但可以进行设备的浅度休眠操作。wake_lock一般在关闭lcd、tp但系统仍然需要正常运行的情况下使用,比如听歌、传输很大的文件等。本文主要分析driver层wake_lock的实现。一、wake_lock 定义和接口enum { WAKE_LOCK_SUSP

2012-09-14 13:33:03 51207 1

原创 android button light 流程分析(三) — framework

一、初始化信息首先看看Android中的几种电源状态定义,这几个值定义了不同的led开闭状态以及lcd背光的不同亮度模式: // flags for setPowerState private static final int SCREEN_ON_BIT = 0x00000001; private static final int SCREEN_

2012-09-05 18:55:39 8782 2

原创 android button light 流程分析(二) — HAL & JNI

一、基础数据信息首先看一下HAL定义的light类型:/** * The id of this module */#define LIGHTS_HARDWARE_MODULE_ID "lights"/* * These light IDs correspond to logical lights, not physical. * So for example, if yo

2012-09-05 17:53:43 5949

原创 android button light 流程分析(一) — driver

一、led-classled-class是button light driver的核心层,代码位于drivers/leds/目录下,提供了一些数据结构和接口,其中创建了一个leds设备类,用于管理系统所有的led,代码如下:static int __init leds_init(void){ leds_class = class_create(THIS_MODULE, "leds"

2012-09-05 13:53:12 4514 2

原创 i2c 设备自动探测

最近在做camera和ts的自动识别。因为平台上各种品牌的camera和ts种类繁多,而且有的i2c地址有冲突,通常是在board-device里面配置i2c设备,如果遇到不同机型有相同i2c地址则会造成设备创建失败,只能在编译的时候去改代码,这样调试多种机型就很繁琐,所以有了以下代码。这里先看下camera的代码:static int gc0309_lookfor_bus(s

2012-05-17 17:39:22 3044

原创 framebuffer 子系统分析

一、常见结构体分析1、fb_infostruct fb_info { int node; int flags; struct mutex lock; /* 调用open/release/ioctl时的锁 */ struct mutex mm_lock; /* fb_mmap和smem_*的锁 */ struct fb_var_screeninfo var; /* 当前LC

2012-05-11 13:26:42 4635

原创 i2c 子系统分析

一、i2c驱动核心层分析i2c驱动核心层主要为设备驱动层提供设备注册、通信、管理等接口,同时连接i2c控制器驱动。这里首先分析i2c子系统中比较重要的几个结构体:1、driverstruct i2c_driver { unsigned int class; // 驱动支持的设备类型,如传感器、eeprom等 /* Notifies the driver t

2012-02-27 14:46:55 3764

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除