现在的位置: 首页 > 综合 > 正文

i2c总线 && driver

2013年09月02日 ⁄ 综合 ⁄ 共 1056字 ⁄ 字号 评论关闭

一 1  i2c总线:2线式串行总线接口,SDA(数据线)和SCL(时钟信号线),SCL一般是由主设备控制的,用来控制数据传输的开始、结束、以及传输方向(即R/W)。

    2   当SCL 处于高电平时,SDA由高向低跳跃,即主设备通过I2C发送一个开始信号(所有从设备处于就绪状态);当SCL处于高电平,SDA由低向高跳跃,即主设备通过I2C总线发送一个停止信号。

    3  数据传输时,主设备发送从设备的地址和相应的数据(按照字节传输),挂在在这条I2C总线上的所有从设备都将地址和自己的地址进行匹配,如果匹配了则将接收收据(I2C设备的端口(设备驱动中已设置好)),从设备接收到数据后要响应主设备,如果不做响应,主设备会认为从设备出现故障,则将发送停止信号。

   4  数据传输完毕时,主设备发送停止信号。

二  1  I2C总线驱动,每条I2C总线都有一个对应的驱动,总线驱动并不做任何操作,只是为这条总线提供读写的机制而已。真正的读写操作是有设备驱动来完成的。

      2  机器上电后,先注册I2C总线驱动到内核中,然后注册I2C设备驱动到内核(在这过程中会将设备注册到系统中,通常情况下在PC机中由内核提供的模型驱动来完成)。

      3  系统初始化时,调用i2c_register_board_info接口将设备信息添加到__i2c_board_list中,然后i2c主机(微处理器)添加adapter,adapter将扫描__i2c_board_list,逐个地将设备注册到总线上。

三  1  I2C设备驱动,设备驱动注册到内核之后,会调用相应的接口来遍历系统中所有的I2C总线驱动,以此来探测设备,有可能会探测到多个设备,因为微控制器中有可能有多个I2C总线接口,同时每条I2C总线上可以挂载多个I2C设备(并行的挂在总线上),并且设备驱动可能为多条I2C总线上得I2C设备服务。

     2  I2C设备驱动探测到I2C设备后,会创建一个struct i2c_client结构体(属性包括,总线驱动、设备驱动,设备信息等)来标识该设备,这样总线驱动,设备驱动,I2C设备就关联起来了。之后若有通讯时,总线驱动会调用i2c_master_send   && i2c_master_recv来向设备写数据或者从设备读取数据。

四  1  驱动,本质上来讲是硬件设备(或芯片)的软件抽象。

      2  端口,对CPU而言即寄存器。

五   具体的源码可以参考    内核中  driver/i2c/i2c-core.c   &&   driver/i2c/i2c-dev.c 源文件

抱歉!评论已关闭.