2019-04-12

关键词: rk3128 OTG、rk3128外接鼠标U盘、RK外接鼠标U盘

本篇文章是笔者根据自己当前所掌握知识对 rk3128 平台 USB 接口接鼠标实现输入功能调试的一个记录,不对文章所述内容的绝对、完全正确性负责。


1、前言

笔者最近有点烦。无端端接到公司让调试 rk3128 平台样机的任务,虽说自己是 Android 系统集成开发出身,但那也是 2 年前的事了,笔者现在单恋 bigdata ,只想静静地和它厮守余生好吗!不过牢骚归牢骚,既然是领导派的任务,那还是要做的。那既然都做了,不输出点什么又让我很不自在。

今天这个问题的起因是因为我们的样机条件实在是太差了,没有配置触摸屏,仅一块显示屏。无法输入的话接下来的工作可不好做啊。于是就想到了外接鼠标,通过鼠标来模拟触摸输入的方式来控制 Android 系统。而我们这块样机,刚刚好 OTG 功能是不正常的,于是就将这一调试过程记录下来,以期后续能给遇到有同样问题的同学一些启发。

笔者手里的样机是 rk3128 平台的样机,运行 Android 4.4 操作系统。问题的现象自然就是插上鼠标和 U 盘以后不能正常工作与识别。下面是排错过程

2、Debug

调试过程无非就两个方向:1. 检查硬件; 2. 检查软件 。 依据笔者多年被坑经验来看:作为一名软件开发,但凡样机出现一些匪夷所思的问题,稍微检查一下我们的代码没有发现问题以后,就要怀疑硬件了。而作为一名要经常和各种硬件设备打交道的程序员来说,掌握一些基础的硬件开发知识也是很有必要的,这些基础的硬件知识,往往能让我们在怼硬件时更理直气壮一些。

2.1、硬件问题排查

原理图、PCB 图检查

这个工作一般和我们程序员无关。主要是因为大多数程序员都不懂。不过这块问题比较 “玄学” ,像笔者就遇到过,硬件检查了多次,确认自己画的图和芯片厂商给的电路参考图没什么出入了,但是最后还是查出来某个元器件电压值差了一点。虽然这种情况比较少见,但实在排查不出原因的时候,也可以作为一个分析点切入进去。

电压检查

通常,鼠标和 U盘 的工作电压都是 5V 。在前面确认到电路图没有什么问题以后可以来测量一下 USB 接口的供电电压。

usb 原理图

通常,在上面两步都检查过了没有问题以后,就可以来软件层面排查了。

2.2、软件问题排查

基础功能确认

通常样机在初期阶段都会有非常多的问题,甚至有不少连系统都不能正常启动的。所以我们首先要确保我们的系统是能稳定运行的。如何确认?有屏幕看能否正常进入到 Android Launcher 界面。没屏幕的看串口,看通过串口能否正常与系统交互,串口控制台进程一般是在 5 ~ 8 秒后就启动了。如果很不幸你的控制台进程默认是关闭状态的,那我们还可以看内核打印。rk3128 平台在系统稳定运行以后可以在内核中看到以下三条打印

1. 开机动画结束打印

service.bootanim.exit 属性的设置。

2. 以太网口启动打印

eth0: PHY ...

3. 系统健康管家进程的监控打印

healthd: ...   这个监控打印在系统运行稳定以后每分钟打印一次。

驱动检查

在 Linux 内核启动初期就是去执行各种驱动程序。可以适当关注一下开机时的系统内核打印,看看是否有报什么错误信息。这一块没有什么标准的,如果真的是这里出了问题,问题的确认就要看自己的造化了。

dts 配置检查

在软件层面上,比较大可能都是这一块出了问题。

USB 接口的默认配置信息位于

./kernel/arch/arm/boot/dts/rk312x.dtsi

rk3128 平台的 USB 默认配置

默认的配置信息通常是不会有问题的,主要看看自定义的 dts 中是否有修改默认配置的情况。笔者这里确实是发现了 usb-mode 栏的值被修改了。

usb-mode 默认值被修改

笔者这边,将这个 rockchip,usb-mode 的值改成 1 以后问题就解决了

在串口中也可以通过命令来读取这个 usb-mode 的值。

cat /sys/bus/platform/drivers/usb20_otg/force_usb_mode

在拥有权限的情况下,可以直接通过 echo 命令来更改这个文件的值以动态修改 USB 模式。

echo  > /sys/bus/platform/drivers/usb20_otg/force_usb_mode
echo 2 > /sys/bus/platform/drivers/usb20_otg/force_usb_mode

USB 的几种工作模式

USB 设备的通信模式为 主/从 通信模式。只有当主设备(usb-mode: Host )与从设备(usb-mode: Device )连接时,才能成功建立数据通信。而我们的鼠标、U盘在 USB 通信中都属于 从设备 。因此,我们的开发板就必须设置为 主设备 才可让这些设备正常工作。


参考: [RK3288][Android6.0] USB OTG模式及切换

