stm32专题十七:AT24C02

最新更新时间:2021-10-22来源: eefocus关键字:stm32  AT24C02  硬件I2C 手机看文章 扫描二维码
随时随地手机看文章

AT24C02的数据手册


1 硬件连接:直接是连接到I2C1的SCL SDA引脚(PB6 PB7)上,因此可以使用硬件I2C

2 存储容量描述

可以看到,AT24C02共有256个字节。跟Flash类似,EEPROM也分成不同的页。AT24C02共有32页,每页8个字节,共256字节。

支持400kHz的通讯速率(IIC快速模式)

3 引脚说明

4 设备描述

5 地址选择

6 写数据


字节写入

       字节写入操作,需要8位的数据字地址跟随在设备字地址和应答位之后。当EEPROM接收到这个地址后,会再次响应0(初次响应为设备地址)。然后计时第一个8位数据。在收到8位数据后,EEPROM会输出0,此时寻址设备(如单片机)必须以停止条件来终止写入序列。此时EEPROM进入内部定时写周期(tWR),写入到非易失性存储器。在这个写周期内,所有输入都被禁止,EEPROM将不会响应,知道写入完成。

页写入

注意,EEPROM在进行页写入时,会存在一个数据覆盖的问题。所以,在对EEPROM进行页写入时,要注意8字节对齐。就是地址为0 8 16 ...才是非常正确的数据,不然如果起点是一个页的中间,后面的数据其实会翻转到页的起始处。

       数据字地址低三(1K / 2K)或四(4K,8K,16K)位在接收到每个数据字后在内部递增。 较高的数据字地址位不递增,保留存储器页行位置。 当内部生成的字地址到达页边界时,后面的字节放在同一页的开头。 如果将超过8个(1K / 2K)或16个(4K,8K,16K)数据字传输到EEPROM,则数据字地址将“翻转”,之前的数据将被覆盖。

       还有一个非常值得注意的,因为写入数据非常耗时(所以我们才需要RAM),每当我们写入数据时,都需要我们去等待EEPROM把数据写完。而stm32的通讯速度非常快,当我们希望向EEPROM中写入新数据时,可能EEPROM还在写之前的数据(没反应过来),这是不会响应外部的操作。这时可以通过向EEPROM发起询问,具体方式是产生一个起始地址,后面带着EEPROM的设备地址(读地址或写地址),如果EEPROM写入完成,则应答0

确认轮询:一旦内部定时写周期开始并且EEPROM输入被禁止,就可以启动应答轮询。 这涉及发送开始条件,然后发送设备地址字。 读/写位代表所需的操作。 只有内部写周期完成后,EEPROM才会响应“0”,允许读或写序列继续。


读数据操作


       读操作的启动方式与写操作相同,只是器件地址字中的读/写选择位设置为“1”。 有三种读操作:当前地址读取,随机地址读取和顺序读取。


1 当前地址读取(用的很少,因为你不知道这个内部地址寄存器保存的值是多少)


        当前地址读取:内部数据字地址计数器维护上次读取或写入操作期间访问的最后一个地址,增量为1。只要保持芯片电源,此地址在操作之间保持有效。读取期间的地址“翻转”是从最后一个内存页的最后一个字节到第一页的第一个字节。写入期间的地址“翻转”是从当前页的最后一个字节到同一页的第一个字节。


这个翻转操作其实就是,我用mcu读数据,每收到一个字节后,给EEPROM一个应答信号,然后EEPROM的内部数据字地址计数器就会+1,我们就能读取下一个字节的数据。当全部读完256个字节,EEPROM的内部数据字地址计数器就会变为0,然后重新计数,这样我们就是又从头开始读取。

2 随机读取(这个很常用)


       随机读取:随机读取需要“虚拟”字节写入序列以加载数据字地址(先写入设备地址,然后写入数据字地址,这个过程和写操作一样,成为虚拟字节写入序列)。 一旦器件地址字和数据字地址被EEPROM输入并确认,微控制器必须产生另一个启动条件。 微控制器现在通过发送读/写选择位为高的器件地址来启动当前地址读取(一旦EEPROM响应后,重新产生启动条件,在发送一次设备读地址(因为数据字地址寄存器已经保存了要操作的字节地址,所以这个过程和当前地址读取一样))。 EEPROM确认器件地址并串行输出数据字。 微控制器不响应“0”,但会产生一个跟随停止条件(参见第11页的图11)。

3 顺序读取


       顺序读取由当前地址读取或随机地址读取启动。 在微控制器接收到数据字后,它以确认响应。 只要EEPROM接收到确认,它将继续递增数据字地址并串行输出顺序数据字。 达到存储器地址限制时,数据字地址将“翻转”,顺序读取将继续。 当微控制器没有响应“0”但是确实产生跟随停止条件时,顺序读取操作终止。

关键字:stm32  AT24C02  硬件I2C 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic552247.html

上一篇:stm32专题十六:IIC(三)stm32 IIC 固件库函数分析
下一篇:stm32专题十七:深度解析 stm32 硬件iic (i2c)

推荐阅读

