一、硬件接口说明:
主板上J2302插座对应CPU的I2C3,插座线序说明:
序号 | 说明 | 备注 |
---|---|---|
1 | VCC | 输出电压3.3V |
2 | I2C3_SCL | 该PIN需要外部加4.7K电阻上拉到VCC |
3 | I2C3_SDA | 该PIN需要外部加4.7K电阻上拉到VCC |
4 | GND | 电源参考地 |
二、下载测试程序源码:
linux i2c 测试软件源码下载:
linux-i2c-test-src-File
源码目录结构说明:
文件 | 说明 |
---|---|
i2c.h | i2c底层操作封装 |
i2c.c | i2c底层操作封装 |
I2cCtrl.h | i2c应用接口头文件 |
I2cCtrl.cpp | i2c应用接口源文件 |
test_i2c.cpp | 测试代码main |
Makefile | make编译脚本文件 |
进行编译操作前,需要先安装基本的编译工具,安装方法请参考"Linux应用程序开发(调用硬件)"说明.
编译和运行测试程序如下如下:
#编译
jb@X1:~/linx-i2c$ make
#执行
jb@X1:~/linx-i2c$ sudo ./test_i2c
若执行失败,请检查链接的i2c设备名称是否正确
I2C设备名称,可以从 $ ls /dev/i2c* 查看
这里用 /dev/i2c-4
样例程序是从0X50地址设备,从0X00寄存器地址读取8个字节数据(需要有真实设备链接)
若上面流程没有错误,执行程序结果如下;
$ sudo ./test_i2c
打开i2c 总线成功,读取寄存器
读取内容:00 01 02 03 04 05 06 07
bye
bye
接口文件I2cCtrl.h说明
#ifndef _I2C_CTRL_H
#define _I2C_CTRL_H
#include <stdint.h>
#include "i2c.h"
class I2cCtrl
{
i2c_t *i2c;
int8_t slave_addr;
public:
I2cCtrl();
~I2cCtrl();
public:
/**
* @brief : 打开I2C总线,/dev/i2c-x
* @param {char} *path:
* @return {*}
**/
int32_t Open(const char *path);
/**
* @brief : 释放总线
* @return {*}
**/
void Release();
/**
* @brief : 总线是否打开
* @return {*}true打开,false未打开
**/
bool isOpen();
/**
* @brief : 从寄存器读取数据
* @param {uint8_t} devAddr:从设备7位地址
* @param {uint16_t} regAddr:16位寄存器地址
* @param {uint8_t} *pData:待读数据内存
* @param {int32_t} len:数据长度
* @return {*}返回0为成功,其他为错误
**/
int32_t I2C_Read(uint8_t devAddr, uint16_t regAddr, uint8_t *pData, int32_t len);
/**
* @brief :
* @param {uint8_t} devAddr:从设备7位地址
* @param {uint16_t} regAddr:16位寄存器地址
* @param {uint8_t} *pData:待写数据内存
* @param {int32_t} len:数据长度
* @return {*}
**/
int32_t I2C_Write(uint8_t devAddr, uint16_t regAddr, uint8_t *pData, int32_t len);
/**
* @brief :
* @param {uint8_t} devAddr:从设备7位地址
* @param {uint8_t} regAddr:8位寄存器地址
* @param {uint8_t} *pData:待读数据内存
* @param {int32_t} len:数据长度
* @return {*}
**/
int32_t I2C_Read_RegAddr8bit(uint8_t devAddr, uint8_t regAddr, uint8_t *pData, int32_t len);
/**
* @brief :
* @param {uint8_t} devAddr:从设备7位地址
* @param {uint8_t} regAddr:8位寄存器地址
* @param {uint8_t} *pData:待写数据内存
* @param {int32_t} len:数据长度
* @return {*}
**/
int32_t I2C_Write_RegAddr8bit(uint8_t devAddr, uint8_t regAddr, uint8_t *pData, int32_t len);
/**
* @brief :
* @param {uint8_t} devAddr:从设备7位地址
* @param {uint8_t} *pData:待写数据内存
* @param {int32_t} len:数据长度
* @return {*}
**/
int32_t I2C_Write_only(uint8_t devAddr,uint8_t *pData, int32_t len);
};
#endif
三、I2C测试程序Qt界面:
1)先"连接I2C设备"
2)填写寄存器地址,有的设备寄存器地址是1个字节,有的设备寄存器地址是2个字节,根据具体I2C设备进行填写.
3)可以进行读写操作.
测试程序qt界面样例源码和如何编译使用,请参考如下页面:
http://wiki.youyeetoo.cn/zh/x1/linux/qt-build