i2c总线 && driver

一 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 源文件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值