RA MCU I2C读取EEPROM详解:基于RA4M2开发板
“RA MCU众测宝典”IIC专题继续深耕!上一期我们用【RA-Eco-RA2E1】开发板实现了IIC通信的OLED显示。这次我们把目光转向实用的存储场景——基于【RA-Eco-RA4M2】开发板,用I2C协议读取EEPROM数据。
瑞萨嵌入式小百科将带着大家从I2C总线原理、EEPROM(AT24C02)特性,到FSP中I2C的引脚配置、参数设置,再到字节写、页写、顺序读等核心操作的代码实现,一起解锁“掉电不丢失”的存储通信技能,看看I2C如何高效实现外设数据交互。
开启宝典
开发环境
IDE:MKD 5.38a
Renesas RA Smart Configurator:v5.1.0
开发板:RA-Eco-RA4M2
MCU:R7FA4M2AD3CFP
01
I2C工作原理
1.1
I2C串行总线概述
I2C总线是PHLIPS公司推出的一种双线式半双工串行总线,是具备多主机系统所需的总线裁决和高低速器件同步功能的高性能串行总线。用于连接微控器及外围设备。I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。
物理层
它只使用两条总线线路:一条双向串行数据线(SDA),一条串行时钟线(SCL)。见图1。
每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。
多主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。
具有三种传输模式:标准模式的传输速率为100 Kbit/s,快速模式为400 Kbit/s,高速模式下可达3.4 Mbit/s,但目前大多I2C设备尚不支持高速模式。
片上的滤波器可以滤去总线数据线上的毛刺波以保证数据完整。
连接到相同总线的IC数量受到总线的最大电容400 pF限制
I2C总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线“与”关系。
每个接到I2C总线上的器件都有唯一的地址。主机与其它器件间的数据传送可以是由主机发送数据到其它器件,这时主机即为发送器。由总线上接收数据的器件则为接收器。
在多主机系统中,可能同时有几个主机企图启动总线传送数据。为了避免混乱,I2C总线要通过总线仲裁,以决定由哪一台主机控制总线。
协议层
I2C的协议包括起始和停止条件、数据有效性、响应、仲裁、时钟同步和地址广播等环节,由于我们使用的是RA4M2集成的硬件I2C接口,并不需要用软件去模拟SDA和SCL线的时序。

S:传输开始信号,此时连接到I2C总线上的所有从机都会接收到这个信号。
SLAVE_ADDRESS:从机地址,此地址可以使7位或者10位,当主机广播的地址与某个设备相同地址时,这个设备就被选中了。
:传输方向选择位,1为读,0为写。
:应答或非应答信号。
P:停止传输信号。
这两幅图表示的是主机和从机通信时SDA线的数据包序列。
其中S表示由主机的I2C接口产生的传输起始信号(S),这时连接到I2C总线上的所有从机都会接收到这个信号。
起始信号产生后,所有从机就开始等待主机紧接下来广播的从机地址信号(SLAVE_ADDRESS),在I2C总线上,每个设备的地址都是唯一的。当主机广播的地址与某个设备地址相同时,这个设备就被选中了,没被选中的设备将会忽略之后的数据信号。根据I2C协议,这个从机地址可以是7位或10位。
在地址位之后,是传输方向的选择位,该位为0时,表示后面的数据传输方向是由主机传输至从机。该位为1时,则相反。
从机接收到匹配的地址后,主机或从机会返回一个应答(A)或非应答信号,只有接收到应答信号后,主机才能继续发送或接收数据。
若配置的方向传输位为写数据,广播完地址,接收到应答信号后,主机开始正式向从机传输数据(DATA),数据包的大小为8位。主机每发送完一个数据,都要等待从机的应答信号(A),重复这个过程,可以向从机传输N个数据,这个N没有大小限制。当数据传输结束时,主机向从机发送一个停止传输信号(P),表示不再传输数据。
若配置的方向传输位为读数据,广播完地址,接收到应答信号后,从机开始向主机返回数据(DATA),数据包大小也为8位。从机每发送完一个数据,都会等待主机的应答信号(A),重复这个过程,可以返回N个数据,这个N也没有大小限制。当主机希望停止接收数据时,就向从机返回一个非应答信号,则从机自动停止数据传输。
02
RA4M2的I2C架构及特性
瑞萨RA4M2有两个I2C通道,I2C模块符合变更提供NXPI2C总线接口功能。
2.1
I2C接口特性
RA4M2的芯片均有多达两个的I2C总线接口。
能够工作于多主模式或从模式,分别为主接收器、主发送器、从接收器及从发送器。
支持标准模式100 Kbit/s和快速模式400 Kbit/s,不支持高速模式。
支持7位或10位寻址。
内置了硬件CRC发生器/校验器。
I2C的接收和发送都可以使用DMA操作。
支持系统管理总线(SMBus)2.0版。
2.2
I2C架构
I2C的所有硬件架构就是根据SCL线和SDA线展开的(其中SMBALERT线用于SMBus)。
SCL线的时序即为I2C协议中的时钟信号,它由I2C 接口根据时钟控制寄存器(CCR)控制,控制的参数主要为时钟频率。而SDA线的信号则通过一系列数据控制架构,在将要发送的数据的基础上,根据协议添加各种起始信号、应答信号、地址信号,实现以I2C协议的方式发送出去。读取数据时则从SDA线上的信号中取出接收到的数据值。发送和接收的数据都被保存在数据寄存器上。
Figure2‑1 I2C架构图
03
I2C总线的数据传送
3.1
数据位的有效性规定
I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
3.2
起始和终止信号
SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。

