1.10.3_I2C_程序框架_P

下面介绍一下I2C程序的框架。

IIC控制器不知道数据的含义,它只负责数据的传输,主要是读和写功能的实现。

下图是IIC传输数据的结构。
在这里插入图片描述下图是AT24cxx的写时序图。
在这里插入图片描述下图是AT24cxx的读时序图。
在这里插入图片描述我们的程序应该分为两层,上层是I2C设备,比如AT24cxx,下层是I2C控制器,比如2440。

I2C控制器有很多种,比如2440的I2C控制器,Ti的I2C控制器,他们都分到下层的I2C控制器一层,上层的I2C设备则将I2C的功能进行封装,这样在使用不同芯片的I2C控制器时,我们就直接通过调用设备函数而不关心底层的控制器类型。

通过i2c_transfer函数来调用I2C设备,第一个参数是I2C message,第二个是message的数量。I2C message是一个结构体,其中的元素类型参考uboot中的I2C message来设置。
在这里插入图片描述下图是uboot中的i2c message,参考uboot中的i2c_msg来编写我们自己驱动的I2C message,我们不需要那么复杂,只需要实现读写功能即可。

  1. addr,表明设备地址;
  2. flags,表明是读还是写,写设为0,读设为1;
  3. len,表示要读或写的数据的数量;
  4. buf,数据的缓冲区,对于写,用来指向数据;对于读,用来存取数据。

在这里插入图片描述对于写操作,需要使用两个i2c message,一个用来写地址,一个用来读数据。看要几个message,可以通过start信号的个数来判断,几个s信号就表示需要使用几个message
在这里插入图片描述
综上所述,底层共用三个文件。

  1. at24cxx.c,主要存放at24cxx的读写函数;
  2. i2c_controller.c,主要实现i2c控制器的功能,供上层调用。
  3. s3c2440_i2c_controller.c,实现2440的i2c控制器功能,i2c_controller.c会来这里调用相关函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值