您的位置:首页 > 移动开发 > Android开发

展讯平台gpio 兼容调试方法------sc8830

2014-06-09 18:42 821 查看
在项目过程中经常需要通过判别gpio 的状态来对某些硬件实现兼容,如通过判别gpio口的状态来实现不同射频nv参数的下载,如采用gpio脚的拉高和拉低来实现屏的兼容!

 

以GPIO216为例,设置gpio口的状态

查找SC8830的spec

[b]


[/b]

1,设置引脚为gpio模式

IISD0管脚复用,mode3为gpio的状态





设置复用方式为gpio模式也就是mode3,参考spec



设置[5:4]位为0x11,这样就设置了管脚为gpio状态



2,配置gpio模式

  




1,设置gpio为输入模式

2,打开gpio的msk标志

3,读取gpio的状态

 

介绍几种调试方法

在写入代码之前,通过adb 写入寄存器数据,读取状态是否正确,然后在进行下一步动作

adb shell

root@android:/ # lookat 0x402a041c  //获取引脚状态,[5:4]=0X11,说明已经是gpio状态,[7:6]=0X10,说明gpio为弱上拉状态

0x000021b8

root@android:/ # lookat 0x40280684 //MSK的值为11,说明216管脚的值是可读的                                           

0x00000300

root@android:/ # lookat 0x40280688   //dir方向为0,说明设置为输入状态  
                                       

0x00000000

root@android:/ # lookat 0x40280680  //读取gpio的值,此时的值为1,硬件上的状态为解高,vdd1.8v                                          

0x00000100

root@android:/ # lookat -s 0x21780x402a041c
// 设置gpio的状态为弱下拉
                               

root@android:/ # lookat 0x40280680           
//在读取gpio的状态为1,说明外部已经生效,可以读成功                             
   

0x00000100

 

 

这是通过寄存器来查看gpio的状态,另外一种可以通过命令直接查看gpio的状态

root@android:/ # cd d

root@android:/d # cat gpio

GPIOs 0-255, sprd-d-gpio:

 gpio-71 (sdio0_detect        ) in  hi

 gpio-72 (USB OTG CABLE       ) in  hi

 gpio-81 (ts_rst_pin          ) out hi

gpio-188 (sub camera         ) in  hi

 gpio-216 (gpio_lcd_diff       ) in hi   //此gpio即为我们配置的gpio的,需要在kernel中加入代码

 gpio-217 (tmd2771_pls irq     ) in lo

 gpio-230 (wifi_pwd            ) out lo

 gpio-231 (bt_power            ) out hi

 gpio-232 (bt_host_wake        ) in hi

 gpio-233 (bt_reset            ) out hi

 gpio-234 (oob_irq             ) in  lo

 gpio-235 (bt_ext_wake         ) out hi

 

 

在代码中添加读取gpio的方法

如需在uboot中获取gpio的状态,可参考如下设置,此为gpio86

*(volatile u32 *) (0x8b000008) |=((1<<5)|(1<<13));

*(volatile u32 *) (0x8c000364) &= 0x0;

*(volatile u32 *) (0x8c000364) |=((3<<4)|(1<<7));

*(volatile u32 *) (0x8a000204) |=1<<6;                   

gpio86_value=*(volatile u32 *)(0x8a000200);

 

在kernel中添加gpio,可参考如下

ret = gpio_request(GPIO_LCD_DIFF,"gpio_lcd_diff");

if (ret < 0) {

                         printk("failed to requestGPIO_%d(gpio_lcd-diff)\n", GPIO_LCD_DIFF);

                   }

gpio_direction_input(GPIO_LCD_DIFF);

LCM_SLEEP(150);

ret = gpio_get_value(GPIO_LCD_DIFF);

printk(" GPIO_%d(gpio_lcd_diff) =%d\n", GPIO_LCD_DIFF,ret)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  调试 android 硬件 gpio