嵌入式面试题:了解软件SPI和软件I2C吗?说一说。

面试回答软件SPI和软件I2C,需聚焦 定义本质+实现核心+优劣势+适用场景,结构清晰且贴合嵌入式开发实际,以下是简洁精准的标准答案:

一、核心定义(先讲清"是什么")

• 软件SPI:不依赖硬件SPI外设,用4个通用GPIO(SCK、MOSI、MISO、CS),通过软件控制引脚电平和延时,模拟SPI同步通信时序的通信方式。

• 软件I2C:不依赖硬件I2C外设,用2个通用GPIO(SCL、SDA,需外接上拉电阻),通过软件精准控制起始/停止信号、数据位、应答位时序,实现I2C通信的方式。

二、实现关键(再讲"怎么实现",面试重点)

  1. 软件SPI:

◦ 核心是"同步时序":通过delay_us()控制SCK时钟周期,MOSI与SCK同步输出数据,MISO在SCK特定边沿采样数据,CS引脚控制从机选通。

◦ 逻辑简单:无需配置复杂外设寄存器,仅需引脚电平翻转和延时函数即可实现。

  1. 软件I2C:

◦ 核心是"严格时序":必须精准实现"起始信号(SCL高时SDA拉低)、数据位(SCL高时SDA稳定)、应答位(从机拉低SDA)、停止信号(SCL高时SDA拉高)"。

◦ 引脚双向:SDA需切换输入/输出模式,用于主机发数据和从机应答。

三、优劣势对比(用表格更直观,面试加分)

特性 软件SPI 软件I2C

引脚需求 4个GPIO(SCK/MOSI/MISO/CS) 2个GPIO(SCL/SDA)+上拉电阻

实现难度 低(时序简单,无需应答) 高(时序严格,需处理应答)

CPU占用 中等(延时期间占用CPU) 高(精准时序需频繁延时)

通信速率 中等(受CPU主频和延时限制) 低(时序约束多,速率更慢)

灵活性 高(可自定义SCK频率和时序) 中等(需遵循I2C标准时序)

四、适用场景(最后讲"什么时候用")

• 软件SPI:硬件SPI外设被占用、需连接少量低速率SPI设备(如传感器、OLED)、自定义时序适配特殊从机。

• 软件I2C:硬件I2C外设不足、需连接多个I2C设备(省引脚)、对速率无要求(如配置寄存器、读取少量数据)。

面试总结模板(直接套用,不啰嗦)

"软件SPI和软件I2C都是用通用GPIO模拟硬件协议的通信方式:软件SPI用4个GPIO,时序简单、CPU占用中等,适合硬件SPI不够或低速率场景;软件I2C用2个GPIO+上拉电阻,时序严格、速率慢,适合省引脚或硬件I2C不足的场景。两者核心优势是引脚灵活、无需依赖硬件外设,缺点是占用CPU资源、速率低于硬件协议。"

相关推荐
happyhappy没有句号32 分钟前
嵌入式单片机一套通关学习笔记
笔记·单片机·嵌入式硬件·学习
悠哉悠哉愿意39 分钟前
【嵌入式学习笔记】工程模板建立
笔记·嵌入式硬件·学习
d111111111d1 小时前
STM32外设基地址与寄存器偏移地址的深度解析
笔记·stm32·单片机·嵌入式硬件·学习
快乐的划水a1 小时前
nanoMODBUS 库
stm32
无聊到发博客的菜鸟2 小时前
使用STM32对SD卡进行性能测试
stm32·单片机·rtos·sd卡·fatfs
许商2 小时前
【stm32】cmake脚本(一)
stm32·单片机·嵌入式硬件
polarislove02142 小时前
8.1 时钟树-嵌入式铁头山羊STM32笔记
笔记·stm32·嵌入式硬件
染予3 小时前
对开漏输出的理解
单片机·嵌入式硬件
风行男孩3 小时前
stm32基础学习——OLED显示屏的基本使用
stm32·嵌入式硬件·学习
养一回月亮!3 小时前
FreeRTOS任务延迟:vTaskDelay与vTaskDelayUntil的深度对比
stm32·单片机·嵌入式硬件