21.2.瑞萨RA6M5的I2C特性及架构
如果我们直接控制RA6M5的两个GPIO引脚,分别用作SCL及SDA,按照上述信号的时序要求,直接像控制LED灯那样控制引脚的输出(若是接收数据时则读取SDA电平),就可以实现I2C通讯。同样,假如我们按照USART的要求去控制引脚,也能实现USART通讯。所以只要遵守协议,就是标准的通讯,不管您如何实现它,不管是ST生产的控制器还是ATMEL生产的存储器,都能按通讯标准交互。
由于直接控制GPIO引脚电平产生通讯时序时,需要由CPU控制每个时刻的引脚状态,所以称之为“软件模拟协议”方式。
相对地,还有“硬件协议”方式,RA6M5的I2C片上外设专门负责实现I2C通讯协议,只要配置好该外设,它就会自动根据协议要求产生通讯信号,收发数据并缓存起来,CPU只要检测该外设的状态和访问数据寄存器,就能完成数据收发。这种由硬件外设处理I2C协议的方式减轻了CPU的工作,且使软件设计更加简单。
21.2.1.瑞萨RA6M5的I2C外设简介
瑞萨RA6M5的I2C外设可用作通讯的主机及从机,支持100Kbit/s和400Kbit/s和1Mbit/s的速率,支持7位、10位设备地址,支持DMA数据传输,并具有数据校验功能。它的I2C外设还支持SMBus2.0协议,SMBus协议与I2C类似,主要应用于笔记本电脑的电池管理中。
表1:瑞萨RA6M5的IIC支持频率

21.2.1.1.通讯引脚
I2C的所有硬件架构都是根据图中左侧SCL线和SDA线展开的(其中的SMBA线用于SMBUS的警告信号,I2C通讯没有使用)。RA6M5芯片有多个I2C外设,它们的I2C通讯信号引出到不同的GPIO引脚上,使用时必须配置到这些指定的引脚,见表22‑1。
关于GPIO引脚的复用功能,可查阅《RA6M5GroupUser_sManual》,以它为准。
表22‑1:RA6M5的I2C引脚(整理自《RA6M5GroupUser_sManual》)
21.2.2.瑞萨RA6M5的I2C功能框图

注:
我们这里主要介绍的是瑞萨的fsp库的使用,所以在这里寄存器我们在这里做一些简单的介绍。
21.2.3. 时钟控制逻辑
下面将介绍时钟的控制流程
21.2.3.1. IIC起始信号与重启信号
当ICCR2中的RS位被设置为1时,IIC会发出一个重启条件请求。当ICCR2的BBSY标志位为1(总线繁忙状态),ICCR2的MST位为1(主模式)时IIC发出重启条件。 发出重启条件:
释放SDAn线路。
确保ICBRL中设置的SCLn线路的低电平周期已过。
释放SCLn线(低电平到高电平)。
在SCLn线上检测高电平,并确保ICBRL中设置的时间和重启条件设置时间经过。
将SDAn线拉低(从高电平到低电平)。
确保ICBRH中设置的时间和重启条件保持时间。
驱动SCLn线低电平(高电平到低电平)。
检测SCLn线上的一个低水平,确保ICBRL中设置的SCLn线的低水平周期已经过去

21.2.3.2. IIC循环发送
初始化IIC。
读取ICCR2中的BBSY标志,检查总线是否打开,然后设置ICCR2中的ST位为1(启动条件发出请求)。收到请求后,IIC发出启动条件。与此同时,BBSY位和START为被设置为1,ST位自动设置为0。如果检测到启动条件,并且SDA输出状态的内部电平和SDAn线路上的电平在ST位为1时匹配,IIC就会识别出,由于ST位已经成功完成了请求,启动条件已经成功发出。ICCR2的MST和TRS位自动设置为1,IIC处于主发送模式。当TRS位设置为1时,ICSR2中的TDRE标志也会自动设置为1。
检查ICSR2中的TDRE标志位是否为1,然后将传输值(从地址和R/W#位)写入ICDRT。传输数据写入ICDRT后,TDRE标志位自动设置为0,数据从ICDRT传输到ICDRS后,TDRE标志位再次设置为1。字节后包含从地址和当发送了R/W#位时,TRS位的值会根据发送的R/W#位的值自动更新,选择主发送或主接收模式。如果R/W#为0,则IIC继续主传输模式。如果此时ICSR2.NACKF标志位为1,表示从设备没有识别到该地址,或者通信出现错误,并向ICCR2.SP位写入1发出停止条件。如果要传输10位地址格式的数据,首先将11110b和从地址的高两位和W写入ICDRT作为第一个地址传输。然后将从地址低8位写入ICDRT作为第二个地址传输。
确认ICSR2的TDRE标志位为1后,将传输数据写入ICDRT寄存器。IIC自动保持SCLn线路处于低位,直到传输数据就绪,发出重启条件或停止条件。
当所有要传输的数据字节写入ICDRT寄存器后,等待ICSR2中的TEND标志位的值返回1。确认ICSR2的START标志位为1后,将ICSR2的START标志位设置为0。
设置ICCR2中的RS位为1(重启条件问题请求)。在接收到请求时,IIC发出一个重启条件。
检查ICSR2中的START标志位为1后,将传输值(从地址和R/W#位)写入ICDRT。

21.3. EEPROM简介
EEPROM是一种掉电后数据不丢失的存储器,常用来存储一些配置信息,以便系统重新上电的时候加载。 EEPROM芯片最常用的通讯方式就是I^2^C协议,本小节以EEPROM的读写实验为例子给大家讲解RA6M5的I^2^C使用方法。 实验中RA6M5的I2C外设采用主机模式,分别用作主发送器和主接收器,通过查询事件的方式来确保正常通讯。
本实验板中的EEPROM芯片(型号:AT24C02)的SCL及SDA引脚连接到了瑞萨RA6M5对应的I2C引脚中,结合上拉电阻,构成了I2C通讯总线,它们通过I2C总线交互。EEPROM芯片的设备地址一共有7位,其中高4位固定为:1010 b,低3位则由A0/A1/A2信号线的电平决定,见图22_12,图中的R/W是读写方向位,与地址无关。

图 22‑12 EEPROM设备地址(摘自《AT24C02》规格书)
按照我们此处的连接,A0/A1/A2均为0,所以EEPROM的7位设备地址是:1010 000b ,即0x50。由于I2C通讯时常常是地址跟读写方向连在一起构成一个8位数,且当R/W位为0时,表示写方向,所以加上7位地址,其值为“0xA0”,常称该值为I2C设备的“写地址”;当R/W位为1时,表示读方向,加上7位地址,其值为“0xA1”,常称该值为“读地址”。
EEPROM芯片中还有一个WP引脚,具有写保护功能,当该引脚电平为高时,禁止写入数据,当引脚为低电平时,可写入数据,我们直接接地,不使用写保护功能。
关于EEPROM的更多信息,可参考其数据手册《AT24C02》来了解。若您使用的实验板EEPROM的型号、设备地址或控制引脚不一样,只需根据我们的工程修改即可,程序的控制原理相同。





