0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于MM32F0140的I2C与24C02通信

灵动MM32MCU 来源:灵动MM32MCU 2023-09-28 16:52 次阅读

Mini_F0140原理图上I2C连接着24C02:

6a16d878-5ddb-11ee-939d-92fbcf53809c.png

一.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. 支持多个从地址(详细见用户手册)

下图为信号变化及其特定含义:

6a2ed248-5ddb-11ee-939d-92fbcf53809c.png

当主发送器如下图所示传输数据时,从接收器在接收到的每个字节后产生一个 ACK 来响应主发送器。

6a40ec62-5ddb-11ee-939d-92fbcf53809c.png

二.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. 结果

6a4ffcb6-5ddb-11ee-939d-92fbcf53809c.png






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 转换器
    +关注

    关注

    27

    文章

    7718

    浏览量

    139678
  • 缓冲器
    +关注

    关注

    6

    文章

    1459

    浏览量

    44272
  • dma
    dma
    +关注

    关注

    3

    文章

    474

    浏览量

    98337
  • I2C总线
    +关注

    关注

    7

    文章

    324

    浏览量

    60042
  • SCL
    SCL
    +关注

    关注

    1

    文章

    203

    浏览量

    16598
收藏 人收藏

    评论

    相关推荐

    F0系列的24c02I2C读写程序

    F0系列的24c02I2C读写程序,谢谢了。希望有朋友能帮帮我,在此谢过了。
    发表于 01-10 09:02

    24c02/24c01/24c04读写程序

    24c02/24c01/24c04  I2C EEPROM字节读写驱动程序,芯片A0-A1-A2要接GND(24C65接VCC,具体看DataSheet)。现缺页写、页读,和CRC校验程序。以下程序经过50台验证,批量的效果有待考察。为
    发表于 10-07 12:39 13次下载

    24c02基础程序

    24c02写入调用程序 用于初次接触24c02 学习24c02用的
    发表于 07-12 15:14 20次下载

    STM32f103系列i2c读写文件at24c02

    f103系列i2c读写文件at24c02免费下载。
    发表于 03-04 09:43 11次下载

    MM32F0140 产品手册(中文版)

    MM32F0140 产品手册(中文版)
    发表于 02-22 18:45 1次下载
    <b>MM32F0140</b> 产品手册(中文版)

    MM32F0140 用户手册(英文版)

    MM32F0140 用户手册(英文版)
    发表于 02-22 18:46 0次下载
    <b>MM32F0140</b> 用户手册(英文版)

    MM32F0140 勘误表(中文版)

    MM32F0140 勘误表(中文版)
    发表于 02-22 18:47 0次下载
    <b>MM32F0140</b> 勘误表(中文版)

    单片机模拟I2C总线及24C02读写实例(c源代码),24C02 read / write process

    I2C总线及24C02读写实例(c源代码),24C02 read / write process 关键字:单片机模拟
    的头像 发表于 09-20 19:41 1216次阅读

    24C02读写操作程序设计实例,24C02 read / write process

    24C02读写操作程序设计实例,24C02 read / write process 关键字:
    的头像 发表于 09-20 19:41 1048次阅读

    24c02读写程序(已通过测试),24C02 read / write process

    24c02 SDA// 功能函数void x24c02_delay(char x){int i;for(i=0;i}void x24c02_start(){SDA
    的头像 发表于 09-20 19:41 1901次阅读

    灵动微MM32F0140可替换瑞萨单片机LPC11C14

    MM32F0140系列MCU是灵动第一款基于12寸晶圆打造的产品系列,其搭载72兆赫兹,Arm Cortex-M0内核,提供最高64KB Flash和8KB SRAM,并集成了性能升级
    发表于 01-12 15:18 400次阅读

    基于MM32生态实现I2C接口通讯的方式

    I2C的基本概念及时序等知识点,本文不再详细描述,大家可以下载附件中的《I2C总线概要》和《I2C总线规范》进行研究。 本文将通过如下四个方面,讲述I2CMM32F032/MM32F0140系列MCU上的实现,以及使用I2C工具(图莫斯USB
    的头像 发表于 08-15 09:48 949次阅读

    24C02的秘密

    24C02几种打线方式的区别,有利于消费者在芯片选型替代、电路设计、软件编程的注意一些细节,另外就是给出了用C语言软件模拟I2C协议和用汇编语言软件模拟I2C协议对24C02进行存取数据的代码
    的头像 发表于 11-28 11:40 2335次阅读

    MM32F0140 DMA学习笔记

    MM32F0140 DMA 学习笔记
    的头像 发表于 09-18 16:57 114次阅读
    <b>MM32F0140</b> DMA学习笔记

    基于MM32F0140的SPI与W25Q80通信

    MM32F0140的MiniBoard原理图,SPI挂载了W25Q80。
    的头像 发表于 09-21 17:26 599次阅读
    基于<b>MM32F0140</b>的SPI与W25Q80<b>通信</b>