1 前言

  linux下开发i2c设备驱动,一般分为两个阶段,第一阶段是驱动实现,第二阶段是调试。驱动实现即是对i2c设备的正确访问,包括读、写、控制。而第二阶段,一般用于需要调整参数的i2c设备,如增益、亮度、灰度、补偿系数等;因为该类参数需与具体使用场合关联,需实时调整该类参数以满足最佳的状态何效果。对于这种场景,如果通过频繁修改驱动源码来调整参数,很显然不是理想的方式,工作繁琐且效率低下。此时,一般借助第三方i2c工具,通过命令终端调整参数,直至确认一个合适的范围或数值后再修改驱动源码的参数。第三方i2c 工具常用的就是i2ctools,功能强大、移植方便、使用简易,关于i2ctools使用,参考该文章。

  海思(Hisilicon)SDK提供了一个i2c的读写工具,可以方便地通过命令终端读写i2c设备寄存器。该i2c工具虽然功能上不及i2ctools,但对于实时访问i2c设备寄存器足以胜任了。

2 海思i2c工具使用

  海思i2c 工具只提供两个命令,分别是读取数据i2c_read和写数据i2c_write

2.1 i2c_read

命令格式:

i2c_read <i2c_num> <device_addr> <reg_addr> <end_reg_addr>  <reg_width> <data_width> <reg_step>
  • i2c_num,i2c序号,只需填数字,如0、1、2
  • device_addr,设备地址
  • red_addr,待读设备起始寄存器地址
  • end_reg_addr,待读设备寄存器结束地址
  • reg_width,设备寄存器位宽,Byte(1)/Word(2)
  • data_width,设备数据位宽,Byte(1)/Word(2)
  • reg_step,连读标识,1表示连读,0表示非连读,默认为连读模式

2.1.1 实例

读单个寄存器

  • i2c总线序号:i2c-0
  • 设备地址:0x60
  • 起始寄存器:0x0
  • 结束寄存器:0x0
  • 寄存器位宽:1Byte
  • 数据位宽:1Byte
  • 连读标识:非连读
# i2c_read 0 0x60 0x0 0x0 0x1 0x1 0x0
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:167}cmdstr:i2c_read
i2c_num:0x0, dev_addr:0x61; reg_addr:0x 0; reg_addr_end:0x 0; reg_width: 1; data_width: 1; reg_step:0x 1. 0x0 0xff
[END]

连读

  • i2c总线序号:i2c-0
  • 设备地址:0x60
  • 起始寄存器:0x0
  • 结束寄存器:0x5
  • 寄存器位宽:1Byte
  • 数据位宽:1Byte
  • 连读标识:连读
# i2c_read 0 0x60 0x0 0x5 0x1 0x1
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:167}cmdstr:i2c_read
i2c_num:0x0, dev_addr:0x61; reg_addr:0x 0; reg_addr_end:0x 5; reg_width: 1; data_width: 1; reg_step:0x 1. 0x0 0xff
0x1 0x8
0x2 0x8
0x3 0x8
0x4 0x8
0x5 0x1f
[END]

传入错误设备地址

# i2c_read 0 0x10 0x0 0x0 0x1 0x1
*** Board tools : ver0.0.1_20121120 *** hi_i2c_wait_rxfifo_notempty->314:
[debug]: {source/utils/cmdshell.c:167}
cmdstr:i2c_read
i2c_num:0x0, dev_addr:0abort! int_raw_status: 0x750!
x10; reg_addr:0x 0; reg_addr_end:0x 0; r
eg_width: 1; data_width: 1; reg_step:0x hi_i2c_abortprocess->86: 1. tx_abrt_src is 1.CMD_I2C_READ error!do errro
[END]

2.2 i2c_write

命令格式:

i2c_write <i2c_num> <device_addr> <reg_addr> <value> <reg_width> <data_width>
  • i2c_num,i2c序号,只需填数字,如0、1、2
  • device_addr,设备地址
  • red_addr,待写设备寄存器地址
  • value,待写数据值
  • reg_width,设备寄存器位宽,Byte(1)/Word(2)
  • data_width,设备数据位宽,Byte(1)/Word(2)

2.2.1 实例

  • i2c总线序号:i2c-0
  • 设备地址:0x60
  • 待写寄存器:0x0
  • 待写数据值:0x55
  • 寄存器位宽:1Byte
  • 数据位宽:1Byte
# i2c_write 0 0x61 0x0 0x55 0x1 x1
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:167}cmdstr:i2c_write
dev_addr:0x61; reg_addr:0x 0; reg_value:0x55; reg_width: 1; data_width: 1.
[END]# i2c_read 0 0x60 0x0 0x0 0x1 0x1
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:167}cmdstr:i2c_read
i2c_num:0x0, dev_addr:0x60; reg_addr:0x 0; reg_addr_end:0x 0; reg_width: 1; data_width: 1; reg_step:0x 1. 0x0 0x55
[END]

