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

    文章

    8208

    浏览量

    141858
  • 缓冲器
    +关注

    关注

    6

    文章

    1569

    浏览量

    44885
  • dma
    dma
    +关注

    关注

    3

    文章

    535

    浏览量

    99031
  • I2C总线
    +关注

    关注

    8

    文章

    357

    浏览量

    60409
  • SCL
    SCL
    +关注

    关注

    1

    文章

    239

    浏览量

    16884

原文标题:灵动微课堂 (第272讲)|基于MM32F0140的I2C与24C02通信

文章出处:【微信号:MindMotion-MMCU,微信公众号:灵动MM32MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    24c02

    求一个24c02程序,要求将数据存入24c02,然后读出,送P2口,用led显示,在网上试了好多,都不能用。。。。
    发表于 11-26 15:24

    F0系列的24c02I2C读写程序

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

    请问24C02是16Byte缓冲的吗?

    众所周知,I2C EEPROM可以按字节访问,也可以按页访问。24C02一般缓冲区是8Byte,24C04以上的大容量ROM缓冲区有16/32Byte等。那么,有人用过 24C02是1
    发表于 09-16 23:41

    分享一个嵌入式linux读写24c02i2c程序

    这里分享一个嵌入式linux读写24c02i2c程序ioctl函数的使用:原型:struct ioctl(struct file *file,unsigned int cmd,unsigned
    发表于 11-04 07:53

    24C02芯片的相关资料分享

    202007每月一练 的板子上还有一个24C02芯片没有写教程,今天介绍一下24C02这个芯片的驱动方法。串行EEPROM 24CXX是基于I2C总线的存储器件,遵循二线制协议,IIC
    发表于 01-21 11:51

    MindSDK下的I2C读写24c02测试学习资料分享

    1、MindSDK下的I2C读写24c02测试学习  * 硬件电路  开发板上I2C硬件电路  使用PC6和PC7端口的I2C1接口  原作者:meijing
    发表于 09-02 15:47

    基于MM32F0140系列MCU实现UDS Bootloader的设计

    测试等功能,在 ISO 14229 中规定了其实现标准。  在本实例中,UDS 通信是在客户端-服务端关系中执行的。客户端是上位机下载软件运行于 PC 机,服务端是 MM32F0140 系列 MCU
    发表于 09-15 16:35

    MM32F0140 产品手册(中文版)

    MM32F0140 产品手册(中文版)
    发表于 02-22 18:45 0次下载
    <b class='flag-5'>MM32F0140</b> 产品手册(中文版)

    MM32F0140 勘误表(英文版)

    MM32F0140 勘误表(英文版)
    发表于 02-22 18:48 0次下载
    <b class='flag-5'>MM32F0140</b> 勘误表(英文版)

    基于MM32F0140的UDS Bootloader学习笔记

    基于MM32F0140的UDS Bootloader学习笔记
    的头像 发表于 10-30 17:11 353次阅读
    基于<b class='flag-5'>MM32F0140</b>的UDS Bootloader学习笔记

    MM32F0140学习笔记——CRC

    MM32F0140学习笔记——CRC
    的头像 发表于 11-10 18:27 287次阅读
    <b class='flag-5'>MM32F0140</b>学习笔记——CRC

    MM32F0140 FlexCAN一致性测试 (2)

    MM32F0140 FlexCAN一致性测试 (2)
    的头像 发表于 11-10 18:23 383次阅读
    <b class='flag-5'>MM32F0140</b> FlexCAN一致性测试 (2)

    MM32F0140 FlexCAN一致性测试(1)

    MM32F0140 FlexCAN一致性测试 (1)
    的头像 发表于 11-10 17:50 271次阅读
    <b class='flag-5'>MM32F0140</b> FlexCAN一致性测试(1)

    MM32F0140 DMA学习笔记

    MM32F0140 DMA 学习笔记
    的头像 发表于 09-18 16:57 467次阅读
    <b class='flag-5'>MM32F0140</b> DMA学习笔记

    MM32F0140 GPIO学习笔记

    MM32F0140 GPIO学习笔记
    的头像 发表于 09-26 16:42 273次阅读
    <b class='flag-5'>MM32F0140</b> GPIO学习笔记