关于调试GPS45711的记录
来源:互联网 发布:mysql 占用内存多大 编辑:程序博客网 时间:2024/06/05 15:17
公司平板电脑以前都是不带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 initresetstandbywrite /sys/class/gpio/export 287 write /sys/class/gpio/export 255 write /sys/class/gpio/gpio287/direction outwrite /sys/class/gpio/gpio255/direction outwrite /sys/class/gpio/gpio287/value 1write /sys/class/gpio/gpio255/value 1write /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芯片。
调试总结:
Android的gps的apk无法打开的情况
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
上述操作会为19号gpio创建一个节点gpio19,此时/sys/class/gpio目录下边生成一个gpio19的目录
/sys/class/gpio/unexport和导出的效果相反。
比如 echo 19 > unexport
上述操作将会移除gpio19这个节点。
(2) /sys/class/gpio/gpioN
指代某个具体的gpio端口,里边有如下属性文件
direction 表示gpio端口的方向,读取结果是in或out。该文件也可以写,写入out 时该gpio设为输出同时电平默认为低。写入low或high则不仅可以
设置为输出 还可以设置输出的电平。 当然如果内核不支持或者内核代码不愿意,将不会存在这个属性,比如内核调用了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)
- 关于调试GPS45711的记录
- 关于调试GPS45711的记录
- 关于调试项目遇到的问题记录
- 关于调试SPI、I2C、UART的记录
- 关于CF的TP禁止双机调试的一点记录
- 记录一下关于调试一opencv 程序的问题
- firefox调试记录4——关于跨进程的调试
- 调试小记(主要记录自己的调试过程)---关于core dump
- 记录:usb_hid的调试过程 (调试完毕)
- 关于eclipse下利用tomcat调试jsp的一些问题的解决记录
- 调试记录-关于#include与#include在64位编译时的问题
- 移植MiniGUI的调试记录
- 调试时的一些记录
- 记录每次调试的错误
- 记录一次https的调试
- 记录调试的动态切换
- 关于javascript的调试
- 关于调试的方法论
- 马士兵视频中的生产者与消费者的经典问题
- hibernate对应的bean。表里是int型的数据,bean要用Integer类型。
- IDEA下使用Jetty进行Debug模式调试
- robotframework+selenium2Library使用遇到的问题
- 原生JavaScript addClass() removeClass()
- 关于调试GPS45711的记录
- EJB学习初探一
- 我已经走出了腰肌劳损的阴影
- Gym 100625H 多边形面积-计算几何
- linux下网络编程2:服务端和客户端进行TCP通信实例
- RecyclerView简单详解
- Gonet2 游戏服务器框架解析之gRPC入门(4)
- 解决Android APP出现多个图标
- 欢迎使用CSDN-markdown编辑器