总感觉没有系统学清或者说学完之后还是迷迷糊糊想必还是得知道一些理论套话。慢慢来吧希望系统学完能手搓些什么出来玩玩听说得学习别人开源代码才能快速提升好嘞加油。参考他人学习链接嵌入式面试八股文总结长期更新-CSDN博客通信协议I2C通信Inter-Integrated Circuit同步串行通信因为有时钟线、用于板内短距离、芯片级互连;通常用于主控芯片与各种外设芯片如传感器、EEPROM等的通信两根线、半双工、采用软件寻址选择从机、传输速度慢I2C通信为什么要加上拉电阻1、实现线与逻辑I2C总线上多个设备共享同一条总线上拉电阻可以将总线拉至高电平任何设备都可以通过总线拉低来发送信号。2、开漏输出配置I2C总线上的两个引脚都是配置为开漏输出在开漏输出模式下引脚无法输出高电平只能靠上拉电阻来提供将总线拉回高电平的能力。图片源于网络应该是CMOS开关3、防止总线冲突当多个设备同时访问总线上拉电阻配合开漏输出可以防止短路。4、定义总线空闲状态上拉电阻确保总线上无设备通信时保持高电平即空闲状态。经典的上拉电阻阻值为4.7kI2C为什么要使用开漏输出1、可以实现线与逻辑2、实现电平转换不同电压域的设备可以在同一总线上通信只需使用与最高电压匹配的上拉电阻。前提是低压侧设备的 I/O 口必须具备高压容限Tolerant。如果低压侧设备不支持高压必须使用‘电平转换电路’Level Shifter通常由两个 MOSFET 组成来隔离两个电压域。3、时钟同步开漏结构可以使从设备通过拉低SCL线延长时钟周期保证较慢的从设备与主设备同步4、仲裁机制多主机下可以实现无损仲裁-低电平优先。IIC的地址位数是多少7位或者11位大部分为7位。一般发送从机地址7位1位读写位理论上可用的是127个2^7-10x00地址保留。实际可用的是126个0x00和0x7F地址保留。可拓展10位地址格式。理论上可用也是10232^10-10x00地址保留IIC有几根线两根线SCL时钟线与SDA数据线。IIC的通信速率有哪些包含标准模式、快速模式、高速模式100k、400k、1MbpsIIC时序我是觉得分为开始、发送一个字节、接收应答、接收一个字节、发送应答、结束信号但是有些说是开始、应答、结束信号开始信号是SCL为高电平时SDA从1到0停止信号是SCL为高电平时SDA从0到1写/读取信号是主机或者从机SCL低电平时发送设备将数据放到SDA上SCL高电平时接收设备把SDA上的数据读走。SCL为高电平时SDA必须为稳定电平数据时按MSB高位优先传输应答机制每每传输8位数据也就是1个字节接收设备需要给出ACK应答位0为应答1为非应答。在 SCL 为高电平期间发送方读取 SDA 的状态。如果读到 0 就是 ACK读到 1 就是 NACK。如何计算IIC总线上拉电阻的阻值R上拉电阻阻值。Tr要求的上升时间。Cb总线电容。下次看到再进行补充公式实际选择建议低速场景4.7KΩ - 10KΩ。标准模式4.7KΩ。快速模式2.2KΩ - 4.7KΩ。高速模式2.2kΩ - 4.7kΩ。硬件IIC和软件IIC的区别软件I2C的话首先是引脚随便选两个即可然后程序的话先配置引脚为上拉开漏模式.编写基本时序。比较方便换引脚。可以从实现方式速度稳定性灵活性方面讨论。实现方式上的区别。硬件IIC通过MCU内部的专用硬件模块实现时序软件只负责发出命令。软件IIC通过控制GPIO来模拟IIC的SCL和SDA信号来产生IIC的时序。速度上的区别。硬件IIC速度比较快。软件IIC速度比较慢而且会占用CPU稳定性上的区别。硬件IIC稳定性较高。软件IIC稳定性相对较低。灵活性上软件IIC的IO口可以随意设置更加灵活而硬件IIC的IO口是固定的。IIC如何实现多主机通信1、总线仲裁采用低电平优先原则。由于总线采用线与逻辑谁先发送低电平谁先获得总线控制权2、时钟同步因为是线与逻辑只有当所有设备同时释放SCL时总线才会被拉高。因此所有设备会以最慢的设备的时钟速率运行以保证时钟同步。3、冲突检测主机发送每一位数据时都会检查SDA线实际电平如果检测到的电平与期望发送的不同则失去仲裁权。IIC的时钟同步和时钟拉伸是什么时钟同步I2C总线上的SCL线是所有设备逻辑与的结果。当任一设备将SCL拉低总线SCL就为低电平。只有当所有设备都释放SCL高阻态SCL才会变为高电平这确保了最慢的设备也能跟上通信节奏;时钟拉伸从设备可以通过持续拉低SCL来延长时钟周期。这样从设备可以有更多时间处理数据。主设备必须等待SCL实际变为高电平后才能继续。这是I2C协议中从设备控制通信速度的机制。I2C通信中常见的问题及解决方案暂时没太碰到过总线死锁症状SDA或SCL被某个设备一直拉低。解决方案 软件复位主机产生9个时钟脉冲尝试完成被中断的传输。硬件复位复位所有I2C设备。电源循环关闭再打开电源地址冲突症状多个设备使用相同地址解决方案 使用带地址选择引脚的器件使用I2C地址转换器使用多总线设计时序问题症状高速通信时数据错误。解决方案 减小上拉电阻值注意功耗增加减少总线电容缩短线长、减少设备数量降低通信速率噪声干扰症状通信不稳定偶发错误解决方案 使用屏蔽线缆增加滤波电容优化PCB布局避免I2C线与高速信号线并行---------------------------------------------------------------------------------------------------------------------------------SPI通信基本原理与特点高速与IICUSART相比、全双工、同步串行、四根线MOSI、MISO、SCLK、CS传输效率高一主多从可以连接多个从机设备传输效率高-可达几十MHz寻址方式当主设备要与某个从设备进行通信时主设备需要先向对应从设备的片选线上发送使能信号0/1根据从机来定表示选中该从机。SPI的主机需要至少四根线什么时候需要用到多余的线多个从机的时候这样主机需要多个片选线来连接多个设备。SPI与IIC一样都是先发高位后发低位与USART相反SPI不带应答所以快。但是有可能接收器没有接收到。没有起始信号也没有终止信号上来就发送数据。MSB-最高位、LSB-最低位第一个沿发第二个沿收极性和相位对于特定的从机设备一般在出厂时会将其设计为某种特定的工作模式所以一般在使用该设备的时候需要保证主设备的工作模式与从设备保持一致即需要对主设备的CPOL和CPHA进行配置。SPI有几种工作模式有什么区别4种跟极性跟相位有关极性CPOL相位CPHA跟SCLK有关与什么时候接收器读取数据有关CPOL0,表示SCLK空闲时为低电平CPOL1,表示SCLK空闲时为高电平CPHA0,在第一个边沿读取数据CPHA1,在第二个边沿读取数据SPI有几根线可以去除几根线如果不需要双向通信可以去除MOSI/MISO其中一根线。如果是一对一通信CS片选线也可以去除。SPI和IIC的寻址区别SPI通过CS信号选择从机设备IIC采用广播式发送给总线上的所有从机通过发送的第一个字节7位地址/前两个字节11位地址选择从机设备SPI与IIC、UART相比有些什么优势优点速度快可以达到几十MHz全双工通信效率高缺点需要的信号线多四根多个从设备需要多条CS线占用IO引脚多无应答机制无法确认数据是否正确接收SPI的菊花链和独立模式菊花链所有从机共用一根CS线数据经过一个设备后再传递给下一个设备独立模式每个从机均单独使用一根CS线DualSPI和QualSPIMOSIMISO设置为双向数据信号。DualSPI支持两根信号线同时传输等效时钟工作频率翻倍。QualSPI支持四根信号线同时传输等效时钟工作频率翻四倍。SPI的传输流程主机把对应的从设备片选线CS拉低主机发出时钟信号主机设置工作模式-极性跟相位主机发起通讯写入一字节数据常见的7位地址1读写位-取决于从机设备然后从机就会在特定的时钟边沿通过MISO发送数据给主机传输数据过程中MSB高位优先发送到移位寄存器传输完成后主设备拉高片选结束通信。---------------------------------------------------------------------------------------------------------------------------------UART通信USB通信增CAN通信Modbus RTUModbus DPUModbus TCP