Linux下如何使用I2C总线和ADC

I2C总线

一主多从的通信协议

通信都是由主设备发起的

SCL:时钟线,由主端控制

SDA:数据线,主端和从端都可以配置

 

SCL和SDA的默认电平状态是高(上拉电阻)

 

i2c通信协议:

START信号:起始信号,SCL保持高,SDA从高到低跳变

STOP信号:结束信号,SCL保持高,SDA从低到高跳变

从设备地址:用来标识从设备的唯一性,从设备地址分为固定和可变的两部分

at24c02

adp8860

ACK信号:应答信号,表示是否处于数据交互的状态

 

I2C的通信过程:

1.主设备发送起始信号

2.主设备发送从设备地址(确定要访问的从设备)

3.主设备发送读写信号

4.从设备在位,就必须发送一个ACK信号给主设备

5.根据从设备的说明手册进行通信

 

6.如果数据交互完毕,主设备发送STOP信号

 

S5PV210内部集成了I2C控制器,I2C总线上数据交互时,所需的时序要求,都通过控制起来完成操作

控制器发起的时序,有些是固定的,有些是可变的,

固定:START/STOP/ACK/ R/W

可变:设备地址,读写设备的地址,数据

 

我们只需要把这些可变的信息高速I2C控制器,开始控制器即可完成相应的操作

 

 

基于以上内容,内核实现了I2C的驱动

I2C总线驱动

管理的硬件是I2C控制器,关心如何进行数据传输,不关心数据的具体含 义,总线驱动一般由芯片厂家提供,内核中已经存在

make menuconfig

Device Drivers --->

<*> I2C support --->

I2C Hardware Bus support --->

<*> S3C2410 I2C Driver

 

i2c设备驱动

管理的硬件是I2C从设备,关心的是从设备地址,访问从设备的方法,关 心数据的具体含义,不关心数据的传输,I2C设备驱动只需要将要传输的数据交给I2C总线驱动即可

 

linux内核i2c驱动框架

app:open read write

------------------------------------

i2c设备驱动

关心数据的具体含义,不关心数据的传输

eeprom_read................

-------------------------------------

内核提供了统一的方法实现设备驱动和总线驱动的数据交互

i2c_transfer();//老式接口

SMBUS接口(提供了一组函数);//新式接口

新式接口兼容老式接口

----------------------------------

I2C总线驱动

-----------------------

I2C控制器《=====》I2C从设备

 

 

I2C设备驱动如何实现?

使用设备---总线---驱动模型

i2c_bus_type总线

dev链表:i2c_client

drv链表:i2c_driver

i2c_client和i2c_driver如何使用

i2c_driver如何使用?

1.分配i2c_driver

2.初始化i2c_driver

struct i2c_driver eeprom_drv =

{

.id_table 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值