起始和终止信号都是由主机发出的,在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态。连接到I2C总线上的器件,若具有I2C总线的硬件接口,则很容易检测到起始和终止信号。每当发送器件传输完一个字节的数据后,后面必须紧跟一个校验位,这个校验位是接收端通过控制SDA(数据线)来实现的,以提醒发送端数据我这边已经接收完成,数据传送可以继续进行。
3.3
数据传送格式
字节传送与应答
每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。

由于某种原因从机不对主机寻址信号应答时(如从机正在进行实时性的处理工作而无法接收总线上的数据),它必须将数据线置于高电平,而由主机产生一个终止信号以结束总线的数据传送。
如果从机对主机进行了应答,但在数据传送一段时间后无法继续接收更多的数据时,从机可以通过对无法接收的第一个数据字节的“非应答”通知主机,主机则应发出终止信号以结束数据的继续传送。
当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对从机的“非应答”来实现的。然后,从机释放SDA线,以允许主机产生终止信号。
总线的寻址
I2C总线协议有明确的规定:采用7位的寻址字节(寻址字节是起始信号后的第一个字节)。

3.4
寻址字节的位定义
D7~D1位组成从机的地址。D0位是数据传送方向位,为“0”时表示主机向从机写数据,为“1”时表示主机由从机读数据。
主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,如果相同,则认为自己正被主机寻址,根据R/T位将自己确定为发送器或接收器。
从机的地址由固定部分和可编程部分组成。在一个系统中可能希望接入多个相同的从机,从机地址中可编程部分决定了可接入总线该类器件的最大数目。如一个从机的7位寻址位有4位是固定位,3位是可编程位,这时仅能寻址8个同样的器件,即可以有8个同样的器件接入到该I2C总线系统中。
数据帧格式
I2C总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。
在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/T),用“0”表示主机发送数据(T),“1”表示主机接收数据(R)。每次数据传送总是由主机产生的终止信号结束。但是,若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址。
在总线的一次数据传送过程中,可以有以下几种组合方式:
A)主机向从机发送数据,数据传送方向在整个过程中不变;

注:
有阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从机向主机传送。A表示应答,A表示非应答(高电平)。S表示起始信号,P表示终止信号。
B)主机在第一个字节后,立即从从机读数据。
C)在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次读/写方向位正好反相。