rockchip 3128 平台USB接口鼠标U盘功能调试日记的更多相关文章

  1. 将PS/2接口鼠标改造成USB接口鼠标

    改造接线图 不是所有PS/2鼠标都可以改为USB鼠标的,可以改的PS/2鼠标的特征: A.早期PS/2鼠标电路板一般带有两块集成电路,(一块光电感应,一块按键或USB协议转换,和一只24M的晶体振荡器 ...

  2. USB接口介绍

        USB设备系统分为两个部分,USB Host端和USB Device端,以USB接口的U盘为例子,U盘自身是一个USB Device,PC机的USB接口以及相关的控制电路为USB Host部分 ...

  3. USB接口禁用小工具v1.0.1

    由论坛用户原创制作的一个USB接口工具, 可选择手动/自动启动或者禁止启动模式, 开启禁止启动模式后USB接口将关闭识别功能, 有效防止U盘设备侵入,对于机房实验室设施来说相当管用. 下载地址:htt ...

  4. 笔记本USB接口案例分析和是实现

    笔记本电脑 笔记本电脑(laptop)通常具备使用USB设备的功能.在生产时,笔记本都预留了可以插入USB设备的USB接口,但具体是什么USB设备,笔记本厂商并不关心,只要符合USB规格的设备都可以 ...

  5. 【转】重装win7后,所有USB接口无法使用(鼠标、键盘、U盘)

    转自:https://blog.csdn.net/u010887744/article/details/45270245 今天给一朋友重装系统,华硕FX50J,修改BIOS重装了win7,结果所有US ...

  6. 接口的多态使用; 接口应用实例:U盘、打印机可以使用共同的USB接口,插入到电脑上实现各自的功能。

    接口的多态使用 接口应用实例:U盘.打印机可以使用共同的USB接口,插入到电脑上实现各自的功能.

  7. 突发小事件,USB接口问题

    昨天遇到的突发事件,突然USB接口全部瘫了,键盘鼠标全部不能用,换到别人电脑上可以,吓尿了,以为本子主板挂了,但是发现插U盘竟然可以识别而且可以打开,感觉可能是静电问题,果然,彻底关机,拔掉电池,然后 ...

  8. USB接口无法识别设备

    http://windows.microsoft.com/zh-cn/windows/answers?tId=14fa1e44-0a19-48ef-9ba7-b7e512a837a4 小琼子 提问 2 ...

  9. 下一代USB接口将支持双向拔插,于明年亮相

    近日,USB接口标准制定组织表示新一代USB接口将于明年年中亮相,而其名称目前被暂定为了USB Type-C.该组织表示USB Type-C标准将允许制造商采用更纤薄的接口设计,在实用性大大提高的同时 ...

随机推荐

  1. django-restframework之缓存系统

    django-restframework之缓存系统 一 前言 一 为什么需要缓存 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增.删.查.改,渲染模块,执行业务逻辑,最后生成用户看到的 ...

  2. python3-列表字典简单练习题

    .求全部元素的和[,,,,,,,] >>> a=[,,,,,,,] >>> result= >>> for i in a: ... result+ ...

  3. js中let和var的区别 不懂得加QQ 2270312758

    js中使用let定义变量的时候,是需要使用严格模式的,我看到网上有的博客说:如果在不使用严格模式的情况下,使用let会报错,但是在实验的过程中,我直接定义了let变量而且也没有使用严格模式,并没有报任 ...

  4. Yii2设计模式——注册树模式

    应用举例 在Yii.php中: <?php class ServiceLocator extends Component { //保存实例化的对象,每个对象都是单例,且有唯一string类型的I ...

  5. css选择器概述

    css选择器种类 id选择器 类选择器.属性选择器.伪类选择器 元素选择器.伪元素选择器 通配符选择器.子类选择器.后代选择器.相邻兄弟选择器.选择器分组 一.id选择器 <p id=" ...

  6. Python数据挖掘

    Python之所以如此流行,原因在于它的数据分析和挖掘方面表现出的高性能,而我们前面介绍的Python大都集中在各个子功能(如科学计算.矢量计算.可视化等),其目的在于引出最终的数据分析和数据挖掘功能 ...

  7. Java 基于ArcFace人脸识别2.0 服务端Demo

    源代码传送:https://github.com/itboyst/ArcSoftFaceDemo 开发环境准备: ###开发使用到的软件和工具: Jdk8.mysql5.7.libarcsoft_fa ...

  8. vs code配置flutter开发android

    下载flutter_sdk压缩包,解压到指定目录,把sdk的bin目录添加到系统环境变量Path 设置中国临时镜像:添加两个系统变量 FLUTTER_STORAGE_BASE_URL=https:// ...

  9. Python使用Plotly绘图工具,绘制饼图

    今天我们来学习一下如何使用Python的Plotly绘图工具,绘制饼图 使用Plotly绘制饼图的方法,我们需要使用graph_objs中的Pie函数 函数中最常用的两个属性values,用于赋值给需 ...

  10. [20190417]隐含参数_SPIN_COUNT.txt

    [20190417]隐含参数_SPIN_COUNT.txt--//在探究latch spin计数之前,先简单探究_SPIN_COUNT.实际上oracle现在版本latch spin的数量不再是200 ...