1、前言說明
I2C總線是Philips公司在八十年代初推出的一種串行、半雙工的總線,主要用于近距離、低速的芯片之間的通信。
I2C總線有兩根雙向的信號線,一根數(shù)據(jù)線SDA用于收發(fā)數(shù)據(jù),一根時鐘線SCL用于通信雙方時鐘的同步。
I2C總線硬件結(jié)構(gòu)簡單,簡化了PCB布線,降低了系統(tǒng)成本,提高了系統(tǒng)可靠性,因此在各個領(lǐng)域得到了廣泛應(yīng)用。
1.1 本章內(nèi)容
本章內(nèi)容主要介紹如何利用瑞薩RA6M3系列芯片R7FA6M3AH3CFB的硬件i2c功能控制點亮0.96寸i2c接口的OLED顯示屏。
1.2 模塊介紹
1.2.1 瑞薩ra6m3的硬件i2c
硬件資源數(shù)量
瑞薩ra6m3系列芯片具有3路硬件i2c通訊接口,另外還有10路的串行通訊接口(SCI),也可擴展為硬件i2c。
芯片的i2c資源數(shù)量可參考下表:
模塊硬件特點
通訊格式
I2c總線格式或SMBus格式
可選擇主機模式和從機模式
在傳輸時可自動獲得數(shù)據(jù)建立時間、保持時間以及總線釋放時間
傳輸速率
支持超快速模式,傳輸速率高達1Mbps
SCL時鐘
在主機模式下,時鐘的占空比可在4 – 96%之間調(diào)整
總線時序信號的產(chǎn)生與檢測
自動產(chǎn)生標(biāo)準(zhǔn)的i2c總線時序條件(起始、重復(fù)起始、停止)
做從機使用時可自動偵測其它主機發(fā)送的起始(或重復(fù)起始),停止條件
從機地址
可配置高達3個從機地址
支持7位、10位地址格式,并且可以同時使用這2種模式
支持廣播尋址,設(shè)備ID尋址以及SMBus主機地址偵測
應(yīng)答
數(shù)據(jù)傳輸時,可自動加載應(yīng)答位
數(shù)據(jù)接收時,可自動傳輸應(yīng)答位
等待功能
在數(shù)據(jù)接收期間,保持SDL位位低電平的時候,下列等待周期將變得有效:
在第8和第9個時鐘之間的等待
在第9個時鐘和下一數(shù)據(jù)幀的第1個時鐘之間的等待
SDA輸出延時
在輸出數(shù)據(jù)的時候,可加入延時功能(包括應(yīng)答位)
仲裁
多主機仲裁
偵測到起始條件失去仲裁,避免產(chǎn)生2個以上的起始條件
在傳輸一個非應(yīng)答位期間,如果SDA線上的電平和自己不匹配失去仲裁
從機傳輸時,內(nèi)部數(shù)據(jù)和通訊線上的電平不匹配將失去仲裁
超時
內(nèi)部狀態(tài)檢測到超時時,可停止SCL的時鐘輸出
噪聲濾波
數(shù)字濾波器支持檢測SCL和SDA線上的信號
濾波器支持可編程的窗口期用來濾除噪聲干擾
中斷源
傳輸錯誤或者事件(仲裁丟失、無應(yīng)答、超時、起始條件、停止條件)發(fā)生將產(chǎn)生中斷
接收數(shù)據(jù)緩沖區(qū)滿(包括從機地址匹配模式)可產(chǎn)生中斷
傳輸數(shù)據(jù)緩沖區(qū)空(包括從機地址匹配模式)可產(chǎn)生中斷
傳輸結(jié)束產(chǎn)生中斷
模塊停止省電模式
可配置為停止模式來降低電源的消耗,達到低功耗目的
支持的操作模式
主機傳送
主機接收
從機傳送
從機接收
事件連接(輸出)
支持傳輸錯誤或者總線事件(仲裁丟失、無應(yīng)答、超時、起始條件或者重復(fù)起始條件、停止條件)
支持?jǐn)?shù)據(jù)滿、從機地址匹配
支持?jǐn)?shù)據(jù)空、從機地址匹配
傳輸結(jié)束
喚醒功能
支持使用喚醒事件將cpu從待機模式喚醒(此功能只支持I2C0外設(shè),I2C1,I2C2不支持)
硬件i2c框圖
1.2.2 0.96寸OLED顯示屏
顯示屏特性
分辨率:128x64
控制芯片:SSD1306
接口類型:I2C
工作電壓:3.3v ~ 5V
顯示顏色:藍色
顯示屏外觀
接口定義
1.3 硬件連接
連接說明:
由于OLED顯示屏比較小,供電電流不大,可以直接用GPIO輸出高電平來供電。
2、步驟說明
2.1 新建工程
新建ra6m3_hmi_board_i2c_hardware工程
打開RT-Thread Studio軟件,執(zhí)行菜單【文件】->【新建】->【RT-Thread項目】彈出新建項目對話框,選擇【基于開發(fā)板】的項目,其它配置如下圖 所示,項目名稱:ra6m3_hmi_board_i2c_hardware,點擊【完成】。
配置FSP路徑并允許FSP軟件
雙擊項目資源管理器里面的【RA Smart Configurator】,在彈出的對話框中點擊【是】,然后選擇瑞薩FSP軟件的安裝路徑:本機安裝在: C:RenesasRAsc_v2021-10_fsp_v3.5.0
配置GPIO
配置P506為GPIO輸出模式,默認高電平
配置P008為GPIO輸出模式,默認低電平
配置 Connectivity->IIC1 功能,Enable,引腳為P206(SDA), P205(SCL)
配置硬件i2c模塊
依次選擇【Stacks】->【New Stack】->【Connectivity】->【I2C Master(r_iic_master)】,創(chuàng)建I2C Master模塊,關(guān)鍵參數(shù)如下表
配置如下圖所示
5 生成配置代碼
點擊 【Generate Project Content】生成配置代碼
2.2 編寫測試程序
添加軟件包u8g2組件
雙擊RT-Thread Settings,進入添加軟件包界面,點擊【添加軟件包】,在彈出的對話框中搜索欄輸入u8g2,選中u8g2官方軟件包,添加到工程
配置u8g2組件
點擊u8g2組件,選擇【配置項】,并按如下圖所示配置u8g2(official)軟件包,然后保存配置
使能硬件i2c總線驅(qū)動
測試代碼
測試代碼無需編寫,u8g2提供了example,直接使用,然后編譯工程并下載到開發(fā)板。
#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的示例已經(jīng)出現(xiàn)
輸入u8g2,按tab自動補全,然后再按回車執(zhí)行示例代碼,效果如下圖所示
-
緩沖器
+關(guān)注
關(guān)注
6文章
1903瀏覽量
45324 -
PCB布線
+關(guān)注
關(guān)注
19文章
462瀏覽量
41935 -
I2C總線
+關(guān)注
關(guān)注
8文章
384瀏覽量
60663 -
SDL
+關(guān)注
關(guān)注
0文章
18瀏覽量
7347 -
OLED顯示屏
+關(guān)注
關(guān)注
6文章
211瀏覽量
30546 -
RA6M3
+關(guān)注
關(guān)注
0文章
52瀏覽量
58
發(fā)布評論請先 登錄
相關(guān)推薦
評論