一、軟硬件介紹
(一)I2C(軟件)
I2C是一種廣泛應(yīng)用于嵌入式系統(tǒng)中的短距離串行通信協(xié)議,支持多主多從設(shè)備模式,主機(jī)通過時鐘信號SCL和數(shù)據(jù)線SDA與從機(jī)進(jìn)行數(shù)據(jù)交互。在 RT-Thread 操作系統(tǒng)中,我們可以通過菜單配置工具menuconfig快速設(shè)置軟件 I2C 的引腳,并借助其內(nèi)部已實(shí)現(xiàn)的驅(qū)動程序,方便快捷地完成調(diào)用與開發(fā)。
(二)FRDM-MCXA153
FRDM-MCXA153是一款緊湊且可擴(kuò)展的開發(fā)板,可快速基于MCX A14和A15 MCU開展原型設(shè)計。它們提供行業(yè)標(biāo)準(zhǔn)的接口,可輕松訪問MCU的I/O、集成的開放標(biāo)準(zhǔn)串行接口、外部閃存和板載MCU-Link調(diào)試器。本文主要基于恩智浦FRDM—MCXA153開發(fā)板 X RT-Thread,測試I2C(軟件) 功能以及SSD1306 OLED。

通過MCUXpresso Developer Experience(MCUXpresso開發(fā)人員體驗)提供其他工具,如面向附加板的擴(kuò)展板中心和面向軟件示例的應(yīng)用代碼中心。
(三)SSD1306 OLED
SSD1306是一款單片CMOS OLED/PLED驅(qū)動器,具有有機(jī)/聚合物發(fā)光控制器二極管點(diǎn)陣圖形顯示系。SSD1306內(nèi)置對比度控制、顯示RAM和振蕩器,減少了外部組件和功耗。它有256級亮度控制。數(shù)據(jù)/命令是從通用單片機(jī)通過硬件可選的6800/8000系列兼容并行接口發(fā)送,I2C接口或串行外圍接口。它適用于許多緊湊型便攜式應(yīng)用程序,例如手機(jī)副顯示屏、MP3播放器、計算器等。

二、工程創(chuàng)建
目前RT-Thread Studio尚未支持恩智浦FRDM-MCXA153開發(fā)板BSP,需要從gitee下載最新的主線,通過scons命令創(chuàng)建工程。下載好主線源碼后,在rt-thread\bsp\nxp\mcx\mcxa\frdm-mcxa153 目錄下打開scons環(huán)境,配置軟件I2C驅(qū)動和SSD1306 OLED。
(一)軟件I2C配置
在恩智浦FRDM-MCXA153開發(fā)板板載的mikroBUS socket找到2個pin做軟件I2C接口的SCL/SDA,考慮到3.3V/GND的需要,直接選擇; P1_0和P1_2,具體可以從針腳圖看到,下圖紅框處的針腳。

因為是軟件I2C,直接在menuconfig的設(shè)備驅(qū)動中選擇“Use GPIO to soft simulate I2C”,設(shè)置中直接配置到I2C1 bus上,之前選擇了P1_0和P1_2作為SCL/SDA,按照((port*32)+pin)的計算公式配置好即可,具體如下圖。

其它的軟件I2C的具體實(shí)現(xiàn),都在RT-Thread的組件中實(shí)現(xiàn)了,不再介紹。
(二)SSD1306 OLED配置
在menuconfig中選擇enable SSD1306,并且設(shè)置好I2C bus name,I2C的地址默認(rèn)是0x3c無需修改,同時打開SSD1306測試demo。

上述內(nèi)容設(shè)置好之后,選擇保存。分別執(zhí)行下述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開發(fā)板上。

三、軟件I2C測試
固件下載完成后,reset系統(tǒng),可以看到軟件I2C已經(jīng)配置成功。
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已經(jīng)起來:
msh?>list devicedevice ? ? ? ? ? type ? ? ? ??ref?count-------- -------------------- ----------i2c0 ? ? I2C Bus ? ? ? ? ? ? ?0i2c1 ? ? I2C Bus ? ? ? ? ? ? ?0pin ? ? ?Pin Device ? ? ? ? ??0uart0 ? ?Character?Device ? ??2msh?>
把ssd1306_TestAll的demo跑起來。

對比硬件I2C,軟件I2C的刷屏速度的確差了很多。
End


想要在RT-Thread平臺或社區(qū)投放內(nèi)容?或想?yún)⑴c相關(guān)直播活動及賽事?RT-Thread已開放對接窗口,請通過郵件與我們?nèi)〉寐?lián)系,期待合作!
合作郵箱:?tongfangyi@rt-thread.com?

點(diǎn)擊“閱讀原文”