<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>嵌软 on 文的超级笔记</title>
    <link>/post/tech/%E5%85%AB%E8%82%A1/%E5%B5%8C%E8%BD%AF/</link>
    <description>Recent content in 嵌软 on 文的超级笔记</description>
    <generator>Hugo -- 0.152.2</generator>
    <language>zh</language>
    <lastBuildDate>Sun, 25 Oct 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="/post/tech/%E5%85%AB%E8%82%A1/%E5%B5%8C%E8%BD%AF/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>I^2C通信协议</title>
      <link>/post/tech/%E5%85%AB%E8%82%A1/%E5%B5%8C%E8%BD%AF/i2c%E9%80%9A%E4%BF%A1%E5%8D%8F%E8%AE%AE/</link>
      <pubDate>Sun, 25 Oct 2026 00:00:00 +0000</pubDate>
      <guid>/post/tech/%E5%85%AB%E8%82%A1/%E5%B5%8C%E8%BD%AF/i2c%E9%80%9A%E4%BF%A1%E5%8D%8F%E8%AE%AE/</guid>
      <description>&lt;h1 id=&#34;ic-通信协议&#34;&gt;I²C 通信协议&lt;/h1&gt;
&lt;h2 id=&#34;一什么是-ic&#34;&gt;一、什么是 I²C？&lt;/h2&gt;
&lt;p&gt;I²C（Inter-Integrated Circuit）是一种常见的串行通信协议，主要用于芯片之间的短距离通信。&lt;/p&gt;
&lt;p&gt;在嵌入式系统中，I²C 经常用于连接：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;温度传感器&lt;/li&gt;
&lt;li&gt;EEPROM 存储芯片&lt;/li&gt;
&lt;li&gt;RTC 实时时钟&lt;/li&gt;
&lt;li&gt;GPIO 扩展芯片&lt;/li&gt;
&lt;li&gt;其他各种外围设备&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例如，在树莓派上，可以通过 I²C 连接一个温度传感器，然后读取传感器内部的温度数据。&lt;/p&gt;
&lt;h3 id=&#34;1-ic-使用哪几根线&#34;&gt;1. I²C 使用哪几根线？&lt;/h3&gt;
&lt;p&gt;I²C 主要使用两根信号线：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SCL（Serial Clock）&lt;/strong&gt;：时钟线，负责同步数据传输。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SDA（Serial Data）&lt;/strong&gt;：数据线，负责传输地址、数据和应答信号。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I²C 通常使用主从通信方式。主设备发起通信，从设备根据地址决定是否响应。&lt;/p&gt;
&lt;p&gt;如，树莓派可以作为主设备，温度传感器作为从设备。&lt;/p&gt;
&lt;p&gt;两根线通常都需要上拉电阻，设备通过开漏或开集电极方式控制信号线。&lt;/p&gt;
&lt;h3 id=&#34;2-为什么需要时钟线&#34;&gt;2. 为什么需要时钟线？&lt;/h3&gt;
&lt;p&gt;如果只有数据线，接收方可能无法判断一段电平持续了多久，以及它代表多少个数据位。&lt;/p&gt;
&lt;p&gt;例如，数据线一直保持低电平，究竟表示一个 0，还是连续的多个 0？&lt;/p&gt;
&lt;p&gt;因此，I²C 使用 SCL 提供时钟，让接收方知道何时读取数据。&lt;/p&gt;
&lt;p&gt;类似时钟节拍：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SCL 决定读取数据的节奏。&lt;/li&gt;
&lt;li&gt;SDA 决定每一位数据是 0 还是 1。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I²C 的普通数据位通常在 SCL 高电平期间保持稳定，并在 SCL 低电平期间改变。&lt;/p&gt;
&lt;h2 id=&#34;二start-和-stop一轮通信的开始与结束&#34;&gt;二、START 和 STOP：一轮通信的开始与结束&lt;/h2&gt;
&lt;p&gt;I²C 需要明确告诉设备一轮通信什么时候开始、什么时候结束。&lt;/p&gt;
&lt;h3 id=&#34;1-start起始信号&#34;&gt;1. START：起始信号&lt;/h3&gt;
&lt;p&gt;当 SCL 保持高电平时，SDA 从高电平变为低电平，就表示 START。&lt;/p&gt;
&lt;p&gt;它告诉总线上的设备：一轮新的通信开始了。&lt;/p&gt;
&lt;h3 id=&#34;2-stop停止信号&#34;&gt;2. STOP：停止信号&lt;/h3&gt;
&lt;p&gt;当 SCL 保持高电平时，SDA 从低电平变为高电平，就表示 STOP。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
