RA6M3 HMI Board之硬件I2C实践流程

电子说

1.3w人已加入

描述

1、前言说明

I2C总线是Philips公司在八十年代初推出的一种串行、半双工的总线,主要用于近距离、低速的芯片之间的通信。

I2C总线有两根双向的信号线,一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步。

I2C总线硬件结构简单,简化了PCB布线,降低了系统成本,提高了系统可靠性,因此在各个领域得到了广泛应用。

1.1 本章内容

本章内容主要介绍如何利用瑞萨RA6M3系列芯片R7FA6M3AH3CFB的硬件i2c功能控制点亮0.96寸i2c接口的OLED显示屏。

1.2 模块介绍

1.2.1 瑞萨ra6m3的硬件i2c

硬件资源数量

瑞萨ra6m3系列芯片具有3路硬件i2c通讯接口,另外还有10路的串行通讯接口(SCI),也可扩展为硬件i2c。

芯片的i2c资源数量可参考下表:

OLED显示屏

模块硬件特点

通讯格式

I2c总线格式或SMBus格式
可选择主机模式和从机模式
在传输时可自动获得数据建立时间、保持时间以及总线释放时间
传输速率

支持超快速模式,传输速率高达1Mbps
SCL时钟

在主机模式下,时钟的占空比可在4 – 96%之间调整
总线时序信号的产生与检测

自动产生标准的i2c总线时序条件(起始、重复起始、停止)
做从机使用时可自动侦测其它主机发送的起始(或重复起始),停止条件
从机地址

可配置高达3个从机地址
支持7位、10位地址格式,并且可以同时使用这2种模式
支持广播寻址,设备ID寻址以及SMBus主机地址侦测
应答

数据传输时,可自动加载应答位
数据接收时,可自动传输应答位
等待功能
在数据接收期间,保持SDL位位低电平的时候,下列等待周期将变得有效:

在第8和第9个时钟之间的等待
在第9个时钟和下一数据帧的第1个时钟之间的等待
SDA输出延时

在输出数据的时候,可加入延时功能(包括应答位)
仲裁

多主机仲裁
侦测到起始条件失去仲裁,避免产生2个以上的起始条件
在传输一个非应答位期间,如果SDA线上的电平和自己不匹配失去仲裁
从机传输时,内部数据和通讯线上的电平不匹配将失去仲裁
超时

内部状态检测到超时时,可停止SCL的时钟输出
噪声滤波

数字滤波器支持检测SCL和SDA线上的信号
滤波器支持可编程的窗口期用来滤除噪声干扰
中断源

传输错误或者事件(仲裁丢失、无应答、超时、起始条件、停止条件)发生将产生中断
接收数据缓冲区满(包括从机地址匹配模式)可产生中断
传输数据缓冲区空(包括从机地址匹配模式)可产生中断
传输结束产生中断
模块停止省电模式

可配置为停止模式来降低电源的消耗,达到低功耗目的
支持的操作模式

主机传送
主机接收
从机传送
从机接收
事件连接(输出)

支持传输错误或者总线事件(仲裁丢失、无应答、超时、起始条件或者重复起始条件、停止条件)
支持数据满、从机地址匹配
支持数据空、从机地址匹配
传输结束
唤醒功能

支持使用唤醒事件将cpu从待机模式唤醒(此功能只支持I2C0外设,I2C1,I2C2不支持)
硬件i2c框图

OLED显示屏

1.2.2 0.96寸OLED显示屏

显示屏特性
分辨率:128x64
控制芯片:SSD1306
接口类型:I2C
工作电压:3.3v ~ 5V
显示颜色:蓝色

显示屏外观

OLED显示屏

接口定义

OLED显示屏

1.3 硬件连接

OLED显示屏

连接说明:

OLED显示屏

由于OLED显示屏比较小,供电电流不大,可以直接用GPIO输出高电平来供电。

2、步骤说明

2.1 新建工程

新建ra6m3_hmi_board_i2c_hardware工程

打开RT-Thread Studio软件,执行菜单【文件】->【新建】->【RT-Thread项目】弹出新建项目对话框,选择【基于开发板】的项目,其它配置如下图 所示,项目名称:ra6m3_hmi_board_i2c_hardware,点击【完成】。

OLED显示屏

配置FSP路径并允许FSP软件

双击项目资源管理器里面的【RA Smart Configurator】,在弹出的对话框中点击【是】,然后选择瑞萨FSP软件的安装路径:本机安装在: C:RenesasRAsc_v2021-10_fsp_v3.5.0

OLED显示屏

OLED显示屏

配置GPIO
配置P506为GPIO输出模式,默认高电平
配置P008为GPIO输出模式,默认低电平
配置 Connectivity->IIC1 功能,Enable,引脚为P206(SDA), P205(SCL)

OLED显示屏

OLED显示屏

OLED显示屏

配置硬件i2c模块

依次选择【Stacks】->【New Stack】->【Connectivity】->【I2C Master(r_iic_master)】,创建I2C Master模块,关键参数如下表

OLED显示屏

配置如下图所示

OLED显示屏

OLED显示屏

5 生成配置代码

点击 【Generate Project Content】生成配置代码

2.2 编写测试程序

添加软件包u8g2组件

双击RT-Thread Settings,进入添加软件包界面,点击【添加软件包】,在弹出的对话框中搜索栏输入u8g2,选中u8g2官方软件包,添加到工程

OLED显示屏

OLED显示屏

配置u8g2组件

点击u8g2组件,选择【配置项】,并按如下图所示配置u8g2(official)软件包,然后保存配置

OLED显示屏

OLED显示屏

使能硬件i2c总线驱动

OLED显示屏

测试代码

测试代码无需编写,u8g2提供了example,直接使用,然后编译工程并下载到开发板。

#include
#include
#include
#include
static void u8g2_ssd1306_12864_hw_i2c_example(int argc,char argv[])
{
u8g2_t u8g2;
// Initialization
u8g2_Setup_ssd1306_i2c_128x64_noname_f( &u8g2, U8G2_R0, u8x8_byte_rtthread_hw_i2c, u8x8_gpio_and_delay_rtthread);
u8g2_InitDisplay(&u8g2);
u8g2_SetPowerSave(&u8g2, 0);
/
full buffer example, setup procedure ends in _f */
u8g2_ClearBuffer(&u8g2);
u8g2_SetFont(&u8g2, u8g2_font_ncenB08_tr);
u8g2_DrawStr(&u8g2, 1, 18, "U8g2 on RT-Thread");
u8g2_SendBuffer(&u8g2);
// Draw Graphics
u8g2_SetFont(&u8g2, u8g2_font_unifont_t_symbols);
u8g2_DrawGlyph(&u8g2, 112, 56, 0x2603 );
u8g2_SendBuffer(&u8g2);
}
MSH_CMD_EXPORT(u8g2_ssd1306_12864_hw_i2c_example, i2c ssd1306 sample);

3、代码验证

下载程序,然后终端界面显示,提示符下输入 tab 并按回车显示所有命令,可以看到u8g2的示例已经出现

OLED显示屏

输入u8g2,按tab自动补全,然后再按回车执行示例代码,效果如下图所示

OLED显示屏

OLED显示屏

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分