在许多sensor的调试过程中总是会遇到各种GPIO被占用的情况,特别是以下几种情况:UART 只能发或收,GPIO 配置了pinctl output但是gpio依旧为输入。

1、判断GPIO口状态

不管是不是被ADSP占用导致工作异常,首先我们需要查看一下GPIO的状态,查看方法如下

cat /sys/kernel/debug/gpio

部分日志:
GPIOs 0-141, platform/1000000.pinctrl, 1000000.pinctrl:
gpio0 : in 0 2mA pull down
gpio1 : in 0 2mA pull down
gpio2 : out 0 2mA pull down
gpio3 : in 0 2mA pull down
gpio4 : out 2 2mA no pull
gpio5 : out 2 2mA no pull
gpio6 : in 0 2mA no pull
gpio7 : in 0 2mA no pull
gpio8 : in 0 2mA pull down
gpio9 : in 0 2mA pull down
gpio10 : in 0 2mA no pull
gpio11 : in 0 2mA no pull
gpio12 : in 2 2mA no pull
gpio13 : in 2 2mA no pull
gpio14 : out 3 2mA pull up
gpio15 : out 3 2mA pull up
gpio16 : in 2 2mA no pull
gpio17 : in 2 2mA no pull
gpio18 : in 0 2mA pull down
gpio19 : in 0 2mA pull down
gpio20 : in 2 2mA no pull

此时我们就可以通过 80-P2472-1B_C_MSM8953_GPIO_Configuration_Spreadsheet.xlsm此类GPIO 配置文档去查看相关GPIO与外设引脚的对应关系。

2、查看是否与ADSP冲突

既然查看到某个GPIO状态配置异常,接下来就应该考虑是否是ADSP 冲突引起,可以通过以下方法删除Sensor配置文件释放所有端口测试冲突是否存在。

adb root
adb remount
adb shell rm /mnt/vendor/persist/sensors/sns.reg (qcm2150 此项必须先执行,否则push进去的conf文件不生效)
adb shell rm /persist/sensors/sns.reg (msm8953 此项必须先执行,否则push进去的conf文件不生效)
adb shell rm /vendor/etc/sensors/sensor_def_qcomdev.conf
adb sync
adb reboot

执行以上操作后如果问题消失了,那么必然是ADSP冲突导致。

3、配置ADSP文件

在上面进一步验证成功后修改工程下的 /vendor/etc/sensors/sensor_def_qcomdev.conf 或者直接将开发板根文件系统中的/vendor/etc/sensors/sensor_def_qcomdev.conf 用adb pull下来修改。

#序号  #引脚号  #属性值  #注释

#SPI GPIO active and inactive
6330 1 0x00010001 # version
6331 0x0014 0x00010001 # gpio num
6332 1 0x00010001 # active func sel
6333 1 0x00010001 # active dir
6334 0 0x00010001 # active pull
6335 3 0x00010001 # active drive
6336 0 0x00010001 # inactive func sel
6337 0 0x00010001 # inactive dir
6338 2 0x00010001 # inactive pull
6339 0 0x00010001 # inactive drive #############################################
# 修改方法:将需要释放的引脚号改成0xFFFF,然后将属性值改成0x00020002
切勿直接删除或者注释掉这一行,因为如果没有新的值,即便是整包刷机都不会覆盖原有的属性。这些参数是和sensor校准参数放在同一个分区,不会因为刷机删除。

4、刷入测试

两种方法:整编代码然后整包刷入;通过adb push 配置文件

将sensor_def_qcomdev.conf push 到板子进行测试
adb shell rm /mnt/vendor/persist/sensors/sns.reg (2150 此项必须先执行,否则push进去的conf文件不生效)
adb shell rm /persist/sensors/sns.reg (8953 此项必须先执行,否则push进去的conf文件不生效)
adb shell rm /vendor/etc/sensors/sensor_def_qcomdev.conf
adb push sensor_def_qcomdev.conf /vendor/etc/sensors/sensor_def_qcomdev.conf
adb shell chmod 644 /vendor/etc/sensors/sensor_def_qcomdev.conf
adb shell sync
adb reboot