STM32处理器输入捕获分析
/比较模式寄存器TIMx_CCMR1(当然还有CCMR2,两个寄存器配置CH1~4的输入输出)捕获作为输入,因此我们只用图片中寄存器的后下部分;CC1S[1:0] : (1)决定定时为输出(比较)或输入(捕获)模式;(2)决定IC1信号源的选择(后边详细介绍);IC1PSC[1:0]:选择对IC1的分频模式(但是这个分频和定时器TIMx_PSC寄存器的分频并不太一样,但功能是一样的)IC1F[3:0]:输入捕获1滤波器(详细功能可以参考STM32手册,这里这个功能不作为细说,本博文也用不到)(2)捕获/比较使能寄存器TIMx_CCER1使能寄存器中除了对输入使能的控制之外,还有对输入输出极性的控制;(此时为输入模式下)CCxP
发表于 2021-11-29
<font color='red'>STM32</font>处理器输入捕获分析
STM32定时器输出比较(PWM)
前言:1.本博文基于ARM Cortex-M3内核的STM32F103ZET6处理器芯片和标准3.5.0库函数;2.不介绍PWM的基础概念,但是需要知道一点的是,PWM是输出比较的一种特例;3.如有不足指出,还望前辈多多指教;4.要想学会这个知识点,必须要掌握下面这位博友写的博客里的几个概念,不然后来很有可能会懵逼;http://blog.sina.com.cn/s/blog_3ba262a10101esd1.htmlⅠ 定时器和PWM(1)8个定时器中,除了TIM6和TIM7,其他定时器都可以产生PWM输出;(2)高级定时器TIM1和TIM8可以同时输出7路PWM(CH1~7,共7个通道),通用定时器同时可产生4个PWM输出(CH
发表于 2021-11-29
<font color='red'>STM32</font>定时器输出比较(PWM)
STM32处理器定时器分析(实现一个定时中断)
前言:1.本博文基于STM32F103ZET6芯片和ST官方提供的3.5.0库函数;2.学习过51单片机学习STM32定时器会容易理解一些,但是两个定时器的实力有很大的距离;3.定时器是难点也是重点;本博文以通用定时器TIM2~TIM5来说明;例程是TIM36.定时器结构稍复杂,寄存器较多,本博文根据一个简单的定时器中断实验展开,所列出的相关寄存器是专门针对本次实验来说的,其他不相关定时器不再列出;一 STM32定时器的分类1.高级定时器: TIM1和TIM82.通用定时器: TIM2,3,4,5;3.基本定时器: TIM6和TIM7;二 通用定时器的功能(1)16位向上,向下,向上/向下自动装载寄存器(TIMx_CNT)(向上
发表于 2021-11-29
<font color='red'>STM32</font>处理器定时器分析(实现一个定时中断)
STM32的USART分析
串口框图工程建立后,需要在工程中添加stm32f10x_usart.h和stm32f10x_usart.c文件;串口设置的一般步骤①串口时钟使能,GPIO时钟使能②串口复位③GPIO端口模式设置④串口参数初始化⑤开启中断并初始化NVIC(需要开启中断时开启)⑥使能串口⑦编写中断处理函数串口设置的相关函数以及解释1.串口使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_USARTx,ENABLE);2.串口复位解释一下复位:当外设出现异常的时候通过复位设置实现该外设的复位,然后重新设置这个外设达到让其重新工作的目的。一般在系统刚开始的时候,都会执行复位该外设的操作。下面是复位所需的函数;void USAR
发表于 2021-11-29
<font color='red'>STM32</font>的USART分析
STM32处理器 RTC分析
前言:1.博客基于ARM Cortex-M3内核的STM32F103ZET6和标准3.5.0库;2.如有不足之处,还请多多指教一 RTC是什么?1. 从结构上讲就是一个独立的定时器;2. 从功能上来说就是为系统提供系统掉电不复位的日历时间;RTC分为两个完全能独立的部分:1. APB1接口;2. RTC核心;功能:(1)APB1总线连接APB1接口并负责驱动APB1接口,接口内部包含一组16位寄存器,可以通过APB1总线对其进行读写操作。(2)RTC核心由RTC20位预分频模块和32位可编程计数器模块组成;Ⅰ RTC预分频模块包含一个20位的可编程分频器RTC_DIV。预分频模块为32位计数器模块提供时基单元,这个很重要;预分频器内
发表于 2021-11-29
<font color='red'>STM32</font>处理器 RTC分析
STM32 Systick分析
为了两种情况:使用UCOSⅡ和不使用UCOSⅡ的情况程序开始之前先解释一下:下面的延时函数代码支持UCOSⅡ下使用,它可以和UCOSⅡ共用systick定时器;在UCOSⅡ下系统不许有一个节拍,而这个节拍必须是固定的,不能被打断,否则就不准了;举个例子:比如每5ms一个节拍,那么直接由OS_TICK_PER_SEC = 200即可,stm32下systick提供这节拍;由上可知:UCOSⅡ下的systick不能随意被更改;此时如果要sistick做delay_us和delay_ms的延时;这事有一个时钟摘取的办法(以delay_us(50)为例):刚进入函数之后,先计算出需要延时的这段时间内systick需要建多少数,假设系统时钟
发表于 2021-11-29
<font color='red'>STM32</font> Systick分析
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved