1. I2C介绍
IIC又简写成I2C,是一种串行通信总线,使用多主从架构。
最初设计目的为了让主板、嵌入式系统或手机用来连接低速周边设备。多用于小数据量的场合,有传输距离短,任意时刻只能有一个主机等特性。
在Linux嵌入式应用开发的情景下,完全可以不必理会IIC协议的详细规定。只需要按照驱动层提供给我们的操作IIC外设的操作接口函数就可以像操作linux中其他普通设备文件那样轻松的操作IIC外设了。
1.1 开发板上I2C资源介绍
EASY EAI Nano-TB开发板预留引出了1路IIC资源:IIC_5,以供用户自定义调用。确切的分部位置,如下图所示:
1.2 硬件接线示意图
本示例采用ADS1115电压检测模块进行辅助演示。此模块功能是把检测到的电压(模拟信号)转化为数字信号存入寄存器中,然后以IIC的通信方式对外提供电压信息的提取。
ADS1115模块与EASY EAI Nano-TB的接线原理图如下所示:
2. 快速上手
2.1 开发环境准备
如果您初次阅读此文档,请阅读《入门指南/开发环境准备/Easy-Eai编译环境准备与更新》,并按照其相关的操作,进行编译环境的部署。
在PC端Ubuntu系统中执行run脚本,进入EASY-EAI编译环境,具体如下所示。
cd ~/develop_environment ./run.sh
2.2 源码下载以及例程编译
首先,在虚拟机后台终端,执行以下命令,创建外设单例源码管理目录:
cd /opt mkdir -p EASY-EAI-Nano-TB/demo
首先,到【百度网盘】上下载相关的单例程序:
链接:https://pan.baidu.com/s/1Br608Hiff2Xs65PzWO_qWQ?pwd=1234
提取码:1234
比如把单例程序下载到:此电脑\D:\BaiduNetdisk (无规定,用户可自主选择),如下图所示。
最后,进入到对应的例程目录执行编译操作,具体命令如下所示:
cd EASY-EAI-Nano-TB/demo/08_IIC ./build.sh
注:
* 由于依赖库部署在板卡上,因此交叉编译过程中必须保持/mnt挂载。
编译成功后,会生成一个test-ads1115的可执行程序,并会自动部署到开发板的/userdata/目录中。
2.3 例程运行
通过串口调试或ssh调试,进入板卡后台,定位到例程部署的位置,如下所示:
cd /userdata
执行例程命令,如下所示:
sudo ./test-ads1115
执行效果如下所示,利用探测分别触碰3V3,1V8,GND三个端子,则可在终端测出对应的电压值。
3. C语言使用案例
ADS1115的C语言使用案例,代码地址为08_IIC/test-ads1115/main.c,供用户编码参考。以下代码展示了对ADS1115操作流程:
int32_t ads1115_config_register(uint32_t fd, uint8_t configH, uint8_t configL) { uint8_t reg_data[3] = {ADS1015_REG_POINTER_CONFIG, configH, configL}; return iic_write(fd, ADS1115_ADDRESS, reg_data, sizeof(reg_data)); } int16_t ads1115_read_data(uint32_t fd) { bool ret = false; /*读取数据*/ uint8_t tx_data[1] = {ADS1015_REG_POINTER_CONVERT}; if(iic_write(fd, ADS1115_ADDRESS, tx_data, sizeof(tx_data)) < sizeof(tx_data)){ printf("iic write faild !\n"); return -1; } uint8_t rx_data[3]={0}; if(iic_read(fd, ADS1115_ADDRESS, rx_data, 2) < 0){ printf("iic read faild !\n"); return -1; } int16_t data = rx_data[0]*256+rx_data[1]; return data; } double ads1115_get_voltage_val(uint32_t fd, uint8_t configH, uint8_t configL) { /*配置寄存器*/ if(ads1115_config_register(fd, configH, configL) < 0){ printf("ads1115 config register faild\n"); return 0.0; } usleep(100 * 1000); int16_t ad_val = ads1115_read_data(fd); if((0x7FFF == ad_val)|(0X8000 == ad_val)) {//是否超量程了 ad_val = 0; printf("ads1115 over PGA\r\n"); } double val = 0.0; switch((0x0E&configH)>>1)//量程对应的分辨率 { case(0x00): val = (double)ad_val*187.5/1000000.0; break; case(0x01): val = (double)ad_val*125/1000000.0; break; case(0x02): val = (double)ad_val*62.5/1000000.0; break; case(0x03): val = (double)ad_val*31.25/1000000.0; break; case(0x04): val = (double)ad_val*15.625/1000000.0; break; case(0x05): val = (double)ad_val*7.8125/1000000.0; break; default: val = 0.0; break; } return val; } int main(int argc, char const *argv[]) { bool ret = false; double val; int fd = iic_init("/dev/i2c-2"); if(fd < 0){ printf("iic init faild \n"); return -1; } if(0 != iic_set_addr_len(fd, 7)){ return -1; } if(0 != iic_set_addr(fd, ADS1115_ADDRESS)){ return -1; } while (1) { val = ads1115_get_voltage_val(fd, CONFIG_REG_H, CONFIG_REG_L); printf("val: %f V\r\n",val); sleep(2); } iic_release(fd); return 0; }
其中iic_init(),iic_set_addr_len(),iic_set_addr(),iic_read(),iic_write(),iic_release()是对系统调用的易用化封装。具体实现于08_IIC/commonApi/iic.c
除了需要有对IIC硬件资源进行操作的接口以外,要需要清楚IIC总线上的IIC从机设备的寄存器操作方法。如ADS1115电压检测芯片,与其寄存器相关的操作定义均在08_IIC/test-ads1115/ads1115.h中实现。
- 随机文章
- 热门文章
- 热评文章
- 番茄小说探索融合出版:与近400家出版社合作,电子出版物日活用户超千万,番茄小说探索融合出版:与近400家出版社合作,电子出版物日活用户超千万
- “苏超”火遍全网 江苏徐州踢出文体旅商新配合,“苏超”火遍全网 江苏徐州踢出文体旅商新配合
- 夏厦精密(001306):第二届董事会第十三次会议决议
- [风险]南京商旅(600250):南京商旅股票交易风险提示公告
- 武汉控股(600168):武汉三镇实业控股股份有限公司第九届董事会第四十二次会议决议
- 诚志股份(000990):2025年度第一期中期票据发行结果
- 杭州高新(300478):召开2025年第一次临时股东大会的通知
- 万年青(000789):江西万年青水泥股份有限公司2025年面向专业投资者公开发行公司债券(第一期)票面利率公告
- 1[风险]嘉实原油LOF (160723): 嘉实原油证券投资基金(QDII-LOF)溢价风险提示公告
- 2广西三地接连发布公告:禁止前往!后果自负!
- 3甜蜜的事业,幸福的滋味……
- 4SCADA系统的NAT转换与网段隔离解决方案
- 5芦苇任中国邮政集团副总经理
- 6A股三大股指集体收涨,沪指续创10年新高,A股三大股指集体收涨,沪指续创10年新高
- 7穆勒矩阵椭偏仪:DVRMME技术的系统误差建模与校准补偿
- 8政策定调催生新主线,A股跨年行情蓄势待发
- 1废砖瓦里砌出风景线 湖南靖州深山村寨美丽嬗变,废砖瓦里砌出风景线 湖南靖州深山村寨美丽嬗变
- 2文科生也可以学医了!多所高校中医学类专业选科放宽,文科生也可以学医了!多所高校中医学类专业选科放宽
- 3湖南零陵发展数字农业 现代农民种粮更轻松,湖南零陵发展数字农业 现代农民种粮更轻松
- 4上午买食材、下午逛潮店 古城老菜场人气足,上午买食材、下午逛潮店 古城老菜场人气足
- 5广东怀集所有国省道主线均已抢通,广东怀集所有国省道主线均已抢通
- 6520分钟攻坚!成渝中线高铁成都站改建工程进度过半,520分钟攻坚!成渝中线高铁成都站改建工程进度过半
- 7广东清远连山紧急转移8名村民 避险山体滑坡,广东清远连山紧急转移8名村民 避险山体滑坡
- 8中意经典著作互译出版项目启动 四部重磅作品首批入选,中意经典著作互译出版项目启动 四部重磅作品首批入选