4
EEPROM存储器原理
EEPROM是一种掉电后数据不丢失的存储器,常用来存储一些配置信息,以便系统重新上电的时候加载。EEPROM芯片最常用的通讯方式就是I2C协议,本文将要讲解EEPROM的读写操作。
4.1
AT24Cxx概述
AT24C01/02/04/08/16是一个1K/2K/4K/8K/16K位串行CMOS,EEPROM内部含有128/256/512/1024/2048个8位字节CATALYST公司的先进CMOS技术实质上减少了器件的功耗,AT24C01/02有一个8字节页写缓冲器AT24C04/08/16有一个16字节页写缓冲器,该器件通过I2C总线接口进行操作有一个专门的写保护功能。AT24C01/02每页有8个字节,分别为16/32页;AT24C04/08/16每页有16个字节,分别为32/64/128页。
工作特点
与400KHz I2C总线兼容
1.8到6.0伏工作电压范围
低功耗CMOS技术
写保护功能当WP为高电平时进入写保护状态
页写缓冲器
自定时擦写周期
100万次编程/擦除周期
可保存数据100年
8脚DIP SOIC或TSSOP封装
温度范围商业级和工业级
AT24Cxx的引脚定义如下:

Note:
For use of 5-lead SOT23,the software A2,A1, and A0 bits in the device address word must be set to zero toproperly communicate.
Table‑引脚说明

4.2
AT24Cxx总线时序
AT24Cxx的I2C总线时序如下:

其读写周期的的电压范围如下:

写周期时间是指从一个写时序的有效停止信号到内部编程/擦除周期结束的这一段时间。在写周期期间,总线接口电路禁能,SDA保持为高电平,器件不响应外部操作。
4.3
AT24Cxx器件寻址
主器件通过发送一个起始信号启动发送过程,然后发送它所要寻址的从器件的地址。8位从器件地址的高4位固定为(1010)。接下来的3位(A2、A1、A0)为器件的地址位,用来定义哪个器件以及器件的哪个部分被主器件访问,上述8个AT24C01/02,4个AT24C04,2个AT24C08,1个AT24C16可单独被系统寻址。从器件8位地址的最低位,作为读写控制位。“1”表示对从器件进行读操作,“0”表示对从器件进行写操作。在主器件发送起始信号和从器件地址字节后,AT24C01/02/04/08/16监视总线并当其地址与发送的从地址相符时响应一个应答信号(通过SDA线)。AT24C01/02/04/08/16再根据读写控制位(R/W)的状态进行读或写操作。

字节写
在字节写模式下,主器件发送起始命令和从器件地址信息(R/W)位置发给从器件,在从器件产生应答信号后,主器件发送AT24Cxx的字节地址,主器件在收到从器件的另一个应答信号后,再发送数据到被寻址的存储单元。AT24Cxx再次应答,并在主器件产生停止信号后开始内部数据的擦写,在内部擦写过程中,AT24Cxx不再应答主器件的任何请求。

页写
用页写,AT24C01/02可一次写入8个字节数据,AT24C04/08/16可以一次写入16个字节的数据。__页写操作的启动和字节写一样,不同在于传送了一字节数据后并不产生停止信号。__主器件被允许发送P(AT24C01:P=7;AT24C02/04/08/16:P=15)个额外的字节。每发送一个字节数据后AT24Cxx产生一个应答位并将字节地址低位加1,高位保持不变。
如果在发送停止信号之前主器件发送超过P+1个字节,地址计数器将自动翻转,先前写入的数据被覆盖。
接收到P+1字节数据和主器件发送的停止信号后,AT24Cxx启动内部写周期将数据写到数据区。所有接收的数据在一个写周期内写入AT24Cxx。

读字节
读操作允许主器件对寄存器的任意字节进行读操作,主器件首先通过发送起始信号、从器件地址和它想读取的字节数据的地址执行一个写操作。在AT24Cxx应答之后,主器件重新发送起始信号和从器件地址,此时R/W位置1,AT24Cxx响应并发送应答信号,然后输出所要求的一个8位字节数据,主器件不发送应答信号但产生一个停止信号。

顺序读
在AT24Cxx发送完一个8位字节数据后,主器件产生一个应答信号来响应,告知AT24Cxx主器件要求更多的数据,对应每个主机产生的应答信号AT24Cxx将发送一个8位数据字节。当主器件不发送应答信号而发送停止位时结束此操作。
从AT24Cxx输出的数据按顺序由N到N+1输出。读操作时地址计数器在AT24Cxx整个地址内增加,这样整个寄存器区域可在一个读操作内全部读出,当读取的字节超过E(对于24WC01,E=127;对24C02,E=255;对24C04,E=511;对24C08,E=1023;对24C16,E=2047)计数器将翻转到零并继续输出数据字节。

