一、前言

前文中介绍了普通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接口相关推荐

  1. BBB学习(十八):cape介绍(一)DeviceTree

    文章目录 一.前言 二. Device Tree介绍 2.1 什么是device tree 2.2 device tree文件 2.3 device tree语法结构 2.3.1 结点名称@单元地址 ...

  2. BBB学习(八):操作BBB普通IO口

    一.前言 在linux系统中,一切设备都是以文件形式存在,因此其有一个中心思想是"一切都是文件"(当然除了网络设备是用套接字方式之外).在接下来的文章中会操作BBB相关硬件接口(g ...

  3. BBB学习(九):BBB引脚功能互查表的用法

    文章目录 一.前言 二.查看BBB相关端口配置 三.对照BBB端口功能表 四.总结 一.前言 前节介绍了BBB普通IO口的操作,同时也完成了程序对IO口输入状态的检测.实际上,BBB众多端口都是可以配 ...

  4. EEPROM的操作---SPI接口和I2C接口

    参考:http://blog.csdn.net/yuanlulu/article/details/6163106 ROM最初不能编程,出厂什么内容就永远什么内容,不灵活.后来出现了PROM,可以自己写 ...

  5. BBB学习(七):Windows电脑通信调试(3):桌面

    文章目录 1.通过VNC登陆BBB远程桌面 2.HDMI接口 3.通过外接触摸屏 如果安装了debian系统安装包后,在BBB运行时有有类似于电脑桌面的,有的同学也习惯在有图形界面的电脑桌面对linu ...

  6. BBB学习(五):Windows电脑通信调试(1):debug口

    一.系统启动 将前文制作的SD卡插入到BBB中,BBB上电之前,请按住S2按键(从SD卡启动),直到系统启动.如下图: 二.连接终端 一般在使用一个linux的系统,我们经常会用到终端Terminal ...

  7. i2c hid 触摸板不能用_I2C 总线协议初探 - STM32 I2C 接口外设学习笔记

    I2C(Inter-Integrated Circuit)总线是由 PHILIPS(飞利浦) 公司开发的两线式串行总线,用于连接微控制器及其外围设备.是微电子通信控制领域广泛采用的一种总线标准.它是同 ...

  8. MSP430F5529 DriverLib 库函数学习笔记(十二)I2C实战

    目录 上机实战 I2C给 DAC 芯片 DAC7571 写入数字量 DAC7571 介绍 程序分析 引脚复用 I2C 初始化 发送一个字节 发送一个字 读取一个字节 读取多个字节 中断服务函数 整体代 ...

  9. 嵌入式开发板硬件操作入门学习0——电路图概念 硬件接口的四大类

    电路图概念 术语: sch:schematic,原理图 PCB:Printed Circuit Board,印刷电路板 footprint:脚印.足迹,表示元件在电路板上的外形 component:元 ...

最新文章

  1. WebGIS--ArcGIS for Flex系列开发一:flash builder
  2. 现在的学生太强了,徒手撸了一个小米商城项目(附源码)!
  3. 关于几种排序算法的时间性能比较
  4. Placeholder in IE8 and older
  5. 分享一篇关于陌生人社交的竞品分析报告
  6. Servlet异步处理性能优化的过程
  7. python搜索引擎和爬虫框架介绍
  8. 介绍一个3d bim模型展示开源项目
  9. C语言中未显示声明函数返回值的类型
  10. 微机笔记5——定时与计数
  11. 个人练习-jq 鼠标移上移出查看图片(放大)提示
  12. 关于Kafka幂等producer的讨论
  13. 商品cta策略_【钜阵CTA策略私募月报】​商品市场大幅上涨 CTA策略表现优异
  14. PLC通讯智能网关-不用PLC编程,实现西门子PLC与罗克韦尔(AB)PLC之间数据通讯
  15. .arx 与此版本的 AutoCAD 不兼容。
  16. Opencv实现多张JPG转GIF
  17. Unity Shader Alpha测试
  18. Prometheus告警规则
  19. 相对寻址方式与变址寻址方式的区别与联系
  20. 嵌入式Linux基础教程-读书笔记

热门文章

  1. pandas dataframe选取某行或列做元素相乘
  2. 社会化海量数据采集爬虫框架搭建
  3. 固高科技在创业板提交注册:业绩开始下滑,实控人均为“学院派”
  4. php汽车维修保养记录
  5. 荣耀7.0系统机器最简单激活Xposed框架的步骤
  6. 安卓手机怎么不用ROOT激活XPOSED框架的方法
  7. Wiki系统搭建(四)——HDwiki
  8. 大学重要证书排名和大学生应当常去的十大网,,,学习者都应该收集啊。
  9. html制作天猫页面,《编程基础:HTML第八章》:制作 天猫 商品图展示图
  10. 咦,貌似您的部分引文是从另一个文档中复制粘贴过来的啊。...