总结:后台开发板有接口。 本文将向您展示如何使用该界面。 同时,设备必须连接到同一地。 例如,在总线上,您从设备地址和寄存器地址开始读取字节长的数据。
0 背景
Jetson 开发板具有 I2C它配备有一个接口。 本文将向您展示如何使用该界面。 以Jetson TX2为例,其他设备的方法类似,但区别主要在于硬件接口。
1 硬件连接
Jetson TX1[ -TX2 开发套件载板规格 可以看到第 5 个引脚代表 SDA 和 SCL 接口,分别,并可以通过杜邦线连接到设备,同时设备必须连接到同一地(例如nano/NX)(对于设备,可以参考相应的载板文档)。
J21管脚定义如下:
或者直接参考:可以参考《移至SDA和SCL管脚的第3、5号管脚》此链接中的 I2C 总线 1"。
2 i2c-tools工具
2.1安装方法
jetpack包含i2c i2c安装了-tools工具,用于查询命令。 如果没有,您可以使用 apt 安装它。
$ sudo apt-获取更新$ sudo apt-]get install -y i2c-tools
i2c-tools 工具包括以下部分
i2cdetect[ k4]- --用于查找所连接设备的地址。
i2cdump----用于读取特定地址处所有寄存器的内容。
i2cset- -[k4 ]----- 将内容写入特定寄存器
i2cget-- ][ k4]- --[k4 ]从特定寄存器读取值
2.2 i2cdetect
i2cdetect命令用于检测。 系统上的 I2C 总线状态
$ sudo i2cdetect -li2c-3 i2c 3190000.i2c I2C 适配器 i2c-1 i2c c240000.i2c I2C 适配器 i2c-8 i2c 31e0000 .i2c I2C 适配器 i2c-6 i2c 31c0000.i2c I2C 适配器 i2c-4 i2c Tegra BPMP I2C 适配器 I2C 适配器 i2c-2i2c 3180000.i2c I2C 适配器 i2c-0 i2c 3160000.i2c I2C 适配器 i2c-7 i2c c250000.i2c I2C 适配器 i2c-5 i2c 31b0000.i2c I2C 适配器
,TX2有9组I2C接口,每组总线都被单独扫描以获取实现信息。
i2cdetect -y -r -a 1
示例:
-y 是忽略的方法问题 -r 为 SMBus 读字节命令 -a 为任意地址,1 表示 TX2 开发板上的 i2c -1
2.3 i2cdump
i2cdump 用于显示设备寄存器的值
i2cdump [-f] [-y] [- r first[k4 ] last] I2CBUS ADDRESS [MODE [BANK [BANKREG]] ]
显示总线 7 上设备 0x50 的所有寄存器的值
$ i2cdump - y 7 0x50 未指定大小(使用 byte[ k4]数据访问)0 1 2 34 5 6 7 8 9 a b c d e f 0123456789abcdef00:01 00 0d 00 ee 0c e8 03 42 44 00 00 00 00 00 00 ?????.??????BD....10:00 00 00 00 36 39 39 2d 38 33 33 31 30 2d 31 30 ....699-83310-1020: 30 30 2d 42 30 32 20 44 2e 30 00 00 00 00 00 00 00-B02 D.0.. .. ..30: 00 00 a5 04 a8 4b 04 00 a6 04 a8 4b 04 00 00 00 ..???K?.???K?...40: 00 00 00 00 a7 04 a8 4b 04 00 30 33 32 30 32 31 .... ??? K? .03202150:38 31 36 39 30 39 39 39 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0 0 00 00 00 ..... . 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... ..90:00 00 00 00 00 00 4e 56 43 42 1c 00 4d 31 00 00 。 ....NVCB?.M1..a0: a5 04 a8 4b 04 00 a6 04 a8 4b 04 00 a7 04 a8 4b ???K???.???K???.???Kb0: 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?... ......c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ......d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 。 .....e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... ..... .f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b9 .......?
2.4 i2cset
i2cset用于设置设备中单个寄存器的值
i2cset [-f] [-y] [- m 掩码] [ - ]r] I2CBUS 芯片-地址数据-地址 [值] ... [ MODE]
示例:将地址设置为 0x50,并将设备的寄存器设置为 0x20。 值为 0x04。
$ sudo i2cset -f -y 2 0x50 0x20 0x04
2.5 i2cget
i2cget 用于显示设备的单个寄存器值
i2cget [-f] [-y] I2CBUS CHIP-ADDRESS [DATA-ADDRESS [MODE]]I2CBUS 是一个整数或 I2C 总线名称 ADDRESS 是一个整数 (0x03 - 0x77) MODE 是以下之一: b(字节,默认) w(字) W (偶数寄存器地址上的字) s (SMBus 模块) i (I2C 模块) c (连续字节) 为 SMBus PEC 添加 p
示例:地址 使用 a 读取设备的 0x20 寄存器值为 0x50。
$ sudo i2cget -y 2 0x50 0x200x30
2.6 i2ctransfer
i2ctransfer 读取和写入使用的设备寄存器值。可在 2 字节寄存器中使用)
sudo i2ctransfer -f -y [总线序列号] w [要写入的数据长度] @ [设备地址] [ [寄存器地址高字节] [寄存器地址低字节] r[要读取的数据长度]。
示例:在1号总线上,从设备地址0x10开始,寄存器地址0x0101,读取16字节长的数据。
$ sudo i2ctransfer -f -y 1 w2@0x10 0x01 0x01 r160x80 0x80 0x00 0x08 0x10 0x1a 0x00 0x00 0x00 0x10 0x27 0x00 0x00 0x40 7 0x0d
3 个 i2c 代码示例
Linux 的 i2c 库可在 github 上找到。 地址:https://github.com/amaork/libi2c
下载后,可以使用以下方法安装。 创建和使用脚本。
git clone https://github.com/amaork/libi2c.gitcd libi2csudo python setup.py install
测试脚本
cd 示例python pylibi2c_tools.py -b /dev/i2c-1 -d 0x1b --iaddr 0x0b --data 0x00
表示将值0x00写入总线顶部地址0x1b处的设备的寄存器0x0b中。 这同样适用于其他用途。 参见代码说明。
参考
Jetson Nano I2C 读写寄存器 Jetson Nano I2C 描述和 Python
评论前必须登录!
注册