典型应用
ATC02的典型电路如下:

根据AT24C02的芯片资料,我们会发现AT24C02有三个地址A0,A1,A2。同时,我们会在资料的Device Address介绍发现I2C器件一共有七位地址码,还有一位是读/写(R/W)操作位,而在AT24C02的前四位已经固定为1010。R/W为1则为读操作,为0则为写操作。R/W位我们要设置为0(写操作)。
规则为:
1010(A0)(A1)(A2)(R/W)
1
例子1:
那么对应的A0,A1,A2都是接的VCC,所以为A0=1,A1=1,A2=1;可以知道AT24C02的从设备写地址为10101110(0xae),读设备地址为10101111(0xaf)。
2
例子2:
那么对应的A0,A1,A2都是接的GND,所以为A0=0,A1=0,A2=0;可以知道AT24C02的从设备写地址为10100000(0xa0),读设备地址为10100001(0xa1)。
05
硬件设计
本文是使用I2C协议对EEPROM进行读写操作,具体的硬件连接如下。

按照我们此处的连接,A0/A1/A2均为0,所以EEPROM的7位设备地址是:1010 000b,即 0x50。
06
I2C读写EEPROM
6.1
RA Smart Configurator配置I2C
打开RA Smart Configurator,根据硬件连接,I2C使用的是I2C3,因此在配置界面里面依次打开“Pins->Peripherals->Connectivity:SCI>SCI3”配置SCI模块,选择开发板所用的I2C引脚,这里SCL和SDA分别接的是P408和P409引脚。

接下来就是添加I2C的stack。

接下来需要配置I2C的参数。

这里可以设置I2C的参数,我这里设置I2C的变量名、通道以及从机地址,I2C的编号和Channel编号是一一对应的,因此需要设置为3,回调函数依据C语言命名规范任意编译一个就行。
值得注意的是,这里的从机地址是7位,代码中自动左移了。然后让软件自动生成配置代码即可。
6.2
基于I2C的EEPROM读写实现
R_SCI_I2C_Open()函数为执行IIC初始化,开启配置如下所示。
左右滑动查看完整内容
猜你喜欢
-
艾为电子AW9967FSR:高效升压型WLED驱动芯片详解
在消费电子持续追求轻薄化与长续航的当下,背光系统能效成为关键瓶颈。传统方案在轻载场景效率低下,散热性能不足,严重制约设备续航并带来可靠性风险。数模龙头艾为电子推出新一代升压型WLED驱动芯片——AW9967FSR,以科学先进的热管理技术,打造卓越的散热...
-
Microchip发布MCP服务器:革新AI驱动的产品数据访问方式
该服务器支持跨AI平台获取可信产品信息,简化工作流程、加速设计并提高生产力 为进一步兑现公司为嵌入式工程师开发AI解决方案的承诺,Microchip Technology Inc.(微芯科技公司)今日推出模型语境协议(MCP)服务器。作为AI接口,MCP服务器可直接连接兼容的AI...
-
Microchip第22届中国技术精英年会北京站成功闭幕,下一
Microchip第22届中国技术精英年会(MASTERs)北京站于今日圆满落幕!来自各地的技术专家、行业伙伴和客户齐聚一堂,共同探讨前沿技术与创新应用。活动伊始,Microchip大中华区副总裁Edward Ho先生为本站致开幕词,欢迎各位嘉宾的到来,并分享了对行业发展的展望...
-
国星半导体车规级LED芯片获2025年广东省名优高新技术
近日,广东省高新技术企业协会正式发布《2025年第二批广东省名优高新技术产品名单》,国星半导体自主研发的车规级LED芯片与垂直LED芯片两大系列产品成功入选。该认定严格围绕技术创新性、质量稳定性、市场成熟度及产业化能力四大维度进行评审,是广东省...
-
云英谷科技荣登2025中国半导体企业影响力百强,专注OLED
11月14日,世界集成电路协会(WICA)主办的“2025全球半导体市场峰会”在上海成功召开。本次峰会发布了2026全球半导体市场趋势展望暨2025中国半导体企业影响力百强及集成电路新锐企业50强报告。云英谷科技股份有限公司荣登“2025中国半导体企业影响力百...
