(A) IIC总线 协议层面以及寄存器

两线式串行总线(SCL|SDA)。IIC设备通过这两条总线连接到处理器的IIC总线控制器上。

A.1 信号类型

开始信号:SCL高电平时SDA由高电平向低电平跳变
结束信号:SCL高电平时SDA由低电平向高电平跳变
响应信号:从机主接收到到 8 位数据后,在第 9 个时钟周期,拉低 SDA电平,表示已经收到数据。这个信号称为应答信号。

A.2 主机与从机

发送命令的设备为主机,一般是IIC控制器。
接收命令并响应的设备是从机

A.3 数据传输流程

主机通过数据线 SDA 向从机发送数据。当总线空闲时,SDA 和 SCL 信号都处于高电
平。主机向从机发送数据的过程如下。
(1)当主机检测到总线空闲时,主机发出开始信号 S。
(2)主机发出 8 位数据。这 8 位数据的前 7 位表示从机地址,第 8 位表示数据的传输方向。这时,第 8 位为 0,表示向从机发送数据。
(3)被选中的从机发出响应信号 ACK。
(4)从机传输一系列的字节和响应位。
(5)主机接受这些数据,并发出结束信号 P,完成本次数据传输

A.4 IIC设备的硬件原理

IICCON 寄存器用于控制是否发出 ACK 信号、是否开启 IIC 中断等
IICSTAT 寄存器 包括了对工作模式的控制,忙状态位/S信号和P信号,读取总裁状态,禁止/使能发送和接收功能等。
IICADD 寄存器用来表示挂接到总线上的从机地址,该寄存器用到位[7:1]表示从机地
址。IICADD 寄存器在串行输出使能位 IICSTAT[4]为 0 时,才可以写入;在任何时间都可
以读出。
IICDS 寄存器 IIC 控制器将要发送或者接收到的数据保存在 IICDS 寄存器的位[7:0]中。IICDS 寄存
器在串行输出使能位 IICSTAT[4]为 1 时,才可以写入;在任何时间都可以读出。

(B) IIC总线 设备驱动程序的结构以及编程方法

IIC设备驱动可以分为总线层设备层
总线层:i2c_algorithm 和 i2c_adapter,包括对CPU中的IIC总线控制器和控制总线通信的方法
设备层:i2c_driver 和 2c_client ,关系到实际的IIC设备

B.1 IIC设备(i2c_client)

IIC设备就是挂载在由SCL和SDA组成的总线上的所有设备。程序中由一个i2c_client结构体来描述:

B.1.1 设备地址概念

i2c_client中有个addr成员,用它来表示IIC设备的地址,他是个unsigned short类型的变量,只用到了8位
其实际组成为:

R/W:=0写入,=1读取
器件类型由半导体公司生产时固化
自定义地址:这是由用户自己设置的,通常的作法如 EEPROM 这些器件是由外部 I 芯片的 3 个引脚所组合电平决定的。自定义的地址码只能表示8个地址,所以同一IIC总线上同一型号的芯片最多只能挂载8个。
AT24C08 的自定义地址码如图所示,A0、A1 和 A2接低电平,所以自定义地址码为 0。

B.2 IIC驱动 i2c_driver

每一个IIC设备都应该对应一个驱动

B.3 IIC设备和IIC驱动的关系

IIC Client结构体由list成员链接起来,链在同一个链表上,表示挂接到同一条总线上的所有IIC设备,最后统一链接到Drvier 结构体上的clients成员上,该成员也是list_head类型。(绿色线条部分)
IIC Client结构体使用driver成员指向对应的IIC Driver上,图中Client A和B指向Driver A,表示这俩设备可以使用驱动A,Client C指向了Driver B。(红色线条部分)

B.4 IIC 总线适配器(i2c_adapter)

总线适配器其实也就是总线的控制器,实际的总线上连接了若干个IIC设备。
IIC总线适配器本质上是一个物理设备,主要就是控制IIC总线控制器的数据通信。

i2c_algorithme类型的algo下面即将介绍

B.5 IIC 总线驱动程序(i2c_algorithm)

每一个适配器对应一个驱动程序,i2c_algorithm algo* 是总线访问算法,i2c_adapter结构体内部有一个,会指向一个访问算法结构体。对于一个 I2C 适配器,肯定要对外提供读写 API 函数,设备驱动程序可以使用这些 API 函数来完成读写操作。 i2c_algorithm 就是 I2C 适配器与 IIC 设备进行通信的方法。

