第二十六章 linux-i2c子系统一

简介: 第二十六章 linux-i2c子系统一

i2c总线协议

  • 12C(lnter—lntegrated Circuit),PHILIPS公司丿发的两线式半双工同步串行总线,具有接口线少,控制方式简单,通信速率较高等优点。
  • 可以用来连接存储器(EEPROM、FLASH)、A/D、D/A转换器、LCD驱动器、传感器等等。
  • i2C是一个多主机的总线,每个设备既可以当主控器或被控器,又可作为发送器或接收器,一条总线上可以有多个主机,但同一时刻只允许一个主机工作。
  • i2c总线有两根信号线:
    双向数据线(SDA)/时钟线(SCL)

总线通信基本概念

  • 通信方问划分
    全双工:收发数据可以同时进行
    半双工:不能同时收发数据,数据发时不能接收,比如i2c
  • 同步通讯 共用时钟信号线
    比如:i2C、SPI,USB3.0
    一般不支持远距离传输,通常是板级间的距离小于50cm的TTL电平
    同等条件下比异步通讯要快一些
  • 异步通讯
    比如uart,usb2.0,RJ45
    通距会稍远一些.通常是主机设备之间的通信
    为了实现跟远距离通讯,一般走差分号.比如:232、485、422、CAN
  • 串行通信 一个并发数包被分成多次传输,大多数表现为以bit位为单位收发数据

i2c通讯特点

  • 因为没有片选信号,所以选择从机是通过地址来实现的
  • 通过启起和终止信号来标识一次完整的通信过程
  • 通讯过程:
  1. 主机发起启始信号(时钟高电平期间,数据产生一个下降沿)
  2. 发送地址,通信之前先通过从机地址选中要通信的从机设备
  • 地址一般从模块芯片数据手册中获得
  • 有的也提供外I/O来手动指定
  • 通常是7位表示,也有10位的地址
  1. 主机接收对应从机的应答(ACK表示正确应答NACK表示异常应答)
  2. 开始传输数据,且每传输8bit数据应答一位
  3. 主机发起停止信号(时钟高电平期间,数据产生一个上升沿)
  4. 本次通信结束
  • 数据传输先发高位,再发低位
  • i2c是电平触发数据传输,不同于spi的边沿触发
  • 时钟低电平准备数据,时钟高电平采集数据
  • 位速率可达400kbit/s

应答信号:

接收器收到每个字节后的第9个时钟周期会发送一个应答信号(ACK)或非应答信号(NACK)

设备地址

每个支持i2c总线的设备,它都会有一个可以代表自己的地址。这个地址是唯一的,用7位或10位来表示,在出厂时己经确定固化。

i2c数据传输办法

i2C为电平触发方式(数据先发高位,再发低位)SDA线上的数据必须在SCL的高电平周期保持稳定。SDA线的电平状态在为低电平周期才可以改变。

i2c时序

i2c传输格式(写数据)

i2c几种工作模式

  • 标准模式:位速率100kbit/s。
  • 快速模式:位速率可达400kbit/s,向下兼容。
  • 高速模式:位速率可达3,4Mbit/s,向下兼容。
相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
Ubuntu Linux
Win10 Ubuntu子系统(内嵌ubuntu18.04)运行32bit Linux原生程序 解决Exec format error错误
Win10 Ubuntu子系统(内嵌ubuntu18.04)运行32bit Linux原生程序 解决Exec format error错误
183 0
|
安全 Linux
Linux内核OverlayFS子系统权限提升漏洞(CVE-2023-0386)
Linux内核OverlayFS子系统权限提升漏洞,在Linux内核的 OverlayFS子系统中,当用户将一个具有权限的文件从一个nosuid挂载点复制到另一个挂载点时,未经授权的攻击者可以执行setuid文件,导致权限提升。
193 1
|
20天前
|
Linux 网络安全 虚拟化
适用于Linux的Windows子系统(WSL1)的安装与使用记录
并放到启动文件夹,就可以开机自动启动了。
22 0
|
3月前
|
Ubuntu Linux 虚拟化
安装Windows Linux 子系统的方法:适用于windows 11 版本
本文提供了在Windows 11系统上安装Linux子系统(WSL)的详细步骤,包括启用子系统和虚拟化功能、从Microsoft Store安装Linux发行版、设置WSL默认版本、安装WSL2补丁,以及完成Ubuntu的首次安装设置。
815 2
|
6月前
|
算法 Ubuntu Linux
实现一个进程管理子系统-Linux课程设计1
实现一个进程管理子系统-Linux课程设计
183 1
|
5月前
|
Linux API 芯片
Linux GPIO 和 Pinctrl 子系统的使用(十四)
Linux GPIO 和 Pinctrl 子系统的使用(十四)
71 1
|
5月前
|
Linux
【Linux驱动学习(1)】USB与input子系统,linux统一设备模型,枚举,USB描述符深入剖析
【Linux驱动学习(1)】USB与input子系统,linux统一设备模型,枚举,USB描述符深入剖析
|
6月前
|
Linux Windows Ubuntu
Windows 使用 Linux 子系统,轻轻松松安装多个linux
Windows 使用 Linux 子系统,轻轻松松安装多个linux
552 0
Windows 使用 Linux 子系统,轻轻松松安装多个linux
|
6月前
|
算法 Linux API
一文聊聊Linux Kernel的加密子系统【Crypto Subsystem】
一文聊聊Linux Kernel的加密子系统【Crypto Subsystem】
444 1
|
6月前
|
算法 Linux 芯片
Linux驱动-I2C子系统基本分析
Linux驱动-I2C子系统基本分析
88 0