使用海思自带的i2c工具访问i2c设备相关推荐

  1. 海思的3516的交叉编译工具无法运行

    最近想编译海思的hisi3516CV500的东西,但是安装了编译链之后发现无法执行,报错如下: -bash: /opt/hisi-linux/x86-arm/arm-himix200-linux/bi ...

  2. 海思入门笔记二:HiBurn工具实现镜像烧写

    这里写自定义目录标题 海思入门笔记:HiBurn工具实现镜像烧写 第一步:裸板可使用串口先烧录boot(速度慢) 第二步:已烧好boot的板子,可使用USB快速烧录 海思入门笔记:HiBurn工具实现 ...

  3. 1.海思项目整理 编译烧录+启动参数+sample编译+bayeRGBYUV+MPP(VB+VI+VPSS)

    1.1.2.检测开发板 (4)SecureCRT监视打开,开发板开机,自动挂载到/home/aston/rootfs中 (5)自动加入/mnt中,执行./sample_venc即可 (6)在vlc中输 ...

  4. 海思 DSP xtensa xplorer

    海思新出的HI3559A和Hi3519A自带了DSP,对于我们这种做图形图像处理及加速的太有用了.拿到开发板后,才发现海思只提供了一个膨胀和腐蚀的例子.更坑的是,居然没有源代码,关键算法被封装成库了. ...

  5. 海思软件开发入门篇 (一)

    标题 海思软件开发入门篇 (一)   (第一次写博客,有错别字与写的不好的地方敬请谅解.)   加过很多群,也逛过很多论坛,很多人在问,第一次接触海思不知道从而入手,的确,现在一个SDK动不动上G,还 ...

  6. 海思开发板遇到的问题启发性的链接

    网络问题 Failed to start Raise network interfaces after upgrading to 16.04 networking - Failed to start ...

  7. gpio复用 海思_对海思上GPIO的一点理解

    [i=s] 本帖最后由 initios 于 2017-2-22 16:48 编辑 [/i] 最近兄弟我在折腾一块3516cv200+IMX323的板子,弄到GPIO这块时,一开始一头雾水,一番搜索加看 ...

  8. 海思hi3518ev300 编译uclibc

    uclibc编译 当海思自带的uclibc库无法满足要求时,可以通过uclibc源码编译出满足要求的libc版本.如海思自带的uclibc库不支持LD_PRELOAD选项时,可以通过编译uclibc源 ...

  9. 海思视频传输延时与速率问题初步解决

    题记:在上个月,用hi3518c+live555,实现在局域网中传输视频后,然后延时太大,大概延时域网中720p的画面延时在8s,640*480 在5s,320*240在3s左右,当时没有多去研究,然 ...

最新文章

  1. 面试:HashMap 夺命二十一问!
  2. 前端学习(2835):小程序中使用less
  3. 我的Go+语言初体验——(5)Go+ 基本语法之 Switch
  4. iOS应用开发:什么是ARC?
  5. Linux内核协议栈-一个socket的调用过程,从用户态接口到底层硬件
  6. 2010年的最后一天,我又辞工(日记)
  7. ASP.NET动态加载用户控件的页面生成过程
  8. 亿图图示edraw max mac版
  9. 【消息轰炸】Python消息轰炸
  10. mimics能导出什么格式_Mimics到底支持怎样的图像格式(修正版) – MATLAB中文论坛...
  11. android局域网怎么传文件,两手机同一局域网怎么传文件
  12. 关于阿里云短信验证服务完整的教程
  13. matlab有限差分一维导热,一维导热方程-有限差分法-matlab实现(汇编)
  14. Qt之QTreeWidget增删节点
  15. 06 legospike 官方教程 02——课堂管理 零件分类回收、遗失零件盒等
  16. PHP的一些常用算法
  17. 名片管理系统 #python项目 #演练 #增删改查CRUD #全程教程
  18. 几种分布式存储系统的分析
  19. 常用的adodb使用方法
  20. 1.Object.create() 是什么

热门文章

  1. 3台云腾讯云开始hadoop学习之路笔记二
  2. 计算机如何添加云文档,腾讯TIM怎么添加云文件?TIM添加云文件教程
  3. 新能源汽车BMS用CAN接口电流传感器IVT-S
  4. [每日一题] 45. 微信红包(模拟、map)
  5. 准备英文简历以及英文面试的经历
  6. 告诉你压力变送器选型参考大全!
  7. 迈克尔·杰克逊 you are not alone
  8. 滑模控制学习笔记(四)
  9. android美食分享app下载地址,美食记app下载-美食记 安卓版v1.0.3-PC6安卓网
  10. MATLAB在三维图形上绘制标记点