Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
HMI-Board
瑞萨_Renesas
I2C_IIC
RA6M3 HMI Board 之硬件I2C实践
发布于 2023-06-16 12:14:04 浏览:1117
订阅该版
[tocm] # 1、前言说明 - I2C总线是Philips公司在八十年代初推出的一种串行、半双工的总线,主要用于近距离、低速的芯片之间的通信。 - I2C总线有两根双向的信号线,一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步。 - I2C总线硬件结构简单,简化了PCB布线,降低了系统成本,提高了系统可靠性,因此在各个领域得到了广泛应用。 瑞萨在RA6M3系列芯片中也有硬件I2C总线的支持。 ## 1.1 本章内容 本章内容主要介绍如何利用瑞萨RA6M3系列芯片R7FA6M3AH3CFB的硬件i2c功能控制点亮0.96寸i2c接口的OLED显示屏。 重要文档: - RA6M3 Group Datasheet (芯片数据手册) https://www.renesas.cn/cn/zh/document/dst/ra6m3-group-datasheet?r=1054166 - RA6M3 Group User’s Manual:Hardware(硬件使用手册) https://www.renesas.cn/cn/zh/document/mah/ra6m3-group-users-manual-hardware?r=1054166 ## 1.2 模块介绍 ### 1.2.1 瑞萨ra6m3的硬件i2c - 硬件资源数量 瑞萨ra6m3系列芯片具有3路硬件i2c通讯接口,另外还有10路的串行通讯接口(SCI),也可扩展为硬件i2c。 芯片的i2c资源数量可参考下表: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/81a87deedc0919b2405f97907c347aee.png.webp) - 模块硬件特点 - 通讯格式 - 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框图 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/9af8f9b1d1e71711612addd98d4bb7e6.png.webp) ### 1.2.2 0.96寸OLED显示屏 - 显示屏特性 分辨率:128x64 控制芯片:SSD1306 接口类型:I2C 工作电压:3.3v ~ 5V 显示颜色:蓝色 - 显示屏外观 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/e53099531b10525b784f7d892cf576cf.png.webp) - 接口定义 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/f948d8346d8ea007fae67d863bf4f2ac.png.webp) ## 1.3 硬件连接 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/c83ee3fa3df7315cd41656ccbec4bc26.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/6116831797a22a109ff33b179068dd79.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/49c06849b9c996833de8c2475fecbe44.png.webp) 连接说明: | GPIO | Arduino名称 | OLED引脚 | |--------|--------|--------| | P506(输出高电平)| ARD_DIG_03 | VCC(供电)| | P008(输出低电平)| ARD_DIG_02 | GND | | P205(I2C时钟) | ARD_DIG_01 | SCL | | P206(I2C数据) | ARD_DIG_00 | SDA | 由于OLED显示屏比较小,供电电流不大,可以**直接用GPIO输出高电**平来供电。 重要文档: - 瑞萨 RA6M3-HMI-Board文档:[HMI-Board (rt-thread.org)](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/hw-board/ra6m3-hmi-board/ra6m3-hmi-board?id=%e7%91%9e%e8%90%a8-ra6m3-hmi-board "HMI-Board (rt-thread.org)") - SDK 及原理图仓库:https://github.com/RT-Thread-Studio/sdk-bsp-ra6m3-hmi-board ## 1.4 开发软件 软件环境: RT-ThreadStudio2.2.6版本 [rt-thread.org/download.html#download-rt-thread-studio](https://www.rt-thread.org/download.html#download-rt-thread-studio "rt-thread.org/download.html#download-rt-thread-studio") 板级支持包HMI-Board 1.0.3 [Releases • RT-Thread-Studio/sdk-bsp-ra6m3-hmi-board (github.com)](https://github.com/RT-Thread-Studio/sdk-bsp-ra6m3-hmi-board/releases "Releases • RT-Thread-Studio/sdk-bsp-ra6m3-hmi-board (github.com)") Renesas RA Flexible Software Package(FSP) v3.5.0 [Releases • renesas/fsp • GitHub](https://github.com/renesas/fsp/releases "Releases • renesas/fsp • GitHub") 软件包:u8g2 下载工具:板载DAP-Link 串口终端:Tera Term # 2、步骤说明 基础使用教程可参考: https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/hw-board/ra6m3-hmi-board/ra6m3-hmi-board?id=%e7%91%9e%e8%90%a8-ra6m3-hmi-board ## 2.1 新建工程 1. 新建ra6m3_hmi_board_i2c_hardware工程 打开RT-Thread Studio软件,执行菜单【文件】->【新建】->【RT-Thread项目】弹出新建项目对话框,选择【基于开发板】的项目,其它配置如下图 所示,项目名称:ra6m3_hmi_board_i2c_hardware,点击【完成】。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/057691c46b0bf98f7716ed48d6fcf11f.png.webp) 2. 配置FSP路径并允许FSP软件 双击项目资源管理器里面的【RA Smart Configurator】,在弹出的对话框中点击【是】,然后选择瑞萨FSP软件的安装路径:本机安装在: C:\Renesas\RA\sc_v2021-10_fsp_v3.5.0 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/2df3410bc854fcc3e87bc188160b69a3.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/5d7d984146a5b8e2cf20b01437ae6009.png.webp) 3. 配置GPIO 配置P506为GPIO输出模式,默认高电平 配置P008为GPIO输出模式,默认低电平 配置 Connectivity->IIC1 功能,Enable,引脚为P206(SDA), P205(SCL) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/1ba5779accc36f6b98c0157ee143d16a.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/97adc4f87750ec123afe5bc3c47000e5.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/734309adbc2cd390d1d75f11e206ad0b.png.webp) 4. 配置硬件i2c模块 依次选择【Stacks】->【New Stack】->【Connectivity】->【I2C Master(r_iic_master)】,创建I2C Master模块,关键参数如下表 |项目|参数| |----|----| |Name| g_i2c_master1| |Channel| 1| |Slave Address| 0x3C| |Callback| i2c_master_callback| 配置如下图所示 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/39c2719e765e9e65d954f67e84f0bfdd.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/290a0bbb4a2b554922d0139b2e619256.png.webp) 5 生成配置代码 点击 【Generate Project Content】生成配置代码 ## 2.2 编写测试程序 1. 添加软件包u8g2组件 双击RT-Thread Settings,进入添加软件包界面,点击【添加软件包】,在弹出的对话框中搜索栏输入u8g2,选中u8g2官方软件包,添加到工程 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/9a0fed49b6a7eba8a064547598da5e74.png) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/249ce3e0ba8fa02f6563072c33f05653.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/474202b9e0b14ddb6bb76005bef6a31d.png.webp) 2. 配置u8g2组件 点击u8g2组件,选择【配置项】,并按如下图所示配置u8g2(official)软件包,然后保存配置 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/b9ca7acebc893f40c1c4d9e67ccb3041.png) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/b1e4143d64ee744bdba7ce6e99efb2bf.png.webp) 3. 使能硬件i2c总线驱动 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/01ee5441a6284c3e9fa17a0ae064262f.png.webp) 4. 测试代码 测试代码无需编写,u8g2提供了example,直接使用,然后编译工程并下载到开发板。 ```c #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的示例已经出现 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/3bfa70e30073c7c635927b5f3c9c2e22.png.webp) 输入u8g2,按tab自动补全,然后再按回车执行示例代码,效果如下图所示 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/8f5c6a81dfe8d14da3744c4b30cf36a3.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230616/3ade188d3eb46f4363bf922e212abf9f.png.webp) 可编译下载的[代码仓库](https://gitee.com/nes6502/ra6m3_hmi_board_i2c_hardware "代码仓库") # 4、章节总结 - rt_thread最新代码bsp需要添加对sci i2c的支持 - 驱动只支持i2c master模式,slave模式需要完善 - 硬件i2c目前只提供一路i2c接口(i2c1) - Fsp软件配置芯片外设等功能相当方便直观
8
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
yefeng
业精于勤而荒于嬉
文章
2
回答
1
被采纳
0
关注TA
发私信
相关文章
1
NXP的I2C应该比ST的好用吧
2
Use of I2C device driver
3
关于I2C 驱动问题请教
4
我如何知道这个iic的io配置和我电路设计的是一致的?
5
I2C模拟读操作失败,不知道问什么进不去读函数
6
RTT的I2C有官方文档资料没有
7
求 STM32F103 IIC 自定义IO初始化 代码
8
报一个LPC4008代码中I2C的bug
9
RTOS IIC总线使用
10
关于在RTT中使用STM32 I2C的疑问
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部