基于RT-Thread的I2C(软件) 实践 | 技术集结

描述


 

一、软硬件介绍

(一)I2C(软件)

I2C是一种广泛应用于嵌入式系统中的短距离串行通信协议,支持多主多从设备模式,主机通过时钟信号SCL和数据线SDA与从机进行数据交互。在 RT-Thread 操作系统中,我们可以通过菜单配置工具menuconfig快速设置软件 I2C 的引脚,并借助其内部已实现的驱动程序,方便快捷地完成调用与开发。

(二)FRDM-MCXA153

FRDM-MCXA153是一款紧凑且可扩展的开发板,可快速基于MCX A14和A15 MCU开展原型设计。它们提供行业标准的接口,可轻松访问MCU的I/O、集成的开放标准串行接口、外部闪存和板载MCU-Link调试器。本文主要基于恩智浦FRDM—MCXA153开发板 X RT-Thread,测试I2C(软件) 功能以及SSD1306 OLED。

I2C

通过MCUXpresso Developer Experience(MCUXpresso开发人员体验)提供其他工具,如面向附加板的扩展板中心和面向软件示例的应用代码中心。

(三)SSD1306 OLED

SSD1306是一款单片CMOS OLED/PLED驱动器,具有有机/聚合物发光控制器二极管点阵图形显示系。SSD1306内置对比度控制、显示RAM和振荡器,减少了外部组件和功耗。它有256级亮度控制。数据/命令是从通用单片机通过硬件可选的6800/8000系列兼容并行接口发送,I2C接口或串行外围接口。它适用于许多紧凑型便携式应用程序,例如手机副显示屏、MP3播放器、计算器等。

I2C


 

二、工程创建

目前RT-Thread Studio尚未支持恩智浦FRDM-MCXA153开发板BSP,需要从gitee下载最新的主线,通过scons命令创建工程。下载好主线源码后,在rt-thread\bsp\nxp\mcx\mcxa\frdm-mcxa153 目录下打开scons环境,配置软件I2C驱动和SSD1306 OLED。

(一)软件I2C配置

在恩智浦FRDM-MCXA153开发板板载的mikroBUS socket找到2个pin做软件I2C接口的SCL/SDA,考虑到3.3V/GND的需要,直接选择; P1_0和P1_2,具体可以从针脚图看到,下图红框处的针脚。

I2C

因为是软件I2C,直接在menuconfig的设备驱动中选择“Use GPIO to soft simulate I2C”,设置中直接配置到I2C1 bus上,之前选择了P1_0和P1_2作为SCL/SDA,按照((port*32)+pin)的计算公式配置好即可,具体如下图。

I2C

其它的软件I2C的具体实现,都在RT-Thread的组件中实现了,不再介绍。

(二)SSD1306 OLED配置

在menuconfig中选择enable SSD1306,并且设置好I2C bus name,I2C的地址默认是0x3c无需修改,同时打开SSD1306测试demo。

I2C

上述内容设置好之后,选择保存。分别执行下述2个命令:

pkgs —update

scons —target=mdk5


 

待Keil工程生成后,打开工程编译程序。

  •  
  •  
  •  
  •  

Program Size: Code=83324 RO-data=25164 RW-data=784 ZI-data=7876  Finished: 0 information, 2 warning and 0 error messages.".\build\rtthread.axf" - 0 Error(s), 6 Warning(s).Build Time Elapsed:  00:00:04

然后下载到恩智浦FRDM-MCXA153开发板上。

I2C


 

三、软件I2C测试

固件下载完成后,reset系统,可以看到软件I2C已经配置成功。

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

sram heap, begin: 0x0x200019d4, end: 0x0x20005c00 \ | /- RT -     Thread Operating System / | \     5.2.0 build Jul 21 2024 15:49:40 2006 - 2024 Copyright by RT-Thread teamI/I2C: I2C bus [i2c1] registeredD/I2C_S: Software simulation i2c1 init done, SCL pin: 0x20, SDA pin: 0x22I/I2C: I2C bus [i2c0] registeredusing armclang, version: 6180002MCXA153 HelloWorldmsh >

list device后,可以看到I2C1已经起来:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

msh >list devicedevice           type         ref count-------- -------------------- ----------i2c0     I2C Bus              0i2c1     I2C Bus              0pin      Pin Device           0uart0    Character Device     2msh >

把ssd1306_TestAll的demo跑起来。

I2C

对比硬件I2C,软件I2C的刷屏速度的确差了很多。

 

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

全部0条评论

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

×
20
完善资料,
赚取积分