IIC学习笔记

IIC学习笔记

  1. 物理层
  • IIC有SCL和SDA两条线,SCL是时钟线,SDA是数据线。
  • IIC的的两根线在外部是被拉高的
  • 连接到IIC的设备只能拉低总线
  • IIC上可以挂载多个设备
  1. 总线裁决机制
  • 其实是线与,其实是与,有0 则0,全1则1,
  • 多个主机想同时占用总线,这叫做总线竞争,总线就要发挥他的作用,总线裁决,决定谁先占用总线
  • 仲裁机制是按照位进行的,谁先发0,谁赢得仲裁,谁先占用总线
  1. 重要信号
  • 开始信号:一次完整通讯的开始信号,并不是主机每发送一位数据都要发送开始信号,
  • 结束信号:一次完整通讯的结束信号,主机发送完所有数据后,发送结束信号,
  • ACK信号:从机给主机的应答信号,主机每发送一个字节(8位)数据后,会暂时释放SDA总线(暂时释放就是说SDA主机没有拉低电平),然后主机会监听从机的应答信号,
  • ACK信号的作用:表示我接收到了信号,或者我可以接受信号,相反NACK表示我没有接受到,或者我不需要了
  1. 有效数据位的规定
  • SCL在高电平时,SDA发生下降沿,为开始信号
  • SCL在低电平时,SDA发生上升沿,为结束信号
  • SCL在高电平时,SDA保持在一个稳定的电平,为有效数据位
  1. 举例

    • 条件 :一个IIC总线上面有A,B,C,D四个设备
    • A向B写数据:
    1. A拉低SDA,发送开始信号,总线上所有设备被激活,开始监听总线
    2. A发送7位设备地址+写操作位(8位,一个字节)
    3. B发送ACK信号
    4. A发送一个字节的数据
    5. B发送ACK信号
    6. ...
    7. A在SCL为高电平时,拉高SDA,发送结束信号
    • A向B读数据:
    1. A拉低SDA,发送开始信号,总线上所有设备被激活,开始监听总线
    2. A发送7位设备地址+写操作位(8位,一个字节)
    3. B发送ACK信号
    4. A发送一个字节的数据(寄存器地址)
    5. B发送ACK信号
    6. A在SCL为高电平时,拉低SDA,发送开始信号(RESTART信号)
    7. A发送7位设备地址+读操作位(8位,一个字节)
    8. B发送ACK信号
    9. B发送一个字节的数据
    10. A发送ACK信号
    11. ...
    12. B发送了最后一个字节的数据
    13. A发送NACK信号,
    14. A在SCL为高电平时,拉高SDA,发送结束信号
相关推荐
Brilliantwxx28 分钟前
【STM32】 RTC 实时时钟详解:从概念到预分频器
stm32·单片机·嵌入式硬件·mcu·bash
lhbweilai4 小时前
分析FreeRTOS内核对象API的源码实现(四)
c语言·stm32·单片机
inrichtt7 小时前
第八课时:SPI总线揭秘:四线全双工通信的奥
c语言·数据结构·stm32·单片机·嵌入式硬件
半杯咖啡半行码8 小时前
Linux字符设备驱动开发基础:从设备号到ioctl的完整实战
stm32·单片机·嵌入式硬件
碧海银沙音频科技研究院9 小时前
基于炬芯ATS3089X的usb U盘/usb audio声卡/usb cdc虚拟串口/录音dump到本地功能实现
stm32·单片机·嵌入式硬件
优选资源分享9 小时前
PicGo v3.0.3 新版 | 开源免费图床工具
javascript·笔记·electron
CC180253944869 小时前
具有强大的图像和语音处理能力的高性能 MCU芯片ESP32-P4NRW32X
单片机·嵌入式硬件
星恒随风10 小时前
Linux线程概念详解:从分页存储、页表、MMU与TLB,深入理解线程和进程的区别与联系
linux·运维·笔记·学习·状态模式
qq_2842740510 小时前
数控机床编程基础与坐标系:编程六步流程、程序号/程序段/程序字格式,与右手定则下车床铣床XYZ轴判定(含考点)
笔记·学习·自动化·制造
小范的技术工坊10 小时前
Linux应用开发(文件IO)
linux·stm32·单片机