rk3288问题总结!

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

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

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

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

学会自己写简单的接口:

例如:mpu6500_test.c

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 


#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调试问题:

机器进入睡眠后,唤醒花屏,如图:


rk3288问题总结!_第1张图片


看到现象,很多人第一反应就是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了。



你可能感兴趣的:(rk瑞芯微)