关于用户层IIC总线访问挂载在其上芯片的程序

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

         最近学了一下IIC总线,感觉挺有收获的,把自己的一些心得,体会与大家分享!

         我的开发板上有个LM75的芯片,要通过IIC总线访问得到其温度的值,在单片机

接触过IIC总线,单片机中应该说比这个要麻烦!因为要单片机程序要控制其中的数据线

和时钟线,在arm应用层下,由于linux系统中已经有IIC驱动(当然是自己裁剪内核是流下的),

i2c-dev.c并没有针对特定的设备而设计,只是提供了通用的read()、write()和ioctl()等接口,

应用层可以借用这些接口访问挂接在适配器上的i2c设备的存储空间或寄存器,并控制I2C设备的

工作方式。

      下面是我的关于LM75读取温度芯片的程序!

     

其中的注释部分都是在调试过程中留下的。

这样写时可以得到温度的数据,也是正确的。但是这种使用

read()、write()方法都只适合于如下方式的数据格式(可查看内核相关源码)

图1 单开始信号时序 

就是说只有一个开始信号,当有多个信号是就不可用啦!我在刘老师的博客中看到了一篇文章http://blog.csdn.net/hongtao_liu/archive/2009/12/08/4964244.aspx是讲述怎么通过Ioctl ()

函数处理多开始信号的问题的。函数写的很好我在自己的板子上改了一些相应的东西之后验证了哈是正确的!

在这里感谢刘老师。

之后我也想通过同样的方法来访问一个时钟芯片:DS1307,采集时间数据。但是失败啦!每次在读芯片数据时

ret=ioctl(fd,I2C_RDWR,(unsigned long)&ds1307_data);这句话通过perror报错为 :Connection timed out

把timeout的时间设置长点也还是一样!我在想是不是这样一个原因!因为的的内核驱动里面有DS1307的驱动,

得到的数据也是通说IIC总线传送的,我再在应用层通过IIC访问这个芯片的话就不行啦!不知道具体是不是这样的。

希望哪位看到了我的疑问的能给我个确定的回答!不甚感激!!!!!!!!!!

 

 

 

 

 

 

 

 

 

 

 

 

Arduino基础篇(六)-- 如何使用Arduino的IIC总线(Wire) 不论是多机通信,还是一个主控板控制多个传感器,我们都会遇到串口通信和IIC通信,本节主要详细介绍IIC总线构成,以及如何通过Wire类库的成员函数,实现多个设备之间的通信。 阅读详情

相关推荐

IIC总线子系统

IIC子系统主要由三部分组成:1)设备驱动负责外设驱动实现;2)核心管理设备匹配;3)适配实现时序控制。IIC采用开漏输出和上拉电阻设计,确保多设备共享总线时的安全性和线与功能。通信时序由主机控制,包含起始/停止条件、地址传输和数据应答机制。Linux内核IIC子系统通过i2c_adapter、i2c_client和i2c_driver等核心结构体实现设备管理,提供i2c_transfer等API进行数据传输。开发实例展示了触摸屏设备的注册流程,包括获取适配器、创建客户端设备以及驱动匹配过程。

weixin_56459724的博客 1292

通过Android手机或平板控制I2C接口设备

功能: 1、实现对适配器的GPIO管脚控制; 2、实现对I2C总线器件控制,比如读写I2C接口的EEPROM、读写I2C接口的传感器; 3、ADC功能,PWM功能程序正在开发中。 4、硬件使用纬图的Ginkgo USB-I2C适配器

IIC 总线的理解、调用函数以及常见面试问题

