I2C总线通信原理
EEPROM(24CXX)存储芯片介绍
I2C读写EEPROM实例
一. I2C总线通信原理
1. I2C总线简介与特征
I2C(Inter-Integrated Circuit)总线(也称IIC或I2C)是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备,是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,期间封装形式少,通信速率高等优点。
两条总线线路:一条串行数据SDA,一条串行时钟线SCL来完成数据的传输及外围器件的扩展.
I2C总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址.
I2C总线数据传输速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下 可达3.4Mbit/s。一般通过I2C总线接口可编程时钟来实现传输速率的调整,同时也跟所接的上拉电阻的阻值有关。
I2C总线上的主设备与从设备之间以字节(8位)为单位进行单双工的数据传输。
2. I2C物理结构
3. I2C总线协议
空闲,起始,结束的条件
数据传输
4. I2C读写操作
(1)主设备往从设备读写数据
(2)主设备读从设备的某个寄存器(与上述区别为寄存器)
5.STM32F4-I2C控制器特性
STM32F4-I2C通讯引脚
二.EEPROM(24CXX)存储芯片介绍
1.EEPROM介绍
后4位固定为1010,主要看前三位A0-A1,看图:READ为1,WRITE为0
电器连接
有上述得设备地址:
读地址: 1010 0001 即 0xA1
写地址: 1010 0000 即 0xA0
三.I2C读写EEPROM实例
1.实验要求:I2C读写EEPROM
2.cubemx创建工程
(1)I2C的设置(查看原理图<搜索24C65> PB6,PB7)
注意:24CXX是I2C通信用到的芯片
(2)RCC,USART配置
(3)I2C默认配置,不需要修改
3.步骤:
(1)全程在main.c中<main()之外>
#define ReadAddr 0xA1
#define WriteAddr 0xA0
uint8_t Wbuf[20]="EEPROM TEXT OK!\n";
uint8_t Rbuf[20]={0};
int fputc(int ch,FILE *p){
while(!(USART1->SR&(1<<7)));
USART1->DR =ch;
return ch;
}
//写数据
void Eeprom_Write(uint8_t MemAddr,uint8_t *Wbuf,uint8_t len){
while(len--){
while(HAL_I2C_Mem_Write(&hi2c1, WriteAddr, MemAddr, I2C_MEMADD_SIZE_16BIT, Wbuf, 1, 100!=HAL_OK)){};
MemAddr++;
Wbuf++;
}
}
//对数据
void Eeprom_Read(uint16_t MemAddr, uint8_t *Rbuf, uint16_t len )
{
while(HAL_I2C_Mem_Read(&hi2c1, ReadAddr, MemAddr, I2C_MEMADD_SIZE_16BIT, Rbuf , len, 100) != HAL_OK );
}
(2)使用函数(main()之内,while()之外)
printf("开始:\n");
Eeprom_Write(0, Wbuf, sizeof(Wbuf) );
HAL_Delay(500);
Eeprom_Read(0 , Rbuf, sizeof(Rbuf));
printf("READ: %s\n", Rbuf);
3.串口打印 开始: xxx