基于STM32 Cortex-M4的EEPROM存储器驱动设计(IIC)

目录

一、IIC协议介绍

二、本文章EEPROM驱动功能的介绍

三、EEPROM驱动设计流程

        1、查阅相关芯片资料得到EEPROM的设备地址

        2、结构体初始化

        3、完成一字节的读写

​编辑         4、完成一页的写入 (即一次最多写8字节)

         5、任意字节的写入和随机读取

         6、调用写好的API驱动函数完成各种数据的存储

 四、效果及存在问题

        1、效果

         2、存在问题及解决方法


一、IIC协议介绍

线与特性,0的优先级大:空闲时总线表现为高电平,从设备要为高阻态(开漏输出)

iic的从设备地址大多为7位(也有10位的),即最大设备数128

每个设备可以当主机也可以当从机(但是同一时刻只能有一个主机)

iic标准模式100kHZ,快速模式400kHZ,高速模式3.4MHZ

连接到相同iic总线上的最大电容400pF

当SCL线为高电平时,SDA线由高变低表示起始信号

当SCL线为高电平时,SDA线由低变高表示停止信号

在SCL线为高电平时,SDA线表示的数据有效

一般设备地址是和读写一起组成8位1字节,所以设备地址要左移一位,若为写则不变,若为读则加1

7位设备地址:000 1011 (11)

8位设备写地址:000 10110 —> 0001 0110 (22)

8位设备读地址:000 10111 —> 0001 0111 (23)

主机写数据到从机:

S—从设备地址—W(写0)—从设备应答(低电平)—主机传数据给从机—从机应答(低电平)

当等待从机应答时,需要先释放总线控制权,即拉高SDA线

若从机不想在接收数据则返回高电平 

主机由从机中读数据

S—从设备地址—R(读1)—从设备应答(低电平)—从机传数据给主机—主机应答

IIC通信时每字节为8位长度,数据传送时,先传送最高位,后传送低位;当接收器接收完最后一个数据时 接收器会应答1位(低电平)来表示接收到了;若后续不想再接受了则应答1位(高电平);即IIC一帧有9位(经过9个时钟周期)

复合通信:

 在第二次S(开始)之前没有发停止信号,是为了不释放总线使用权(防止使用权被别的总线占用)

二、本文章EEPROM驱动功能的介绍

本文章讲述的EEPROM用的是AT24C02(2K),在电路中AT24C02使用IIC总线进行数据访问,板子上使用STM32的IIC控制器1和AT24C02进行连接,通过驱动设计可实现存储整数、小数、字符串功能。

三、EEPROM驱动设计流程

        1、查阅相关芯片资料得到EEPROM的设备地址

官方手册AT24C02设备地址如图

                        ​​​​​​​        ​​​​​​​      

开发板电路原理图如图

 注意:又因为读写方向和EEPROM一起发送,所以发送的地址需要左移一位再加上读写方向,发送地址库函数如下:

        2、结构体初始化

(1)首先初始化GPIO,把GPIO配置成开漏复用输出(开漏输出是为了保证IIC的线与特性,即空闲时各设备呈现高阻态状态,总线表现为高电平)

(2)配置IIC初始化函数(I2C_InitTypeDef结构体的初始化)

注意:要使能用到的总线的时钟,并且需要配置GPIO复用的功能。(IIC协议的速度有3种。标准模式100KHZ;快速模式400KHZ;高速模式3.4MHZ(一般不用,很少从设备有这种速度))

        3、完成一字节的读写

(1)AT24C02总共有32页,每页8个字节;由于AT24C02一次最多写入一页即8个字节,由简到繁,先完成一个字节的写入

(2)完成一字节的随机读取

         4、完成一页的写入 (即一次最多写8字节)

 

AT24C02有32页,一页是8字节

         5、任意字节的写入和随机读取

(1)随机读取任意字节

 

 (2)任意字节写入

调用一页写入API函数和算法完成任意字节的写入,任意字节写入需要考虑写入时是否是页对齐,若对其则直接页写入,若不对其则需要计算这页还剩下多少字节可以写入并把这页写完再正常页写入;若页写入不满8字节,则需要计算剩下需要写入的字节。

         6、调用写好的API驱动函数完成各种数据的存储

 

 注意:EEPROM在写入后需要等待写入完才能进行后续的操作,所以需要一个函数一直对EEPROM地址进行访问,直到EEPROM应答表示EEPROM写入完成

 四、效果及存在问题

        1、效果

         2、存在问题及解决方法

EEPROM页写入的API函数代码存在冗余,可以做适当的删减修改优化;

对于EEPROM的页写入API函数可以使用递归算法去减少冗余的代码,但是这样会使代码更难理解。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

要有上進心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值