HiMrLe 发表于 8 小时前

<p>打卡第二十二集-CDC串口通信</p>
<p><strong>CDC串口</strong>,全称是USB CDC(Communications Device Class,通信设备类)串口。它不是什么新的硬件接口,而是一种<strong>通过USB接口虚拟传统物理串口(如COM口)的技术</strong>。</p>
<p>简单来说,就是让你的电脑把一个通过USB连接的设备(比如单片机开发板)<strong>识别成一个普通的串口设备</strong>。这样一来,你可以继续使用熟悉的串口调试助手等软件,通过USB线进行高速、便捷的数据通信,而无需任何物理串口线。</p>
<h3>💡 它有什么优势?</h3>
<p>与传统串口相比,USB CDC串口的主要优势在于:</p>
<table>
<thead>
<tr>
<th>特性</th>
<th>传统串口 (RS-232)</th>
<th>USB CDC 虚拟串口</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>传输速度</strong></td>
<td>较慢,典型速度 115200 bps</td>
<td>快得多,USB全速模式下可达<strong>12 Mbps</strong></td>
</tr>
<tr>
<td><strong>接口与连线</strong></td>
<td>专用9针接口,线缆笨重</td>
<td>使用通用的 <strong>USB接口和线缆</strong>,小巧轻便</td>
</tr>
<tr>
<td><strong>供电能力</strong></td>
<td>通常不能供电</td>
<td>可通过USB总线为设备<strong>提供电源</strong>(通常5V)</td>
</tr>
<tr>
<td><strong>即插即用</strong></td>
<td>不支持,需关机连接</td>
<td><strong>支持热插拔</strong>,操作系统能自动识别</td>
</tr>
</tbody>
</table>
<h3>⚙️ 它是如何工作的?</h3>
<p>USB CDC串口在内部实现上主要分为两个部分:</p>
<ol>
<li><strong>控制接口</strong>:负责&quot;管理&quot;工作。当你在电脑上打开虚拟串口并设置波特率(如115200)时,这个接口就会接收到命令,并通知另一端的设备按此参数进行配置。</li>
<li><strong>数据接口</strong>:负责实际的&quot;数据传输&quot;。它包含两个&quot;端点&quot;(可以理解为数据通道),一个用于设备向电脑发送数据(IN端点),另一个用于电脑向设备发送数据(OUT端点)。</li>
</ol>
<hr />
<p><img src="data/attachment/forum/202603/31/095921bk5cuh0d0l9lccd9.png" alt="image.png" title="image.png" /></p>
<hr />
<p><strong>CDC串口实现不停电下载回顾</strong></p>
<p>在安装好开发环境之后,执行如下操作</p>
<p>1)下载.lib库和头文件</p>
<p>2)新建工程,加载lib库文件</p>
<p>3)调用头文件并初始化USB功能</p>
<p>4)设置工程参数,编译选项等</p>
<p>5)首次下载手动进入HID下载模式下载</p>
<p>6)下载完成等待生成CDC串口号,设置ISP软件参数</p>
<p>执行完如上步骤,再也不需要手动进下载模式了,只要ISP软件点一下下载程序就可以自动烧录。</p>

HiMrLe 发表于 4 小时前

<p>打卡第二十三集-看门狗</p>
<p><strong>复位</strong>的主要作用是把单片机内部的特殊功能寄存器置于初始状态,使单片机硬件、软件从一个确定的、唯一的起点开始工作。</p>
<hr />
<p><strong>复位方式</strong></p>
<p>上电复位</p>
<p>低压复位</p>
<p>复位脚复位</p>
<p>看门狗复位</p>
<p><img src="data/attachment/forum/202603/31/135825xh1a1ysa311hl3m9.png" alt="image.png" title="image.png" /></p>
<hr />
<p><strong>看门狗</strong></p>
<p>看门狗是一个计数器,它的基本功能是在软件问题和程序跑偏后重启系统。看门狗正常工作时会自动计数,程序进程会定时将其归零。如果系统在某个地方卡住了或者跑了,定时器就会溢出,是系统强制复位。</p>
<p>软件的可靠性一直是一个关键问题。任何使用软件的人都可能遇到电脑死机或程序失控的问题,这种问题在嵌入式系统中也存在。由于单片机抗干扰能力有限,在工业现场仪器仪表中,经常因电压不稳和电弧干扰而死机。在水表、电表无人值守的情况下,系统因干扰无法重启。为了保证系统在受到干扰后能自动恢复正常,看门狗定时器的使用是非常有价值的。</p>
<hr />
<p><strong>看门狗原理</strong></p>
<p>在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清理看门狗(也叫喂狗),那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。所以,在使用有看门狗的芯片时要注意清理看门狗。</p>
<hr />
<p><img src="data/attachment/forum/202603/31/141010d4imx4i0xmmhoklv.png" alt="image.png" title="image.png" /></p>

