[RK3288][Android6.0] 调试笔记 --- 测试I2C设备正常传输方法【转】
本文转载自:http://blog.csdn.net/kris_fei/article/details/71515020
Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
rk在驱动层做了一个通用i2c测试代码提供给上层快速测试i2c外设是否传输正常.
测试使用方法:
#echo [0-5] > /dev/i2c_detect //0-5表示i2c number号,不过i2c5需要修改下驱动,默认只支持到i2c4.
例如我的i2c2接的是audio codec:
- &i2c2 {
- status = "okay";
- rt5631: rt5631@1a {
- compatible = "rt5631";
- reg = <0x1a>;
- };
- };
root@rk3288:/ # echo 2 > /dev/i2c_detect
kernel log出打印:
I2c2 slave list: 0x1a
而audio codec的地址就是0x1a.
驱动关键点说明:
kernel/drivers/i2c/buses/i2c-rockchip.c:
- static ssize_t i2c_detect_write(struct file *file,
- const char __user *buf, size_t count, loff_t *offset)
- {
- char nr_buf[8];
- int nr = 0, ret;
- /*只支持到i2c4, 如果要支持i2c5,那么要改成5.*/
- if (count > 4)
- return -EFAULT;
- ret = copy_from_user(nr_buf, buf, count);
- if (ret < 0)
- return -EFAULT;
- sscanf(nr_buf, "%d", &nr);
- /*这里得改成6. */
- if (nr >= 5 || nr < 0)
- return -EFAULT;
- slave_detect(nr);
- return count;
- }
- static void slave_detect(int nr)
- {
- int ret = 0;
- unsigned short addr;
- char val[8];
- char buf[6 * 0x80 + 20];
- struct i2c_client client;
- memset(buf, 0, 6 * 0x80 + 20);
- sprintf(buf, "I2c%d slave list: ", nr);
- do {
- /*扫描0x01~0x80地址范围的设备.*/
- for (addr = 0x01; addr < 0x80; addr++) {
- detect_set_client(&client, addr, nr);
- /*读取一个字节.*/
- ret = detect_read(&client, val, 1);
- if (ret > 0)
- sprintf(buf, "%s 0x%02x", buf, addr);
- }
- /*打印扫描到的设备地址.*/
- printk("%s\n", buf);
- }
- while (0);
- }
- static int detect_read(struct i2c_client *client, char *buf, int len)
- {
- struct i2c_msg msg;
- msg.addr = client->addr;
- msg.flags = client->flags | I2C_M_RD;
- msg.buf = buf;
- msg.len = len;
- /*以100kHz的速率读取*/
- #ifdef CONFIG_I2C_ROCKCHIP_COMPAT
- msg.scl_rate = 100 * 1000;
- #endif
- return i2c_transfer(client->adapter, &msg, 1);
- }
- 顶
- 1
- 踩
- 0
[RK3288][Android6.0] 调试笔记 --- 测试I2C设备正常传输方法【转】的更多相关文章
- [RK3288][Android6.0] 调试笔记 --- Goodix GT9和GT9F区别【转】
本文转载自:http://blog.csdn.net/kris_fei/article/details/78341425 Platform: RK3288 OS: Android 6.0 Kernel ...
- [RK3288][Android6.0] 调试笔记 --- 普通串口的添加 【转】
本文转载自:http://blog.csdn.net/kris_fei/article/details/54574073 标签: rk3288 串口添加 2017-01-16 14:52 1079 ...
- [RK3288][Android6.0] 调试笔记 --- 替换系统签名【转】
本文转载自:http://blog.csdn.net/kris_fei/article/details/55100299 Platform: RK3288OS: Android 6.0Kernel: ...
- [RK3288][Android6.0] 调试笔记 --- eMMC分区号和名字的对应【转】
本文转载自:http://blog.csdn.net/kris_fei/article/details/77318410 Platform: Rockchip OS: Android 6.0 Kern ...
- [RK3288][Android6.0] 调试笔记 --- 软硬键盘同时使用【转】
本文转载自:http://blog.csdn.net/kris_fei/article/details/78748313 Platform: RK3288 OS: Android 6.0 Kernel ...
- [RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED【转】
本文转载自:http://m.blog.csdn.net/kris_fei/article/details/69553422 Platform: ROCKCHIPOS: Android 6.0Kern ...
- RK3288][Android6.0] 调试笔记 --- 关闭按键音后无法录音问题【转】
本文转载自:http://blog.csdn.net/kris_fei/article/details/70052413 Platform: ROCKCHIPOS: Android 6.0Kernel ...
- [RK3288][Android6.0] 调试笔记 --- 如何确认声卡是否注册成功【转】
本文转载自:http://blog.csdn.net/kris_fei/article/details/78399875 Platform: RK3288 OS: Android 6.0 Kernel ...
- [RK3288][Android6.0] 调试笔记 --- 录音音量从HAL到APP层会变小问题【转】
本文转载自:http://blog.csdn.net/kris_fei/article/details/72783843?locationNum=9&fps=1 Platform: Rockc ...
随机推荐
- SHoj A序列
A序列 发布时间: 2017年7月9日 18:17 最后更新: 2017年7月9日 21:05 时间限制: 1000ms 内存限制: 128M 描述 如果一个序列有奇数个正整数组成,不妨令 ...
- SGU101 求有重边的无向图欧拉迹
题意:好多木棒,俩端有数字(0--6)标记,按数字相同的端首尾相连成一条直线(木棒可以相同).即求有重边的无向图欧拉迹. 先判定是否为欧拉图,俩个条件,不说了.如果是欧拉图,输出路经. 方法:dfs遍 ...
- idea修改变量及其引用
idea 修改某一变量及其引用 选中变量 shift+f6(shift+fn+f6), ctrl+R的当前页面全局替换, ctrl+shift+R 项目中的全局替换
- 关于RPi.GPIO、BCM2835 c library、WiringPi、Gertboard
1.RPi.GPIO//RPi.GPIO-0.5.5.tar.gz 开发者:python官网:https://www.python.org/ 官网:https://pypi.python.org/py ...
- luogu P1886 滑动窗口(单调队列
题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...
- JVM内存分为哪几部分?各个部分的作用是什么?
JVM内存分为哪几部分?各个部分的作用是什么? 1. Java虚拟机内存的五大区域 Java的运行离不开Java虚拟机的支持,今天我就跟大家探讨一下Java虚拟机的一些基础知识. JVM内存区域分 ...
- websocket笔记
本文为原创,转载请注明出处: cnzt 文章:cnzt-p http://www.cnblogs.com/zt-blog/p/6742746.html websocket -- 双向通信网 ...
- CVE-2014-4114 和 CVE-2014-3566
这两天关注安全的人员都会特别留意这两个新披露的漏洞:CVE-2014-4114 和 CVE-2014-3566.以下我们就针对这两个漏洞最一些简要说明. CVE-2014-4114------- ...
- Andriod DiskLruCache的使用案例
DiskLruCache是谷歌推荐的用来实现硬盘缓存的类,本案例将对DiskLruCache的基本用法做一个总结,包括:创建缓存.查找使用缓存.移除缓存等等. 实现效果图 创建DiskLruCache ...
- java学习笔记(四)面向对象
一.形參长度可变的方法 当传入被调用的函数參数数量不确定时,在方法最后一个形參的类型后加上三个点号(...),表明该形參能够接受多个參数值.多个參数值被当做数组传入,这些參数必须为指定的类型. pac ...