BeagleBone Black I2C总线相关操作
来源:互联网 发布:佛山市数据开放平台 编辑:程序博客网 时间:2024/05/21 11:33
连接
接线要点:共地(一定得共否则问题很多),SDA、SCL分别和从设备的SDA、SCL对应连接。下图中我的i2c从设备是TI的9B92,已经给它写好了i2c的程序(i2c地址为0x22),也就是它已经有自己的id了。
连接主要就是三根线(GND、I2C2_SDA、I2C2_SCL)。I2C2对应系统里面的1通道,即/dev/i2c-1。
使用i2c探测命令查看是连接正确:
root@BBB-CAN:~# i2cdetect -y -r 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- 22 -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 51 -- -- UU UU UU UU -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- 22 -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 51 -- -- UU UU UU UU -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
可以看到已经有22设备,不清楚为什么会出现50和51
Python操作i2c
如果使用Python来操作i2c的话需要安装python-smbus模块:
先更新安装包库:opkg update
安装python-smbus库:opkg install python-smbus
导入smbus模块
>>> import smbus
创建1通道上的总线
>>> bus = smbus.SMBus(1)
向总线的0x22地址(即i2c地址)的0号寄存器写0x11
>>> bus = smbus.SMBus(1)
向总线的0x22地址(即i2c地址)的0号寄存器写0x11
>>> bus.write_byte_data(0x22, 0x00, 0x11)
向总线的0x22地址(即i2c地址)的0号到4号寄存器写分别写1,2,3,4,5
向总线的0x22地址(即i2c地址)的0号到4号寄存器写分别写1,2,3,4,5
>>> bus.write_i2c_block_data(0x22, 0x00, [1,2,3,4,5])
使用好之后close一下
>>>bus.close()
C语言操作i2c
/*** BeagleBone Black I2C Bus* trb* 2013-12-13* ©ynsoft.cn*/// 相关头文件:#include <fcntl.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <linux/i2c-dev.h>int main(int argc, char *argv[]){ int fd, i; // 写缓存,第一个字节为i2c器件中起始地址(寄存器地址) unsigned char wbuf[] = {0x10,0,1,2}; // 读缓存 unsigned char rbuf[4] = {0x10}; // 打开i2c总线1,需要根据具体情况来的打开 fd = open("/dev/i2c-1", O_RDWR); if(!fd){ printf("open i2c fail\n"); exit(1); } // 设置i2c从地址(我测试用的i2c从设备地址为0x22) // I2C_SLAVE_FORCE表示强制设置不管有没有其他进程在使用i2c驱动 // I2C_SLAVE是温柔型的 if(ioctl(fd, I2C_SLAVE_FORCE, 0x22) < 0){ printf("ioctl fail\n"); exit(2); } // 向i2c设备(地址为0x22的从设备)0x10起始的地方写入3个字节,wbuf第一个值代表起始地址 write(fd, wbuf, 4); // 下面是读出测试 // 读之前先设置开始读的位置 // 当write的第三个参数为1的时候就只是设置起始地址(该地址在rbuf第一个字节指定)的作用 write(fd, rbuf, 1); // 设置完成之后开始连续读出3个,其实就是刚刚写进去的那三个 read(fd, rbuf+1, 3); // 下面只是简单输出 // 器件没有问题的话输出的应该和之前写入的一样 for(i=1; i<4; ++i){ printf("%02x ", rbuf[i]); } printf("\n"); // 最后关闭文件 close(fd); return 0;}
当然,如果喜欢的话你也完全可以使用Python来操作i2c文件,而不去使用smbus。
0 0
- BeagleBone Black I2C总线相关操作
- BeagleBone Black CAN总线读写数据操作
- BeagleBone Black CAN总线读写数据操作
- BeagleBone Black 打开CAN总线
- beaglebone black相关资源汇总
- 使用Beaglebone Black的I2C(一)
- 使用SSH操作Beaglebone Black
- I2C总线相关_3
- I2C总线相关_6
- beaglebone black 相关的书籍列表。
- Beaglebone Black 串口的操作(二)
- Beaglebone Black基本操作(Debian)
- I2C总线的相关程序
- 使用Beaglebone Black的I2C (二)——使用C语言和i2c-dev驱动
- 软件模拟I2C总线操作。
- Beaglebone Black 串口的操作(一)(更新)
- BeagleBone Black与主机共享网络之配置操作
- I2C总线协议相关的函数详解
- Cadence 信号完整性(一)-- 仿真步骤4
- 传智播客.Net精品就业班课程调整及学费调整通知
- 10046事件与tkprof命令
- HTC Desire Z获得永久ROOT权限的教程
- dbgen安装配置
- BeagleBone Black I2C总线相关操作
- 参与"创业周末Okanagan"的54小时
- mongo认识与使用
- 基于visual Studio2013解决面试题之0308Fibonacci数列
- 15分钟了解Java性能优化以及一切你想知道的
- HTC Desire Z刷MIUI图文刷机教程
- iOS小知识点总结
- HTML编程技术
- IE 下Enter提交表单重复提交问题