HiMrLe 发表于 3 小时前

<p>打卡第二十四集-比较器</p>
<p><img src="data/attachment/forum/202603/31/144251y85mv6xcyclyr4jq.png" alt="image.png" title="image.png" /></p>
<p><img src="data/attachment/forum/202603/31/144318eisxyazrciuuupmm.png" alt="image.png" title="image.png" /></p>
<hr />
<p><strong>单片机中的比较器</strong>,核心作用就是快速、精准地比较两路模拟电压的大小,并直接输出一个数字信号(0或1)。它就像一个反应极快的“电压裁判”,在很多实时性要求高或需要低功耗监控的场景中,扮演着不可替代的角色。</p>
<h3>💡 核心作用</h3>
<ul>
<li><strong>模拟到数字的桥梁</strong>:比较器本质上是一个“1位模数转换器(ADC)”。它能将连续的模拟信号(如电压高低)直接转换为单片机可以理解的高低电平。</li>
<li><strong>无需CPU干预的实时监控</strong>:与需要软件循环采样和计算的ADC不同,比较器完全由硬件完成比较。一旦电压达到设定阈值,它能立即触发中断或切断PWM信号,响应速度极快。</li>
<li><strong>低功耗守护者</strong>:许多单片机的比较器在芯片进入休眠模式时仍能独立工作。这意味着系统可以在几乎不耗电的情况下,时刻监测外部电压变化,一旦异常就唤醒主控芯片,非常适合电池供电的设备。</li>
</ul>
<h3>🚀 典型应用场景</h3>
<table>
<thead>
<tr>
<th>应用场景</th>
<th>实现方式与作用</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>电池电量监测</strong></td>
<td>将电池电压与参考电压比较,电压过低时输出信号,提示用户充电或触发系统自我保护。</td>
</tr>
<tr>
<td><strong>过零检测</strong></td>
<td>在电机控制或调光器中,检测交流电的零点。比较器能快速捕捉这一时刻,帮助单片机精确控制开关或调整功率,提高效率。</td>
</tr>
<tr>
<td><strong>构建高精度ADC</strong></td>
<td>配合几个电阻电容,可以利用比较器构建积分型ADC。虽然速度较慢,但分辨率可以做到很高(如12-16位),非常适合测量温度、压力等变化缓慢的信号,成本很低。</td>
</tr>
<tr>
<td><strong>故障快速保护</strong></td>
<td>在电机驱动中,若电流过大,比较器能在微秒内输出信号,直接触发硬件关断PWM输出,比软件处理快得多,能有效保护功率电路。</td>
</tr>
<tr>
<td><strong>测量电阻/电容</strong></td>
<td>将比较器与电阻、电容构成一个简单的振荡器,其频率会随传感器(如光敏电阻、电容式湿度传感器)的数值变化。单片机只需测量频率,就能换算出物理量,是一种非常巧妙的数字测量方法。</td>
</tr>
</tbody>
</table>
<h3>⚙️ 关键优势:为什么不用ADC?</h3>
<table>
<thead>
<tr>
<th>特性</th>
<th>比较器</th>
<th>ADC</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>响应速度</strong></td>
<td><strong>极快</strong>(纳秒至微秒级),纯硬件触发。</td>
<td><strong>较慢</strong>(微秒至毫秒级),需软件启动、等待、计算。</td>
</tr>
<tr>
<td><strong>系统开销</strong></td>
<td><strong>几乎为零</strong>,无需CPU干预即可工作并触发动作。</td>
<td><strong>较高</strong>,需CPU启动、读取结果,并执行比较逻辑。</td>
</tr>
<tr>
<td><strong>功耗</strong></td>
<td><strong>极低</strong>,可在休眠模式下运行,功耗可低至微安级。</td>
<td><strong>相对较高</strong>,工作时通常需要唤醒CPU。</td>
</tr>
<tr>
<td><strong>典型用途</strong></td>
<td>实时保护、脉冲测量、逻辑判断、事件触发。</td>
<td>精确测量、数据采集、音频处理等。</td>
</tr>
</tbody>
</table>

