驱动开发的学习方法:框架 --->流程--->编程
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特定设备驱动开发