高通Android工程释放ADSP侧GPIO给AP侧(HLOS)解决uart只能收或者发,gpio 无法配置成输入或者输出的更多相关文章

  1. 高通Android display架构分析

    目录(?)[-] Kernel Space Display架构介绍 函数和数据结构介绍 函数和数据结构介绍 函数和数据结构介绍 数据流分析 初始化过程分析 User Space display接口 K ...

  2. 高通Android display分析【转】

    本文转载自:http://blog.csdn.net/zhangchiytu/article/details/6777039 高通7系列硬件架构分析 如上图,高通7系列 Display的硬件部分主要由 ...

  3. 高通Android平台硬件调试之Camera篇

    之前一段时间有幸在高通android平台上调试2款camera sensor,一款是OV的5M YUV sensor,支持jpeg out,同时也支持AF,调试比较比较简单,因为别的项目已经在使用了, ...

  4. 高通android开发摘要

    一部分是开源的,可以从codeaurora.org上下载,还有一部分是高通产权的,需要从高通的网站上下载. 将高通产权的代码放到:vendor/qcom/proprietary 1. 设置bms一些参 ...

  5. 高通Android camera运行流程【转】

    本文转载自:http://blog.csdn.net/unicornkylin/article/details/13293295 1.总体架构 Android Camera 框架从整体上看是一个 cl ...

  6. 高通android开发缩写

    1.TLMM MSM TLMM pinmux controller,Qualcomm MSM integrates a GPIO and Pin mux/config hardware, (TOP L ...

  7. 高通 android平台LCD驱动分析

    目前手机芯片厂家提供的源码里包含整个LCD驱动框架,一般厂家会定义一个xxx_fb.c的源文件,注册一个平台设备和平台驱动,在驱动的probe函数中来调用register_framebuffer(), ...

  8. 高通adsp架构下sensor

    一.高通sensor架构: linux驱动由浅入深系列:高通sensor架构实例分析之一(整体概览+AP侧代码分析) linux驱动由浅入深系列:高通sensor架构实例分析之二(adsp驱动代码结构 ...

  9. linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解、校准流程详解)【转】

    本文转载自:https://blog.csdn.net/radianceblau/article/details/76180915 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分 ...

  10. linux驱动由浅入深系列:高通sensor架构实例分析之二(驱动代码结构)【转】

    本文转载自:https://blog.csdn.net/radianceblau/article/details/73498303 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分 ...

随机推荐

  1. Games 101 作业1

    1 坐标系 关于坐标系,坐标系其实就是空间信息.有了坐标系我们可以非常详细的描述这个世界,为了方便一般为一个观测者生成一个坐标系. 坐标系以观测者所在的位置为原点.就像我们常说的前面三米,我们对世界的 ...

  2. 指针进阶(函数指针)(C语言)

    目录 1. 字符指针变量 2. 数组指针变量 2.1 数组指针变量是什么? 2.2 数组指针变量怎么初始化? 3. 二维数组传参的本质 4. 函数指针变量 4.1 函数指针变量的创建 4.2 函数指针 ...

  3. 2024CSP-J游记

    拿到题的第一步,先看第一题,大致扫了一眼,水题.以为是hash,进一步思考了一下,hash不行.发现可以用set,于是拿set敲了一下,样例全对. 第二题,看了眼样例以为是DFS.实际看了看发现是模拟 ...

  4. 有Redis为什么还要本地缓存?谈谈你对本地缓存的理解?

    本地缓存是将数据存储在应用程序所在的本地内存中的缓存方式.既然,已经有了 Redis 可以实现分布式缓存了,为什么还需要本地缓存呢?接下来,我们一起来看. 为什么需要本地缓存? 尽管已经有 Redis ...

  5. dotnet core微服务框架Jimu ~ 会员注册微服务

    提供会员注册服务,用户必须注册成会员才能享受应用提供的服务,如浏览和发布新闻, 但有些服务又需要指定角色的会员才能操作,如所有会员都可以浏览新闻,只有管理员(admin)角色的会员才可以发布新闻. 有 ...

  6. 23.Kubernetes中的CRI

    Kubernetes中的CRI 前言 Kubernetes 节点的底层由一个叫做容器运行时的软件进行支撑,它主要负责启停容器. Docker 是目前最广为人知的容器运行时软件,但是它并非唯一.在这几年 ...

  7. 从0搭建一个FIFO模块-01(基础知识)

    1. FIFO介绍 基本概念 FIFO(First In, First Out)是一种常用的数据结构,用于存储和处理数据.它的工作原理与排队的顺序类似,遵循"先进先出"的原则.即, ...

  8. Edge(Chrome)浏览器插件WordSaver的演示,可以查英语生词并记录生词及所在句子,导出为anki格式

    Edge(Chrome)浏览器插件WordSaver的演示,可以查英语生词并记录生词及所在句子,导出为anki格式 Bilibili哔哩哔哩视频

  9. sql注入--学习笔记_1

    实验室 sql sql可以对数据库进行访问和处理:取回数据,删除数据.web页面会使用这些. SQL 能做什么? SQL 面向数据库执行查询 SQL 可从数据库取回数据 SQL 可在数据库中插入新的记 ...

  10. Java内存泄露测试及工具

    声明:这是转载的. 测试类: Element.java package com.memoryleak.demo; public class Element { private byte[] data; ...