HiMrLe 发表于 2 小时前

<p>打卡第二十五集-FLASH模拟EEPROM</p>
<p><strong>关于 IAP 技术</strong>,做过 bootloader 的想必很熟悉 (IAP全称 In Application Programming,即应用编程),和 ISP (全称 In System Programming,即系统编程)不同,ISP 一般都是通过专业的调试器或者下载器对单片机内部的 Flash 存储器进程编程(如JTAG等),而 IAP 技术是从结构上将 Flash 储存器映射分为两个或者多个分区,在一个分区中对其他分区进行编程,这个分区通常称为 bootloader</p>
<hr />
<p><img src="data/attachment/forum/202603/31/161012u5zmveoivjv19d1o.png" alt="image.png" title="image.png" /><br />
<img src="data/attachment/forum/202603/31/160622n6c6671m11mqq1mz.png" alt="image.png" title="image.png" /></p>
<h2>一、FLASH 和 EEPROM</h2>
<h3>1. 狭义 EEPROM</h3>
<ul>
<li><strong>特点</strong>:<strong>按字节</strong>擦写。可以单独修改某一个字节,无需擦除整个区域。</li>
<li><strong>寿命</strong>:约 100 万次擦写,数据保留 100 年。</li>
<li><strong>容量</strong>:通常很小(几十 KB 到几百 KB),很少超过 512 KB。</li>
<li><strong>成本</strong>:较高,电路复杂。</li>
<li><strong>典型用途</strong>:存储需要频繁修改的用户配置、校准参数、运行日志等。</li>
</ul>
<h3>2. FLASH(属于广义 EEPROM)</h3>
<ul>
<li><strong>特点</strong>:<strong>按块/扇区</strong>擦除(不能直接改写单个字节)。写入前必须先擦除(将块内所有位变为 1,即 0xFF),然后再编程。</li>
<li><strong>寿命</strong>:擦写次数较少,通常 1 万~10 万次(Nor Flash 约 10 万次,Nand Flash 更少)。</li>
<li><strong>容量</strong>:大,从几十 KB 到数 GB。</li>
<li><strong>成本</strong>:低,集成度高。</li>
<li><strong>典型用途</strong>:存储程序代码(固件)、大容量文件系统。</li>
</ul>
<h3>3. 关键区别表</h3>
<table>
<thead>
<tr>
<th>特性</th>
<th>狭义 EEPROM</th>
<th>FLASH(Nor Flash)</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>擦写单位</strong></td>
<td>字节(Byte)</td>
<td>块/扇区(512 B~ 128 KB)</td>
</tr>
<tr>
<td><strong>改写方式</strong></td>
<td>直接写新数据即可</td>
<td>必须先擦除块,再写入</td>
</tr>
<tr>
<td><strong>擦写次数</strong></td>
<td>100 万次</td>
<td>1 万~10 万次</td>
</tr>
<tr>
<td><strong>速度</strong></td>
<td>写入较慢(ms 级)</td>
<td>擦除慢(ms~s),写入快</td>
</tr>
<tr>
<td><strong>成本/容量</strong></td>
<td>贵、小</td>
<td>便宜、大</td>
</tr>
</tbody>
</table>
<hr />
<h2>二、没有独立 EEPROM 时,如何保存掉电数据?</h2>
<p>现在的单片机(如 STM32、ESP32、GD32 等)通常<strong>只内置 FLASH</strong>,不再单独集成 EEPROM。但我们可以用 <strong>Flash 模拟 EEPROM</strong> 的方法,或者外接存储芯片。</p>
<h3>✅ 方法一:使用片内 FLASH 模拟 EEPROM(最常用)</h3>
<h4>原理:</h4>
<p>利用 FLASH 的一个扇区(或几个扇区),通过<strong>软件算法</strong>实现类似 EEPROM 的“按字节修改”效果。核心思路是:</p>
<ul>
<li><strong>写入</strong>:不直接覆盖原数据,而是将新数据追加写入到扇区中未使用的区域,旧数据标记为无效。</li>
<li><strong>读取</strong>:扫描扇区,找到最新版本的有效数据。</li>
<li><strong>垃圾回收</strong>:当扇区快写满时,将有效数据拷贝到另一个空闲扇区,然后擦除原扇区。</li>
</ul>
<p>这就是著名的 <strong>“磨损均衡” + “增量存储”</strong> 技术,很多厂商提供了现成的库:</p>
<ul>
<li>STM32:<strong>EEPROM Emulation</strong> 库(基于 FLASH)。</li>
<li>其他 MCU:可以自行实现简易版本,或使用开源库(如 EasyFlash、FlashDB)。</li>
</ul>
<h4>优缺点:</h4>
<ul>
<li>✅ 不增加硬件成本。</li>
<li>✅ 可达到 10 万次以上的有效擦写寿命(通过磨损均衡)。</li>
<li>❌ 需要额外的代码和 RAM 开销。</li>
<li>❌ 写入速度比真正 EEPROM 慢(因为涉及扫描、拷贝)。</li>
</ul>
<h4>示例(伪代码思路):</h4>
<p><strong>c</strong></p>
<pre><code>// 写入一个字节(或参数)
void eeprom_write(uint16_t addr, uint8_t data) {
    // 在 FLASH 中找一个空闲位置,写入 {addr, data, 校验}
    // 如果扇区满了,就触发垃圾回收
}

