通信协议学习笔记汇总

1、IIC

1.1物理层与基础

  • 两根线:SDA(数据线)、SCL(时钟线)。

    复制代码
     起始条件: SCL保持高电平,SDA由高变低
     停止条件: SCL保持高电平,SDA由低变高
     
     IIC数据传输的基本规则:
     规则1: 在SCL为高电平期间,SDA必须保持绝对稳定(不能变),此时SDA上的数据才被认为是有效的。
     规则2: 只有在SCL为低电平期间,SDA才允许改变电平。
     
     如果总线的空闲状态是低电平,那么:
     1、设备一上电,就得死死拽住总线,功耗极大。
     2、"起始"和"停止"条件就得反过来设计,且非常容易产生误触发(因为从"拉高"到"松手"的过渡不够干脆,容易受到RC充电延迟的影响)。
  • 开漏输出(Open-Drain):IIC的引脚必须是开漏或开集极,因此必须外接上拉电阻(通常4.7kΩ)。这也是为什么IIC不能像SPI那样跑得特别快的原因。

    复制代码
     推挽输出:由两个晶体管(上管P-MOS,下管N-MOS)组成。上管导通输出高电平,下管导通输出低电平。可以真正输出高和低,驱动能力强。
     
     开漏输出:只有下管N-MOS,没有上管。只能主动拉低,不能主动拉高。高电平需要靠外部上拉电阻。相当于一个开关,要么接地(低),要么断开(高阻态)。
    
     开漏输出只能拉低,高电平是'放手'让外部上拉电阻决定的。这样无论总线上挂5V还是3.3V的器件,高电平的电压域由外部电源决定,MCU只是拉低或断开,彻底避免了推挽输出时不同电压域之间的电流倒灌和短路问题,因此IIC不需要电平转换芯片
  • 半双工:同一时间只能收或发。

1.2完整时序图

复制代码
SCL的低电平和高电平分别对应了'数据准备'和'数据采样'两个阶段。
拉低SCL,是为了满足'SCL低电平期间SDA允许改变'的规则,给发送方时间去准备下一位数据,此时接收方不看数据,所以电平跳变是安全的。
拉高SCL,是为了满足'SCL高电平期间数据有效'的规则,让接收方读取SDA上的稳定电平。
相关推荐
番茄灭世神5 小时前
PN学堂GD32教程第12篇——SPI与Nor Flash
c语言·stm32·单片机·嵌入式·gd32·总线协议
潘潘的嵌入式日记18 小时前
大彩串口屏型号怎么看?DC80480M070 命名拆解与选型
嵌入式·硬件·串口屏·选型·大彩·型号命名
蓝天居士20 小时前
PY32F系列MCU在OTA时App区概率性跑不起来的根因分析(5)
mcu·嵌入式
Zwawa21 小时前
传感器模块都在交出什么:从模拟电压到数字协议
c语言·单片机·嵌入式
会周易的程序员1 天前
STVM OSAL 层架构设计文档
c++·物联网·嵌入式·虚拟机·iot·软plc·iec61131
蓝天居士1 天前
PY32F系列MCU在OTA时App区概率性跑不起来的根因分析(6)
mcu·嵌入式
Jason_zhao_MR1 天前
电力数据采集核心板选型指南
linux·嵌入式硬件·fpga开发·嵌入式
G.E.M.小白2 天前
【Linux嵌入式蜂鸣器驱动开发】原理图分析、寄存器寻址、完整驱动+应用+Makefile
嵌入式·imx6ull·linux驱动开发·蜂鸣器驱动
用户810629480812 天前
热压机控制系统设计:PLC 状态机、PID 调节与压力闭环控制
嵌入式