Mini_F0140原理图上I2C连接着24C02:
一.IIC介绍
I2C(Inter-Integrated Circuit)是一种通用的总线协议,实现I2C需要两根信号线完成信息交换,SCL时钟作为信号线,SDA作为数据输入/输出线。I2C属于同步通信,由于输入输出数据均使用一根线,因此通信方向为半双工。
主要特征有:
1. I2C 总线协议转换器/并行总线
2. 半双工同步操作
3. 支持主从模式
4. 支持 7 位和 10 位地址格式
5. 支持起始(START)、停止(STOP)、重新起始(RESTART)以及应答(ACK)信号的生成和检测
6. 支持标准模式(最大 100Kbps)、快速模式(最大 400Kbps)
7. 分别有 2 字节的发送和接收缓冲
8. 支持过滤毛刺功能
9. 支持 DMA 操作
10. 支持中断和查询操作
11. 支持多个从地址(详细见用户手册)
下图为信号变化及其特定含义:
当主发送器如下图所示传输数据时,从接收器在接收到的每个字节后产生一个 ACK 来响应主发送器。
二.24C02
24C02是低工作电压的2K位串行电可擦除只读存储器,内部组织为256个字节,每个字节8位,该芯片被广泛应用于低电压及低功耗的工商业领域。
主器件通过发送一个起始信号启动发送过程,然后发送它所要寻址的从器件的地址。8位从器件地址的高4位固定为1010。接下来的3位(A2、A1、A0)为器件的地址位。当接收数据时,与I2C连接的从器件名为0xA0。
三.例程
向从机写数据后,再读取数据。
1. I2C配置
RCC_APB1PeriphClockCmd(RCC_APB1ENR_I2C1,ENABLE); I2C_StructInit(&I2C_InitStruct); //ConfigureI2Casmastermode I2C_InitStruct.Mode=I2C_CR_MASTER; I2C_InitStruct.OwnAddress=0; I2C_InitStruct.Speed=I2C_CR_STD; I2C_InitStruct.ClockSpeed=100000; I2C_Init(I2Cx,&I2C_InitStruct); I2C_Send7bitAddress(I2Cx,0xA0,I2C_Direction_Transmitter); I2C_Cmd(I2Cx,ENABLE);
2. 定义24C02结构体
typedefstruct{ u8busy; u8ack; u8fault; u8opt; u8sub; u8cnt; u8*ptr; u8sadd; }gEepromTypeDef;
3. 写数据
EEPROM_WriteByte(sub); while(cnt--){ EEPROM_WriteByte(*ptr); ptr++; } I2C_GenerateSTOP(I2C1,ENABLE); while((I2C_GetITStatus(I2C1,I2C_IT_STOP_DET))==0); gEeprom.ack=true; gEeprom.busy=false; EEPROM_WaitEEready(); returntrue;
4. 读数据
u8i,flag=0,_cnt=0; for(i=0;i< gEeprom.cnt; i++) { while(1) { //Write command is sent when RX FIFO is not full if ((I2C_GetFlagStatus(I2C1, I2C_STATUS_FLAG_TFNF)) && (flag == 0)) { I2C_ReadCmd(I2C1); _cnt++; if (_cnt == gEeprom.cnt) flag = 1; } //Check receive FIFO not empty if (I2C_GetFlagStatus(I2C1, I2C_STATUS_FLAG_RFNE)) { gEeprom.ptr[i] = I2C_ReceiveData(I2C1); break; } } }
5. 结果
审核编辑:刘清
-
转换器
+关注
关注
27文章
8607浏览量
146763 -
缓冲器
+关注
关注
6文章
1912浏览量
45431 -
dma
+关注
关注
3文章
558浏览量
100371 -
I2C总线
+关注
关注
8文章
386浏览量
60794 -
SCL
+关注
关注
1文章
239浏览量
17026
原文标题:灵动微课堂 (第272讲)|基于MM32F0140的I2C与24C02通信
文章出处:【微信号:MindMotion-MMCU,微信公众号:灵动MM32MCU】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论