// 读取一个字节
uint8_t eeprom_read(uint16_t addr) {
    // 扫描整个模拟区,找到 addr 对应的最新数据
}
</code></pre>
<h3>✅ 方法二:使用外部 EEPROM 芯片</h3>
<p>如果对擦写寿命要求极高(如每天修改数千次),或者不想写复杂代码,可以外挂一颗 I²C/SPI 接口的 EEPROM(如 AT24Cxx 系列,容量 2Kb~512Kb)。</p>
<ul>
<li>优点:简单可靠,按字节读写,寿命 100 万次。</li>
<li>缺点:增加 PCB 面积和成本。</li>
</ul>
<h3>✅ 方法三:使用 FRAM(铁电存储器)</h3>
<p>FRAM 像 EEPROM 一样非易失,但速度更快(类似 SRAM),擦写次数近乎无限(10¹² 次以上)。常见型号:FM24C04、MB85RCxx。</p>
<ul>
<li>优点:完美替代 EEPROM,无需模拟。</li>
<li>缺点:价格较贵,货源不如 EEPROM 普遍。</li>
</ul>
<h3>✅ 方法四:优化应用层设计,减少擦写次数</h3>
<p>即使没有 EEPROM,你也可以通过<strong>软件技巧</strong>延长 FLASH 寿命:</p>
<ul>
<li><strong>数据聚合</strong>:将多次修改暂存在 RAM 中,只在掉电前或累计一定次数后写入 FLASH。</li>
<li><strong>利用备份寄存器</strong>:部分 MCU(如 STM32)有几十字节的 <strong>后备寄存器</strong>(由 VBAT 供电),掉电后数据不丢失,可当超小 EEPROM 用。</li>
<li><strong>使用外部 FRAM/EEPROM</strong> 如前所述。</li>
</ul>
<hr />
<h2>三、总结建议</h2>
<table>
<thead>
<tr>
<th>场景</th>
<th>推荐方案</th>
</tr>
</thead>
<tbody>
<tr>
<td>修改次数少(每天 &lt; 10 次),成本敏感</td>
<td>FLASH 模拟 EEPROM(厂商库)</td>
</tr>
<tr>
<td>修改频繁(每小时 &gt; 100 次),寿命要求高</td>
<td>外接 EEPROM 或 FRAM</td>
</tr>
<tr>
<td>需要极低功耗、简单接口</td>
<td>外接 I²C EEPROM</td>
</tr>
<tr>
<td>只有几个字节的参数,且 MCU 有后备寄存器</td>
<td>使用后备寄存器(如 STM32 的 RTC BKP)</td>
</tr>
</tbody>
</table>
<p><strong>最后提醒</strong>:如果用 FLASH 模拟 EEPROM,一定要注意<strong>掉电保护</strong>——在擦除/写入 FLASH 时若突然断电,可能导致数据损坏。常用对策:使用双扇区备份 + 写入完成标志。</p>

HiMrLe 发表于 1 小时前

<p>打卡第二十六集-DS18B20温度传感器(单总线)理论分析</p>
<p><strong>DS18B20</strong>是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。</p>
<hr />
<p>①、 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。</p>
<p>② 、测温范围 -55℃~+125℃,固有测温误差(注意,不是分辨率,这里之前是错误的)1℃。</p>
<p>③、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。</p>
<p>④、工作电源: 3.0~5.5V/DC (可以数据线寄生电源)</p>
<p>⑤ 、在使用中不需要任何外围元件</p>
<p>⑥、 测量结果以9~12位数字量方式串行传送</p>
<hr />
<p><strong>主要功能</strong></p>
<p>温度测量</p>
<p>温度报警</p>
<p>ROM编码</p>
<p>存储器</p>
<p>CRC校验</p>
<p>精度修改</p>
<hr />
<p><strong>软件层配置</strong></p>
<p>单总线控制总线描述</p>
<p>事件序列</p>
<p>总线信号</p>