master_xfer 就是 I2C 适配器的传输函数,可以通过此函数来完成与 IIC 设备之间的通信。
smbus_xfer 就是 SMBUS 总线的传输函数。I2C 总线驱动,或者说 I2C 适配器驱动的主要工作就是初始化 i2c_adapter 结构
体变量,然后设置 i2c_algorithm 中的 master_xfer 函数。完成以后通过 i2c_add_numbered_adapter或 i2c_add_adapter 这两个函数向系统注册设置好的 i2c_adapter,这两个函数的原型如下
functionality () 函数,主要用来确定适配器支持哪些传输类型

(AB) 总线层和设备层的关系

整个架构:

Linux驱动开发 --- IIC总线相关推荐

  1. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之总线设备驱动模型

    文章目录 前言 1.驱动编写的三种方法 1.1.传统写法 1.2.总线驱动模型 1.3.设备树驱动模型 2.Linux实现分离:Bus/Dev/Drv模型 2.1.Bus/Dev/Drv模型 2.2. ...

  2. linux驱动开发篇(三)—— 总线设备驱动模型

    linux系列目录: linux基础篇(一)--GCC和Makefile编译过程 linux基础篇(二)--静态和动态链接 ARM裸机篇(一)--i.MX6ULL介绍 ARM裸机篇(二)--i.MX6 ...

  3. Linux驱动开发:platform总线驱动

    目录 1.为什么需要platform总线 2.设备端:platform_device 2.1 platform_device结构体 2.2 注册 2.3 注销 3.驱动端:platform_drive ...

  4. 【正点原子MP157连载】第二十三章 Linux设备树-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  5. Linux驱动开发(十五)---如何使用内核现有驱动(显示屏)

    前文回顾 <Linux驱动开发(一)-环境搭建与hello world> <Linux驱动开发(二)-驱动与设备的分离设计> <Linux驱动开发(三)-设备树> ...

  6. Linux驱动开发概述

    第 1 章 Linux驱动开发概述 设备驱动程序是计算机硬件与应用程序的接口,是软件系统与硬件系统沟通的桥梁.如果没有设备驱动程序,那么硬件设备就只是一堆废铁,没有什么功能.本章将对Linux驱动开发 ...

  7. 【正点原子Linux连载】第四十三章 Linux设备树 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  8. Linux驱动开发—内核I2C驱动详解

    Linux驱动开发--内核I2C驱动 I2C驱动文件结构 I2C数据传输过程 i2c_transfer i2c_msg I2C通讯常用的接口函数(老版本) 快速读写接口函数:(连续读写) 常用的读操作 ...

  9. Linux驱动开发必看详解神秘内核(完全转载)

    Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html IT168 技术文档]在开始步入Lin ...

最新文章

  1. 离散数学中的联结符号
  2. 网络编程应用:基于UDP协议【实现文件下载】--练习
  3. 八皇后问题初始思路python_Python 学习笔记(一)10行代码解决八皇后问题
  4. linux中查看用户组标识符,Linux用户和组管理
  5. java中字符串的操作_java中字符串的操作
  6. 1、Hive原理及查询优化
  7. 动手写的Python的HTML语法分析器(面向对象)
  8. linu - 系统延时与定时任务
  9. 服务器维修工单,运维工单--服务器申请工单
  10. 配置iscsi服务器_在Windows Server 2016上安装和配置iSCSI目标服务器
  11. 2014年即将过去,2015年即将到来
  12. 角色和武器Shader特效开发
  13. 九鼎实际控制人投资观!
  14. Java 实现发票信息输出为 PDF 文件(模板化)
  15. 用Android 写生成的梅花
  16. Word一部分内容分为两栏或多栏的方法
  17. 电脑系统重装下载的系统在哪找到
  18. 30岁女IT月薪3W的背后:从数据报表到数仓、中台,这工具帮了大忙
  19. 基于递归神经网络的跌倒检测系统
  20. 大咖说·图书分享|精益产品开发:原则、方法与实施

热门文章

  1. 现在的年轻人都欠债吗?
  2. java动态设置IP
  3. echarts图表鼠标滑过页面抖动
  4. openstack windows2012r2 glance镜像制作
  5. 虚拟服务器的弊端,解决虚拟化弊端的六大诀窍
  6. 政策评估模型_为什么我们需要一个开放的模型来设计和评估公共政策
  7. 对遗留系统组织重构项目
  8. Windows系统适配器里无法查找到VMnet1和VMnet8
  9. IDEA如何创建webapp(IDEA)
  10. V-REP用户手册(翻译)(一)