一、IIC 总线概述:IIC 即Inter-Integrated Circuit(集成电路总线I2C总线是PHLIPS公司推出的一种串行总线I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。 每个接到I2C总线上的器件都有唯一的地址。主机与其它器件间的数据传送可以是由主机发送数据到其它器件,这时主机即为发送器。由总线上接收数据的器件则为接收器。 二、IIC 总线

欢迎来到我的空间 2867

IIC Linux 应用的两种操作方式

一种是使用read and write的方式读写。一种是使用构造i2c_msg结构体的方式并利用ioctl的方式读写

IIC协议

两根通信线:SCL和SDA同步,半双工带数据应答支持总线挂载多设备(一主多从、多主多从)一主多从:单片机作为主机,挂载IIC总线上的所有模块都是从机,主机可以控制和哪一个从机进行通信。任何时候,都是主机完全掌控SCL时钟线,在SDA空闲状态下,主机可以获得SDA总线的控制,只有在从机发送数据和应答位时,主机才会将SDA的控制权移交给从机。

m0_61973119的博客 2701

第三章 STM32 IIC驱动

描述IIC的概念,stm32配置软件IIC和硬件IIC的过程

weixin_45740246的博客 1667

半小时搞懂STM32面经知识——IIC

同步半双工通信协议,适用于小数据和短距离传输。

weixin_45636780的博客 2587

IIC学习笔记(一)

IIC学习笔记

zoey424的博客 2739

用户态访问I2C设备

显然内核里面有万能的驱动程序给我们用 看看内核文档 在\linux-4.8.14\Documentation\i2c下面的 这里有的dev-interface,这里面告诉了什么,我们来看看里面说了什么 通常,I2C设备由设备驱动来控制,但是他也可以提供用户空间直接访问适配器上的设备,通过/dev接口。你需要加载I2C-DEV模块 有个i2c-tools 的工具包帮你写好了接口,在网

fight_onlyfor_you的博客 2566

IIC总线

I2C总线是飞利浦公司早期设计一款串行、同步、半双工总线IIC 总线是由飞利浦(Philips,现恩智浦 NXP)于 1982 年推出的一种串行通信总线,核心特点是 “双线控制、多主多从”,广泛应用于芯片间的短距离数据传输(如传感器、存储芯片、显示模块与 MCU/CPU 的通信),常见于消费电子、工业控制、智能家居等领域。

2301_77212325的博客 995

嵌入式必备总线协议 UART、IIC、SPI、RS232、RS485、CAN

针对嵌入式总线协议进行展开的文章

你要拥有一个你喜欢并且热爱的人生 1万+

单片机-IIC(I2C总线)

SHT20/SI7006-------------------------------------------->STM32U575RIT6----------->pc端的串口工具。注释:1、首先起始信号(下降沿信号),7位从机地址是为了寻找目标从机的,w(0)为写入数据(因为IIC总线的最小传输单位是8位,加上W(0)就满足条件了)注释:1、首先起始信号(下降沿信号),7位从机地址是为了寻找目标从机的,w(0)为写入数据(因为IIC总线的最小传输单位是8位,加上W(0)就满足条件了)

2301_78393632的博客 1343

模拟IIC总线多设备挂载(12864OLED屏幕+GY30光照传感器)

最终效果展示 OLED屏幕和GY30光照传感器(BH1750FVI)都连接在一个IICI2C总线上,所以只需要接4根线即可。获取到的光照强度可以在OLED上实时显示并通过串口打印。IIC是IO模拟IIC,方便后续代码的移植到各个单片机平台。 硬件汇总 单片机:STM32F103C8T6 OLED:0.96寸、128*64、驱动芯片是SSD1306(市场上常用) 光照强度传感器:GY-30,BH1750FVI主控即可 接线方法 IIC总线:SCL--PA1 、 SDA--PA0...

东小东博客 5302

细说STM32F407单片机IIC总线基础知识

I2C(Inter-Integrated Circuit)接口,有时也写作IIC或I²C接口,是一种串行数字总线接口。I2C接口只有2根信号线,总线上可以连接多个设备,硬件实现简单,可扩展性强。I2C接口主要用于通信速率要求不高,以及多个器件之通信的应用场景。本文使用的开发板:旺宝红龙STM32F407ZGT6 KIT V1.0。

wenchm的博客 2259

iic总线从机仲裁_对 IIC 总线的理解、调用函数以及常见面试问题

一、IIC 总线概述:IIC 即Inter-Integrated Circuit(集成电路总线)I2C总线是PHLIPS公司推出的一种串行总线I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。每个接到I2C总线上的器件都有唯一的地址。主机与其它器件间的数据传送可以是由主机发送数据到其它器件,这时主机即为发送器。由总线上接收数据的器件则为接收器。二、IIC 总线通信协议:要...

weixin_42157188的博客 1530

IIC总线解析

STM32的硬件IIC的发送和接收时序和软件IIC中的发送和接收数据时序是完全相同的,只不过硬件IIC设置了许多的标志位,通过这些标志位的改变来自动实现时序的推进。IIC总线是由数据线SDA和时钟线SCL构成的同步串行半双工总线,每一位数据都要由一个时钟脉冲进行对应,当时钟周期为低电平时,数据是不能被传输的。IIC总线空闲时,数据线SDA和时钟线SCL都为高电平,只有总线空闲时,主机才能使用IIC总线收发数据。数据传输期间,时钟SCL为高电平则SDA必须保持稳定,只有在SCL为低电平时才允许SDA变化。

Tao_9的博客 2362
上一篇: 一个telnet程序的学习心得!
下一篇: 一篇关于ARP欺骗的文章!!!
studying_linux
博客等级 码龄16年 4粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值