本文主要讲述TX2开发板和BMP280高度计采用IIC通讯。
1、首先,要用杜邦线对两者进行连接,连接示意图如下:
对于高度计来说,SCL和SDA分别是IIC通讯的时钟线和地址线,CSB是高度计的激活位,必须连接3.3V的高电平,SDO是地址选择位,若SDO接地,则高度计的地址为0X76,若接3.3V的高电平,则高度计地址为0X77。
对于TX2开发板来说,我们选择J21模块,其中J21_1表示J21模块的1接口。J21_1和J21_17是3.3V的高电平,J21_6和J21_39是低电平(接地),J21_3是SDA接口,J21_5是SCL接口。
2、接下来是查找地址。
采用i2c-tools命令行工具
i2cdetect----用来查找所连接的设备的地址
i2cdump----用来读出特定地址中所有寄存器中的内容
i2cset--------对特定寄存器写入内容
i2cget-------从特定寄存器中读值
我们采用如下命令来查找当前设备的地址:
i2cdetect -y -r -a 1
其中-y表示无视交互问题,-r是SMBus read byte命令,-a是所有地址,0表示TX2开发板的i2c-1(TX2有好几个I2C接口)。
3、Linux环境中IIC代码框架讲解
#include <stdio.h>
#include <stdint.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include "i2c.h"
#include <linux/i2c-dev.h>
#define BMP280_ADD 0x76 //高度计的地址
#define DIG_START 0x88 //温度补偿寄存器的起始地址
#define TEMP_START 0xFA //温度测量寄存器的起始地址
#define DIGP_START 0X8E //压强补偿寄存器的起始地址
#define PRESS_START 0XF7 //压强测量寄存器的起始地址
#define CTRL_MEAS 0xF4 //选择模式控制寄存器的地址
#define TEMP_ONLY_NORMAL_MODE 0xFF // 111 111 11 对寄存器的读写方式
int32_t t_fine=0;
//向特定的寄存器写值,用于设置读写方式
int writeReg(int pt, unsigned ch