关于调试GPS45711的记录

       公司平板电脑以前都是不带GPS功能的,今年过完年来,公司新开了一个带GPS功能的项目,软件部分由我来负责。说实话,平时调试的外设模块驱动也是很多了,但是真正调试像GPS这样的串口通讯模块,接触的还是比较少。虽然蓝牙模块也是通过串口通讯工作的,但是每次蓝牙配置都只需要在内核board里面配置好相应的电源,复位,中断,串口等gpio口就够了,最多考虑一下接口的复用就可以了,都是属于内核层的gpio口调用。

        这次gps模块的调试,需要涉及到的是用户层的gpio口调用,首先需要在内核里开启

      Device Drivers  —>  GPIO Support  —>     /sys/class/gpio/… (sysfs interface)。

     然后在kernel/arch/arm/mach-rk30/include/mach/gpio.h找到相应gpio口对应的计算表达式,比如gpio3_d7在文档中对应的计算表达式是
    #define       RK30_PIN3_PD7           (3*NUM_GROUP + PIN_BASE + 31)
、其中kernel/arch/arm/plat-rk/include/plat/gpio.h中有定义#define NUM_GROUP 32
   irqs.h中定义了#define PIN_BASE 5*32,由此可以计算出RK30_PIN3_PD7 的值为287.然后在init.rk30board.rc文件的on post-fs地方写入相关节点的脚本:
  #broadcom gps init reset standby
 write /sys/class/gpio/export 287            
 write /sys/class/gpio/export  255           
 write /sys/class/gpio/gpio287/direction out
 write /sys/class/gpio/gpio255/direction out
 write /sys/class/gpio/gpio287/value 1
 write /sys/class/gpio/gpio255/value 1
 write /dev/ttyS1 123456
#end gps IO control
# for gps
#  chmod 0664 /data/gps
#  mkdir /data/gps/log
#  chmod 0664 /data/gps/log
#  chmod 0664 /system/bin/glgps
# for gps
  mkdir /data/gps
  chmod 0777 /data/gps
  mkdir /data/gps/log
  chmod 0777 /data/gps/log
  chmod 0777 /system/bin/glgps
  chmod 0777 /system/bin/scmd
  chmod 0777 /dev/ttyS1
  chmod 0777 /sys/class/gpio/gpio255/value
  chmod 0777 /sys/class/gpio/gpio287/value
#broadcom gps init end

在service相关的脚本处写入:    

#start gps service 4571
service gps-daemon /system/bin/glgps -c /system/etc/gps/gpsconfig.xml
class main
user system
group system
socket gps seqpacket 0777 root root 
# disabled
#  oneshot
##start gps service
#service gps-daemon /system/bin/glgps -c /system/etc/gps/glconfig.xml
# user root
# group root
# socket gps seqpacket 0777 root root 
#  class main

device\rockchip\rk30sdk\gps\gpsconfig.xml
RfType="GL_RF_47511_BRCM" 内部放大器
RfType="GL_RF_47511_BRCM_EXT_LNA" 外部放大器 

system\bin目录下:
gl-gps 只能用adb命令控制查看搜星信号

1./system/bin/gl-gps -c /system/etc/gps/gpsconfig.xml Periodic
2.另开窗口:cat /data/gps/nmea
glgps  可以使用gps相关APK软件查看搜星信号
1./system/bin/glgps -c /system/etc/gps/gpsconfig.xml Periodic
2.另开窗口:cat /data/gps/nmea

scmd用于检测串口通讯是否正常,scmd /dev/ttyS1可以检测是否侦测到了GPS芯片。

调试总结:

Androidgpsapk无法打开的情况

1.     system/etc/permissions/android.hardware.location.gps.xml这个文件是否存在

2.     logcat 有报缺少gps.conf的错误,检查是否缺少如下的文件

out/target/product/rk30sdk/system/etc/gps.conf

3.     logcat 报不能加载gps jni的错误,检查是否有生成相应的.so文件

out/target/product/rk30sdk/system/lib/hw/gps.rockchip.so

Gps内核调试

1.      检查出口通讯是否正常./scmd /dev/ttS1

2. 检查/sys/class/gpio/gpio287和gpio255,是否出现这样的节点

