您的位置:首页 > 其它

rk3288问题总结!

2016-06-07 16:36 507 查看
1、gsensor+陀螺仪:调试这个要有个清晰的思路。大概分为三层:A、底层驱动;B、中间层; C、上层。

要判断问题,首先得快速的定位的问题出在哪层,但是这三层又是相互关联的,所以还是得都熟悉。

一般调试过程:1、底层接口有没有通;2、底层数据有没有出来,是hal层没有去读取,还是驱动本身有问题,这点很关键。网上有很多资料判断底层驱动有没有通用getevent,但是hal层没有调用ioctl接口是,getevent也是没有数据出来的,而且打印printk log也没有。(不过这个得分情况,有些驱动只有ioctl的user接口,像rk。有些驱动有两套接口,开机自动上报。)3、hal层有没有数据出来。4、上层有没有数据出来。

总的来说,调试方法很重要。

学会自己写简单的接口:

例如:mpu6500_test.c

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <time.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/types.h>

#define L3G4200D_IOCTL_BASE 77

#define L3G4200D_IOCTL_SET_DELAY _IOW(L3G4200D_IOCTL_BASE, 0, int)
#define L3G4200D_IOCTL_GET_DELAY _IOR(L3G4200D_IOCTL_BASE, 1, int)
#define L3G4200D_IOCTL_SET_ENABLE _IOW(L3G4200D_IOCTL_BASE, 2, int)
#define L3G4200D_IOCTL_GET_ENABLE _IOR(L3G4200D_IOCTL_BASE, 3, int)

int main(void)
{
int fd = 0;

printf("mpu6500 test!!!\n");

fd = open("/dev/mma8452_daemon", O_RDWR, 0);
if(fd<0){
printf("no fd found.\n");
}

/*if (ioctl(fd, L3G4200D_IOCTL_SET_ENABLE, 0) -1){
printf("error close fb");
}

if (ioctl(fd, L3G4200D_IOCTL_SET_ENABLE, 1) -1){
printf("error open fb");
}*/

return 0;
}
Android.mk
LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
LOCAL_SRC_FILES:= mpu6500_test.c

LOCAL_MODULE_TAGS := eng optional

LOCAL_MODULE:= mpu6500_test

include $(BUILD_EXECUTABLE)

2、LCD调试问题:
机器进入睡眠后,唤醒花屏,如图:



看到现象,很多人第一反应就是height设置不对,只设了1/3,这确实是一个常犯的错误。

但是我这个问题不是这个原因,认真分析一下:屏的接口其实就三类:A、同步信号。如de hs vs  B、时钟信号。dclk  C、数据信号。mipi。

一个个排除,c的可能性很小,A的可能性最大。当时我们的项目de脚没有配置,有点怀疑这个,其实现在很多平台都不用te脚了,用mipi信号的vfp hfp等配置来代替te脚消除无效数据。

但是有些资料又说要用te,这里没搞太明白。反正最近调rk mtk的mipi屏都没有用到te脚。

剩下就是时钟信号,出现三个界面,clock太快了?屏的刷新跟不上?修改,果然ok了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  rk3288 mipi lcd