IIC总线协议—读写EEPROM

2023-06-20,,

IIC总线协议读写EEPROM

1、I2C简介

I2C 通讯协议(Inter-Integrated Circuit)是由Phiilps公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。

2、I2C物理层

I2C总线只需要两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线 (SCL)。SDA线用来装载数据,SCL线用于控制收发。I2C支持多设备的总线。支持多个通讯主机及多个通讯从机。

3、I2C协议层

3.1、协议层总述

当时钟线为高电平时,数据线必须为固定状态。因为时钟线为高电平时,数据线任何变化都会产生开始信号、结束信号。

IIC总共有三种信号:

开始信号:SCL=1 & SDA下降沿触发

传输信号:SCL=0、SCL=1、SCL=0(传输SDA已装载数据)

结束信号:SCL=1 & SDA上升沿触发

下图是IIC传输协议,图中Bn是数据,S代表Start,P代表Pause

3.2、Bn数据的读写

4、EEPROM简介

EEPROM是指带电可擦除可编程的只读存储器,是一类芯片的总称,具有掉电后数据不丢失的特性。

4.1、AT24C02芯片

stm32f103开发板采用的是AT24C02芯片进行I2C 协议传输。工作电压范围:1.8V ~6.0V。采用低功耗CMOS 技术制造。当WP 为高电平时,AT24C02进入写保护状态。

AT24C02芯片使用手册

https://github.com/ruanpei1010/3work_PDF/blob/master/26_AT24c02中文资料.pdf

引脚介绍:

编号 名称 功能
1-3 A0、A1、A2 A2、A1和A0输入引脚作为硬件地址,AT24C02都是0
4 GND 接地
5 SDA 装载串行数据
6 SCL 时钟线,上升沿写入,下降沿读出
7 WP 读写控制,接Vcc只读,接地或悬空正常读写
8 Vcc 高电平

4.2、AT24C02地址约定

芯片AT24C02在开发板上的外设地址,有如下约定:1010前四位固定,后四位A2\A1\A0用不到,R\W`是读写位(0代表写入,1代表读取)。也就是说AT24C02作为EEPROM外设,只可能出现写读两种地址:10100000和10100001(0xA0和0xA1)

4.3、例程代码

完整代码

完整代码挂在github,例程名DEMO05_IIC_EEPROM1

例程复刻野火stm32f103vet指南者代码,

开发环境:野火stm32f103vet6,gcc编译环境,CubeMX,dap仿真器

CubeMX配置IIC

相关HAL函数简介:

HAL_StatusTypeDef HAL_I2C_Mem_Write(...)

HAL_StatusTypeDef HAL_I2C_Mem_Write ( I2C_HandleTypeDef * hi2c,
uint16_t DevAddress,
uint16_t MemAddress,
uint16_t MemAddSize,
uint8_t * pData,
uint16_t Size,
uint32_t Timeout
)

@brief 向内存中写数据

@arg 第一个参数为 I2C 操作句柄。

@arg 第二个参数为 EEPROM 的写操作设备地址。

@arg 第三个参数为内存地址。

@arg 第四个参数为内存地址长度,EEPROM 内存长度为 8bit。

@arg 第五个参数为数据缓存的起始地址。

@arg 第六个参数为传输数据的大小。AT24C02 型号的芯片页写入时序最多可以一次 发送 8 个数据,其他芯片也有 16 位传输。

@arg 第七个参数为操作超时时间。

同理:

HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)

完整代码挂在github,例程名DEMO05_IIC_EEPROM1

IIC总线协议—读写EEPROM的相关教程结束。

《IIC总线协议—读写EEPROM.doc》

下载本文的Word格式文档,以方便收藏与打印。