B.Linux

灵魂构造师

导航

IIC设备

 驱动开发的学习方法:框架 --->流程--->编程

IIC硬件设备(低速总线)

两根信号线:SCL、SDA
总线速度:标准100kbps、快速模式400kbps、高速模式3.4Mbps
特点:半双工通信方式;仅需两根线(所以又被成为2-wire总线);一次传输8位;高位在前,低位在后;总线空闲状态:数据线SDA拉高

IIC硬件的基本操作原理

启动停止信号:由IIC主机发出

 

数据传输格式:
  SDA线上传输的每个字节要有8位,每次传输没有传输字节多少的限制。启动信号发出后,首先传输的是地址字段。如果IIC总线是主机模式,由主机发送地址地段。每一个字段后必须跟上应答位,字段中的内容(地址/数据) 按照先高位(MSB)后低位(LSB)的顺序传输。

 应答信号传输:
  对于每一个字节的传送,接收者都要发送一个应答信号给发送者。应答信号在时钟线SCL的第九个时钟时产生。这个应答信号需要的时钟脉冲由主机产生。在第九个时钟周期时,主机释放SDA,由从机驱动SDA线。当主机传送的地址与某个接收者(I2C从机设备)匹配,则这个接受者在第九个时钟周期高电平期间拉低SDA线,即发出一个ACK应答信号。

IIC子系统架构组成:
  设备驱动层组件(i2c-dev.c)、核心层组件(i2c-core.c)、总线驱动层组件(i2c-s3c2410.c)

IIC子系统架构功能作用

设备驱动层组件(i2c-dev.c)
================================
功能:

  给用户提供调用接口
  实现策略问题:发什么数据

核心层组件(i2c-core.c)
==================================
功能:

  注册一根I2C总线
  给驱动编程人员提供编程接口

总线驱动层组件(i2c-s3c2410.c)
===================================
功能:

  初始化硬件(I2C控制器)
  实现操作方法:(根据I2C操作时序进行控制I2c控制器,实现数据接收/发送)
        怎么发数据


IIC子系统架构设计的重要结构体和函数

IIC子系统开发之设备驱动涉及重要函数(linux/i2c.h)
==============================================================

int i2c_master_send(const struct i2c_client *client, const char *buf,int count);
int i2c_master_recv(const struct i2c_client *client, char *buf,int count);
int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs,int num);//传输一个i2c数据包
int i2c_register_board_info(int busnum, struct i2c_board_info const *info,unsigned n);//注册板子信息
/*注册/注销适配器*/
int i2c_add_adapter(struct i2c_adapter *);
int i2c_del_adapter(struct i2c_adapter *);
int i2c_add_numbered_adapter(struct i2c_adapter *);
/*注册/注销I2C驱动*/
int i2c_register_driver(struct module *, struct i2c_driver *);
void i2c_del_driver(struct i2c_driver *);
/*注册/注销I2C设备 */
struct i2c_client * i2c_new_probed_device(struct i2c_adapter *adap,struct i2c_board_info *info, 
      unsigned short const *addr_list,int (*probe)(struct i2c_adapter *, unsigned short addr));
void i2c_unregister_device(struct i2c_client *);

 

 


IIC子系统架构源码分析
IIC特定设备驱动开发

 

posted on 2019-10-17 12:01  B.Linux  阅读(712)  评论(0编辑  收藏  举报