制作网站的步骤和方法,广西展厅设计公司,电商网站开发定制,怎么增加网站的权重这是 北航士谔书院 的第 940 篇推送北航士谔书院X大班提醒您#xff1a;道路千万条#xff0c;学习第一条不搞单片机#xff0c;开学两行泪——新春快乐#xff0c;我们又回来了#xff01;本文对 IC 总线的协议做出详细的介绍#xff0c;并对其在 51 单片机上的应用代码… 这是 北航士谔书院 的第 940 篇推送北航士谔书院X大班提醒您道路千万条学习第一条不搞单片机开学两行泪——新春快乐我们又回来了本文对 I²C 总线的协议做出详细的介绍并对其在 51 单片机上的应用代码做出解析。I²C 总线集成电路间总线(Inter-Integrated Circuit BusI²C Bus读做 I-squared-C 或 I 方 C)是一种连接多个集成电路的总线。它由 Philips Semiconductors(现 NXP Semiconductors)于 1982 年开发。I²C 总线的特点多对多。在单个 I²C 总线上可以有多个主设备(Master Device)和多个从设备(Slave Device)。主设备通常是单片机而从设备通常是简单的外围设备(如传感器、单色显示屏)不过从设备也可以是单片机。通信总是由主设备发起并主导。通常我们仅在 I²C 总线上安排单个主设备本文也只讨论有单个主设备的情形。如果存在多个主设备那么它们需要进行较复杂的时钟同步和使用权仲裁在此暂不讨论。简单、易实现。I²C 总线仅需两个引脚就可连接多达 112 个设备而同类总线如 SPI 等则需要更多的引脚。I²C 协议简单直接不需要复杂的逻辑。低速。大多数 I²C 设备仅支持在 100 kbit/s 的标准模式(Standard Mode)工作少数设备最高支持 1Mbit/s 的快速模式(Fast Mode Plus)。比起其它总线I²C 的速度是比较慢的。短距离。I²C 允许的走线距离较短它通常被用于同一块 PCB 板上的 IC 间互联。I²C 总线不适用于长距离传输。I²C 总线的常见应用I²C 总线通常被用于将低速的外围设备通过短距离的线路连接到微处理器(单片机)上。常见的外围设备有温度传感器、电流电压传感器、单色显示屏等。这些设备结构简单且传输的数据量很少因此适用 I²C 总线。需要较高传输速度的设备(如高分辨率彩色显示屏)通常使用更高速度的连接方式(如 SPI)。I²C 总线的引脚组成及电气连接一个 I²C 总线由两条总线(Serial Clock, SCL 和 Serial Data, SDA)组成。I²C 总线上的设备都直接连接到这两个总线上(如图所示)。I²C 总线的连接方式。μC 即单片机所有连接到 I²C 总线的设备均使用开漏(Open-DrainOD)连接。每个 I²C 设备的电路可以简化为如下图的结构开漏连接可以将每个 P 沟道 MOSFET(MOSFET-P)想象为由单片机内部端口控制的“开关”开关可以观察到如果 I²C 总线上只连接了设备那么 I²C 总线不可能处于高电平(因为此时总线没有连接到电源 Vdd)。我们需要在 SDA、SCL 与 Vdd 间各增加一个上拉电阻(如上图 Rp)当“断开开关”时可以得到高电平当“合上开关”时可以得到低电平。完整的连接示意图在下文中我们将合上开关(使相应总线处于低电平)的动作称为“拉低”断开开关的动作称为“释放”。由于所有设备都并联在总线上所以若总线上有任意设备拉低总线总线即处于低电平状态只有当总线上的所有设备释放总线时总线才能处于高电平状态。这就是所谓的 Wired-And。I²C 通信协议概要空闲状态I²C 总线处于空闲状态时所有设备都释放总线SCL 与 SDA 均处于高电平状态。起始条件I²C 总线上的通信总是由主设备(Master)发起。当主设备希望通信时它就会产生一个起始条件(Start ConditionS)作为开始通信的信号。起始条件可以描述为当 SCL 处于高电平时SDA 由高电平向低电平转换。即在 I²C 总线空闲状态下主设备拉低 SDA代表起始条件开始一次通信。帧在 I²C 协议中传输总是以帧(frame)为单位进行的。一帧为 8bit即一字节。主设备和从设备都可以发送帧。在发送帧时发送方会逐位 (bit) 发送一字节 (byte) 数据且先发送最高位(most significant bitMSB)。例如如果发送方需要发送 183 10110111则按 1,0,1,1,0,1,1,1(从左到右)的顺序发送。发送一位数据的过程如下主设备首先将 SCL 拉低。发送方(主或从)在检测到 SCL 被拉低后使 SDA 处于相应的电平如果要发送 0就拉低 SDA如果要发送 1就释放 SDA。主设备等待一定的时长后释放 SCL此时发送方不改变 SDA 状态。接收方在 SCL 为高电平时读取 SDA 的状态得到相应数据并存储下来。发送完一位后主设备再次拉低 SCL进入下一个循环发送方发送下一位数据接收方读取下一位数据。如此循环 8 次即完成发送一帧。在发送完一帧的 8 字节后主设备会将 SCL 再拉低一次。接收方在检测到 SCL 第 9 次被拉低后如果接收当前帧成功则会将 SDA 拉低表示自己成功收到了数据这称作一个 ACK 信号(acknowledgement signal)。如果没有成功接收当前帧则在 SCL 为低电平时接收方不会作出任何动作而使 SDA 保持在释放状态这称作一个 NACK 信号(not acknowledgement signal)。NACK 信号并不是“主动发出”的只要接收方没有作出任何反应就代表一个 NACK 信号。如果总线上没有任何设备或者相应的接收方没有正常工作则发送方会收到一个 NACK。I²C 帧的传输流程可以观察到在传输帧时SDA 仅在 SCL 为低电平时发生变化。如果当 SCL 为高电平时 SDA 发生变化则会构成起始条件或停止条件。停止条件与重复起始条件在传输完一帧后主设备可以选择继续传输帧也可以选择停止传输还可以选择从头开始一次新的传输。如果它希望停止传输则需要产生一个停止条件(Stop ConditionP)其可以描述为当 SCL 处于高电平时SDA 由低电平向高电平转换。如果它希望从头开始新的传输则需要产生一个重复起始条件(Repeated Start ConditionSr)。重复起始条件与起始条件是相同的。起始条件和停止条件SCL、SDA 名称的含义有同学可能会对 Serial Clock 和 Serial Data 名称的含义感到不解。SCL 总是由主设备控制且它以几乎固定的频率切换因此它被称作 clock。SDA 则负责传输数据因此被称作 data。Serial 的含义是“串行”即同一时间只能发送一位(one bit)而要传输的许多位数据“排队”被传输。与“串行”(serial)相对应的是“并行”(parallel)。并行总线通常由多根数据线组成它一次能够发送多位数据。并行总线看似效率更高但实际上它面临电平问题和串扰问题。目前的计算机板卡互联协议中串行协议占据统治地位。PCI-E、SATA 等都是串行传输的。一些较老的传输协议是并行协议如 AGP、PCI 和 IDE。有关串行和并行传输方式的更多内容可以参见这个知乎问题。I²C 从设备地址每个 I²C 从设备均有一个(在单个总线上)独一无二的 7 位从设备地址(slave address)该地址由设备厂商决定不过有时也可以由用户自行定义其中的某些位以允许在同一个 I²C 总线上同时存在相同的多个设备。具体的地址可以在芯片数据手册中找到。通常在从设备地址后会附加一个数据方向位(data direction bit)一共 8 位数据构成一个完整的帧。通常数据方向位为 0 时表示主设备发送、从设备接收称为 WRITE数据方向位为 1 时表示主设备接收、从设备发送称作 READ。以蓝桥杯开发板 CT107D 上的 PCF8591 芯片为例。该芯片是一个具有 I²C 功能的模数转换芯片(Analog to Digital ConverterADC)用于将模拟信号(analog signal如通过光敏电阻的电流)转换为数字信号(digital signal由具体二进制表示的电压大小)相当于一个电压表(将电压转换为具体的读数)。PCF8591 完整脚位图在 PCF8591 数据手册 8.1 Addressing 一节及 Table 5, 6 中我们可以找到有关芯片地址的详细信息。如表格所示 PCF8591 的地址为 1001xxx其中最后 3 位由 A2 – A0 脚(即脚位图中的 5 – 7 脚)决定。如果相应的脚为低电平则对应的位为 0否则对应的位为 1。例如如果这三个脚都是高电平则芯片的地址是 1001111。一次完整的 I²C 传输主设备产生起始条件代表一次通信的开始。主设备发送一帧表示需要通信的从设备地址和数据方向位。如果相应地址的从设备存在则从设备将 SDA 拉低发出 ACK 信号如果没有相应地址的从设备存在则主设备会收到 NACK 信号。主设备和从设备以帧为单位进行通信除最后一帧外每帧传送完后接收方需发送 ACK 信号以确认。具体的通信过程需要参照相应设备的数据手册具体细节一般在数据手册的 Functional description 中。PCF8591 数据手册的第 8 节即为 Functional description。在最后一帧传送完后接收方不发出 ACK此时主设备作出以下动作若希望与其他从设备通信则产生一个重复起始条件然后继续进行第 2 步若希望停止通信则产生一个停止条件。产生停止条件后两条数据线均被释放I²C 总线进入空闲状态。接下来我们以 PCF8591 和 51 单片机为例看看如何使用 I²C 总线通信。(未完待续)图文|田韵豪排版|李亦龙出品|士谔书院X大班