HiMrLe 发表于 1 小时前

<p>打卡第二十七集-软件模拟SPI</p>
<p><strong>SPI</strong>是串行外设接口(Serial Peripheral Interface)的缩写。SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。</p>
<p>产生时钟的一侧称为主机,另一侧称为从机。同一时间只有一个主机,但是可以有多个从机。</p>
<p>SPI总线包括4条逻辑线,定义如下:</p>
<p>●MISO:Master input slave output 主机输入,从机输出(数据来自从机);</p>
<p>●MOSI:Master output slave input 主机输出,从机输入(数据来自主机);</p>
<p>●SCLK :Serial Clock 串行时钟信号,由主机产生发送给从机;</p>
<p>●SS:Slave Select 片选信号,由主机发送,以控制与哪个从机通信,通常是低电平有效信号。</p>
<p><img src="data/attachment/forum/202603/31/163523uvjplkz7rhnrb6nb.png" alt="image.png" title="image.png" /></p>
<hr />
<p><strong>SPI 的通信方式通常有 3 种</strong></p>
<p>单主单从(一个主机设备连接一个从机设备)</p>
<p>互为主从(两个设备连接,设备和互为主机和从机)</p>
<p>单主多从(一个主机设备连接多个从机设备)</p>
<hr />
<p><strong>SPI数据模式</strong></p>
<p>时钟极性 (CKP/CPOL) 根据硬件制造商的命名规则不同,时钟极性通常写为CKP或CPOL      CKOL可以配置为1或0。这意味着可以根据需要将时钟的默认状态(IDLE)设置为高或低。当然具体的配置必须参考设备的数据手册正确设置</p>
<p>▶CKP = 0:时钟空闲IDLE为低电平 0;</p>
<p>▶CKP = 1:时钟空闲IDLE为高电平 1; 时钟相位 (CKE/CPHA) 顾名思义,时钟相位/边沿,也就是采集数据时是在时钟信号的具体相位或者边沿;</p>
<p>▶CPHA = 0:在时钟信号SCK的第一个跳变沿采样;</p>
<p>▶CPHA = 1:在时钟信号SCK的第二个跳变沿采样; ★时钟极性和相位共同决定读取数据的方式,比如信号上升沿读取数据还是信号下降沿读取数据;</p>

HiMrLe 发表于 1 小时前

