zoukankan      html  css  js  c++  java
  • rockchip 3128 平台USB接口鼠标U盘功能调试日记

    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 1 > /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模式及切换 

  • 相关阅读:
    JQuery中的bind()和unbind()的理解
    一行代码实现数组去重(ES6)
    vue.js学习笔记(Vuejs——组件——props数据传递)
    判断一个字符串书否存在某个字符,取出一段字符串括号中的内容
    在vue中使用高德地图vue-amap
    在egg.js中使用mongodb
    使用Element的upload上传组件,不使用action属性上传
    下载和安装mongodb4.2.0+robmongo可视化工具
    数组对象根据某个属性取出重复的个数
    钉钉小程序----使用阿里的F2图表
  • 原文地址:https://www.cnblogs.com/chorm590/p/rk3128_usb-mode.html
Copyright © 2011-2022 走看看