AT24C02

存储介质: E2PROM : 电可擦除

在这里插入图片描述
在这里插入图片描述

I2C因为线少,使用简单,,广泛用于EEPROM,,温湿度传感器,,OLED显示屏,,实时时钟RTC,,等外设连接

在这里插入图片描述

单片机

├─ SCL/SDA ──→ [起止检测] ──→ [串行控制逻辑(大脑)]
│ │
├─ A0/A1/A2 ─→ [地址比较器] ─→ 匹配?
│ │
│ ┌─────┴──────┐
│ [行列译码] [高压泵]
│ │
│ [EEPROM存储阵列]
│ │
└─────────────────────── [数据输出/ACK]

I2C电路规范

inter IC bus

  • SCL : serial clock
  • SDA : serial data

多个设备之间相互通信

同步
半双工

只有一根线,,SDA,,, 只能分时复用一根线

带数据应答的通讯协议
发送一个数据之后,,,对方需要给他一个应答,,表示接受到了

串口没有应答

需要交专利费,,,呵呵

ds1302就是自己研究的

在这里插入图片描述

ds3231
在这里插入图片描述

SDA 线
SCL线
I2C :

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ACK
NACK

在这里插入图片描述


I2C :同步的

  • SDA serial data 数据线
  • SCL serial clock 时钟线

SCL的每个时钟周期,,SDA会传送一位数据,,时钟信号的频率,决定了数据的传输速度


I2C规定,数据的接收方会在每个时钟周期的高电平期间读取数据,,,SCL处于高电平,,读取SDA的数据

SDA必须在SCL低电平期间准备好要发送的下一位数据,,然后在SCL高电平期间保持稳定

在这里插入图片描述

主设备发起通信和控制总线,,,主设备负责发起时钟,,,从设备只负责响应主设备请求

从设备只能被动接受

每个从设备都会有一个唯一的地址(7位二进制数字)

SDA信号线上数据信号,既可能由主设备,,也可能由从设备,,,

接收完了,会给主设备ack


空闲状态,,,当SDA和SCL均为高电平,,,为空闲状态

  • 起始信号
    SCL处于高电平,,SDA由高变低
  • 结束信号
    当SCL处于高电平时,,SDA由低变高

SCL高电平的时候,,去改变SDA的变化,,,

I2C发送方每发送一个字节8位的数据,接收方都要向发送方回1位的确认信号

SCL
SDA


一个字节一个字节的发,,,不是一位一位的发,,,
发完一个字节,,需要从设备发一个确认信号,,,

发送方每发送一个字节的数据,,,

不一定是主设备发给从设备,,,从设备也可以主动发给主设备,,,
主设备读取从设备的数据,,,,

ack为1,表示接收方未能成功接收到该字节,,或者不希望接收更多数据

该信号在I2C协议中,称为NACK(not acknowledge)


主设备在开始通讯前,,要和目标从设备取得联系,,,还要表明本次通信的操作意图,,是写数据还是读数据

当注射别发送起始信号之后,,会向所有从设备广播一个字节的数据,,, 所有的从设备都能收到,,,

在这里插入图片描述

1: 读
0: 写

自身地址对比: 相同就会回复一个ack,,


完整通信流程:

  1. 主设备发送起始信号
  2. 发送目标从设备地址+读写标识
  3. 接受从设备回复的确认信号
  4. 发送数据,,或者接收从设备的数据
  5. 主设备发送终止信号

51单片机内部没有I2C硬件支持,,只有通过引脚,通过软件的方式来模拟I2C信号

SCL 拉低准备数据,,不拉低没办法准备数据

SCL为低电平是准备数据


SCL拉高之后,,, 从设备读取数据需要时间,,一般来说,,在SCL拉高之后,,主设备要延迟一小会,,让从设备反应过来取读取SDA这个数据

51单片机不用做这个延时,,因为他执行一条指令的时间比较长,,,
32里面有I2C硬件的支持,,软件模拟,,32非常短,,,需要手动延迟,,让从设备反应过来


所有的设备,,都是开漏模式 open drain 接入总线,,,,,drain漏极,,,

描述芯片引脚的方式

开漏模式: 只能输出高阻态,,,
上拉电阻

SDA : 怎么释放

在这里插入图片描述

主设备变成 高电平,,,
从设备就能控制,,可以去拉低高电平

在这里插入图片描述

没有弱上拉,,叫开漏,,,不是严格意义上的开漏模式,,也算开漏


EEPROM : electrically erasable programmable read-only memory : 电可擦写可编程只读存储器

I2C协议

存储设备工作模式,,用户偏好设置


read only memory

2K : 2048位 。。。 256个字节

在这里插入图片描述

WP : write protect

在这里插入图片描述

在这里插入图片描述

I2C的从设备地址,,, 某些从设备,他的高4位是固定的,,,由设备制造商规定,,,低三位通过引脚设置

写保护引脚: 是否允许你往芯片里面写数据


内存组织结构:

在这里插入图片描述

最小写入单位是 字节

读写数据需要指定地址

内存寻址

多少位二进制的数据,,

8位的地址: 高四位 页寻址,,,低4位用于页内字节寻址

0x3F : 0011 1111
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

51单片机,,1us翻转一次,,, 1s中

vcc5V的时候,,设备响应速度变快,,能支持1000kHz,,也就是快速模式 + 超快速模式

电压越高,芯片内部的开关速度越快,能跟上更高的时钟频率,,低压下会限制最高频率

1000kHz ,,就是1us一次,,,这个既使立马拉高,,拉低,,也不会超过单片机的时钟周期

12T架构: 一个机器周期 = 12个时钟周期

12 / 11.0592MHz ≈ 1.085μs

操作IO的指令,,CLR,SETB,MOV,都是单周期指令,,执行一次 约等于1us

写周期是5ms

在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