通信协议学习笔记汇总

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上的稳定电平。
相关推荐
Zevalin爱灰灰9 小时前
Linux入门第二部分(ARM裸机篇) 第一章 开发环境搭建与了解
linux·arm开发·嵌入式
菜鸟小芯14 小时前
【Quectel Pi M2 实战】Day3 USB 摄像头图像采集:拍照、录像与踩坑记录(V4L2 + FFmpeg)
ffmpeg·嵌入式
Zwawa1 天前
串口为什么会丢字节:从轮询到中断和环形缓冲区
c语言·单片机·嵌入式
zhangxp1231 天前
【Quectel Pi M2 实战】Day3 USB 摄像头图像采集:拍照、录像与踩坑记录(V4L2 + FFmpeg)
嵌入式
用户8351414049491 天前
本地跑小模型做语音唤醒:手上那块子能带动吗
llm·嵌入式
小李不想当小白2 天前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
Zwawa2 天前
从 printf 到曲线:把数据送上 VOFA+
c语言·单片机·嵌入式
LCG米3 天前
STM32 ADC多通道DMA定时器触发实测:TRGO触发链、采样率精确控制与乒乓缓冲落地
stm32·单片机·嵌入式·adc
LCG米4 天前
STM32硬件SPI驱动SSD1306 OLED实测:上电黑屏排查、页寻址模式与取模扫描方向陷阱
stm32·单片机·嵌入式硬件·嵌入式
探鸽小钛4 天前
4G 终端 ES8311 - 挂断一次,下次说话就没声了之解决办法
物联网·音视频·嵌入式·esp32·webrtc