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

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

3天内不再提示

在一个I2C例程上面修改代码来实现24C02的读写

冬至配饺子 来源:TopSemic嵌入式 作者:TopSemic 2022-08-16 10:29 次阅读

1.24C02介绍

24C02 现在基本是开发板的标配,对于需要掉电存储的应用来说确是不二选择。现在单片机因为内部集成了Flash存储器,一般也都支持数据的掉电保存,但相对于 24C02 这种 EEPROM 来说,使用单片机内部的 Flash 有一些需要注意的问题:

a.Flash 写入数据之前需要先执行擦除操作,而且擦除以扇区为单位。

b.Flash读写次数比 EEPROM 少很多。

c.容易误操作,把 Flash 内部的代码擦除掉。

d.影响中断的响应时间。

24C02 有 256 字节的数据,一般说来也够用了。它的地址是可以通过引脚配置的,这样一条 I2C 总线上就可以挂多个 24C02。如下:

pYYBAGL7AACAYNEWAABapDi8x0k434.png

我们把 A2,A1,A0 都接地,这样地址为 A0。然后 SCL,SDA 脚接 MCU 的 PB8 和 PB9。需要注意 SCL,和 SDA 需要加上拉电阻

pYYBAGL7ABOAXgsKAABsue0eduU211.png

2.代码

下面我们在一个 I2C 例程上面修改代码来实现 24C02 的读写。大家可以看到使用库函数的好处,基本上不用看 STM32F030 的手册,很快就能实现我们想要实现的功能。我们用 Keil 打开下面这个工程:

STM32Cube_FW_F0_V1.11.0\Projects\STM32F030R8-Nucleo\Examples\I2C\I2C_TwoBoards_ComPolling\MDK-ARM\Project.uvprojx

Step 1, 把 I2C 地址改为跟我们硬件一致:

poYBAGL7ACWAeH2nAABYV1lkpic757.png

Step 2, 根据实际使用的 I2C 模块和引脚进行配置:

pYYBAGL7ADaAKk4GAAEXOPV0b6w844.png

Step 3, 把地址模式改为 7BIT:

poYBAGL7AEeAVqI4AADGkqL7aVA486.png

Step 4, 操作EEPROM,我们不使用例子中的 HAL_I2C_Master_Transmit 和 HAL_I2C_Master_Receive,这两个函数适用于两个 I2C 器件之间进行数据传输。我们这里要用的是下面这两个函数:

poYBAGL7AG2AB_bwAAE9YeH73_Q187.pngpYYBAGL7AHSAAv2GAABpt6Ygca4396.png

在此我们写入数据用的 24C02 的 Page Write 命令,每次写入 8个字节的数据,然后存储器写入地址加 8。要注意每次执行完写入命令后,需要有一个延时,等待 EEPROM 内部处理完该指令后才能继续写入。这个延时要查手册,不同的厂家可能有不同的数值。读出时可以连续的读出数据,无需等待。

poYBAGL7AIWAVg14AABJTAEjObc118.png

下面是写入数据的波形,0xA0 是器件地址,0x28 是 24C02 内部存储器地址,之后是 8个字节数据。

poYBAGL7AJWAMaIcAABVbpfBu7A630.png

读出数据的波形:

poYBAGL7AKSASnwjAABVoDhhay0295.png

注意:

在使用硬件 I2C 操作时,有时候会遇到死锁问题。在此情况下,可以把 SCL,SDA 引脚初始化为 GPIO,如此例中的 PB8, PB9 然后连续翻转 SCL 引脚送出 9 个时钟脉冲,既可以使 I2C 从死锁的状态复位。然后再重新初始化 I2C 模块,进入正常 I2C 操作。



审核编辑:刘清

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

    关注

    9

    文章

    1008

    浏览量

    81302
  • Flash存储器
    +关注

    关注

    3

    文章

    104

    浏览量

    25688
  • GPIO
    +关注

    关注

    16

    文章

    1187

    浏览量

    51805
  • STM32F030
    +关注

    关注

    1

    文章

    33

    浏览量

    6609
收藏 人收藏

    评论

    相关推荐

    求F0系列的24c02I2C读写程序

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

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

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

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

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

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

    24c02/24c01/24c04  I2C EEPROM字节读写驱动程序,芯片A0-A1-A
    发表于 10-07 12:39 19次下载

    24C02读写操作程序(C语言)

    24C02读写操作程序.c #define uchar unsigned char#define uint unsigned int#i nclude
    发表于 01-16 11:49 1.1w次阅读

    PIC单片机的I2C 24LC02 C读写程序

    PIC单片机的I2C 24LC02 C读写程序 1   I2C总线特点   
    发表于 10-30 08:27 5379次阅读

    HL配套C实验例程24c02存储器读写基本驱动

    HL配套C实验例程24c02存储器读写基本驱动2,配合开发板学习效果更好。
    发表于 04-11 17:04 10次下载

    24c02基础程序

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

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

    ) 单片机模拟I2C总线及24C02(I2C EEPROM)读写实例(c
    的头像 发表于 09-20 19:41 1888次阅读

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

    );  //从24c02的地址address中读取一个字节数据void x24c02_write(uchar address,uchar info);  //向24c02的addres
    的头像 发表于 09-20 19:41 1488次阅读

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

    24c02读写程序(已通过测试),24C02 read / write process 关键字:24c02读写
    的头像 发表于 09-20 19:41 2558次阅读

    24C02读写汇编程序,24C02 read / write process

      ;简洁的24C02读写汇编程序 ;--------------------------------------------     I2C_SDA          EQU P1.6
    的头像 发表于 09-20 19:42 1192次阅读

    嵌入式linux应用读写i2c示例

    这里分享嵌入式linux读写24c02i2c程序ioctl函数的使用:原型:struct ioctl(struct file *fil
    发表于 11-01 16:57 12次下载
    嵌入式linux应用<b class='flag-5'>读写</b><b class='flag-5'>i2c</b>示例

    STM32f103系列i2c读写文件at24c02

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

    24C02的秘密

    本文主要介绍了下目前市场上面24C02几种打线方式的区别,有利于消费者芯片选型替代、电路设计、软件编程的注意些细节,另外就是给出了用
    的头像 发表于 11-28 11:40 5464次阅读