BBB学习(十):操作BBB I2C接口
一、前言
前文中介绍了普通IO口的使用以及引脚功能互查表的用法,主要想通过简单的IO操作熟悉BBB的使用流程,在BBB的接口中,还在一类功能复用的引脚,如I2C、spi等,本节通过介绍I2C的使用方法,希望能够加深对BBB引脚功能使用的理解。
二 I2C-tool使用
1. i2c-tool基本命令
i2cdetect -l //罗列出系统所有i2c接口i2cdetect -y -r 1 //罗列出第1个i2c接口下的所有可用设备i2cdump -y -f 1 0x3a //第一个i2c接口下地址0x3a处的所有寄存器的值i2cget -y -f 1 0x3a 0x02 //得到第一个i2c接口下地址0x3a处寄存器0x02的值i2cset -y -f 1 0x3a 0x02 0x05 //设置第一个i2c接口下地址0x3a处寄存器0x02的值为0x05
2. 查看i2C接口
BBB系统中自带了i2c工具,可以通过相关命令查看i2c相关内容,如:
输入i2cdetect -l
命令:
i2c-0 i2c OMAP I2C adapter I2C adapteri2c-2 i2c OMAP I2C adapter I2C adapter
从结果中可知:BBB已经配置了两个i2c接口可以供使用。
3. 查看IO口
实际上BBB的i2c接口如下图,可以看出如果要使用i2c2则接口可以是P9_19 P9_20或P9-21 P9-22,通过前文BBB引脚功能互查表的用法,可以查出是哪个引脚当前处于I2C功能状态。经查本文中是采用P9_19和P9_20
4. 连接设备
本文采用DS3231时钟模块测试i2C接口,采用BBB板上3.3V给模块供电。如下图:
5. 查看设备地址
通过命令i2cdetect -y -r 2
可以查看总线2下的设备有哪些,如下图,从图中可以看出在地址0x68处有设备,是刚连接的RTC设备:
6. 查看设备寄存器
通过命令i2cdump -y -f 2 0x68
可以查看该设备下的所以寄存器的值,如下图所示,可以看出,从0x00到0x12这18个寄存器可以操作。
7. DS3231的寄存器介绍
通过ds3231的datasheet可以知道各个寄存器的功能,如下图所示,可以得到从0x00到0x06寄存器中分别是秒、分、时、日、月、年。因此程序中我们只需要读取这几个寄存器的值就可以确定时间。
三、程序实现
1. 程序代码
#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <linux/i2c-dev.h> #include <sys/ioctl.h> #include<iostream>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h> #define I2C_DIR "/dev/i2c-2" //i2c接口路径#define CHIP_ADDR 0x68 //RTC设备地址using namespace std;char readRegesiterAddr[2];char readRegesiterData[20];int main(){int fp;int i = 0, res = 0;char ioStatus = 0;fp = open(I2C_DIR, O_RDWR); /*读写模式打开direction*/if (fp < 0) {cout << "open failed!" << endl;return 0;}if (ioctl(fp, I2C_TENBIT, 0) < 0) //not 10bi{printf("set failed!\r\n");close(fp);return 0;}if (ioctl(fp, I2C_SLAVE, CHIP_ADDR) < 0) //设置为slave模式{ /* 设置芯片地址 */printf("oictl:set slave address failed\n");close(fp);return 0;}for (i = 0; i<5; i++){readRegesiterAddr[0] = 0x00;if (write(fp, readRegesiterAddr, 1) != 1) //定稿寄存器地址,从0x00开始读取{printf("write addr failed\n");}res = read(fp, readRegesiterData, 10); //读取10个寄存器的值printf("read data len:%d\n", res);printf("%x, %x, %x, %x, %x, %x\n", readRegesiterData[0], readRegesiterData[1], readRegesiterData[2], readRegesiterData[3], readRegesiterData[4], readRegesiterData[5]);sleep(1); /*延时一秒*/}close(fp);return 0;}
2. 程序编译及结果对比
该程序通过上文操作BBB普通IO口进行编译,首先将程序通过nano工具复制保存为i2ctest.cpp
文件,通过前文方法编译为可运行程序test,运行程序可以得到以下结果:
而通过i2cdump -y -f 2 0x68
命令可以对比其读出的寄存器值是否正确,如下图:
由以上两图中红色方框中可以看出除了保存秒的寄存器外,其他寄存器的值均正确。由此实现了通过i2c读取RTC寄存器的值
结语
本文主要通过读取i2c接口上的RTC芯片的寄存器的值来进一步熟悉BBB的一些常用IO口的使用,程序中主要是通过i2c的设备文件/dev/i2c-2
实现i2c接口的打开,并读写i2c设备(如RTC DS3231)的相关寄存器,本次操作中主要为了进一步加深前两节内容的理解。
BBB学习(十):操作BBB I2C接口相关推荐
- BBB学习(十八):cape介绍(一)DeviceTree
文章目录 一.前言 二. Device Tree介绍 2.1 什么是device tree 2.2 device tree文件 2.3 device tree语法结构 2.3.1 结点名称@单元地址 ...
- BBB学习(八):操作BBB普通IO口
一.前言 在linux系统中,一切设备都是以文件形式存在,因此其有一个中心思想是"一切都是文件"(当然除了网络设备是用套接字方式之外).在接下来的文章中会操作BBB相关硬件接口(g ...
- BBB学习(九):BBB引脚功能互查表的用法
文章目录 一.前言 二.查看BBB相关端口配置 三.对照BBB端口功能表 四.总结 一.前言 前节介绍了BBB普通IO口的操作,同时也完成了程序对IO口输入状态的检测.实际上,BBB众多端口都是可以配 ...
- EEPROM的操作---SPI接口和I2C接口
参考:http://blog.csdn.net/yuanlulu/article/details/6163106 ROM最初不能编程,出厂什么内容就永远什么内容,不灵活.后来出现了PROM,可以自己写 ...
- BBB学习(七):Windows电脑通信调试(3):桌面
文章目录 1.通过VNC登陆BBB远程桌面 2.HDMI接口 3.通过外接触摸屏 如果安装了debian系统安装包后,在BBB运行时有有类似于电脑桌面的,有的同学也习惯在有图形界面的电脑桌面对linu ...
- BBB学习(五):Windows电脑通信调试(1):debug口
一.系统启动 将前文制作的SD卡插入到BBB中,BBB上电之前,请按住S2按键(从SD卡启动),直到系统启动.如下图: 二.连接终端 一般在使用一个linux的系统,我们经常会用到终端Terminal ...
- i2c hid 触摸板不能用_I2C 总线协议初探 - STM32 I2C 接口外设学习笔记
I2C(Inter-Integrated Circuit)总线是由 PHILIPS(飞利浦) 公司开发的两线式串行总线,用于连接微控制器及其外围设备.是微电子通信控制领域广泛采用的一种总线标准.它是同 ...
- MSP430F5529 DriverLib 库函数学习笔记(十二)I2C实战
目录 上机实战 I2C给 DAC 芯片 DAC7571 写入数字量 DAC7571 介绍 程序分析 引脚复用 I2C 初始化 发送一个字节 发送一个字 读取一个字节 读取多个字节 中断服务函数 整体代 ...
- 嵌入式开发板硬件操作入门学习0——电路图概念 硬件接口的四大类
电路图概念 术语: sch:schematic,原理图 PCB:Printed Circuit Board,印刷电路板 footprint:脚印.足迹,表示元件在电路板上的外形 component:元 ...
最新文章
- WebGIS--ArcGIS for Flex系列开发一:flash builder
- 现在的学生太强了,徒手撸了一个小米商城项目(附源码)!
- 关于几种排序算法的时间性能比较
- Placeholder in IE8 and older
- 分享一篇关于陌生人社交的竞品分析报告
- Servlet异步处理性能优化的过程
- python搜索引擎和爬虫框架介绍
- 介绍一个3d bim模型展示开源项目
- C语言中未显示声明函数返回值的类型
- 微机笔记5——定时与计数
- 个人练习-jq 鼠标移上移出查看图片(放大)提示
- 关于Kafka幂等producer的讨论
- 商品cta策略_【钜阵CTA策略私募月报】​商品市场大幅上涨 CTA策略表现优异
- PLC通讯智能网关-不用PLC编程,实现西门子PLC与罗克韦尔(AB)PLC之间数据通讯
- .arx 与此版本的 AutoCAD 不兼容。
- Opencv实现多张JPG转GIF
- Unity Shader Alpha测试
- Prometheus告警规则
- 相对寻址方式与变址寻址方式的区别与联系
- 嵌入式Linux基础教程-读书笔记
热门文章
- pandas dataframe选取某行或列做元素相乘
- 社会化海量数据采集爬虫框架搭建
- 固高科技在创业板提交注册:业绩开始下滑,实控人均为“学院派”
- php汽车维修保养记录
- 荣耀7.0系统机器最简单激活Xposed框架的步骤
- 安卓手机怎么不用ROOT激活XPOSED框架的方法
- Wiki系统搭建(四)——HDwiki
- 大学重要证书排名和大学生应当常去的十大网,,,学习者都应该收集啊。
- html制作天猫页面,《编程基础:HTML第八章》:制作 天猫 商品图展示图
- 咦,貌似您的部分引文是从另一个文档中复制粘贴过来的啊。...