<p>打卡第二十八集-硬件SPI读写FLASH芯片</p>
<p>硬件 SPI 寄存器是单片机中用于配置、控制和监测 SPI 外设的一组内存映射寄存器。通过读写这些寄存器,你可以设置 SPI 的工作模式、波特率、数据位宽、主从模式,并触发数据传输。<strong>SPI 外设</strong>‌(Serial Peripheral Interface,串行外设接口)是一种由摩托罗拉公司(Motorola)推出的‌<strong>高速、全双工、同步串行通信总线协议</strong>‌,广泛用于微控制器(MCU)与各种外围设备之间的短距离通信。</p>
<p><img src="data/attachment/forum/202603/31/170236q45665c8io8ncein.png" alt="image.png" title="image.png" /></p>
<hr />
<h3>‌<strong>SPI 的核心特点</strong>‌</h3>
<ul>
<li>‌<strong>同步通信</strong>‌:由主设备生成时钟信号(SCLK),所有设备按此时钟同步收发数据。</li>
<li>‌<strong>全双工</strong>‌:可同时发送和接收数据(通过 MOSI 和 MISO 两条独立数据线)。</li>
<li>‌<strong>主从架构</strong>‌:一个主设备控制一个或多个从设备;从设备通过片选信号(CS/SS)被单独选中。</li>
<li>‌<strong>高速传输</strong>‌:典型速率从 1 MHz 到超过 100 MHz,远高于 I²C 和 UART。</li>
<li>‌<strong>硬件简单</strong>‌:通常只需 4 根信号线,无复杂寻址或应答机制。</li>
</ul>
<hr />
<h3>‌<strong>SPI 的基本信号线</strong>‌</h3>
<ul>
<li>‌<strong>SCLK</strong>‌(Serial Clock):主设备产生的时钟信号,同步数据传输。</li>
<li>‌<strong>MOSI</strong>‌(Master Out, Slave In):主设备输出数据,从设备输入。</li>
<li>‌<strong>MISO</strong>‌(Master In, Slave Out):从设备输出数据,主设备输入。</li>
<li>‌<strong>CS/SS</strong>‌(Chip Select / Slave Select):主设备控制,低电平有效,用于选中特定从设备。</li>
</ul>
<blockquote>
<p>注:部分设备可省略 MISO 或 MOSI,实现三线半双工模式,但标准为四线全双工。</p>
</blockquote>
<hr />
<h3>‌<strong>SPI 的主要用途</strong>‌</h3>
<p>SPI 广泛应用于嵌入式系统中连接以下外设:</p>
<ul>
<li>‌<strong>存储类</strong>‌:EEPROM、Flash(如 SPI Flash)、SD 卡</li>
<li>‌<strong>传感器</strong>‌:温度、压力、加速度计、陀螺仪等</li>
<li>‌<strong>转换器</strong>‌:ADC(模数转换器)、DAC(数模转换器)</li>
<li>‌<strong>显示驱动</strong>‌:LCD、OLED 屏幕</li>
<li>‌<strong>通信模块</strong>‌:Wi-Fi、蓝牙模块(如 ESP8266)</li>
<li>‌<strong>其他</strong>‌:实时时钟(RTC)、数字信号处理器(DSP)、无线收发芯片等</li>
</ul>
<hr />
<h3>‌**工作模式(CPOL &amp; CPHA)**‌</h3>
<p>SPI 定义了 ‌<strong>4 种工作模式</strong>‌,由时钟极性(CPOL)和时钟相位(CPHA)组合决定:</p>
<table>
<thead>
<tr>
<th>模式</th>
<th>CPOL(空闲电平)</th>
<th>CPHA(采样边沿)</th>
<th>采样时机</th>
<th>移出时机</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>0(低)</td>
<td>0</td>
<td>第一跳变(上升沿)</td>
<td>第二跳变(下降沿)</td>
</tr>
<tr>
<td>1</td>
<td>0(低)</td>
<td>1</td>
<td>第二跳变(下降沿)</td>
<td>第一跳变(上升沿)</td>
</tr>
<tr>
<td>2</td>
<td>1(高)</td>
<td>0</td>
<td>第一跳变(下降沿)</td>
<td>第二跳变(上升沿)</td>
</tr>
<tr>
<td>3</td>
<td>1(高)</td>
<td>1</td>
<td>第二跳变(上升沿)</td>
<td>第一跳变(下降沿)</td>
</tr>
</tbody>
</table>
<blockquote>
<p>主从设备必须配置为‌<strong>相同模式</strong>‌才能正常通信,具体需参考器件数据手册。</p>
</blockquote>
<hr />
<h3>‌<strong>多从机连接方式</strong>‌</h3>
<ul>
<li>‌**独立片选(常规模式)**‌:每个从设备有独立 CS 线,主设备拉低对应 CS 即可通信。最常用,但占用较多 GPIO。</li>
<li>‌**菊花链(Daisy Chain)**‌:所有从设备 CS 接在一起,数据依次传递。节省 CS 线,但延迟增加,且要求从设备支持级联。</li>
</ul>
<hr />
<h3>‌<strong>优缺点总结</strong>‌</h3>
<ul>
<li>‌<strong>优点</strong>‌:
<ul>
<li>传输速率高</li>
<li>协议简单,开销小</li>
<li>全双工,灵活性强</li>
<li>无地址冲突(从设备无需唯一地址)</li>
</ul>
</li>
<li>‌<strong>缺点</strong>‌:
<ul>
<li>无内置错误校验或应答机制</li>
<li>通信距离短(通常 &lt; 10 cm)</li>
<li>不支持热插拔</li>
<li>多从机时需较多片选线(除非用菊花链或译码器)</li>
</ul>
</li>
</ul>
<hr />
<h3>‌<strong>典型应用场景</strong>‌</h3>
<ul>
<li>STM32、ESP32、树莓派 Pico 等 MCU 与传感器/存储器通信</li>
<li>嵌入式系统中高速数据采集(如 ADC 读取)</li>
<li>固件升级(通过 SPI Flash)</li>
<li>工业控制、汽车电子、物联网设备中的外设互联</li>
</ul>
页: 1 2 [3]
查看完整版本: 32位8051单片机原理及C语言程序设计视频教程-学习打卡