本文转载自: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:

  1. &i2c2 {
  2. status = "okay";
  3. rt5631: rt5631@1a {
  4. compatible = "rt5631";
  5. reg = <0x1a>;
  6. };
  7. };

root@rk3288:/ # echo 2 > /dev/i2c_detect
kernel log出打印:
I2c2 slave list:   0x1a
而audio codec的地址就是0x1a.

驱动关键点说明:
kernel/drivers/i2c/buses/i2c-rockchip.c:

  1. static ssize_t i2c_detect_write(struct file *file,
  2. const char __user *buf, size_t count, loff_t *offset)
  3. {
  4. char nr_buf[8];
  5. int nr = 0, ret;
  6. /*只支持到i2c4, 如果要支持i2c5,那么要改成5.*/
  7. if (count > 4)
  8. return -EFAULT;
  9. ret = copy_from_user(nr_buf, buf, count);
  10. if (ret < 0)
  11. return -EFAULT;
  12. sscanf(nr_buf, "%d", &nr);
  13. /*这里得改成6. */
  14. if (nr >= 5 || nr < 0)
  15. return -EFAULT;
  16. slave_detect(nr);
  17. return count;
  18. }
  19. static void slave_detect(int nr)
  20. {
  21. int ret = 0;
  22. unsigned short addr;
  23. char val[8];
  24. char buf[6 * 0x80 + 20];
  25. struct i2c_client client;
  26. memset(buf, 0, 6 * 0x80 + 20);
  27. sprintf(buf, "I2c%d slave list: ", nr);
  28. do {
  29. /*扫描0x01~0x80地址范围的设备.*/
  30. for (addr = 0x01; addr < 0x80; addr++) {
  31. detect_set_client(&client, addr, nr);
  32. /*读取一个字节.*/
  33. ret = detect_read(&client, val, 1);
  34. if (ret > 0)
  35. sprintf(buf, "%s  0x%02x", buf, addr);
  36. }
  37. /*打印扫描到的设备地址.*/
  38. printk("%s\n", buf);
  39. }
  40. while (0);
  41. }
  42. static int detect_read(struct i2c_client *client, char *buf, int len)
  43. {
  44. struct i2c_msg msg;
  45. msg.addr = client->addr;
  46. msg.flags = client->flags | I2C_M_RD;
  47. msg.buf = buf;
  48. msg.len = len;
  49. /*以100kHz的速率读取*/
  50. #ifdef CONFIG_I2C_ROCKCHIP_COMPAT
  51. msg.scl_rate = 100 * 1000;
  52. #endif
  53. return i2c_transfer(client->adapter, &msg, 1);
  54. }
 
1

0

[RK3288][Android6.0] 调试笔记 --- 测试I2C设备正常传输方法【转】的更多相关文章

  1. [RK3288][Android6.0] 调试笔记 --- Goodix GT9和GT9F区别【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/78341425 Platform: RK3288 OS: Android 6.0 Kernel ...

  2. [RK3288][Android6.0] 调试笔记 --- 普通串口的添加 【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/54574073   标签: rk3288 串口添加 2017-01-16 14:52 1079 ...

  3. [RK3288][Android6.0] 调试笔记 --- 替换系统签名【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/55100299 Platform: RK3288OS: Android 6.0Kernel: ...

  4. [RK3288][Android6.0] 调试笔记 --- eMMC分区号和名字的对应【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/77318410 Platform: Rockchip OS: Android 6.0 Kern ...

  5. [RK3288][Android6.0] 调试笔记 --- 软硬键盘同时使用【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/78748313 Platform: RK3288 OS: Android 6.0 Kernel ...

  6. [RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED【转】

    本文转载自:http://m.blog.csdn.net/kris_fei/article/details/69553422 Platform: ROCKCHIPOS: Android 6.0Kern ...

  7. RK3288][Android6.0] 调试笔记 --- 关闭按键音后无法录音问题【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/70052413 Platform: ROCKCHIPOS: Android 6.0Kernel ...

  8. [RK3288][Android6.0] 调试笔记 --- 如何确认声卡是否注册成功【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/78399875 Platform: RK3288 OS: Android 6.0 Kernel ...

  9. [RK3288][Android6.0] 调试笔记 --- 录音音量从HAL到APP层会变小问题【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/72783843?locationNum=9&fps=1 Platform: Rockc ...

随机推荐

  1. NCCloud 指令示例

    http://ansrlab.cse.cuhk.edu.hk/software/nccloud/ Implementation of NCCloud in C++ (updated: August 2 ...

  2. mongodb的安装及环境配置

    一 下载 官网:https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-3.6.3-signed.msi 官网可能打不开, ...

  3. 淘金(bzoj 3131)

    Description 小Z在玩一个叫做<淘金者>的游戏.游戏的世界是一个二维坐标.X轴.Y轴坐标范围均为1..N.初始的时候,所有的整数坐标点上均有一块金子,共N*N块.    一阵风吹 ...

  4. 发展城市 BZOJ 3700

    发展城市 [问题描述] 众所周知,Hzwer学长是一名高富帅,他打算投入巨资发展一些小城市. Hzwer打算在城市中开N个宾馆,由于Hzwer非常壕,所以宾馆必须建在空中,但是这样就必须建立宾馆之间的 ...

  5. Laravel 5.1 报错:[App\Http\Requests\Request] is not instantiable

    Laravel 5.1 报错:[App\Http\Requests\Request] is not instantiable 错误提示: Whoops, looks like something we ...

  6. Laravel 报500错误

    Laravel报500错误 发生情境: 使用Composer安装Laravel5.1版本到本地wamp环境,可以成功访问框架首页,然后上传到服务器上,报500错误. 解决: (1)在首页public/ ...

  7. Docker安装运行Redis

    Mac环境 查询镜像: zhoumatoMBP:~ zhou$ docker search redis NAME DESCRIPTION STARS OFFICIAL AUTOMATED redis ...

  8. 湘潭oj1203/邀请赛A题 数论+java大数

    求 n%1+n%2+n%3+n%4+.........n%n=,n<=10^12次. 开始时盲目地找规律,结果一无所获.后来经学长点拨,天资愚钝,搞了半天才明白. 先上图: 对于该题,在求区间( ...

  9. python在webservice接口测试中的应用

    接口测试第二波,webservice接口来咯,欢迎各位小伙伴吐槽~本次拿免费的互联网国内手机号码归属地查询WEB服务webservice接口做例子,当然有很多免费webservice接口可以供大家使用 ...

  10. Spring 详解(三)------- SpringMVC拦截器使用

    目录 不拦截静态资源 使用拦截器 拦截器使用测试 SimpleMappingExceptionResolver 拦截异常 不拦截静态资源 如果配置拦截类似于*.do格式的拦截规则,则对静态资源的访问是 ...