3. 检查内核进程(ps)有没有glgps进程

4.检查out/target/product/rk30sdk/system/etc/gps/glconfig.xml

和\device\rockchip\rk30sdk\init.rk30board.rc的控制脚是否一致


------------------------------------------------以下部分为参考文档----------------------------------------------------------------------------------------------------------

/sys/class/gpio 的使用说明:

01 gpio_operation 通过/sys/文件接口操作IO端口 GPIO到文件系统的映射
02 * 控制GPIO的目录位于/sys/class/gpio
03 * /sys/class/gpio/export文件用于通知系统需要导出控制的GPIO引脚编号
04 * /sys/class/gpio/unexport 用于通知系统取消导出
05 * /sys/class/gpio/gpiochipX目录保存系统中GPIO寄存器的信息,包括每个寄存器控制引脚的起始编号base,寄存器名称,引脚总数 导出一个引脚的操作步骤
06 * 首先计算此引脚编号,引脚编号 = 控制引脚的寄存器基数 + 控制引脚寄存器位数
07 * 向/sys/class/gpio/export写入此编号,比如12号引脚,在shell中可以通过以下命令实现,命令成功后生成/sys/class/gpio/gpio12目录,如果没有出现相应的目录,说明此引脚不可导出:
08 echo 12 > /sys/class/gpio/export
09 * direction文件,定义输入输入方向,可以通过下面命令定义为输出
10 echo out > direction
11 * direction接受的参数:in, out, high, low。high/low同时设置方向为输出,并将value设置为相应的1/0。
12 * value文件是端口的数值,为1或0.
13 echo 1 > value

 用户空间访问gpio,即通过sysfs接口访问gpio,下面是/sys/class/gpio目录下的三种文件: 

            --export/unexport文件

            --gpioN指代具体的gpio引脚

            --gpio_chipN指代gpio控制器

            必须知道以上接口没有标准device文件和它们的链接。 


 (1) export/unexport文件接口:

               /sys/class/gpio/export,该接口只能写不能读

               用户程序通过写入gpio的编号来向内核申请将某个gpio的控制权导出到用户空间当然前提是没有内核代码申请这个gpio端口

               比如  echo 19 > export 

               上述操作会为19gpio创建一个节点gpio19,此时/sys/class/gpio目录下边生成一个gpio19的目录

               /sys/class/gpio/unexport和导出的效果相反。 

               比如 echo 19 > unexport

               上述操作将会移除gpio19这个节点。 

 (2) /sys/class/gpio/gpioN

       指代某个具体的gpio端口,里边有如下属性文件

      direction 表示gpio端口的方向,读取结果是inout。该文件也可以写,写入out 时该gpio设为输出同时电平默认为低。写入lowhigh则不仅可以

                      设置为输出 还可以设置输出的电平。 当然如果内核不支持或者内核代码不愿意,将不会存在这个属性,比如内核调用了gpio_export(N,0)就

                       表示内核不愿意修改gpio端口方向属性 

             (echo out > /sys/class/gpio/gpio287/direction )

      

      value      表示gpio引脚的电平,0(低电平)1(高电平),如果gpio被配置为输出,这个值是可写的,记住任何非零的值都将输出高电平, 如果某个引脚

                      能并且已经被配置为中断,则可以调用poll(2)函数监听该中断,中断触发后poll(2)函数就会返回。

         (echo 1 > /sys/class/gpio/gpio287/value)

                                   

      edge      表示中断的触发方式,edge文件有如下四个值"none", "rising", "falling","both"

           none表示引脚为输入,不是中断引脚

           rising表示引脚为中断输入,上升沿触发

           falling表示引脚为中断输入,下降沿触发

           both表示引脚为中断输入,边沿触发

                      这个文件节点只有在引脚被配置为输入引脚的时候才存在。 当值是none时可以通过如下方法将变为中断引脚

                      echo "both" > edge;对于是both,falling还是rising依赖具体硬件的中断的触发方式。此方法即用户态gpio转换为中断引脚的方式

                

      active_low 不怎么明白,也木有用过                                                                

 (3)/sys/class/gpio/gpiochipN

      gpiochipN表示的就是一个gpio_chip,用来管理和控制一组gpio端口的控制器,该目录下存在一下属性文件: 

      

      base   N相同,表示控制器管理的最小的端口编号。 

      lable   诊断使用的标志(并不总是唯一的) 

      ngpio  表示控制器管理的gpio端口数量(端口范围是:N ~ N+ngpio-1) 


      

      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
修复三星9100,、7100、9500......乃至sony等等智能手机的gps定位慢搜星慢的秒定gps修复, 方法来自互联网,亲自体验效果非常好:root后用re文件管理器替换自己手机里面的内容。位置在:根目录/system/etc下面。权限和原来相同。如果想自己修改可参照下面内容:打开RE管理器,在system下找到etc文件夹,再找到gps.conf(gps配置文件),将RE管理器挂载为读写,点击(长按)gps.conf文件,选择以文本编辑器方式打开,将里面内容修改为以下内容即可: NTP_SERVER=0.cn.pool.ntp.org NTP_SERVER=1.cn.pool.ntp.org NTP_SERVER=2.cn.pool.ntp.org NTP_SERVER=3.cn.pool.ntp.org NTP_SERVER=cn.pool.ntp.org XTRA_SERVER_1=http://xtra2.gpsonextra.net/xtra.bin XTRA_SERVER_2=http://xtra1.gpsonextra.net/xtra.bin XTRA_SERVER_3=http://xtra3.gpsonextra.net/xtra.bin SUPL_HOST=suplcn.sirf.com SUPL_HOST=221.176.0.55 SUPL_PORT=7275 更改完后,点击手机菜单键,保存并退出,重启手机,打开GPS,启动导航软件,10秒内定位!!! 真正有技术含量的内容 解释: NTP_SERVER=0.cn.pool.ntp.org(为中国0号授时子服务器,实时变动) NTP_SERVER=3.cn.pool.ntp.org(为中国3号授时子服务器,实时变动) NTP_SERVER=1.asia.pool.ntp.org(为亚洲1号授时子服务器,实时变动) NTP_SERVER=2.asia.pool.ntp.org(为亚洲2号授时子服务器,实时变动) SUPL_HOST=221.176.0.55(中国移动定位服务器) SUPL_HOST=suplcn.sirf.com(上海电信定位服务器)也可改为:supl.google.com(谷歌定位服务器)或supl.nokia.com(诺基亚定位服务器) SUPL_PORT=7275 (服务器端口;也可用7276) 每天中国对时服务器变动信息可查看网址:http://www.pool.ntp.org/zone/cn(如追求极致,可根据实际变动调整) 1、授时服务器,也就是NTP Server,对于搜星后快速定位很重要。有的时候搜到的卫星很多但是定位很慢,就是因为和授时服务器连接不顺畅,快速和NTP Server同步,有助于提高GPS定位速度。建议:优先使用国内的NTP Server。 NTP全称是Network Time Protocol,是用来让计算机之间实现时间同步的协议,而发布这种校对时间的服务器,就是NTP Server。我们的操作系统XP、win7上都会用这个东西对时间。 2、supl服务器,没有统一的译名,似乎也没有统一的标准,主要是通过网络提供GPS卫星星历图,提高搜星速度;另外通过信号基站等其他辅助手段提高定位精度。建议:要提高速度,依然是尽量使用国内服务器 3、以下部分为服务器地址,身在国内的用户优先考虑的 国内的NTP Server: 0.cn.pool.ntp.org 1.cn.pool.ntp.org 2.cn.pool.ntp.org 3.cn.pool.ntp.org cn.pool.ntp.org 这是一组服务器集群,服务器位于上海电信和浙江台州电信,经实践证明这些网址是等效的。任意一个网址都可能对应这两地中的一个,台州电信和上海电信这两组服务器的ping值都在30~50ms左右(有线宽带和GSM网络均测试了)。 ntp.api.bz 这个是一组NTP服务器集群,目前有6台服务器,位于上海电信,速度很快 210.72.145.44 中国国家授时中心服务器IP,在西安,狗日的禁ping,但是实际上速度飞快 AGPS supl服务器地址: suplcn.sirf.com 114.80.208.5:7275 上海电信 221.176.0.55:7275 北京移动机房,中国移动的SUPL服务器,没查到域名,速度很快,建议移动用户选择 sls1.sirf.com 66

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值